def _make_leaf_on_pitch( pitch, duration, decrease_durations_monotonically=True, forbidden_written_duration=None, use_multimeasure_rests=False, use_messiaen_style_ties=False, ): from abjad.tools import scoretools note_prototype = ( numbers.Number, str, pitchtools.NamedPitch, pitchtools.PitchClass, ) chord_prototype = (tuple, list) rest_prototype = (type(None), ) if isinstance(pitch, note_prototype): leaves = scoretools.make_tied_leaf( scoretools.Note, duration, decrease_durations_monotonically=decrease_durations_monotonically, forbidden_written_duration=forbidden_written_duration, pitches=pitch, use_messiaen_style_ties=use_messiaen_style_ties, ) elif isinstance(pitch, chord_prototype): leaves = scoretools.make_tied_leaf( scoretools.Chord, duration, decrease_durations_monotonically=decrease_durations_monotonically, forbidden_written_duration=forbidden_written_duration, pitches=pitch, use_messiaen_style_ties=use_messiaen_style_ties, ) elif isinstance(pitch, rest_prototype) and not use_multimeasure_rests: leaves = scoretools.make_tied_leaf( scoretools.Rest, duration, decrease_durations_monotonically=decrease_durations_monotonically, forbidden_written_duration=forbidden_written_duration, pitches=None, use_messiaen_style_ties=use_messiaen_style_ties, ) elif isinstance(pitch, rest_prototype) and use_multimeasure_rests: multimeasure_rest = scoretools.MultimeasureRest((1)) multiplier = durationtools.Multiplier(duration) attach(multiplier, multimeasure_rest) leaves = (multimeasure_rest, ) else: message = 'unknown pitch {!r}.' message = message.format(pitch) raise ValueError(message) return leaves
def make_multimeasure_rests(durations): '''Make multi-measure rests from `durations`: :: >>> scoretools.make_multimeasure_rests([(4, 4), (7, 4)]) Selection(MultimeasureRest('R1'), MultimeasureRest('R1..')) Returns list. ''' from abjad.tools import scoretools multimeasure_rests = [] for duration in durations: written_duration = durationtools.Duration(duration) if not written_duration.is_assignable: message = 'multimeasure rest durations must be assignable.' raise AssignabilityError(message) multimeasure_rest = scoretools.MultimeasureRest(written_duration) multimeasure_rests.append(multimeasure_rest) result = selectiontools.Selection(multimeasure_rests) return result