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
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).
| 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 |
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" | — |