Made per track sends and returns an option

main
Gerald 2016-10-04 17:11:36 +02:00 committed by Harry van Haaren
parent 28cbe8e638
commit 8fd3e1e1bf
6 changed files with 38 additions and 27 deletions

View File

@ -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,

View File

@ -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 );

View File

@ -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;

View File

@ -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() )
{

View File

@ -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;}

View File

@ -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);
}
}