From efa6d9054c82217cd606ff8216c9aa8c26efb37b Mon Sep 17 00:00:00 2001 From: Gerald Date: Thu, 17 Nov 2016 20:15:47 +0100 Subject: [PATCH] fixed some glitch issues, glitch on send_track_0 persists :( --- src/jack.cxx | 1 + src/jacksendreturn.cxx | 38 ++++++++++++++++++++++++++++---------- src/jacksendreturn.hxx | 1 + src/timemanager.cxx | 6 ++++-- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/jack.cxx b/src/jack.cxx index d3463c6..41318f3 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -393,6 +393,7 @@ int Jack::process (jack_nframes_t nframes) buffers.audio[Buffers::JACK_MASTER_OUT_R] = (float*)jack_port_get_buffer( masterOutputR , nframes ); buffers.audio[Buffers::JACK_SIDECHAIN_KEY] = (float*)jack_port_get_buffer(sidechainKeyOutput,nframes); buffers.audio[Buffers::JACK_SIDECHAIN_SIGNAL]=(float*)jack_port_get_buffer(sidechainSignalOutput,nframes); + // clear the buffers memset( buffers.audio[Buffers::JACK_MASTER_OUT_L] , 0, sizeof(float) * nframes ); diff --git a/src/jacksendreturn.cxx b/src/jacksendreturn.cxx index 4be5e93..d8feff8 100644 --- a/src/jacksendreturn.cxx +++ b/src/jacksendreturn.cxx @@ -1,5 +1,7 @@ #include "jacksendreturn.hxx" #include "jack.hxx" +#include +#include extern Jack* jack; JackSendReturn::JackSendReturn(int trackid, AudioProcessor *prev, jack_client_t *client) :m_trackid(trackid), m_previousProcessor(prev) @@ -10,30 +12,46 @@ JackSendReturn::JackSendReturn(int trackid, AudioProcessor *prev, jack_client_t sprintf(name, "Return_track_%d\0",trackid); m_returnport=jack_port_register(client,name,JACK_DEFAULT_AUDIO_TYPE,JackPortIsInput,0); m_active=false; + m_counter=0; } void JackSendReturn::process(unsigned int nframes, Buffers *buffers) { //Reset send buffer - memset(buffers->audio[Buffers::SEND_TRACK_0+m_trackid],0,nframes*sizeof(float)); + int offset=m_counter%(buffers->nframes); + float* sendtrack=&(buffers->audio[Buffers::SEND_TRACK_0+m_trackid][0]); + + + float* rettrack=&(buffers->audio[Buffers::RETURN_TRACK_0+m_trackid][0]); + + memset(sendtrack,0,nframes*sizeof(float)); //Process previous AudioProcessor m_previousProcessor->process(nframes,buffers); - float* send=(float*)jack_port_get_buffer(m_sendport,(jack_nframes_t)nframes); - float* ret=(float*)jack_port_get_buffer(m_returnport,(jack_nframes_t)nframes); + float* send=(float*)jack_port_get_buffer(m_sendport,(jack_nframes_t)(buffers->nframes)); + float* ret=(float*)jack_port_get_buffer(m_returnport,(jack_nframes_t)(buffers->nframes)); + if(offset) + { + send+=offset; + ret+=offset; + } - //Copy result of previous AudioProcessor to send port -// memcpy(send,buffers->audio[Buffers::SEND_TRACK_0+m_trackid],nframes*sizeof(float)); -// memset(send,0,nframes*sizeof(float)); for(int i=0;iaudio[Buffers::SEND_TRACK_0+m_trackid][i]; + send[i]=m_sendvol*sendtrack[i]; +// if(nframes!=buffers->nframes) +// { +// cout<nframes); if(m_active) - memcpy(buffers->audio[Buffers::RETURN_TRACK_0+m_trackid],ret,nframes*sizeof(float)); + memcpy(rettrack,ret,nframes*sizeof(float)); else - memcpy(buffers->audio[Buffers::RETURN_TRACK_0+m_trackid], - buffers->audio[Buffers::SEND_TRACK_0+m_trackid],nframes*sizeof(float)); + memcpy(rettrack, + sendtrack,nframes*sizeof(float)); + m_counter+=nframes; } diff --git a/src/jacksendreturn.hxx b/src/jacksendreturn.hxx index 262db94..813eacf 100644 --- a/src/jacksendreturn.hxx +++ b/src/jacksendreturn.hxx @@ -48,6 +48,7 @@ private: jack_port_t* m_returnport; int m_trackid; AudioProcessor* m_previousProcessor; + int m_counter; }; diff --git a/src/timemanager.cxx b/src/timemanager.cxx index db728bf..edb9786 100644 --- a/src/timemanager.cxx +++ b/src/timemanager.cxx @@ -223,7 +223,8 @@ void TimeManager::process(Buffers* buffers) } // process before beat: - jack->processFrames( before ); + if(before) + jack->processFrames( before ); // handle beat: // inform observers of new beat FIRST @@ -246,7 +247,8 @@ void TimeManager::process(Buffers* buffers) // process after // we need to clear internal buffers in order to write *after* frames to them jack->clearInternalBuffers(nframes); - jack->processFrames( after ); + if(after) + jack->processFrames( after ); // write new beat to UI (bar info currently not used) EventTimeBarBeat e( barCounter, beatCounter );