Beispiel #1
0
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
Beispiel #2
0
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