| @@ -509,6 +509,44 @@ load_settings ( void ) | |||
| return true; | |||
| } | |||
| static bool | |||
| create_engine ( void ) | |||
| { | |||
| if ( engine ) | |||
| { | |||
| delete engine->midi_input_port; | |||
| delete engine->midi_output_port; | |||
| delete engine; | |||
| } | |||
| DMESSAGE( "Creating JACK engine" ); | |||
| engine = new Engine(); | |||
| if ( ! engine->init( instance_name ) ) | |||
| { | |||
| WARNING( "Failed to create JACK client" ); | |||
| return false; | |||
| } | |||
| engine->midi_input_port = new JACK::Port( engine, "midi-in", JACK::Port::Input, JACK::Port::MIDI ); | |||
| engine->midi_output_port = new JACK::Port( engine, "midi-out", JACK::Port::Output, JACK::Port::MIDI ); | |||
| if ( !engine->midi_input_port->activate() ) | |||
| { | |||
| WARNING( "Failed to activate JACK port" ); | |||
| return false; | |||
| } | |||
| if ( !engine->midi_output_port->activate() ) | |||
| { | |||
| WARNING( "Failed to activate JACK port" ); | |||
| return false; | |||
| } | |||
| return true; | |||
| } | |||
| static int | |||
| command_open ( const char *name, const char *display_name, const char *client_id, char **out_msg, void *userdata ) | |||
| @@ -523,6 +561,11 @@ command_open ( const char *name, const char *display_name, const char *client_id | |||
| mkdir( name, 0777 ); | |||
| chdir( name ); | |||
| if ( ! create_engine() ) | |||
| { | |||
| return ERR_GENERAL; | |||
| } | |||
| load_settings(); | |||
| say_hello(); | |||
| @@ -627,31 +670,6 @@ main ( int argc, char **argv ) | |||
| } | |||
| } | |||
| engine = new Engine(); | |||
| DMESSAGE( "Creating JACK engine" ); | |||
| if ( ! engine->init( APP_NAME ) ) | |||
| { | |||
| WARNING( "Failed to create JACK client" ); | |||
| } | |||
| engine->midi_input_port = new JACK::Port( engine, "midi-in", JACK::Port::Input, JACK::Port::MIDI ); | |||
| engine->midi_output_port = new JACK::Port( engine, "midi-out", JACK::Port::Output, JACK::Port::MIDI ); | |||
| if ( !engine->midi_input_port->activate() ) | |||
| { | |||
| WARNING( "Failed to activate JACK port" ); | |||
| } | |||
| if ( !engine->midi_output_port->activate() ) | |||
| { | |||
| WARNING( "Failed to activate JACK port" ); | |||
| } | |||
| WARNING( "Can fit %i events in a period", ( engine->nframes() * 4 ) / 3 ); | |||
| osc = new OSC::Endpoint(); | |||
| osc->init( LO_UDP, NULL ); | |||
| @@ -670,6 +688,12 @@ main ( int argc, char **argv ) | |||
| midievent e; | |||
| while ( true ) | |||
| { | |||
| osc->wait(20); | |||
| check_nsm(); | |||
| if ( ! engine ) | |||
| continue; | |||
| while ( jack_ringbuffer_read( engine->input_ring_buf, (char *)&ev, sizeof( jack_midi_event_t ) ) ) | |||
| { | |||
| e.timestamp( ev.time ); | |||
| @@ -762,9 +786,6 @@ main ( int argc, char **argv ) | |||
| } | |||
| // e.pretty_print(); | |||
| } | |||
| osc->wait(20); | |||
| check_nsm(); | |||
| // usleep( 500 ); | |||
| } | |||
| } | |||