예제 #1
0
    def test_multi_track(self):
        c = InstrumentCatalog.instance()

        score = Score()

        score.time_signature_sequence.add(
            TimeSignatureEvent(TimeSignature(3, Duration(1, 4)), Position(0)))
        score.tempo_sequence.add(
            TempoEvent(Tempo(60, Duration(1, 4)), Position(0)))

        violin = c.get_instrument("violin")
        piano = c.get_instrument("piano")

        note0 = Note(DiatonicPitch(4, 'a'), Duration(1, 4))
        note1 = Note(DiatonicPitch(4, 'b'), Duration(1, 4))
        note2 = Note(DiatonicPitch(4, 'c'), Duration(1, 4))
        note3 = Note(DiatonicPitch(4, 'd'), Duration(1, 4))
        note4 = Note(DiatonicPitch(5, 'g'), Duration(1, 4))
        note5 = Note(DiatonicPitch(5, 'f'), Duration(1, 4))
        note6 = Note(DiatonicPitch(5, 'e'), Duration(1, 4))
        note7 = Note(DiatonicPitch(5, 'd'), Duration(1, 4))

        violin_instrument_voice = InstrumentVoice(violin, 1)
        violin_voice = violin_instrument_voice.voice(0)
        assert violin_voice

        vline = Line([note0, note1, note2, note3])
        violin_voice.pin(vline)

        score.add_instrument_voice(violin_instrument_voice)

        piano_instrument_voice = InstrumentVoice(piano, 1)
        piano_voice = piano_instrument_voice.voice(0)
        assert piano_voice

        pline = Line([note4, note5, note6, note7])
        piano_voice.pin(pline, Offset(1, 8))

        score.add_instrument_voice(piano_instrument_voice)

        violin_voice.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.F), Position(0)))
        piano_voice.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.P), Position(0)))

        smc = ScoreToMidiConverter(score)
        smc.create('score_multi_trackoutput_file.mid')

        TestScoreToMidiConverter.read_midi_file(
            'score_multi_trackoutput_file.mid')
예제 #2
0
    def test_score_convert(self):
        c = InstrumentCatalog.instance()

        score = Score()

        score.time_signature_sequence.add(
            TimeSignatureEvent(TimeSignature(3, Duration(1, 4)), Position(0)))
        score.tempo_sequence.add(
            TempoEvent(Tempo(60, Duration(1, 4)), Position(0)))

        violin = c.get_instrument("violin")
        violin_instrument_voice = InstrumentVoice(violin, 2)
        violin_voice_0 = violin_instrument_voice.voice(0)
        violin_voice_1 = violin_instrument_voice.voice(1)
        assert violin_voice_0
        assert violin_voice_1
        score.add_instrument_voice(violin_instrument_voice)

        violin_voice_0.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.P), Position(0)))
        violin_voice_0.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.FFF), Position(1, 4)))
        violin_voice_1.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.P), Position(0)))
        violin_voice_1.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.FFF), Position(1, 4)))

        # Add notes to the score
        vnote0 = Note(DiatonicPitch(4, 'a'), Duration(1, 8))
        vnote1 = Note(DiatonicPitch(4, 'b'), Duration(1, 8))
        vnote2 = Note(DiatonicPitch(5, 'c'), Duration(1, 8))
        vnote3 = Note(DiatonicPitch(4, 'd'), Duration(1, 8))
        vnote4 = Note(DiatonicPitch(4, 'e'), Duration(1, 8))
        vnote5 = Note(DiatonicPitch(4, 'f'), Duration(1, 8))

        # Set up a violin voice with 6 8th notes
        vline_0 = Line([vnote0, vnote1, vnote2])
        violin_voice_0.pin(vline_0)

        # Set up a violin voice with 6 8th notes
        vline_1 = Line([vnote3, vnote4, vnote5])
        violin_voice_1.pin(vline_1)

        smc = ScoreToMidiConverter(score)
        smc.create('score_output_file.mid')

        TestScoreToMidiConverter.read_midi_file('score_output_file.mid')
