Example #1
0
  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)
Example #2
0
 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()
Example #3
0
 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()
Example #4
0
    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