| @@ -509,6 +509,44 @@ load_settings ( void ) | |||||
| return true; | 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 | static int | ||||
| command_open ( const char *name, const char *display_name, const char *client_id, char **out_msg, void *userdata ) | 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 ); | mkdir( name, 0777 ); | ||||
| chdir( name ); | chdir( name ); | ||||
| if ( ! create_engine() ) | |||||
| { | |||||
| return ERR_GENERAL; | |||||
| } | |||||
| load_settings(); | load_settings(); | ||||
| say_hello(); | 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 = new OSC::Endpoint(); | ||||
| osc->init( LO_UDP, NULL ); | osc->init( LO_UDP, NULL ); | ||||
| @@ -670,6 +688,12 @@ main ( int argc, char **argv ) | |||||
| midievent e; | midievent e; | ||||
| while ( true ) | 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 ) ) ) | while ( jack_ringbuffer_read( engine->input_ring_buf, (char *)&ev, sizeof( jack_midi_event_t ) ) ) | ||||
| { | { | ||||
| e.timestamp( ev.time ); | e.timestamp( ev.time ); | ||||
| @@ -762,9 +786,6 @@ main ( int argc, char **argv ) | |||||
| } | } | ||||
| // e.pretty_print(); | // e.pretty_print(); | ||||
| } | } | ||||
| osc->wait(20); | |||||
| check_nsm(); | |||||
| // usleep( 500 ); | // usleep( 500 ); | ||||
| } | } | ||||
| } | } | ||||