예제 #3
0
 def __init__(self,
              msg_type,
              channel,
              note_value,
              abs_tick_time,
              velocity=Dynamics.DEFAULT_DYNAMICS_VELOCITY()):
     MidiMessage.__init__(self, msg_type, channel, abs_tick_time)
     self.__note_value = note_value
     self.__velocity = velocity
예제 #4
0
 def get_velocity(self, position):
     dynamics_event = self.dynamics_sequence.floor_event(position)
     if not dynamics_event:
         return Dynamics.DEFAULT_DYNAMICS_VELOCITY()
     if isinstance(dynamics_event, DynamicsEvent):
         return dynamics_event.velocity()
     else:
         next_dfe = self.dynamics_sequence.successor(dynamics_event)
         return dynamics_event.velocity(position, next_dfe.time if next_dfe else Position(self.length().duration))
예제 #5
0
 def dynamics(self, offset, duration):
     """
     Compute the velocity as a Dynamics setting.
     
      Args:
        offset: (Offset) within duration
        duration: (Duration) of domain
     """
     v = self.velocity(offset, duration)
     return Dynamics.nearest_dynamics(v)
예제 #6
0
    def test_tempo_change(self):
        c = InstrumentCatalog.instance()

        score = Score()

        score.time_signature_sequence.add(
            TimeSignatureEvent(TimeSignature(3, Duration(1, 4)), Position(0)))
        score.tempo_sequence.add(
            TempoEvent(Tempo(120, Duration(1, 4)), Position(0)))
        score.tempo_sequence.add(
            TempoEvent(Tempo(60, Duration(1, 4)), Position(1)))
        score.tempo_sequence.add(
            TempoEvent(Tempo(30, Duration(1, 4)), Position(2)))

        violin = c.get_instrument("violin")
        violin_instrument_voice = InstrumentVoice(violin, 1)
        violin_voice_0 = violin_instrument_voice.voice(0)
        assert violin_voice_0
        score.add_instrument_voice(violin_instrument_voice)

        violin_voice_0.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.F), Position(0)))

        # Add notes to the score
        vnote0 = Note(DiatonicPitch(4, 'a'), Duration(1, 4))
        vnote1 = Note(DiatonicPitch(4, 'b'), Duration(1, 4))
        vnote2 = Note(DiatonicPitch(5, 'c'), Duration(1, 4))
        vnote3 = Note(DiatonicPitch(5, 'd'), Duration(1, 4))

        vnote4 = Note(DiatonicPitch(4, 'a'), Duration(1, 4))
        vnote5 = Note(DiatonicPitch(4, 'b'), Duration(1, 4))
        vnote6 = Note(DiatonicPitch(5, 'c'), Duration(1, 4))
        vnote7 = Note(DiatonicPitch(5, 'd'), Duration(1, 4))

        vnote8 = Note(DiatonicPitch(4, 'a'), Duration(1, 4))
        vnote9 = Note(DiatonicPitch(4, 'b'), Duration(1, 4))
        vnote10 = Note(DiatonicPitch(5, 'c'), Duration(1, 4))
        vnote11 = Note(DiatonicPitch(5, 'd'), Duration(1, 4))

        # Set up a violin voice with 6 8th notes
        vline_0 = Line([
            vnote0, vnote1, vnote2, vnote3, vnote4, vnote5, vnote6, vnote7,
            vnote8, vnote9, vnote10, vnote11
        ])
        violin_voice_0.pin(vline_0)

        # Set up a violin voice with 6 8th notes
        vline_1 = Line([vnote0, vnote1, vnote2, vnote3])
        violin_voice_0.pin(vline_1)

        smc = ScoreToMidiConverter(score)
        smc.create('score_tempo_change_file.mid')

        TestScoreToMidiConverter.read_midi_file('score_tempo_change_file.mid')
예제 #7
0
 def __init__(self,
              channel,
              abs_tick_time,
              velocity=Dynamics.DEFAULT_DYNAMICS_VELOCITY()):
     MidiMessage.__init__(self, 'control_change', channel, abs_tick_time)
     self.__velocity = velocity
