diff --git a/src/buffers.hxx b/src/buffers.hxx index 315af58..c5196d3 100644 --- a/src/buffers.hxx +++ b/src/buffers.hxx @@ -71,14 +71,6 @@ class Buffers SEND_TRACK_5, SEND_TRACK_6, SEND_TRACK_7, - JACK_SEND_TRACK_0, - JACK_SEND_TRACK_1, - JACK_SEND_TRACK_2, - JACK_SEND_TRACK_3, - JACK_SEND_TRACK_4, - JACK_SEND_TRACK_5, - JACK_SEND_TRACK_6, - JACK_SEND_TRACK_7, RETURN_TRACK_0, RETURN_TRACK_1, RETURN_TRACK_2, @@ -87,14 +79,6 @@ class Buffers RETURN_TRACK_5, RETURN_TRACK_6, RETURN_TRACK_7, - JACK_RETURN_TRACK_0, - JACK_RETURN_TRACK_1, - JACK_RETURN_TRACK_2, - JACK_RETURN_TRACK_3, - JACK_RETURN_TRACK_4, - JACK_RETURN_TRACK_5, - JACK_RETURN_TRACK_6, - JACK_RETURN_TRACK_7, BUFFER_COUNT, diff --git a/src/diskreader.cxx b/src/diskreader.cxx index eb4c6b8..9dbb257 100644 --- a/src/diskreader.cxx +++ b/src/diskreader.cxx @@ -101,8 +101,15 @@ int DiskReader::loadPreferences() { LUPPP_NOTE("No default controllers active."); } - - + + //Enable per track send and resturn jack ports? + cJSON* jackSendReturns=cJSON_GetObjectItem(preferencesJson,"enablePerTrackSendReturns"); + if(jackSendReturns) + { + gui->enableJackSendReturns=jackSendReturns->valueint; + if(gui->enableJackSendReturns) + LUPPP_NOTE("Enabling per track send and return ports"); + } cJSON_Delete( preferencesJson ); diff --git a/src/diskwriter.cxx b/src/diskwriter.cxx index 7193596..e17cdd9 100644 --- a/src/diskwriter.cxx +++ b/src/diskwriter.cxx @@ -520,7 +520,8 @@ void DiskWriter::writeDefaultConfigToUserHome() cJSON* defCtrls = cJSON_CreateArray(); cJSON_AddItemToObject( prfs, "defaultControllers", defCtrls ); - + // per track send and return option + cJSON_AddNumberToObject( prfs, "enablePerTrackSendReturns", 0 ); // test output on console // cout << endl << cJSON_Print( prfs ) << endl << endl; diff --git a/src/gui.cxx b/src/gui.cxx index d7fec92..dd0d0a3 100644 --- a/src/gui.cxx +++ b/src/gui.cxx @@ -363,7 +363,7 @@ static int cb_nsm_save ( char **out_msg, void *userdata ) Gui::Gui(const char* argZero) : samplerate( 0 ), window(1110,650), - + enableJackSendReturns(false), diskReader( new DiskReader() ), diskWriter( new DiskWriter() ) { diff --git a/src/gui.hxx b/src/gui.hxx index a2a011b..30b36e2 100644 --- a/src/gui.hxx +++ b/src/gui.hxx @@ -85,6 +85,9 @@ class Gui int samplerate; + ////Enable per track send and resturn jack ports + bool enableJackSendReturns; + int getWindowWidth(){return window.w();} nsm_client_t* getNsm(){return nsm;} diff --git a/src/jack.cxx b/src/jack.cxx index 252e996..456c414 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -198,17 +198,26 @@ Jack::Jack( std::string name ) : { /** Setup the tracks: * The TrackOutput gets a pointer to the next AudioProcessor to call: - * In this case, the track's Looper instance. + * This is either a JackSendReturn (providing send and return ports) + * or the track's Looper instance. + * This is an option in luppp.prfs **/ loopers.push_back( new Looper(i) ); + if(gui->enableJackSendReturns) + { + tracksendreturns.push_back(new JackSendReturn(i,loopers.back(),client)); + trackOutputs.push_back( new TrackOutput(i, tracksendreturns.back() ) ); + } + else + trackOutputs.push_back( new TrackOutput(i, loopers.back() ) ); - tracksendreturns.push_back(new JackSendReturn(i,loopers.back(),client)); - trackOutputs.push_back( new TrackOutput(i, tracksendreturns.back() ) ); - buffers.audio[Buffers::TRACK_0 + i] = new float[ buffers.nframes ]; buffers.audio[Buffers::SEND_TRACK_0+i]=new float[buffers.nframes]; - buffers.audio[Buffers::RETURN_TRACK_0+i]=new float[buffers.nframes]; + if(gui->enableJackSendReturns) + buffers.audio[Buffers::RETURN_TRACK_0+i]=new float[buffers.nframes]; + else + buffers.audio[Buffers::RETURN_TRACK_0+i]=buffers.audio[Buffers::SEND_TRACK_0+i]; timeManager->registerObserver( loopers.back() ); } @@ -273,7 +282,13 @@ Jack::~Jack() { delete [] buffers.audio[Buffers::TRACK_0+i]; delete [] buffers.audio[Buffers::SEND_TRACK_0+i]; - delete [] buffers.audio[Buffers::RETURN_TRACK_0+i]; + if(gui->enableJackSendReturns) + { + delete [] buffers.audio[Buffers::RETURN_TRACK_0+i]; + delete tracksendreturns[i]; + } + delete loopers[i]; + delete trackOutputs[i]; } } @@ -557,7 +572,8 @@ void Jack::clearInternalBuffers(int nframes) { memset(buffers.audio[Buffers::TRACK_0 + i],0,sizeof(float)*nframes); memset(buffers.audio[Buffers::SEND_TRACK_0 + i],0,sizeof(float)*nframes); - memset(buffers.audio[Buffers::RETURN_TRACK_0 + i],0,sizeof(float)*nframes); + if(gui->enableJackSendReturns) + memset(buffers.audio[Buffers::RETURN_TRACK_0 + i],0,sizeof(float)*nframes); } }