def ns_performance(temperature, output_path): # Constants. t1 = time.time() BUNDLE_DIR = './bundles' MODEL_NAME = 'performance_with_dynamics' BUNDLE_NAME = MODEL_NAME + '.mag' BUNDLE_ABS_PATH = '/Users/bregy/PycharmProjects/neurospace/bundles/performance_with_dynamics.mag' #mm.notebook_utils.download_bundle(BUNDLE_NAME, BUNDLE_DIR) bundle = mm.sequence_generator_bundle.read_bundle_file(BUNDLE_ABS_PATH) #bundle = mm.sequence_generator_bundle.read_bundle_file(os.path.join(BUNDLE_DIR, BUNDLE_NAME)) generator_map = performance_sequence_generator.get_generator_map() generator = generator_map[MODEL_NAME](checkpoint=None, bundle=bundle) generator.initialize() generator_options = generator_pb2.GeneratorOptions() generator_options.args['temperature'].float_value = temperature generate_section = generator_options.generate_sections.add(start_time=0, end_time=120) sequence = generator.generate(music_pb2.NoteSequence(), generator_options) # Play this masterpiece. t2 = time.time() midi = mm.sequence_proto_to_pretty_midi(sequence) a = midi.fluidsynth() write(output_path, 44100, a)
def performance_rnn(record_file): start_time = 0.0 timestep = 0.5 end_time = 0.5 melody_sequence = music_pb2.NoteSequence() with open(record_file, 'r') as record: for line in record: melody_sequence.notes.add(pitch=pitch_dict[line.strip()], \ start_time=start_time, end_time=end_time, velocity=80) start_time += timestep end_time += timestep melody_sequence.total_time = end_time melody_sequence.tempos.add(qpm=60) input_sequence = melody_sequence num_steps = 8192 # change this for shorter or longer sequences temperature = 1.0 # the higher the temperature the more random the sequence. bundle = mm.sequence_generator_bundle.read_bundle_file( '/home/ubuntu/team15/bundle/performance_with_dynamics.mag') generator_map = performance_sequence_generator.get_generator_map() generator = generator_map['performance_with_dynamics'](checkpoint=None, bundle=bundle) generator.initialize() # Derive the total number of seconds to generate. seconds_per_step = 1.0 / generator.steps_per_second generate_end_time = num_steps * seconds_per_step # Specify start/stop time for generation based on starting generation at the # end of the priming sequence and continuing until the sequence is num_steps # long. generator_options = generator_pb2.GeneratorOptions() # Set the start time to begin when the last note ends. generate_section = generator_options.generate_sections.add( start_time=input_sequence.total_time, end_time=generate_end_time) generator_options.args[ 'temperature'].float_value = 1.0 # Higher is more random; 1.0 is default. sequence = generator.generate(input_sequence, generator_options) new_file_name = record_file.split('/')[-1].split( '.')[0] + '_performance_rnn.mid' mm.sequence_proto_to_midi_file( sequence, '/home/ubuntu/team15/midi/performance_rnn/' + new_file_name) return new_file_name
def generate_music(): global PLAYING_MUSIC1 global PLAYING_MUSIC2 mm.musicxml_parser.DEFAULT_MIDI_PROGRAM = 3 mm.notebook_utils.download_bundle(BUNDLE_NAME, BUNDLE_DIR) bundle = mm.sequence_generator_bundle.read_bundle_file( os.path.join(BUNDLE_DIR, BUNDLE_NAME)) generator_map = performance_sequence_generator.get_generator_map() generator = generator_map[MODEL_NAME](checkpoint=None, bundle=bundle) generator.initialize() generator_options = generator_pb2.GeneratorOptions() generator_options.args[ 'temperature'].float_value = settings.TEMP # Higher is more random; 1.0 is default. generate_section = generator_options.generate_sections.add( start_time=0, end_time=DURATION) sequence = generator.generate(music_pb2.NoteSequence(), generator_options) # Play and view this masterpiece. # mm.plot_sequence(sequence) # audio_object = modified_play_sequence(sequence, mm.midi_synth.fluidsynth, sample_rate=DEFAULT_SAMPLE_RATE * SAMPLE_MULT) # mm.play_sequence(sequence, mm.midi_synth.fluidsynth, sample_rate=DEFAULT_SAMPLE_RATE * SAMPLE_MULT) sample_rate = DEFAULT_SAMPLE_RATE * SAMPLE_MULT array_of_floats = mm.midi_synth.fluidsynth(sequence, sample_rate=sample_rate, sf2_path=SF2_PATH) write('/Users/wangan/Documents/calhacks2017/temp_wav/tempBass1.wav', 44100, array_of_floats) # audio_killed = int(sample_rate * 1) # array_of_floats = array_of_floats[audio_killed:] # IPython.display.Audio(array_of_floats, rate=sample_rate, autoplay=True) i = 1 while (True): print("Size of NoteSequence: ", sys.getsizeof(sequence)) performance_sequence_generator.DEFAULT_NOTE_DENSITY = settings.NOTE_DENSITY / REDUCTION performance_sequence_generator.DEFAULT_PITCH_HISTOGRAM = settings.PITCH while PLAYING_MUSIC1: time.sleep(0.00001) array_of_floats = [] generator_map2 = performance_sequence_generator.get_generator_map() generator2 = generator_map2[MODEL_NAME](checkpoint=None, bundle=bundle) generator2.initialize() generator_options2 = generator_pb2.GeneratorOptions() generator_options2.args[ 'temperature'].float_value = settings.TEMP # Higher is more random; 1.0 is default. generate_section = generator_options2.generate_sections.add( start_time=(i * DURATION), end_time=(i + 1) * DURATION) sequenceNew = generator2.generate(sequence, generator_options2) # Play and view this masterpiece. mm.plot_sequence(sequenceNew) # audio_object = modified_play_sequence(sequence, mm.midi_synth.fluidsynth, sample_rate=DEFAULT_SAMPLE_RATE * SAMPLE_MULT) # mm.play_sequence(sequence, mm.midi_synth.fluidsynth, sample_rate=DEFAULT_SAMPLE_RATE * SAMPLE_MULT) sample_rate = DEFAULT_SAMPLE_RATE * SAMPLE_MULT array_of_floats = mm.midi_synth.fluidsynth(sequenceNew, sample_rate=sample_rate, sf2_path=SF2_PATH) sequence = sequenceNew sequence.notes._values = sequence.notes._values[ int(FRACTION * len(sequence.notes)):len(sequence.notes)] # audio_killed = int(sample_rate * 1.5) old_array_size = int(sample_rate * DURATION * i) array_of_floats = array_of_floats[old_array_size:] # array_of_floats = array_of_floats[:-audio_killed] write('/Users/wangan/Documents/calhacks2017/temp_wav/tempBass1.wav', 44100, array_of_floats) del generator_map2 del generator2 del generator_options2 del generate_section del sequenceNew i += 1 performance_sequence_generator.DEFAULT_NOTE_DENSITY = settings.NOTE_DENSITY / REDUCTION performance_sequence_generator.DEFAULT_PITCH_HISTOGRAM = settings.PITCH while PLAYING_MUSIC2: time.sleep(0.00001) array_of_floats2 = [] generator_map2 = performance_sequence_generator.get_generator_map() generator2 = generator_map2[MODEL_NAME](checkpoint=None, bundle=bundle) generator2.initialize() generator_options2 = generator_pb2.GeneratorOptions() generator_options2.args[ 'temperature'].float_value = settings.TEMP # Higher is more random; 1.0 is default. generate_section = generator_options2.generate_sections.add( start_time=(i * DURATION), end_time=(i + 1) * DURATION) sequenceNew = generator2.generate(sequence, generator_options2) sample_rate = DEFAULT_SAMPLE_RATE * SAMPLE_MULT array_of_floats2 = mm.midi_synth.fluidsynth(sequenceNew, sample_rate=sample_rate, sf2_path=SF2_PATH) sequence = sequenceNew sequence.notes._values = sequence.notes._values[ int(FRACTION * len(sequence.notes)):len(sequence.notes)] # audio_killed = int(sample_rate * 1.5) old_array_size = int(sample_rate * DURATION * i) array_of_floats2 = array_of_floats2[old_array_size:] # array_of_floats = array_of_floats[:-audio_killed] write('/Users/wangan/Documents/calhacks2017/temp_wav/tempBass2.wav', 44100, array_of_floats2) del generator_map2 del generator2 del generator_options2 del generate_section del sequenceNew i += 1
'end_call_control_number', 'panic_control_number', 'mutate_control_number', 'min_listen_ticks_control_number', 'max_listen_ticks_control_number', 'response_ticks_control_number', 'temperature_control_number', 'tempo_control_number', 'loop_control_number', 'generator_select_control_number', 'state_control_number'] # A map from a string generator name to its class. _GENERATOR_MAP = melody_rnn_sequence_generator.get_generator_map() _GENERATOR_MAP.update(drums_rnn_sequence_generator.get_generator_map()) _GENERATOR_MAP.update(performance_sequence_generator.get_generator_map()) _GENERATOR_MAP.update(pianoroll_rnn_nade_sequence_generator.get_generator_map()) _GENERATOR_MAP.update(polyphony_sequence_generator.get_generator_map()) class CCMapper(object): """A class for mapping control change numbers to specific controls. Args: cc_map: A dictionary containing mappings from signal names to control change numbers (or None). This dictionary will be updated by the class. midi_hub_: An initialized MidiHub to receive inputs from. """ def __init__(self, cc_map, midi_hub_): self._cc_map = cc_map
'end_call_control_number', 'panic_control_number', 'mutate_control_number', 'min_listen_ticks_control_number', 'max_listen_ticks_control_number', 'response_ticks_control_number', 'temperature_control_number', 'tempo_control_number', 'loop_control_number', 'generator_select_control_number', 'state_control_number'] # A map from a string generator name to its class. _GENERATOR_MAP = melody_rnn_sequence_generator.get_generator_map() _GENERATOR_MAP.update(drums_rnn_sequence_generator.get_generator_map()) _GENERATOR_MAP.update(performance_sequence_generator.get_generator_map()) _GENERATOR_MAP.update(pianoroll_rnn_nade_sequence_generator.get_generator_map()) _GENERATOR_MAP.update(polyphony_sequence_generator.get_generator_map()) class CCMapper(object): """A class for mapping control change numbers to specific controls. Args: cc_map: A dictionary containing mappings from signal names to control change numbers (or None). This dictionary will be updated by the class. midi_hub_: An initialized MidiHub to receive inputs from. """ def __init__(self, cc_map, midi_hub_): self._cc_map = cc_map
import magenta.music as mm # Necessary until pyfluidsynth is updated (>1.2.5). import warnings warnings.filterwarnings("ignore", category=DeprecationWarning) # Constants. BUNDLE_DIR = '/tmp/' MODEL_NAME = 'performance_with_dynamics' BUNDLE_NAME = MODEL_NAME + '.mag' mm.notebook_utils.download_bundle(BUNDLE_NAME, BUNDLE_DIR) """# Generate a sequence""" bundle = mm.sequence_generator_bundle.read_bundle_file(os.path.join(BUNDLE_DIR, BUNDLE_NAME)) generator_map = performance_sequence_generator.get_generator_map() generator = generator_map[MODEL_NAME](checkpoint=None, bundle=bundle) generator.initialize() generator_options = generator_pb2.GeneratorOptions() generator_options.args['temperature'].float_value = 1.6 generate_section = generator_options.generate_sections.add(start_time=0, end_time=60) sequence = generator.generate(music_pb2.NoteSequence(), generator_options) # Play and view this masterpiece. mm.plot_sequence(sequence) mm.play_sequence(sequence, mm.midi_synth.fluidsynth, sf2_path='/tmp/Yamaha-C5-Salamander-JNv5.1.sf2')