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')
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')
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
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))
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)
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')
def __init__(self, channel, abs_tick_time, velocity=Dynamics.DEFAULT_DYNAMICS_VELOCITY()): MidiMessage.__init__(self, 'control_change', channel, abs_tick_time) self.__velocity = velocity
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