-
Notifications
You must be signed in to change notification settings - Fork 2
Description
Following a discussion on parts and tracks on 2024-07-13
Part
Properties
- Tempo
- Time signature
- Number of Bars
Tracks : tables of events of unique type (one track per type)
Main tracks (defined by the main conductor)
-
Chord event : {time, chord}
-
Scale event : {time, scale}
Optional main tracks
-
Nuance, dynamics : {time, nuance}
Nuance can be a float between 0 and 1, eventually later converted to an int between 0 and 127.
An enum-like thing could translate nuance names (piano, forte, fortissimo...) to actual values. -
Main theme (melody) : {time, note, duration, (velocity?)}
Tracks defined at the interpreter level
-
Theme (if not defined globally or if interpreter wants its own theme)
-
Nuance (same)
-
Rhythm (for percussive instruments) : {time, (velocity?)}
A multi-instrument percussion has multiple rhythm tracks (eg. a drummer with kick, snare, hi-hat...) -
Generic parameter : {time, value}
Any parameter that a player can interpret, eg. any CC parameter of a synth
Proposal for accessing tracks
Tracks could be accessed in a folder way. Eg. to access the kick rhythm of the drummer part: drummer.get_track({"kick", "rhythm"}).
In a more general/global implementation, each interpreter can be a folder, the conductor level being the root level:
get_track({"drummer","kick","rhythm"})
get_track({"chords"})
get_track({"guitar1","melody"})
OSC implementation would not be far away!