def test_rhythmmakertools_NoteRhythmMaker___call___01():

    maker = rhythmmakertools.NoteRhythmMaker()

    divisions = [(5, 16), (3, 8)]
    result = maker(divisions)

    maker = abjad.MeasureMaker()
    measures = maker(divisions)
    staff = abjad.Staff(measures)
    abjad.mutate(staff).replace_measure_contents(result)

    assert format(staff) == abjad.String.normalize(
        r'''
        \new Staff
        {
            {   % measure
                \time 5/16
                c'4
                ~
                c'16
            }   % measure
            {   % measure
                \time 3/8
                c'4.
            }   % measure
        }
        '''
        )
def test_scoretools_Mutation_replace_measure_contents_01():
    r'''Contents duration less than sum of duration of measures.
    abjad.Note spacer skip at end of second measure.
    '''

    maker = abjad.MeasureMaker()
    measures = maker([(1, 8), (3, 16)])
    staff = abjad.Staff(measures)
    notes = [
        abjad.Note("c'16"),
        abjad.Note("d'16"),
        abjad.Note("e'16"),
        abjad.Note("f'16")
    ]
    abjad.mutate(staff).replace_measure_contents(notes)

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            {   % measure
                \time 1/8
                c'16
                d'16
            }   % measure
            {   % measure
                \time 3/16
                e'16
                f'16
                s1 * 1/16
            }   % measure
        }
        ''')

    assert abjad.inspect(staff).is_well_formed()
def test_rhythmmakertools_NoteRhythmMaker___call___02():

    duration_specifier = rhythmmakertools.DurationSpecifier(
        decrease_monotonic=False,
        )
    maker = rhythmmakertools.NoteRhythmMaker(
        duration_specifier=duration_specifier,
        )

    divisions = [(5, 16), (3, 8)]
    result = maker(divisions)

    maker = abjad.MeasureMaker()
    measures = maker(divisions)
    staff = abjad.Staff(measures)
    abjad.mutate(staff).replace_measure_contents(result)

    assert format(staff) == abjad.String.normalize(
        r'''
        \new Staff
        {
            {   % measure
                \time 5/16
                c'16
                ~
                c'4
            }   % measure
            {   % measure
                \time 3/8
                c'4.
            }   % measure
        }
        '''
        )
def test_scoretools_Mutation_replace_measure_contents_06():
    r'''Preserves ties.
    '''

    maker = abjad.NoteMaker()
    durations = [(5, 16), (3, 16)]
    leaf_lists = maker([0], durations)
    leaves = abjad.sequence(leaf_lists).flatten(depth=-1)

    maker = abjad.MeasureMaker()
    measures = maker(durations)
    staff = abjad.Staff(measures)
    measures = abjad.mutate(staff).replace_measure_contents(leaves)

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            {   % measure
                \time 5/16
                c'4
                ~
                c'16
            }   % measure
            {   % measure
                \time 3/16
                c'8.
            }   % measure
        }
        ''')

    assert abjad.inspect(staff).is_well_formed()
def test_rhythmmakertools_TaleaRhythmMaker_tie_split_notes_02():

    talea = rhythmmakertools.Talea(
        counts=[5],
        denominator=16,
        )
    rhythm_maker = rhythmmakertools.TaleaRhythmMaker(
        talea=talea,
        )

    divisions = [(3, 16), (5, 8), (4, 8), (7, 16)]
    result = rhythm_maker(divisions)

    maker = abjad.MeasureMaker()
    measures = maker(divisions)
    staff = abjad.Staff(measures)
    measures = abjad.mutate(staff).replace_measure_contents(result)

    assert format(staff) == abjad.String.normalize(
        r'''
        \new Staff
        {
            {   % measure
                \time 3/16
                c'8.
                ~
            }   % measure
            {   % measure
                \time 5/8
                c'8
                c'4
                ~
                c'16
                [
                c'8.
                ~
                ]
            }   % measure
            {   % measure
                \time 4/8
                c'8
                c'4
                ~
                c'16
                [
                c'16
                ~
                ]
            }   % measure
            {   % measure
                \time 7/16
                c'4
                c'8.
            }   % measure
        }
        '''
        )

    assert abjad.inspect(staff).is_well_formed()
