diff --git a/common/JackCallbackNetIOAdapter.cpp b/common/JackCallbackNetIOAdapter.cpp index 5c08fb8c..69c9b2a3 100644 --- a/common/JackCallbackNetIOAdapter.cpp +++ b/common/JackCallbackNetIOAdapter.cpp @@ -35,26 +35,12 @@ int JackCallbackNetIOAdapter::Process(jack_nframes_t frames, void* arg) float* buffer; int i; - /* - adapter->fLastCallbackTime = adapter->fCurCallbackTime; - adapter->fCurCallbackTime = jack_get_time(); - */ - if (!adapter->fIOAdapter->IsRunning()) return 0; - // adapter->fIOAdapter->SetCallbackDeltaTime(adapter->fCurCallbackTime - adapter->fLastCallbackTime); - - - // DLL + // DLL adapter->fIOAdapter->SetCallbackTime(jack_get_time()); - - //jack_info("ReadSpace = %ld", adapter->fCaptureRingBuffer[0].ReadSpace()); - //jack_info("WriteSpace = %ld", adapter->fPlaybackRingBuffer[0].WriteSpace()); - - printf("ReadSpace = %ld\n", adapter->fCaptureRingBuffer[0]->ReadSpace()); - printf("WriteSpace = %ld\n", adapter->fPlaybackRingBuffer[0]->WriteSpace()); - + for (i = 0; i < adapter->fCaptureChannels; i++) { buffer = static_cast(jack_port_get_buffer(adapter->fCapturePortList[i], frames)); adapter->fCaptureRingBuffer[i]->Read(buffer, frames); diff --git a/common/JackFilters.h b/common/JackFilters.h index 3a542354..51b9d0c5 100644 --- a/common/JackFilters.h +++ b/common/JackFilters.h @@ -51,7 +51,6 @@ namespace Jack jack_time_t mean = 0; for (int i = 0; i < MAX_SIZE; i++) mean += fTable[i]; - return mean / MAX_SIZE; } }; diff --git a/common/JackIOAdapter.h b/common/JackIOAdapter.h index 34d2aae2..98fb68af 100644 --- a/common/JackIOAdapter.h +++ b/common/JackIOAdapter.h @@ -42,10 +42,6 @@ namespace Jack int fBufferSize; float fSampleRate; - jack_time_t fLastCallbackTime; - jack_time_t fCurCallbackTime; - jack_time_t fDeltaTime; - JackFilter fProducerFilter; JackFilter fConsumerFilter; @@ -65,9 +61,6 @@ namespace Jack fPlaybackChannels(output), fBufferSize(buffer_size), fSampleRate(sample_rate), - fLastCallbackTime(0), - fCurCallbackTime(0), - fDeltaTime(0), fProducerDLL(buffer_size, sample_rate), fConsumerDLL(buffer_size, sample_rate), fRunning(false) @@ -91,17 +84,8 @@ namespace Jack fBufferSize = buffer_size; } - virtual void SetCallbackDeltaTime(jack_time_t delta_usec) - { - jack_log("SetCallbackDeltaTime %ld", delta_usec); - //printf("SetCallbackDeltaTime %ld\n", delta_usec); - fDeltaTime = delta_usec; - } - virtual void SetCallbackTime(jack_time_t callback_usec) { - jack_log("SetCallbackTime %ld", callback_usec); - //printf("SetCallbackDeltaTime %ld\n", delta_usec); fConsumerDLL.IncFrame(callback_usec); } diff --git a/common/JackLibSampleRateResampler.cpp b/common/JackLibSampleRateResampler.cpp index 614bbe93..f95c844e 100644 --- a/common/JackLibSampleRateResampler.cpp +++ b/common/JackLibSampleRateResampler.cpp @@ -25,7 +25,6 @@ namespace Jack JackLibSampleRateResampler::JackLibSampleRateResampler() :JackResampler(),fRatio(1) { - jack_log("JackLibSampleRateResampler::JackLibSampleRateResampler"); int error; fResampler = src_new(SRC_LINEAR, 1, &error); if (error != 0) @@ -47,7 +46,7 @@ int JackLibSampleRateResampler::ReadResample(float* buffer, unsigned int frames) jack_ringbuffer_get_read_vector(fRingBuffer, ring_buffer_data); unsigned int available_frames = (ring_buffer_data[0].len + ring_buffer_data[1].len) / sizeof(float); - jack_log("OUPUT available = %ld", available_frames); + jack_log("Output available = %ld", available_frames); for (int j = 0; j < 2; j++) { @@ -68,16 +67,16 @@ int JackLibSampleRateResampler::ReadResample(float* buffer, unsigned int frames) written_frames += src_data.output_frames_gen; if ((src_data.input_frames_used == 0 || src_data.output_frames_gen == 0) && j == 0) { - jack_error("OUTPUT : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); + jack_error("Output : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); } - jack_log("OUTPUT : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); + jack_log("Output : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); jack_ringbuffer_read_advance(fRingBuffer, src_data.input_frames_used * sizeof(float)); } } if (written_frames < frames) { - jack_error("OUPUT available = %ld", available_frames); + jack_error("Output available = %ld", available_frames); jack_error("JackLibSampleRateResampler::ReadResample error written_frames = %ld", written_frames); } @@ -94,7 +93,7 @@ int JackLibSampleRateResampler::WriteResample(float* buffer, unsigned int frames jack_ringbuffer_get_write_vector(fRingBuffer, ring_buffer_data); unsigned int available_frames = (ring_buffer_data[0].len + ring_buffer_data[1].len) / sizeof(float); - jack_log("INPUT available = %ld", available_frames); + jack_log("Input available = %ld", available_frames); for (int j = 0; j < 2; j++) { @@ -115,16 +114,16 @@ int JackLibSampleRateResampler::WriteResample(float* buffer, unsigned int frames read_frames += src_data.input_frames_used; if ((src_data.input_frames_used == 0 || src_data.output_frames_gen == 0) && j == 0) { - jack_error("INPUT : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); + jack_error("Input : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); } - jack_log("INPUT : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); + jack_log("Input : j = %d input_frames_used = %ld output_frames_gen = %ld", j, src_data.input_frames_used, src_data.output_frames_gen); jack_ringbuffer_write_advance(fRingBuffer, src_data.output_frames_gen * sizeof(float)); } } if (read_frames < frames) { - jack_error("INPUT available = %ld", available_frames); + jack_error("Input available = %ld", available_frames); jack_error("JackLibSampleRateResampler::ReadResample error read_frames = %ld", read_frames); } diff --git a/common/JackNetIOAdapter.cpp b/common/JackNetIOAdapter.cpp index e440d3eb..185844e3 100644 --- a/common/JackNetIOAdapter.cpp +++ b/common/JackNetIOAdapter.cpp @@ -115,16 +115,16 @@ extern "C" return 1; } else { jack_log("Loading NetAudio Adapter"); - /* + adapter = new Jack::JackCallbackNetIOAdapter(jack_client, new Jack::JackPortAudioIOAdapter(2, 2, jack_get_buffer_size(jack_client), jack_get_sample_rate(jack_client)), 2, 2); - */ - + + /* #ifdef __APPLE__ adapter = new Jack::JackCallbackNetIOAdapter(jack_client, new Jack::JackCoreAudioIOAdapter(2, 2, jack_get_buffer_size(jack_client), jack_get_sample_rate(jack_client)), 2, 2); #endif - + */ assert(adapter); diff --git a/common/JackResampler.cpp b/common/JackResampler.cpp index ab7c075d..aaef95f3 100644 --- a/common/JackResampler.cpp +++ b/common/JackResampler.cpp @@ -24,7 +24,6 @@ namespace Jack JackResampler::JackResampler():fNum(1),fDenom(1) { - jack_log("JackResampler::JackResampler"); fRingBuffer = jack_ringbuffer_create(sizeof(float) * DEFAULT_RB_SIZE); jack_ringbuffer_read_advance(fRingBuffer, (sizeof(float) * DEFAULT_RB_SIZE) / 2); } @@ -48,11 +47,10 @@ unsigned int JackResampler::WriteSpace() int JackResampler::Read(float* buffer, unsigned int frames) { size_t len = jack_ringbuffer_read_space(fRingBuffer); - jack_log("JackResampler::Read INPUT available = %ld", len / sizeof(float)); + jack_log("JackResampler::Read input available = %ld", len / sizeof(float)); if (len < frames * sizeof(float)) { jack_error("JackResampler::Read : producer too slow, missing frames = %d", frames); - //jack_ringbuffer_read(fRingBuffer, buffer, len); return 0; } else { jack_ringbuffer_read(fRingBuffer, (char*)buffer, frames * sizeof(float)); @@ -63,11 +61,10 @@ int JackResampler::Read(float* buffer, unsigned int frames) int JackResampler::Write(float* buffer, unsigned int frames) { size_t len = jack_ringbuffer_write_space(fRingBuffer); - jack_log("JackResampler::Write OUTPUT available = %ld", len / sizeof(float)); + jack_log("JackResampler::Write output available = %ld", len / sizeof(float)); if (len < frames * sizeof(float)) { jack_error("JackResampler::Write : consumer too slow, skip frames = %d", frames); - //jack_ringbuffer_write(fRingBuffer, buffer, len); return 0; } else { jack_ringbuffer_write(fRingBuffer, (char*)buffer, frames * sizeof(float)); diff --git a/common/wscript b/common/wscript index a5857b55..62f0d17a 100644 --- a/common/wscript +++ b/common/wscript @@ -194,8 +194,8 @@ def build(bld): create_jack_process_obj(bld, 'netmanager', 'JackNetManager.cpp', serverlib) - process = create_jack_process_obj(bld, 'netioadapter', 'JackResampler.cpp JackLibSampleRateResampler.cpp JackIOAdapter.cpp JackNetIOAdapter.cpp JackCallbackNetIOAdapter.cpp ../macosx/JackCoreAudioIOAdapter.cpp', serverlib) - #process = create_jack_process_obj(bld, 'netioadapter', 'JackResampler.cpp JackLibSampleRateResampler.cpp JackIOAdapter.cpp JackNetIOAdapter.cpp JackCallbackNetIOAdapter.cpp ../windows/JackPortAudioIOAdapter.cpp', serverlib) + #process = create_jack_process_obj(bld, 'netioadapter', 'JackResampler.cpp JackLibSampleRateResampler.cpp JackIOAdapter.cpp JackNetIOAdapter.cpp JackCallbackNetIOAdapter.cpp ../macosx/JackCoreAudioIOAdapter.cpp', serverlib) + process = create_jack_process_obj(bld, 'netioadapter', 'JackResampler.cpp JackLibSampleRateResampler.cpp JackIOAdapter.cpp JackNetIOAdapter.cpp JackCallbackNetIOAdapter.cpp ../windows/JackPortAudioIOAdapter.cpp', serverlib) process.env.append_value("LINKFLAGS", "-lsamplerate") if bld.env()['IS_MACOSX']: diff --git a/macosx/JackCoreAudioIOAdapter.cpp b/macosx/JackCoreAudioIOAdapter.cpp index cd0240d0..f7429da5 100644 --- a/macosx/JackCoreAudioIOAdapter.cpp +++ b/macosx/JackCoreAudioIOAdapter.cpp @@ -121,21 +121,7 @@ OSStatus JackCoreAudioIOAdapter::Render(void *inRefCon, AudioBufferList *ioData) { JackCoreAudioIOAdapter* adapter = static_cast(inRefCon); - - jack_log("JackCoreAudioIOAdapter::Render inNumberFrames %ld", inNumberFrames); - - AudioUnitRender(adapter->fAUHAL, ioActionFlags, inTimeStamp, 1, inNumberFrames, adapter->fInputData); - - /* - adapter->fLastCallbackTime = adapter->fCurCallbackTime; - adapter->fCurCallbackTime = jack_get_time(); - - adapter->fConsumerFilter.AddValue(adapter->fCurCallbackTime - adapter->fLastCallbackTime); - adapter->fProducerFilter.AddValue(adapter->fDeltaTime); - */ - - //jack_log("JackCoreAudioIOAdapter::Render delta %ld", adapter->fCurCallbackTime - adapter->fLastCallbackTime); - //printf("JackCoreAudioIOAdapter::Render delta %ld\n", adapter->fCurCallbackTime - adapter->fLastCallbackTime); + AudioUnitRender(adapter->fAUHAL, ioActionFlags, inTimeStamp, 1, inNumberFrames, adapter->fInputData); if (!adapter->fRunning) { adapter->fRunning = true; @@ -144,31 +130,15 @@ OSStatus JackCoreAudioIOAdapter::Render(void *inRefCon, adapter->fConsumerDLL.Init(time); } - // DLL based - //adapter->fConsumerDLL.IncFrame(adapter->fConsumerTime); + // DLL jack_time_t time = jack_get_time(); adapter->fProducerDLL.IncFrame(time); - - /* - jack_time_t time1 = adapter->fConsumerDLL.CurFrame2Time(); - jack_time_t time2 = adapter->fProducerDLL.CurFrame2Time(); - */ - jack_nframes_t time1 = adapter->fConsumerDLL.Time2Frames(time); jack_nframes_t time2 = adapter->fProducerDLL.Time2Frames(time); - printf("time1 %ld time2 %ld\n",time1, time2); - double src_ratio_output = double(time2) / double(time1); double src_ratio_input = double(time1) / double(time2); - /* - jack_time_t val2 = adapter->fConsumerFilter.GetVal(); - jack_time_t val1 = adapter->fProducerFilter.GetVal(); - double src_ratio_output = double(val1) / double(val2); - double src_ratio_input = double(val2) / double(val1); - */ - if (src_ratio_input < 0.8f || src_ratio_input > 1.2f) { jack_error("src_ratio_input = %f", src_ratio_input); src_ratio_input = 1; @@ -185,21 +155,16 @@ OSStatus JackCoreAudioIOAdapter::Render(void *inRefCon, src_ratio_input = Range(0.8f, 1.2f, src_ratio_input); src_ratio_output = Range(0.8f, 1.2f, src_ratio_output); - - //jack_log("Callback resampler src_ratio_input = %f src_ratio_output = %f", src_ratio_input, src_ratio_output); - //jack_info("Callback resampler src_ratio_input = %f src_ratio_output = %f", src_ratio_input, src_ratio_output); - printf("Callback resampler src_ratio_input = %f src_ratio_output = %f\n", src_ratio_input, src_ratio_output); + jack_log("Callback resampler src_ratio_input = %f src_ratio_output = %f", src_ratio_input, src_ratio_output); for (int i = 0; i < adapter->fCaptureChannels; i++) { adapter->fCaptureRingBuffer[i]->SetRatio(time1, time2); adapter->fCaptureRingBuffer[i]->WriteResample((float*)adapter->fInputData->mBuffers[i].mData, inNumberFrames); - // adapter->fCaptureRingBuffer[i].Write((float*)adapter->fInputData->mBuffers[i].mData, inNumberFrames); } for (int i = 0; i < adapter->fPlaybackChannels; i++) { adapter->fPlaybackRingBuffer[i]->SetRatio(time2, time1); adapter->fPlaybackRingBuffer[i]->ReadResample((float*)ioData->mBuffers[i].mData, inNumberFrames); - // adapter->fPlaybackRingBuffer[i].Read((float*)ioData->mBuffers[i].mData, inNumberFrames); } return noErr; diff --git a/windows/JackPortAudioIOAdapter.cpp b/windows/JackPortAudioIOAdapter.cpp index c3ff33d6..d340a8a7 100644 --- a/windows/JackPortAudioIOAdapter.cpp +++ b/windows/JackPortAudioIOAdapter.cpp @@ -34,14 +34,6 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, float** paBuffer; float* buffer; - adapter->fLastCallbackTime = adapter->fCurCallbackTime; - adapter->fCurCallbackTime = jack_get_time(); - - adapter->fConsumerFilter.AddValue(adapter->fCurCallbackTime - adapter->fLastCallbackTime); - adapter->fProducerFilter.AddValue(adapter->fDeltaTime); - - jack_log("JackPortAudioIOAdapter::Render delta %ld", adapter->fCurCallbackTime - adapter->fLastCallbackTime); - if (!adapter->fRunning) { adapter->fRunning = true; jack_time_t time = jack_get_time(); @@ -49,42 +41,15 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, adapter->fConsumerDLL.Init(time); } - /* - double src_ratio_output = double(adapter->fCurCallbackTime - adapter->fLastCallbackTime) / double(adapter->fDeltaTime); - double src_ratio_input = double(adapter->fDeltaTime) / double(adapter->fCurCallbackTime - adapter->fLastCallbackTime); - */ - - // DLL based - //adapter->fConsumerDLL.IncFrame(adapter->fConsumerTime); + // DLL jack_time_t time = jack_get_time(); adapter->fProducerDLL.IncFrame(time); jack_nframes_t time1 = adapter->fConsumerDLL.Time2Frames(time); jack_nframes_t time2 = adapter->fProducerDLL.Time2Frames(time); - - //time1 = 1; - //time2 = 1; - - - /* - if ((adapter->fConsumerDLL.CurTime2Frame() / adapter->fSampleRate) > 10) { - printf("REINIT DLL\n"); - adapter->fConsumerDLL.Init(time); - adapter->fConsumerDLL.Init(time); - } - */ - - //printf("time1 %ld time2 %ld\n",time1, time2); - + double src_ratio_output = double(time2) / double(time1); double src_ratio_input = double(time1) / double(time2); - /* - jack_time_t val2 = adapter->fConsumerFilter.GetVal(); - jack_time_t val1 = adapter->fProducerFilter.GetVal(); - double src_ratio_output = double(val1) / double(val2); - double src_ratio_input = double(val2) / double(val1); - */ - if (src_ratio_input < 0.8f || src_ratio_input > 1.2f) { jack_error("src_ratio_input = %f", src_ratio_input); src_ratio_input = 1; @@ -98,31 +63,25 @@ int JackPortAudioIOAdapter::Render(const void* inputBuffer, void* outputBuffer, time1 = 1; time2 = 1; } + src_ratio_input = Range(0.8f, 1.2f, src_ratio_input); src_ratio_output = Range(0.8f, 1.2f, src_ratio_output); - - //jack_log("Callback resampler src_ratio_input = %f src_ratio_output = %f", src_ratio_input, src_ratio_output); + jack_log("Callback resampler src_ratio_input = %f src_ratio_output = %f", src_ratio_input, src_ratio_output); paBuffer = (float**)inputBuffer; for (int i = 0; i < adapter->fCaptureChannels; i++) { buffer = (float*)paBuffer[i]; adapter->fCaptureRingBuffer[i]->SetRatio(time1, time2); - //adapter->fCaptureRingBuffer[i].WriteResample(buffer, framesPerBuffer); - //adapter->fCaptureRingBuffer[i].SetRatio(double(adapter->fNum) * adapter->fError1, adapter->fDenom); - adapter->fCaptureRingBuffer[i]->Write(buffer, framesPerBuffer); - } + adapter->fCaptureRingBuffer[i]->WriteResample(buffer, framesPerBuffer); + } paBuffer = (float**)outputBuffer; for (int i = 0; i < adapter->fPlaybackChannels; i++) { buffer = (float*)paBuffer[i]; adapter->fPlaybackRingBuffer[i]->SetRatio(time2, time1); - //adapter->fPlaybackRingBuffer[i].ReadResample(buffer, framesPerBuffer); - //adapter->fCaptureRingBuffer[i].SetRatio(double(adapter->fDenom) * adapter->fError1, adapter->fNum); - adapter->fPlaybackRingBuffer[i]->Read(buffer, framesPerBuffer); + adapter->fPlaybackRingBuffer[i]->ReadResample(buffer, framesPerBuffer); } - printf("Callback resampler src_ratio_input = %f src_ratio_output = %f\n", double(time1) / double(time2), double(time2) / double(time1)); - return paContinue; }