示例#1
0
    def test_simple_tuplet_reverse(self):
        print('test simple tuplet reverse')
        a = Note(DiatonicPitch(3, 'a'), Duration(1, 8))
        b = Note(DiatonicPitch(3, 'b'), Duration(1, 8))
        c = Note(DiatonicPitch(3, 'c'), Duration(1, 8))
        d = Note(DiatonicPitch(3, 'd'), Duration(1, 8))
        tuplet = Tuplet(Duration(1, 8), 3, [a, b, c, d])

        print(tuplet)

        tuplet.reverse()

        print(tuplet)

        notes = tuplet.get_all_notes()
        assert notes is not None
        assert len(notes) == 4
        assert notes[0].diatonic_pitch == DiatonicPitch(3, 'd')
        assert notes[1].diatonic_pitch == DiatonicPitch(3, 'c')
        assert notes[2].diatonic_pitch == DiatonicPitch(3, 'b')
        assert notes[3].diatonic_pitch == DiatonicPitch(3, 'a')

        assert notes[0].relative_position == Offset(0)
        assert notes[1].relative_position == Offset(3, 32)
        assert notes[2].relative_position == Offset(3, 16)
        assert notes[3].relative_position == Offset(9, 32)
示例#2
0
    def test_nested_tuplet(self):
        note1 = Note(DiatonicPitch(4, 'c'), Duration(1, 8))
        note2 = Note(DiatonicPitch(4, 'd'), Duration(1, 8))
        sub_tuplet = Tuplet(Duration(1, 8), 2, [
            Note(DiatonicPitch(3, 'c'), Duration(1, 8)),
            Note(DiatonicPitch(3, 'd'), Duration(1, 8)),
            Note(DiatonicPitch(3, 'e'), Duration(1, 8))
        ])
        tuplet = Tuplet(Duration(1, 8), 2, [note1, sub_tuplet, note2])

        print(tuplet)
        AbstractNote.print_structure(tuplet)

        notes = tuplet.get_all_notes()
        assert len(notes) == 5

        assert notes[0].duration == Duration(1, 16)
        assert notes[1].duration == Duration(1, 24)
        assert notes[2].duration == Duration(1, 24)
        assert notes[3].duration == Duration(1, 24)
        assert notes[4].duration == Duration(1, 16)
        assert notes[0].relative_position == Offset(0)
        assert notes[1].relative_position == Offset(0)
        assert notes[2].relative_position == Offset(1, 24)
        assert notes[3].relative_position == Offset(1, 12)
        assert notes[4].relative_position == Offset(3, 16)

        assert tuplet.sub_notes[1].duration == Duration(1, 8)
        assert tuplet.sub_notes[1].relative_position == Offset(1, 16)

        sub_tuplet_prime = sub_tuplet.clone()
        notes = sub_tuplet_prime.get_all_notes()
        AbstractNote.print_structure(sub_tuplet_prime)
        assert notes[0].duration == Duration(1, 12)
        assert str(notes[0].diatonic_pitch) == 'C:3'

        tuplet_prime = tuplet.clone()
        notes = tuplet_prime.get_all_notes()
        AbstractNote.print_structure(tuplet_prime)
        assert notes[0].duration == Duration(1, 16)
        assert str(notes[0].diatonic_pitch) == 'C:4'
        assert notes[1].duration == Duration(1, 24)