def test_rhythmmakertools_BurnishSpecifier_outer_divisions_only_02():

    burnish_specifier = rhythmmakertools.BurnishSpecifier(
        left_classes=[-1],
        right_classes=[-1],
        left_counts=[1],
        right_counts=[1],
        outer_divisions_only=True,
        )

    talea = rhythmmakertools.Talea(
        counts=[1],
        denominator=4,
        )

    rhythm_maker = rhythmmakertools.TaleaRhythmMaker(
        talea=talea,
        burnish_specifier=burnish_specifier,
        extra_counts_per_division=[2],
        )

    divisions = [(3, 16), (3, 8)]
    selections = rhythm_maker(divisions)

    maker = abjad.MeasureMaker()
    measures = maker(divisions)
    staff = abjad.Staff(measures)
    abjad.mutate(staff).replace_measure_contents(selections)

    assert format(staff) == abjad.String.normalize(
        r'''
        \new Staff
        {
            {   % measure
                \time 3/16
                \tweak text #tuplet-number::calc-fraction-text
                \times 3/5 {
                    r4
                    c'16
                    ~
                }
            }   % measure
            {   % measure
                \time 3/8
                \tweak text #tuplet-number::calc-fraction-text
                \times 3/4 {
                    c'8.
                    c'4
                    r16
                }
            }   % measure
        }
        '''
        ), format(staff)
Esempio n. 7
0
def test_rhythmmakertools_TaleaRhythmMaker___call___02():

    talea = rhythmmakertools.Talea(
        counts=[-1, 4, -2, 3],
        denominator=16,
    )
    rhythm_maker = rhythmmakertools.TaleaRhythmMaker(
        talea=talea,
        extra_counts_per_division=[3, 4],
        split_divisions_by_counts=[6],
    )

    divisions = [(2, 8), (5, 8)]
    result = rhythm_maker(divisions)

    maker = abjad.MeasureMaker()
    measures = maker(divisions)
    staff = abjad.Staff(measures)
    abjad.mutate(staff).replace_measure_contents(result)

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            {   % measure
                \time 2/8
                \times 4/7 {
                    r16
                    c'4
                    r8
                }
            }   % measure
            {   % measure
                \time 5/8
                \tweak text #tuplet-number::calc-fraction-text
                \times 1/1 {
                    c'8
                    ~
                }
                \times 2/3 {
                    c'16
                    r16
                    c'4
                    r8
                    c'16
                    ~
                }
                \tweak text #tuplet-number::calc-fraction-text
                \times 1/1 {
                    c'8
                }
            }   % measure
        }
        ''')
def test_scoretools_Measure_measure_number_01():
    r'''Measures in staff number correctly starting from 1.
    '''

    maker = abjad.MeasureMaker()
    time_signature_pairs = [(3, 16), (5, 16), (5, 16)]
    measures = maker(time_signature_pairs)
    staff = abjad.Staff(measures)

    assert staff[0].measure_number == 1
    assert staff[1].measure_number == 2
    assert staff[2].measure_number == 3
def test_rhythmmakertools_BurnishSpecifier_outer_divisions_only_04():

    burnish_specifier = rhythmmakertools.BurnishSpecifier(
        left_classes=[-1],
        right_classes=[-1],
        left_counts=[1],
        right_counts=[2],
        outer_divisions_only=True,
        )

    talea = rhythmmakertools.Talea(
        counts=[1],
        denominator=8,
        )

    rhythm_maker = rhythmmakertools.TaleaRhythmMaker(
        talea=talea,
        burnish_specifier=burnish_specifier,
        extra_counts_per_division=[],
        )

    divisions = [(8, 8)]
    selections = rhythm_maker(divisions)

    maker = abjad.MeasureMaker()
    measures = maker(divisions)
    staff = abjad.Staff(measures)
    abjad.mutate(staff).replace_measure_contents(selections)

    assert format(staff) == abjad.String.normalize(
        r'''
        \new Staff
        {
            {   % measure
                \time 8/8
                r8
                c'8
                [
                c'8
                c'8
                c'8
                c'8
                ]
                r8
                r8
            }   % measure
        }
        '''
        ), format(staff)
Esempio n. 10
0
    def from_selections(class_, selections, time_signatures=None):
        r'''Makes a selection of measures from `selections`.

        Returns selections.
        '''
        import abjad
        assert len(selections)
        if not time_signatures:
            time_signatures = [_.get_duration() for _ in selections]
        assert len(selections) == len(time_signatures)
        durations = [abjad.inspect(_).get_duration() for _ in selections]
        assert durations == [abjad.Duration(_) for _ in time_signatures]
        maker = abjad.MeasureMaker()
        measures = maker(time_signatures)
        temporary_voice = abjad.Voice(measures)
        abjad.mutate(temporary_voice).replace_measure_contents(selections)
        temporary_voice[:] = []
        return measures
def test_scoretools_Mutation_replace_measure_contents_04():
    r'''Raise StopIteration when not enough measures.
    '''

    maker = abjad.MeasureMaker()
    measures = maker([(1, 8), (1, 8)])
    staff = abjad.Staff(measures)
    notes = [
        abjad.Note("c'16"),
        abjad.Note("d'16"),
        abjad.Note("e'16"),
        abjad.Note("f'16"),
        abjad.Note("g'16"),
        abjad.Note("a'16")
    ]
    notes, staff
    statement = 'abjad.mutate(staff).replace_measure_contents(notes)'
    assert pytest.raises(StopIteration, statement)
def test_scoretools_Mutation_replace_measure_contents_02():
    r'''Some contents too big for some measures.
    Small measures skipped.
    '''

    time_signatures = [(1, 16), (3, 16), (1, 16), (3, 16)]
    maker = abjad.MeasureMaker()
    measures = maker(time_signatures)
    staff = abjad.Staff(measures)
    notes = [abjad.Note("c'8"), abjad.Note("d'8")]
    abjad.mutate(staff).replace_measure_contents(notes)

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            {   % measure
                \time 1/16
                s1 * 1/16
            }   % measure
            {   % measure
                \time 3/16
                c'8
                s1 * 1/16
            }   % measure
            {   % measure
                \time 1/16
                s1 * 1/16
            }   % measure
            {   % measure
                \time 3/16
                d'8
                s1 * 1/16
            }   % measure
        }
        ''')

    assert abjad.inspect(staff).is_well_formed()
