So when working with instruments that commonly read from a grand staff (piano, etc.), is there a clean way to create a cutoff for a staff crossing?
Ideally, I am looking for something like Finale’s Cross Staff Plugin where you can set the split point (reminiscent of synths with a split function).
I’m cool with doing manual clean-up via Lilypond after the fact, but it would make the prototyping go a lot faster if I didn’t have to read 6 ledger lines.
Yeah, it would be good add grand staves to SCAMP sometime! For now, though, this should be a pretty effective work-around:
from scamp import *
s = Session()
piano_treble = s.new_part("piano", clef_preference="treble")
piano_bass = s.new_part("piano", clef_preference="bass")
# call this instead of `piano.play_note`
def play_piano_note(pitch, volume, length, properties=None):
if pitch >= 60: # this cut off is at middle C, but could be wherever
piano_treble.play_note(pitch, volume, length, properties)
else:
piano_bass.play_note(pitch, volume, length, properties)
# Demonstration using random notes
import random
s.start_transcribing()
while s.beat() < 12:
play_piano_note(random.randint(40, 100), 1.0, 0.25)
s.stop_transcribing().to_score().show()
2 Likes