Skip to content

MPM Performance Rendering Pipeline

Axel Berndt edited this page Apr 1, 2022 · 7 revisions

As implemented in the official MPM API as part of meico, method meico.mpm.elements.Performance.perform().

Definitions

Term Items covered
All global MSM maps keySignatureMap, timeSignatureMap, sectionMap, sequencingMap, markerMap, pedalMap
All local MSM maps for each MSM part includes score, keySignatureMap, timeSignatureMap, sectionMap, sequencingMap, markerMap, programChangeMap, pedalMap

Performance Rendering Pipeline

During performance rendering, transformations are applied to MSM maps in the following sequence.

Sequence MPM Feature Effect
1 Temporary Attributes the values of @date, @date.end and @duration are copied into newly added @date.perf, @date.end.perf and @duration.perf, so the original remains unaltered
2 Global Ornamentation adds or edits modifier attributes @ornament.dynamics, @ornament.date.offset/@ornament.milliseconds.date.offset, @ornament.duration/@ornament.milliseconds.duration, @ornament.noteoff.shift for all affected MSM note elements
3 Global Rubato all global MSM maps; modifies @date.perf
4 Global Tempo all global MSM maps; adds @milliseconds.date and @milliseconds.date.end to each element in the map
5 Global Asynchrony global pedalMap; modifies @milliseconds.date and @milliseconds.date.end
6 Global Timing Imprecision global pedalMap; modifies @milliseconds.date and @milliseconds.date.end
7 For each MSM part (if a local map is given, the corresponding global map is ignored for this part)
7.1 Temporary Attributes the values of @date, @date.end and @duration are copied into newly added @date.perf, @date.end.perf and @duration.perf, so the original remains unaltered
7.2 Dynamics local score; adds @velocity to all note elements; this will also generate a channelVolumeMap for sub-note dynamics instructions <volume date="", date.perf="" value=""/> which is added to the MSM part's dated environment
7.3 Metrical Accentuation local score; modifies @velocity of the note elements
7.4 Articulation (excluding milliseconds modifiers) local score; adds or modifies @date.perf, @duration.perf, @velocity, @detuneCents, @detuneHz
7.5 Rubato all local MSM maps modifies @date.perf
7.6 Ornamentation adds or edits modifier attributes @ornament.dynamics, @ornament.date.offset/@ornament.milliseconds.date.offset, @ornament.duration/@ornament.milliseconds.duration, @ornament.noteoff.shift for all affected MSM note elements; renders all non-milliseconds modifiers into performance attributes @velocity, @date.perf, @date.end.perf and @duration.perf
7.7 Tempo all local MSM maps; adds @milliseconds.date and @milliseconds.date.end to each element in the map
7.8 Asynchrony local pedalMap; modifies @milliseconds.date and @milliseconds.date.end
7.9 Timing Imprecision local pedalMap; modifies @milliseconds.date and @milliseconds.date.end
7.10 Tempo local channelVolumeMap (from step 5.1); adds @milliseconds.date
7.11 Asynchrony local channelVolumeMap (from step 5.1); modifies @milliseconds.date
7.12 Asynchrony local score; modifies @milliseconds.date and @milliseconds.date.end
7.13 Articulation (milliseconds modifiers only) local score; modifies @milliseconds.date, @milliseconds.date.end
7.14 Ornamentation (milliseconds modifiers only) local score; renders @ornament.milliseconds.date.offset and @ornament.milliseconds.duration into performance attributes @milliseconds.date and @milliseconds.date.end
7.15 Timing Imprecision local score; modifies @milliseconds.date and @milliseconds.date.end
7.16 Dynamics Imprecision local score; modifies @velocity
7.17 Tone Duration Imprecision local score; modifies @milliseconds.date.end
7.18 Tuning Imprecision local score; modifies @tuning.offset
8 Cleanup obsolete

The output is an altered and enriched MSM instance that can be exported to expressive MIDI.

Clone this wiki locally