예제 #8
0
    def test_score_convert(self):
        print('test_score_convert')

        c = InstrumentCatalog.instance()

        score = Score()

        score.time_signature_sequence.add(
            TimeSignatureEvent(TimeSignature(3, Duration(1, 4)), Position(0)))
        score.tempo_sequence.add(
            TempoEvent(Tempo(60, Duration(1, 4)), Position(0)))

        violin = c.get_instrument("violin")
        violin_instrument_voice = InstrumentVoice(violin, 2)
        violin_voice_0 = violin_instrument_voice.voice(0)
        violin_voice_1 = violin_instrument_voice.voice(1)
        assert violin_voice_0
        assert violin_voice_1
        score.add_instrument_voice(violin_instrument_voice)

        violin_voice_0.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.P), Position(0)))
        violin_voice_0.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.FFF), Position(1, 4)))
        violin_voice_1.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.P), Position(0)))
        violin_voice_1.dynamics_sequence.add(
            DynamicsEvent(Dynamics(Dynamics.FFF), Position(1, 4)))

        # Add notes to the score
        vnote0 = Note(DiatonicPitch(4, 'a'), Duration(1, 8))
        vnote1 = Note(DiatonicPitch(4, 'b'), Duration(1, 8))
        vnote2 = Note(DiatonicPitch(5, 'c'), Duration(1, 8))
        vnote3 = Note(DiatonicPitch(4, 'd'), Duration(1, 8))
        vnote4 = Note(DiatonicPitch(4, 'e'), Duration(1, 8))
        vnote5 = Note(DiatonicPitch(4, 'f'), Duration(1, 8))

        # Set up a violin voice with 6 8th notes
        vline_0 = Line([vnote0, vnote1, vnote2])
        violin_voice_0.pin(vline_0)

        # Set up a violin voice with 6 8th notes
        vline_1 = Line([vnote3, vnote4, vnote5])
        violin_voice_1.pin(vline_1, Offset(1, 16))

        # The test merges these two voices into one.

        svmc = ScoreToVstMidiConverter(score)
        meta_track, tracks = svmc.create({0: 4})
        assert meta_track is not None
        assert tracks is not None

        assert len(tracks) == 1
        assert len(tracks[0]) == 16

        for i in range(0, len(tracks[0])):
            print("{0}: {1}".format(i, tracks[0][i]))

        assert isinstance(tracks[0][0], NoteMessage)
        assert tracks[0][0].msg_type == 144
        assert tracks[0][0].note_value == 69  # A
        assert tracks[0][0].abs_frame_time == 0
        assert tracks[0][0].rel_frame_time == 0

        assert isinstance(tracks[0][3], NoteMessage)
        assert tracks[0][3].msg_type == 144
        assert tracks[0][3].note_value == 62  # D
        assert tracks[0][3].abs_frame_time == 10525
        assert tracks[0][3].rel_frame_time == 10525

        assert isinstance(tracks[0][5], NoteMessage)
        assert tracks[0][5].msg_type == 144
        assert tracks[0][5].note_value == 71  # B
        assert tracks[0][5].abs_frame_time == 21050
        assert tracks[0][5].rel_frame_time == 0

        assert isinstance(tracks[0][4], NoteMessage)
        assert tracks[0][4].msg_type == 128
        assert tracks[0][4].note_value == 69  # A
        assert tracks[0][4].abs_frame_time == 21050
        assert tracks[0][4].rel_frame_time == 10525

        assert isinstance(tracks[0][6], NoteMessage)
        assert tracks[0][6].msg_type == 128
        assert tracks[0][6].note_value == 62  # D
        assert tracks[0][6].abs_frame_time == 31575
        assert tracks[0][6].rel_frame_time == 10525

        assert isinstance(tracks[0][8], NoteMessage)
        assert tracks[0][8].msg_type == 128
        assert tracks[0][8].note_value == 71  # B
        assert tracks[0][8].abs_frame_time == 42100
        assert tracks[0][8].rel_frame_time == 10525
 def __init__(self,
              channel,
              abs_frame_time,
              velocity=Dynamics.DEFAULT_DYNAMICS_VELOCITY()):
     MidiMessage.__init__(self, 0xB0, channel, abs_frame_time)
     self.__velocity = velocity