Exemple #1
0
    def test_quantize_input(self):

        # unquantized inputs (quarters note not exactly in time)
        # (ticks per beat = 12)
        midi_notes = [
            midi2lily.MidiNote(0, 11, 60),
            midi2lily.MidiNote(11, 24, 62),
            midi2lily.MidiNote(24, 37, 64),
            midi2lily.MidiNote(37, 48, 65),
            midi2lily.MidiNote(48, 61, 67),
            midi2lily.MidiNote(61, 73, 69),
            midi2lily.MidiNote(73, 85, 71),
            midi2lily.MidiNote(85, 96, 72)
        ]

        context = midi2lily.ParseContext()
        context.time_signature = midi2lily.TimeSignature(4, 4)
        context.ticks_per_beat = 12
        context.staff = midi2lily.Staff('\\new:')

        # Setup quantizing to 16th note (or 3 ticks)
        quantize_duration = midi2lily.Duration(Fraction(1, 16))
        quantize_ticks = quantize_duration.get_ticks(12, 4)

        file = self.build_file(midi_notes, context, quantize_ticks)

        self.assertEqual(str(file),
                         self.get_expected('test-midi-files/scale.txt'))
Exemple #2
0
    def test_chords(self):
        midi_notes = [
            # c e g
            midi2lily.MidiNote(0, 1, 60),
            midi2lily.MidiNote(0, 1, 64),
            midi2lily.MidiNote(0, 1, 67),
            # f a c
            midi2lily.MidiNote(1, 2, 65),
            midi2lily.MidiNote(1, 2, 69),
            midi2lily.MidiNote(1, 2, 72),
            # g b d
            midi2lily.MidiNote(2, 3, 67),
            midi2lily.MidiNote(2, 3, 71),
            midi2lily.MidiNote(2, 3, 74),
            # c e g
            midi2lily.MidiNote(3, 4, 72),
            midi2lily.MidiNote(3, 4, 76),
            midi2lily.MidiNote(3, 4, 79),
        ]

        context = midi2lily.ParseContext()
        context.time_signature = midi2lily.TimeSignature(4, 4)
        context.ticks_per_beat = 1
        context.staff = midi2lily.Staff('\\new:')

        file = self.build_file(midi_notes, context)

        self.assertEqual(str(file),
                         self.get_expected('test-midi-files/chords.txt'))
Exemple #3
0
    def test_c(self):
        midi_notes = [midi2lily.MidiNote(0, 1, 60)]

        context = midi2lily.ParseContext()
        context.time_signature = midi2lily.TimeSignature(4, 4)
        context.ticks_per_beat = 1
        context.staff = midi2lily.Staff('\\new:')

        file = self.build_file(midi_notes, context)

        self.assertEqual(str(file), self.get_expected('test-midi-files/c.txt'))
Exemple #4
0
    def test_2_voices(self):
        midi_notes = [
            midi2lily.MidiNote(0, 2, 60),
            midi2lily.MidiNote(0, 1, 64),
            midi2lily.MidiNote(1, 2, 67)
        ]

        context = midi2lily.ParseContext()
        context.time_signature = midi2lily.TimeSignature(4, 4)
        context.ticks_per_beat = 1
        context.staff = midi2lily.Staff(':1')

        file = self.build_file(midi_notes, context)

        self.assertEqual(str(file),
                         self.get_expected('test-midi-files/polyphonic.txt'))
Exemple #5
0
    def test_file_with_staff_with_notes(self):
        file = midi2lily.File("1")
        staff = midi2lily.Staff("trumpet")

        # TODO: hide children property
        staff.add(
            midi2lily.Note(midi2lily.Pitch(79),
                           midi2lily.Duration.get_duration(4, 4, 4)))
        staff.add(
            midi2lily.Note(midi2lily.Pitch(79),
                           midi2lily.Duration.get_duration(4, 4, 4)))
        staff.add(
            midi2lily.Note(midi2lily.Pitch(79),
                           midi2lily.Duration.get_duration(6, 4, 4)))
        staff.add(
            midi2lily.Note(midi2lily.Pitch(77),
                           midi2lily.Duration.get_duration(2, 4, 4)))

        staff.add(
            midi2lily.Note(midi2lily.Pitch(76),
                           midi2lily.Duration.get_duration(3, 4, 4)))
        staff.add(
            midi2lily.Note(midi2lily.Pitch(74),
                           midi2lily.Duration.get_duration(1, 4, 4)))
        staff.add(
            midi2lily.Note(midi2lily.Pitch(72),
                           midi2lily.Duration.get_duration(3, 4, 4)))
        staff.add(
            midi2lily.Note(midi2lily.Pitch(76),
                           midi2lily.Duration.get_duration(1, 4, 4)))

        staff.add(
            midi2lily.Note(midi2lily.Pitch(74),
                           midi2lily.Duration.get_duration(4, 4, 4)))
        staff.add(
            midi2lily.Note(midi2lily.Pitch(67),
                           midi2lily.Duration.get_duration(4, 4, 4)))

        file.add(staff)

        self.assertEqual(
            str(file),
            "\\version \"1\"\n\n\\new Staff = \"trumpet\" \\relative c' {\ng'4 g g4. f8 |\ne8. d16 c8. e16 d4 g, |\n}"
        )