示例#3
0
    def test_tuplet_with_nested_beam(self):
        note1 = Note(DiatonicPitch(4, 'c'), Duration(1, 8))
        note2 = Note(DiatonicPitch(4, 'd'), Duration(1, 8))

        n_list = [
            Note(DiatonicPitch(3, 'c'), Duration(1, 8)),
            Note(DiatonicPitch(3, 'd'), Duration(1, 8))
        ]
        add_beam = Beam(n_list)

        tuplet = Tuplet(Duration(1, 8), 2, [note1, add_beam, note2])

        print(tuplet)
        AbstractNote.print_structure(tuplet)

        notes = tuplet.get_all_notes()
        assert len(notes) == 4

        assert tuplet.sub_notes[0].duration == Duration(1, 16)
        assert tuplet.sub_notes[0].relative_position == Offset(0)
        assert tuplet.sub_notes[1].duration == Duration(1, 8)
        assert tuplet.sub_notes[1].relative_position == Offset(1, 16)
        assert tuplet.sub_notes[2].duration == Duration(1, 16)
        assert tuplet.sub_notes[2].relative_position == Offset(3, 16)
        assert notes[1].duration == Duration(1, 16)
        assert notes[1].relative_position == Offset(0)
        assert notes[2].duration == Duration(1, 16)
        assert notes[2].relative_position == Offset(1, 16)

        add_beam_prime = add_beam.clone()
        notes = add_beam_prime.get_all_notes()
        AbstractNote.print_structure(add_beam_prime)
        assert notes[0].duration == Duration(1, 8)
        assert str(notes[0].diatonic_pitch) == 'C:3'

        tuplet_prime = tuplet.clone()
        notes = tuplet_prime.get_all_notes()
        AbstractNote.print_structure(tuplet_prime)
        assert notes[0].duration == Duration(1, 16)
        assert str(notes[0].diatonic_pitch) == 'C:4'
        assert notes[1].duration == Duration(1, 16)
示例#4
0
    def test_simple_tuplet(self):
        note1 = Note(DiatonicPitch(4, 'c'), Duration(1, 8))
        note2 = Note(DiatonicPitch(4, 'd'), Duration(1, 8))
        note3 = Note(DiatonicPitch(4, 'e'), Duration(1, 8))
        tuplet = Tuplet(Duration(1, 8), 2, [note1, note2, note3])

        print(tuplet)
        AbstractNote.print_structure(tuplet)

        notes = tuplet.get_all_notes()
        assert len(notes) == 3

        assert notes[0].diatonic_pitch == DiatonicPitch(4, 'c')
        assert notes[1].diatonic_pitch == DiatonicPitch(4, 'd')
        assert notes[2].diatonic_pitch == DiatonicPitch(4, 'e')
        assert notes[0].duration == Duration(1, 12)
        assert notes[1].duration == Duration(1, 12)
        assert notes[2].duration == Duration(1, 12)
        assert notes[0].relative_position == Offset(0)
        assert notes[1].relative_position == Offset(1, 12)
        assert notes[2].relative_position == Offset(1, 6)
示例#5
0
    def test_TBB_layers(self):
        print('start test_TBB_layers')
        sub_sub_beam = Beam([
            Note(DiatonicPitch(2, 'c'), Duration(1, 8)),
            Note(DiatonicPitch(2, 'd'), Duration(1, 8))
        ])
        sub_beam = Beam([
            Note(DiatonicPitch(3, 'c'), Duration(1, 8)), sub_sub_beam,
            Note(DiatonicPitch(3, 'd'), Duration(1, 8))
        ])

        AbstractNote.print_structure(sub_beam)

        note1 = Note(DiatonicPitch(4, 'c'), Duration(1, 8))
        note2 = Note(DiatonicPitch(4, 'd'), Duration(1, 8))
        print('-----------')
        tuplet = Tuplet(Duration(1, 8), 2, [note1, sub_beam, note2])
        AbstractNote.print_structure(tuplet)

        notes = tuplet.get_all_notes()
        assert len(notes) == 6

        assert tuplet.sub_notes[1].duration == Duration(3, 20)
        assert tuplet.sub_notes[1].relative_position == Offset(1, 20)
        assert tuplet.sub_notes[1].sub_notes[1].duration == Duration(1, 20)
        assert tuplet.sub_notes[1].sub_notes[1].relative_position == Offset(
            1, 20)

        sub_sub_beam.add(Note(DiatonicPitch(2, 'c'), Duration(1, 8)), 1)
        AbstractNote.print_structure(tuplet)

        assert tuplet.sub_notes[1].duration == Duration(7, 44)
        assert tuplet.sub_notes[1].relative_position == Offset(1, 22)
        assert tuplet.sub_notes[1].sub_notes[1].duration == Duration(3, 44)
        assert tuplet.sub_notes[1].sub_notes[1].relative_position == Offset(
            1, 22)

        print('end test_TBB_layers')
