def main(unused_argv): tf.logging.set_verbosity(FLAGS.log) if not _validate_flags(): return # Load generators. generators = [] for bundle_file in FLAGS.bundle_files.split(','): generators.append(_load_generator_from_bundle_file(bundle_file)) if generators[-1] is None: return # Initialize MidiHub. if FLAGS.input_port not in midi_hub.get_available_input_ports(): print "Opening '%s' as a virtual MIDI port for input." % FLAGS.input_port if FLAGS.output_port not in midi_hub.get_available_output_ports(): print "Opening '%s' as a virtual MIDI port for output." % FLAGS.output_port hub = midi_hub.MidiHub(FLAGS.input_port, FLAGS.output_port, midi_hub.TextureType.MONOPHONIC) start_call_signal = ( None if FLAGS.start_call_control_number is None else midi_hub.MidiSignal(control=FLAGS.start_call_control_number, value=0)) end_call_signal = ( None if FLAGS.end_call_control_number is None else midi_hub.MidiSignal(control=FLAGS.end_call_control_number, value=0)) interaction = midi_interaction.CallAndResponseMidiInteraction( hub, generators, FLAGS.qpm, generator_select_control_number=FLAGS.generator_select_control_number, phrase_bars=FLAGS.phrase_bars, start_call_signal=start_call_signal, end_call_signal=end_call_signal, temperature_control_number=FLAGS.temperature_control_number) _print_instructions() interaction.start() try: while True: time.sleep(1) except KeyboardInterrupt: interaction.stop() print 'Interaction stopped.'
def main(unused_argv): tf.logging.set_verbosity(FLAGS.log) if not _validate_flags(): return # Load generators. generators = [] for bundle_file in FLAGS.bundle_files.split(','): generators.append(_load_generator_from_bundle_file(bundle_file)) if generators[-1] is None: return # Initialize MidiHub. hub = midi_hub.MidiHub(FLAGS.input_ports.split(','), FLAGS.output_ports.split(','), midi_hub.TextureType.POLYPHONIC, passthrough=FLAGS.passthrough, playback_channel=FLAGS.playback_channel, playback_offset=FLAGS.playback_offset) control_map = { re.sub('_control_number$', '', f): FLAGS.__getattr__(f) for f in _CONTROL_FLAGS } if FLAGS.learn_controls: CCMapper(control_map, hub).update_map() if control_map['clock'] is None: # Set the tick duration to be a single bar, assuming a 4/4 time signature. clock_signal = None tick_duration = 4 * (60. / FLAGS.qpm) else: clock_signal = midi_hub.MidiSignal(control=control_map['clock'], value=127) tick_duration = None end_call_signal = (None if control_map['end_call'] is None else midi_hub.MidiSignal(control=control_map['end_call'], value=127)) panic_signal = (None if control_map['panic'] is None else midi_hub.MidiSignal(control=control_map['panic'], value=127)) mutate_signal = (None if control_map['mutate'] is None else midi_hub.MidiSignal(control=control_map['mutate'], value=127)) metronome_channel = (FLAGS.metronome_channel if FLAGS.enable_metronome else None) interaction = midi_interaction.CallAndResponseMidiInteraction( hub, generators, FLAGS.qpm, FLAGS.generator_select_control_number, clock_signal=clock_signal, tick_duration=tick_duration, end_call_signal=end_call_signal, panic_signal=panic_signal, mutate_signal=mutate_signal, allow_overlap=FLAGS.allow_overlap, metronome_channel=metronome_channel, min_listen_ticks_control_number=control_map['min_listen_ticks'], max_listen_ticks_control_number=control_map['max_listen_ticks'], response_ticks_control_number=control_map['response_ticks'], tempo_control_number=control_map['tempo'], temperature_control_number=control_map['temperature'], loop_control_number=control_map['loop'], state_control_number=control_map['state']) _print_instructions() interaction.start() try: while True: time.sleep(1) except KeyboardInterrupt: interaction.stop() print 'Interaction stopped.'
def main(unused_argv): tf.logging.set_verbosity(FLAGS.log) if not _validate_flags(): return # Load generators. generators = [] for bundle_file in FLAGS.bundle_files.split(','): generators.append(_load_generator_from_bundle_file(bundle_file)) if generators[-1] is None: return # Initialize MidiHub. if FLAGS.input_port not in midi_hub.get_available_input_ports(): print "Opening '%s' as a virtual MIDI port for input." % FLAGS.input_port if FLAGS.output_port not in midi_hub.get_available_output_ports(): print "Opening '%s' as a virtual MIDI port for output." % FLAGS.output_port hub = midi_hub.MidiHub(FLAGS.input_port, FLAGS.output_port, midi_hub.TextureType.MONOPHONIC, passthrough=FLAGS.passthrough, playback_channel=FLAGS.playback_channel, playback_offset=FLAGS.playback_offset) if FLAGS.clock_control_number is None: # Set the tick duration to be a single bar, assuming a 4/4 time signature. clock_signal = None tick_duration = 4 * (60. / FLAGS.qpm) else: clock_signal = midi_hub.MidiSignal(control=FLAGS.clock_control_number, value=127) tick_duration = None end_call_signal = (None if FLAGS.end_call_control_number is None else midi_hub.MidiSignal( control=FLAGS.end_call_control_number, value=127)) panic_signal = (None if FLAGS.panic_control_number is None else midi_hub.MidiSignal(control=FLAGS.panic_control_number, value=127)) mutate_signal = (None if FLAGS.mutate_control_number is None else midi_hub.MidiSignal(control=FLAGS.mutate_control_number, value=127)) interaction = midi_interaction.CallAndResponseMidiInteraction( hub, generators, FLAGS.qpm, FLAGS.generator_select_control_number, clock_signal=clock_signal, tick_duration=tick_duration, end_call_signal=end_call_signal, panic_signal=panic_signal, mutate_signal=mutate_signal, allow_overlap=FLAGS.allow_overlap, enable_metronome=FLAGS.enable_metronome, min_listen_ticks_control_number=FLAGS.min_listen_ticks_control_number, max_listen_ticks_control_number=FLAGS.max_listen_ticks_control_number, response_ticks_control_number=FLAGS.response_ticks_control_number, tempo_control_number=FLAGS.tempo_control_number, temperature_control_number=FLAGS.temperature_control_number, loop_control_number=FLAGS.loop_control_number, state_control_number=FLAGS.state_control_number) _print_instructions() interaction.start() try: while True: time.sleep(1) except KeyboardInterrupt: interaction.stop() print 'Interaction stopped.'
def main(unused_argv): if FLAGS.list_ports: print "Input ports: '%s'" % ("', '".join( midi_hub.get_available_input_ports())) print "Ouput ports: '%s'" % ("', '".join( midi_hub.get_available_output_ports())) return if FLAGS.bundle_file is None: print '--bundle_file must be specified.' return if (FLAGS.end_call_control_number, FLAGS.phrase_bars).count(None) != 1: print( 'Exactly one of --end_call_control_number or --phrase_bars should be ' 'specified.') return try: bundle = magenta.music.sequence_generator_bundle.read_bundle_file( FLAGS.bundle_file) except magenta.music.sequence_generator_bundle.GeneratorBundleParseException: print 'Failed to parse bundle file: %s' % FLAGS.bundle_file return generator_id = bundle.generator_details.id if generator_id not in _GENERATOR_FACTORY_MAP: print "Unrecognized SequenceGenerator ID '%s' in bundle file: %s" % ( generator_id, FLAGS.bundle_file) return generator = _GENERATOR_FACTORY_MAP[generator_id].create_generator( checkpoint=None, bundle=bundle) generator.initialize() print "Loaded '%s' generator bundle from file '%s'." % ( bundle.generator_details.id, FLAGS.bundle_file) if FLAGS.input_port not in midi_hub.get_available_input_ports(): print "Opening '%s' as a virtual MIDI port for input." % FLAGS.input_port if FLAGS.output_port not in midi_hub.get_available_output_ports(): print "Opening '%s' as a virtual MIDI port for output." % FLAGS.output_port hub = midi_hub.MidiHub(FLAGS.input_port, FLAGS.output_port, midi_hub.TextureType.MONOPHONIC) end_call_signal = (None if FLAGS.end_call_control_number is None else midi_hub.MidiSignal( control=FLAGS.end_call_control_number, value=0)) interaction = midi_interaction.CallAndResponseMidiInteraction( hub, FLAGS.qpm, generator, phrase_bars=FLAGS.phrase_bars, end_call_signal=end_call_signal) print '' print 'Instructions:' print 'Play when you hear the metronome ticking.' if FLAGS.phrase_bars is not None: print('After %d bars (4 beats), Magenta will play its response.' % FLAGS.phrase_bars) print( 'Once the response completes, the metronome will tick and you can ' 'play again.') else: print( 'When you want to end the call phrase, signal control number %d ' 'with value 0' % FLAGS.end_call_control_number) print( 'At the end of the current bar (4 beats), Magenta will play its ' 'response.') print( 'Once the response completes, the metronome will tick and you can ' 'play again.') print '' print 'To end the interaction, press CTRL-C.' interaction.start() try: while True: time.sleep(1) except KeyboardInterrupt: interaction.stop() print 'Interaction stopped.'