def main(_): if os.path.isfile(FLAGS.control) or os.path.isdir(FLAGS.control): if os.path.isdir(FLAGS.control): files = list(utils.find_files_by_extensions(FLAGS.control)) assert len(files) > 0, 'no file in "{control}"'.format( control=FLAGS.control) control = np.random.choice(files) events, compressed_controls = torch.load(FLAGS.control) controls = ControlSeq.recover_compressed_array(compressed_controls) max_len = FLAGS.max_length if FLAGS.max_length == 0: max_len = controls.shape[0] control = np.expand_dims(controls, 1).repeat(1, 1) control = 'control sequence from "{control}"'.format(control=control) assert max_len > 0, 'either max length or control sequence length should be given' #FLAGS.start_string = FLAGS.start_string.decode('utf-8') if os.path.isdir(FLAGS.checkpoint_path): FLAGS.checkpoint_path =\ tf.train.latest_checkpoint(FLAGS.checkpoint_path) model = CharRNN(EventSeq.dim(), ControlSeq.dim(), sampling=True, lstm_size=FLAGS.lstm_size, num_layers=FLAGS.num_layers, use_embedding=FLAGS.use_embedding, embedding_size=FLAGS.embedding_size) model.sess.run(tf.global_variables_initializer()) model.load(FLAGS.checkpoint_path) outputs = model.sample(1000, prime=events[0:100], vocab_size=EventSeq.dim()) outputs = outputs.reshape([-1, 1]) print(outputs) name = 'output-{i:03d}.mid'.format(i=0) path = os.path.join("output/", name) n_notes = utils.event_indeces_to_midi_file(outputs[:, 0], path) print('===> {path} ({n_notes} notes)'.format(path=path, n_notes=n_notes))
with torch.no_grad(): if use_beam_search: outputs = model.beam_search(init, max_len, beam_size, controls=controls, temperature=temperature, verbose=True) else: outputs = model.generate(init, max_len, controls=controls, greedy=greedy_ratio, temperature=temperature, verbose=True) outputs = outputs.cpu().numpy().T # [batch, steps] #======================================================================== # Saving #======================================================================== os.makedirs(output_dir, exist_ok=True) for i, output in enumerate(outputs): name = f'output-{i:03d}.mid' path = os.path.join(output_dir, name) n_notes = utils.event_indeces_to_midi_file(output, path) print(f'===> {path} ({n_notes} notes)')