def test_scoretools_Mutation_replace_measure_contents_05():
    r'''Populate measures even when not enough total measures.
    '''

    maker = abjad.MeasureMaker()
    measures = maker([(1, 8), (1, 8)])
    staff = abjad.Staff(measures)
    notes = [
        abjad.Note("c'16"),
        abjad.Note("d'16"),
        abjad.Note("e'16"),
        abjad.Note("f'16"),
        abjad.Note("g'16"),
        abjad.Note("a'16")
    ]

    try:
        abjad.mutate(staff).replace_measure_contents(notes)
    except StopIteration:
        pass

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            {   % measure
                \time 1/8
                c'16
                d'16
            }   % measure
            {   % measure
                e'16
                f'16
            }   % measure
        }
        ''')

    assert abjad.inspect(staff).is_well_formed()
def test_rhythmmakertools_BeamSpecifier_beam_each_division_01():
    r'''Beam each cell with a multipart beam spanner.
    '''

    talea = rhythmmakertools.Talea(
        counts=[1, 1, 1, -1, 2, 2],
        denominator=32,
        )

    rhythm_maker = rhythmmakertools.TaleaRhythmMaker(
        talea=talea,
        extra_counts_per_division=[3, 4],
        )

    divisions = [(2, 16), (5, 16)]
    selections = rhythm_maker(divisions)

    maker = abjad.MeasureMaker()
    measures = maker(divisions)
    staff = abjad.Staff(measures)
    abjad.mutate(staff).replace_measure_contents(selections)
    score = abjad.Score([staff])
    abjad.setting(score).autoBeaming = False

    assert format(staff) == abjad.String.normalize(
        r'''
        \new Staff
        {
            {   % measure
                \time 2/16
                \times 4/7 {
                    c'32
                    [
                    c'32
                    c'32
                    ]
                    r32
                    c'16
                    [
                    c'32
                    ~
                    ]
                }
            }   % measure
            {   % measure
                \time 5/16
                \tweak text #tuplet-number::calc-fraction-text
                \times 5/7 {
                    c'32
                    [
                    c'32
                    c'32
                    c'32
                    ]
                    r32
                    c'16
                    [
                    c'16
                    c'32
                    c'32
                    c'32
                    ]
                    r32
                    c'32
                }
            }   % measure
        }
        '''
        )
Esempio n. 15
0
def test_rhythmmakertools_BurnishSpecifier_02():

    burnish_specifier = rhythmmakertools.BurnishSpecifier(
        left_classes=[0],
        middle_classes=[abjad.Rest],
        right_classes=[0],
        left_counts=[2],
        right_counts=[1],
    )

    talea = rhythmmakertools.Talea(
        counts=[1, 1, 2, 4],
        denominator=32,
    )

    rhythm_maker = rhythmmakertools.TaleaRhythmMaker(
        talea=talea,
        extra_counts_per_division=[0],
        burnish_specifier=burnish_specifier,
    )

    divisions = [(5, 16), (6, 16)]
    selections = rhythm_maker(divisions)

    maker = abjad.MeasureMaker()
    measures = maker(divisions)
    staff = abjad.Staff(measures)
    abjad.mutate(staff).replace_measure_contents(selections)

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            {   % measure
                \time 5/16
                \tweak text #tuplet-number::calc-fraction-text
                \times 1/1 {
                    c'32
                    [
                    c'32
                    ]
                    r16
                    r8
                    r32
                    c'32
                }
            }   % measure
            {   % measure
                \time 6/16
                \tweak text #tuplet-number::calc-fraction-text
                \times 1/1 {
                    c'16
                    [
                    c'8
                    ]
                    r32
                    r32
                    r16
                    c'16
                }
            }   % measure
        }
        ''')