1 of 27

MNX-Generic

(or, for Prince fans, The Encoding Formerly Known As GMNX)

An encoding standard

for music notation instances

Joe Berkovitz

co-chair, W3C Music Notation Group

1

1

2 of 27

What's MNX-Generic?

  • A low-level, literal encoding format for instances of scores
  • 3 kinds of instances:
    • Graphics
    • Performance audio
    • Performance data ("MIDI-like")
  • Connects time (audio) to space (graphics) or semantics
  • No dynamic layout or interpretation: instances are static
  • Not limited to specific definition of "music notation" for a culture or genre
  • Does not encode the "meaning" of notational symbols
    • But… can refer to contents of a semantic document!

3 of 27

Why use MNX-Generic?

  • Presentation of any notated music, as long as it's static
  • Use cases that don't involve score modification or reflowing:
    • Score viewers and players with fixed layout
    • Music learning/practice
    • Play-along applications
    • Performance assessment
    • Music with highly customized or unique graphics (analysis, appreciation)
    • Analysis and exploration
    • Archival copies of rendered score

4 of 27

Instance Types

Graphics

Performance Data

Audio Media

5 of 27

An MNX Encoding Ecosystem

Semantic

Encodings

Instance

Encoding

references

load/save

Consumer Applications

Consumer Applications

Common

Contemporary/Extended

Gagaku

Producer Applications

Generic

export

Consumer Applications

6 of 27

Quick Demo

7 of 27

Discrete space/time mappings: Regions

performance time

performance time

8 of 27

Regions can be arbitrarily fine-grained

9 of 27

Continuous space/time mappings: Cursors

10 of 27

Multiple performances with different mappings...

faster tempo:

11 of 27

Notated time: An abstract time axis

Rule 1: Equal notated times refer to the same place in the score.�Rule 2: Greater notated times occur after smaller notated times in the score.

performance time

notated time

12 of 27

Why have notated time?

  • Multiple performances can share the same notated time axis.
  • Only one set of mappings from notated time to graphics and semantics is needed.
  • Notated time is a semantic time dimension, so it lets us to map performances directly to semantics with no graphics needed.

13 of 27

Mapping performance to "notated time"

performance time

performance time

notated time

14 of 27

Linking Events, Graphics and Semantics

...

<event value="/8">

<note pitch="F4"/>

</event>

<event value="/8">

<note pitch="A4"/>

</event>

...

15 of 27

Linking Events, Graphics and Semantics

...

<event value="/8">

<note pitch="F4"/>

</event>

<event value="/8">

<note pitch="A4"/>

</event>

...

16 of 27

Packaging MNX Scores (separate files)

MNX-Container

MNX-Common

MNX-Generic

SVG

Audio

17 of 27

Packaging MNX Scores (bundled files)

MNX-Common

MNX-Generic

SVG

Audio

MNX-Container

18 of 27

Inter-document references

MNX-Container

MNX-Common

MNX-Generic

SVG

Audio

19 of 27

Graphics in MNX-Generic

  • <score-view> element represents a page: a bunch of graphics intended to be viewed as a visual unit.
  • "Plain old SVG" file format can be read/written by any tool
  • SVG can be a simple wrapper around bitmap graphics
  • Regions are bounding boxes of any SVG element within some <score-view>
  • Cursors are connected sets of points in a region
  • Any SVG element can represent any semantic element (e.g. an MNX-Common <event>)

20 of 27

Audio in MNX-Generic

  • Audio media are files in existing standard audio formats
  • <performance-audio> references a collection of synced tracks
  • <performance-audio-media> references an individual track
  • <performance-mapping> links media timeline to regions, cursors

21 of 27

Performance data in MNX-Generic

  • Performance data can be thought of as "MIDI-like"
  • <performance-data> contains all the data for a performance
  • <performance-part> contains the data for a part within it
  • <performance-event> represents a single musical event (typically note)
  • <performance-mapping> links media timeline to regions, cursors
  • <interpret> includes performance data directly in MNX-Common

22 of 27

Region linkage

audio.mp4:

view1.svg:

<svg>

...

<g id="region1">...</g>

</svg>

<mnx-generic>

...

<performance-audio-media src="audio.mp4"/>

<performance-region

start="0.24" end="1.29"

view="page1" region="region1"/>

...

<score-view id="page1" src="view1.svg"/>

...

</mnx-generic>

23 of 27

Semantic linkage

view1.svg:

<svg>

...

<g id="note1">...</g>

</svg>

<mnx-generic>

...

<score-view src="view1.svg">

<score-mapping

graphics="note1" semantics="e1n1"/>

</score-view>

...

</mnx-generic>

<mnx-common>

...

<event value="/8">

<note id="e1n1" pitch="C4"/>

</event>

...

</mnx-common>

24 of 27

Notated Time and Cardinality: Form and Repeats

25 of 27

Notated Time and Cardinality:

Ockeghem's Missa Prolationum: Kyrie

26 of 27

Why semantics isn't embedded in MNX-Generic

  • Would force graphical structure to mimic semantic structure
  • In its extreme form, would force performance structure to mimic graphical structure
  • Would create a separate "Generic flavor" of every semantic encoding
  • The same graphical object may belong to multiple semantic structures, in which case there is no possible unified structure.

27 of 27

The syncing controversy

  • The performance/audio bits of MNX-Generic almost suffice to synchronize audio with semantic data
  • Some applications will work directly from MNX-Common to render reflowable music, yet still want audio syncing.
  • Alternatives in play so far:
    • Use MNX-Generic (minus graphics) to encode syncing for CWMN, and any other notational systems.
    • Use some of MNX-Generic inside MNX-Common (as in <interpret>)
    • Invent a brand new profile for MNX-Common with its own syncing concepts