Scoring in Parts

Scribe configures multi-part layouts, staves, transpositions, and voice destinations via the top-level "parts" array.

{

Scores are layed out in a parts array. Each part object has a stave, transpose, and a routing map that maps instrument ids to voices.

"parts": [
    { "name": "Trumpet",   "stave": "treble", "transpose": 2,  "routing": { "2": 0 }},  // Route instrument 2 to part voice 0
    { "name": "Alto sax",  "stave": "treble", "transpose": 9,  "routing": { "3": 0 }},  // Route instrument 3 to part voice 0
    { "name": "Tenor sax", "stave": "treble", "transpose": 14, "routing": { "4": 0 }},  // Route instrument 4 to part voice 0
    { "name": "Bass",      "stave": "bass",   "transpose": 12, "routing": { "6": 0 }}   // Route instrument 6 to part voice 0
],

Sequences are cued on instruments by sequence events, which identify a sequence id, an instrument id, and a duration in beats to play for.

"events": [
    [0, "sequence", 1, 6, 16],  // Send sequence 1 to instrument 6
    [4, "sequence", 2, 1, 12],  // Send sequence 2 to instrument 2
    [4, "sequence", 3, 2, 12],  // Send sequence 2 to instrument 3
    [4, "sequence", 4, 3, 12]   // Send sequence 2 to instrument 4
],

"sequences": [...]

The same sequences and instruments can be mapped to voices on a grand staff by replacing the parts array.

"parts": [
    { "name": "Horns/Bass", "stave": "grand", "routing": { "2": 3 "3": 4 "4": 5 "6": 6 }}
]
TODO

Automatic Parts

When a part omits explicit "staff" and "transpose" properties, Scribe inspects the part's "name" and applies standard orchestral presets: Trumpet resolves to treble (+2 semitones), Alto sax to treble (+9), Tenor sax to treble (+14), Trombone to bass (concert pitch), and Bass to bass (+12 for double-bass sounding an octave below written).

Part Properties

property type default description
name string "" Part name
stave string "treble" Stave type: "grand", "treble", "treble-up", "treble-down", "alto", "tenor", "bass", "drum", "percussion"
transpose number 0 Transposition in semitones (except when showAtConcertPitch is true)
routing object {"0": 0} Map of instrument IDs to voice indexes

Built-in Instrument Presets

If "staff" is omitted, Scribe matches the part's "name" against built-in instrument defaults:

instrument name stave (staff) transposition (transpose)
"Soprano""treble"0
"Alto""treble"0
"Tenor""treble-down"0
"Soprano sax""treble"+2 (B♭)
"Trumpet""treble"+2 (B♭)
"Alto sax""treble"+9 (E♭)
"French horn""treble"+7 (F)
"Tenor sax""treble"+14 (B♭)
"Trombone""bass"0
"Baritone sax""treble"+21 (E♭)
"Violin""treble"0
"Viola""alto"0
"Cello""bass"0
"Double bass" / "Bass""bass"+12
"Piano""grand"0
"Drums""drum"—
"Cowbell""percussion"—