def testShiftSequenceTimes(self): sequence = copy.copy(self.note_sequence) testing_lib.add_track_to_sequence( sequence, 0, [(12, 100, 0.01, 10.0), (11, 55, 0.22, 0.50), (40, 45, 2.50, 3.50), (55, 120, 4.0, 4.01), (52, 99, 4.75, 5.0)]) testing_lib.add_chords_to_sequence( sequence, [('C', 1.5), ('G7', 3.0), ('F', 4.8)]) testing_lib.add_control_changes_to_sequence( sequence, 0, [(0.0, 64, 127), (2.0, 64, 0), (4.0, 64, 127), (5.0, 64, 0)]) testing_lib.add_control_changes_to_sequence( sequence, 1, [(2.0, 64, 127)]) testing_lib.add_pitch_bends_to_sequence( sequence, 1, 1, [(2.0, 100), (3.0, 0)]) expected_sequence = copy.copy(self.note_sequence) testing_lib.add_track_to_sequence( expected_sequence, 0, [(12, 100, 1.01, 11.0), (11, 55, 1.22, 1.50), (40, 45, 3.50, 4.50), (55, 120, 5.0, 5.01), (52, 99, 5.75, 6.0)]) testing_lib.add_chords_to_sequence( expected_sequence, [('C', 2.5), ('G7', 4.0), ('F', 5.8)]) testing_lib.add_control_changes_to_sequence( expected_sequence, 0, [(1.0, 64, 127), (3.0, 64, 0), (5.0, 64, 127), (6.0, 64, 0)]) testing_lib.add_control_changes_to_sequence( expected_sequence, 1, [(3.0, 64, 127)]) testing_lib.add_pitch_bends_to_sequence( expected_sequence, 1, 1, [(3.0, 100), (4.0, 0)]) expected_sequence.time_signatures[0].time = 1 expected_sequence.tempos[0].time = 1 shifted_sequence = sequences_lib.shift_sequence_times(sequence, 1.0) self.assertProtoEquals(expected_sequence, shifted_sequence)
def jitter_label(sequence_tensor): sequence = music_pb2.NoteSequence.FromString(sequence_tensor) sequence = sequences_lib.shift_sequence_times(sequence, jitter_amount_sec) return sequence.SerializeToString()
def jitter_label(sequence_tensor): sequence = music_pb2.NoteSequence.FromString(sequence_tensor) sequence = sequences_lib.shift_sequence_times(sequence, jitter_amount_sec) return sequence.SerializeToString()
def run(self): # TODO sequence = self._primer_sequence player = self._midi_hub.start_playback(sequence, allow_updates=True) # TODO seconds_per_step = 60.0 / self._qpm / self._sequence_generator.steps_per_quarter num_steps_per_bar = self._sequence_generator.steps_per_quarter * 2 seconds_per_bar = num_steps_per_bar * seconds_per_step seconds_per_loop = self._bar_per_loop * seconds_per_bar # TODO MOVE plotter = Plotter(max_bar=16, live_reload=True) pretty_midi = pm.PrettyMIDI() pretty_midi.instruments.append(pm.Instrument(0)) pretty_midi.instruments[0].append(pm.Note(100, 36, 0, 1)) # TODO wall_start_time = time.time() # TODO for bar_count in range(0, sys.maxsize): # TODO cursor_time = bar_count * seconds_per_loop # TODO sequence_adjusted = music_pb2.NoteSequence() sequence_adjusted.CopyFrom(sequence) sequence_adjusted = adjust_sequence_times(sequence_adjusted, wall_start_time) player.update_sequence(sequence_adjusted, start_time=cursor_time) # TODO MOVE TO UTILS pretty_sequence = mm.midi_io.note_sequence_to_pretty_midi(sequence) for instrument in pretty_sequence.instruments: for note in instrument.notes: pretty_midi.instruments[0].notes.append(note) plotter.show(pretty_midi, self._output_file) # TODO loop_start_time = cursor_time loop_end_time = loop_start_time + seconds_per_loop generation_start_time = loop_end_time generation_end_time = generation_start_time + seconds_per_loop generator_options = generator_pb2.GeneratorOptions() generator_options.args['temperature'].float_value = 1 generator_options.generate_sections.add( start_time=generation_start_time, end_time=generation_end_time) # TODO if bar_count % self._num_loops == 0: print("GENERATING") sequence = self._sequence_generator.generate( sequence, generator_options) sequence = sequences_lib.trim_note_sequence( sequence, generation_start_time, generation_end_time) else: print("LOOPING") sequence = sequences_lib.trim_note_sequence( sequence, loop_start_time, loop_end_time) sequence = sequences_lib.shift_sequence_times( sequence, seconds_per_loop) # TODO 1 wake up per bar sleep_time = seconds_per_loop - ( (time.time() - wall_start_time) % seconds_per_loop) time.sleep(sleep_time)
def loop(sequence: NoteSequence, loop_start_time: float, loop_end_time: float, seconds_per_loop: float): sequence = ss.trim_note_sequence(sequence, loop_start_time, loop_end_time) sequence = ss.shift_sequence_times(sequence, seconds_per_loop) return sequence