示例#6
0
    def test_simple_form(self):
        line = Line()
        s = Beam()
        s.append(Note(DiatonicPitch.parse('C:4'), Duration(1, 8)))
        s.append(Note(DiatonicPitch.parse('D:4'), Duration(1, 8)))
        s.append(Note(DiatonicPitch.parse('E:4'), Duration(1, 8)))
        s.append(Note(DiatonicPitch.parse('F#:4'), Duration(1, 8)))
        line.pin(s)
        notes = s.get_all_notes()

        c = [
            EqualPitchConstraint([notes[0], notes[2]]),
            NotEqualPitchConstraint([notes[1], notes[3]])
        ]

        a = Motif(s, c, 'A')

        s1 = [
           Note(DiatonicPitch(4, 'c'), Duration(1, 8)),
           Note(DiatonicPitch(4, 'd'), Duration(1, 8)),
           Note(DiatonicPitch(4, 'e'), Duration(1, 8)),
        ]
        tuplet = Tuplet(Duration(1, 8), 2, s1)
        line.pin(tuplet, Offset(1, 2))
        notes = tuplet.get_all_notes()

        c1 = [
            EqualPitchConstraint([notes[0], notes[2]]),
            RelativeScalarStepConstraint(notes[1], notes[2], -2, 2)
        ]

        b = Motif(tuplet, c1, 'B')

        f = Form([a, b])
        print(f)

        constraints = [
            EqualPitchConstraint([a.actors[0], b.actors[1]])
        ]

        # Ensure a, b cloned for reliability - see comment in Form.
        ff = Form([a, b], constraints)
        print(ff)

        constr = ff.external_constraints
        assert len(constr) == 1

        actors = ff.actors
        assert len(actors) == 7

        assert isinstance(constr[0], EqualPitchConstraint)
        assert constr[0].actors[0] == actors[0]
        assert constr[0].actors[1] == actors[4 + 1]

        all_constr = ff.constraints
        assert len(all_constr) == 5

        # Add more notes to clone ff as:
        s3 = Beam()
        first_note = Note(DiatonicPitch.parse('C:5'), Duration(1, 8))
        s3.append(first_note)
        s3.append(Note(DiatonicPitch.parse('D:5'), Duration(1, 8)))
        s3.append(Note(DiatonicPitch.parse('E:5'), Duration(1, 8)))
        s3.append(Note(DiatonicPitch.parse('F#:5'), Duration(1, 8)))
        line.pin(s3, Offset(3))

        s2 = [
           Note(DiatonicPitch(5, 'c'), Duration(1, 8)),
           Note(DiatonicPitch(5, 'd'), Duration(1, 8)),
           Note(DiatonicPitch(5, 'e'), Duration(1, 8)),
        ]
        tuplet1 = Tuplet(Duration(1, 8), 2, s2)
        line.pin(tuplet1, Offset(7, 2))

        fff = ff.copy_to(first_note)
        assert fff is not None
        print(fff)

        constr = fff.external_constraints
        assert len(constr) == 1
        assert len(fff.constraints) == 5

        actors = fff.actors
        assert len(actors) == 7

        assert isinstance(constr[0], EqualPitchConstraint)
        assert constr[0].actors[0] == actors[0]
        assert constr[0].actors[1] == actors[4 + 1]

        all_constr = fff.constraints
        assert len(all_constr) == 5