Exemple #6
0
    def test_four_voices_in_polyphonic_contexts_with_rests(self):

        midi_notes = [
            # voice 1
            midi2lily.MidiNote(0, 4, 60),
            # voice 2
            midi2lily.MidiNote(1, 4, 64),
            # voice 3
            midi2lily.MidiNote(2, 4, 67),
            midi2lily.MidiNote(3, 4, 70)
        ]

        context = midi2lily.ParseContext()
        context.time_signature = midi2lily.TimeSignature(4, 4)
        context.ticks_per_beat = 1
        context.staff = midi2lily.Staff(':1')

        file = self.build_file(midi_notes, context)
        self.assertEqual(str(file),
                         self.get_expected('test-midi-files/polyphonic5.txt'))
Exemple #7
0
    def test_polyphonic_context_between_non_polyphonic_contexts(self):

        midi_notes = [
            midi2lily.MidiNote(0, 2, 72),
            midi2lily.MidiNote(0, 2, 64),
            midi2lily.MidiNote(2, 4, 71),
            midi2lily.MidiNote(2, 3, 67),
            midi2lily.MidiNote(3, 4, 65),
            midi2lily.MidiNote(4, 8, 72),
            midi2lily.MidiNote(4, 8, 64)
        ]

        context = midi2lily.ParseContext()
        context.time_signature = midi2lily.TimeSignature(4, 4)
        context.ticks_per_beat = 1
        context.staff = midi2lily.Staff(':1')

        file = self.build_file(midi_notes, context)
        self.assertEqual(str(file),
                         self.get_expected('test-midi-files/polyphonic2.txt'))
Exemple #8
0
    def test_scale(self):
        midi_notes = [
            midi2lily.MidiNote(0, 1, 60),
            midi2lily.MidiNote(1, 2, 62),
            midi2lily.MidiNote(2, 3, 64),
            midi2lily.MidiNote(3, 4, 65),
            midi2lily.MidiNote(4, 5, 67),
            midi2lily.MidiNote(5, 6, 69),
            midi2lily.MidiNote(6, 7, 71),
            midi2lily.MidiNote(7, 8, 72)
        ]

        context = midi2lily.ParseContext()
        context.time_signature = midi2lily.TimeSignature(4, 4)
        context.ticks_per_beat = 1
        context.staff = midi2lily.Staff('\\new:')

        file = self.build_file(midi_notes, context)

        self.assertEqual(str(file),
                         self.get_expected('test-midi-files/scale.txt'))
Exemple #9
0
    def test_two_voices_with_rests(self):

        midi_notes = [
            # voice 1
            midi2lily.MidiNote(0, 4, 60),
            midi2lily.MidiNote(4, 8, 60),
            # voice 2
            midi2lily.MidiNote(1, 2, 64),
            midi2lily.MidiNote(2, 3, 72),
            midi2lily.MidiNote(3, 4, 64),
            midi2lily.MidiNote(5, 6, 64),
            midi2lily.MidiNote(6, 7, 67),
            midi2lily.MidiNote(7, 8, 64),
        ]

        context = midi2lily.ParseContext()
        context.time_signature = midi2lily.TimeSignature(4, 4)
        context.ticks_per_beat = 2
        context.staff = midi2lily.Staff(':1')

        file = self.build_file(midi_notes, context)
        self.assertEqual(str(file),
                         self.get_expected('test-midi-files/polyphonic6.txt'))
Exemple #10
0
 def test_staff_with_notes(self):
     staff = midi2lily.Staff("trumpet")
     note = midi2lily.Note(midi2lily.Pitch(60),
                           midi2lily.Duration.get_duration(1, 1, 4))
     staff.add(note)
     self.assertEqual(str(staff), "\\new Staff = \"trumpet\" {\nc\'4 }")
Exemple #11
0
 def test_empty_staff(self):
     staff = midi2lily.Staff("trumpet")
     self.assertEqual(str(staff), "\\new Staff = \"trumpet\" {\n}")