- 
                Notifications
    
You must be signed in to change notification settings  - Fork 2
 
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().
| 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
 | 
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.