2016-10-03 19:43:13 +02:00
|
|
|
#include "jacksendreturn.hxx"
|
|
|
|
#include "jack.hxx"
|
|
|
|
extern Jack* jack;
|
|
|
|
JackSendReturn::JackSendReturn(int trackid, AudioProcessor *prev, jack_client_t *client)
|
|
|
|
:m_trackid(trackid), m_previousProcessor(prev)
|
|
|
|
{
|
|
|
|
char name[50];
|
|
|
|
sprintf(name, "Send_track_%d\0",trackid);
|
|
|
|
m_sendport=jack_port_register(client,name,JACK_DEFAULT_AUDIO_TYPE,JackPortIsOutput,0);
|
|
|
|
sprintf(name, "Return_track_%d\0",trackid);
|
|
|
|
m_returnport=jack_port_register(client,name,JACK_DEFAULT_AUDIO_TYPE,JackPortIsInput,0);
|
2016-11-15 18:11:28 +01:00
|
|
|
m_active=false;
|
2016-10-03 19:43:13 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void JackSendReturn::process(unsigned int nframes, Buffers *buffers)
|
|
|
|
{
|
|
|
|
//Reset send buffer
|
|
|
|
memset(buffers->audio[Buffers::SEND_TRACK_0+m_trackid],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);
|
|
|
|
|
|
|
|
//Copy result of previous AudioProcessor to send port
|
2016-11-16 22:28:53 +01:00
|
|
|
// memcpy(send,buffers->audio[Buffers::SEND_TRACK_0+m_trackid],nframes*sizeof(float));
|
|
|
|
// memset(send,0,nframes*sizeof(float));
|
2016-11-15 18:11:28 +01:00
|
|
|
for(int i=0;i<nframes;i++)
|
2016-11-16 22:28:53 +01:00
|
|
|
send[i]=m_sendvol*buffers->audio[Buffers::SEND_TRACK_0+m_trackid][i];
|
2016-11-15 18:11:28 +01:00
|
|
|
|
|
|
|
|
|
|
|
if(m_active)
|
2016-10-03 19:43:13 +02:00
|
|
|
memcpy(buffers->audio[Buffers::RETURN_TRACK_0+m_trackid],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));
|
|
|
|
|
|
|
|
}
|
2016-11-15 18:11:28 +01:00
|
|
|
|
|
|
|
void JackSendReturn::activate(bool act)
|
|
|
|
{
|
|
|
|
m_active=act;
|
|
|
|
}
|
|
|
|
|
|
|
|
void JackSendReturn::sendVolume(float vol)
|
|
|
|
{
|
|
|
|
m_sendvol=vol;
|
|
|
|
}
|