# HG changeset patch # User Chris Cannam # Date 1481119065 0 # Node ID b9d8c7a690d68653c3a4fabb46a67f27a06d73bc # Parent c732251237b14554a8c9146f77701ad04a10de94 Add a ResamplerWrapper diff -r c732251237b1 -r b9d8c7a690d6 audio/AudioCallbackPlaySource.cpp --- a/audio/AudioCallbackPlaySource.cpp Wed Dec 07 12:04:41 2016 +0000 +++ b/audio/AudioCallbackPlaySource.cpp Wed Dec 07 13:57:45 2016 +0000 @@ -28,6 +28,7 @@ #include "plugin/RealTimePluginInstance.h" #include "bqaudioio/SystemPlaybackTarget.h" +#include "bqaudioio/ResamplerWrapper.h" #include using namespace RubberBand; @@ -77,7 +78,8 @@ m_stretcherInputCount(0), m_stretcherInputs(0), m_stretcherInputSizes(0), - m_fillThread(0) + m_fillThread(0), + m_resamplerWrapper(0) { m_viewManager->setAudioPlaySource(this); @@ -573,6 +575,12 @@ } void +AudioCallbackPlaySource::setResamplerWrapper(breakfastquay::ResamplerWrapper *w) +{ + m_resamplerWrapper = w; +} + +void AudioCallbackPlaySource::setSystemPlaybackBlockSize(int size) { cout << "AudioCallbackPlaySource::setTarget: Block size -> " << size << endl; diff -r c732251237b1 -r b9d8c7a690d6 audio/AudioCallbackPlaySource.h --- a/audio/AudioCallbackPlaySource.h Wed Dec 07 12:04:41 2016 +0000 +++ b/audio/AudioCallbackPlaySource.h Wed Dec 07 13:57:45 2016 +0000 @@ -40,7 +40,7 @@ } namespace breakfastquay { - class Resampler; + class ResamplerWrapper; } class Model; @@ -125,6 +125,11 @@ virtual void setSystemPlaybackTarget(breakfastquay::SystemPlaybackTarget *); /** + * Set the resampler wrapper, if one is in use. + */ + virtual void setResamplerWrapper(breakfastquay::ResamplerWrapper *); + + /** * Set the block size of the target audio device. This should be * called by the target class. */ @@ -400,6 +405,7 @@ QMutex m_mutex; QWaitCondition m_condition; FillThread *m_fillThread; + breakfastquay::ResamplerWrapper *m_resamplerWrapper; // I don't own this }; #endif diff -r c732251237b1 -r b9d8c7a690d6 framework/MainWindowBase.cpp --- a/framework/MainWindowBase.cpp Wed Dec 07 12:04:41 2016 +0000 +++ b/framework/MainWindowBase.cpp Wed Dec 07 13:57:45 2016 +0000 @@ -76,6 +76,7 @@ #include #include #include +#include #include #include @@ -141,6 +142,7 @@ m_soundOptions(options), m_playSource(0), m_recordTarget(0), + m_resamplerWrapper(0), m_playTarget(0), m_audioIO(0), m_oscQueue(0), @@ -303,6 +305,7 @@ delete m_playTarget; // Then delete the Application objects. + delete m_resamplerWrapper; delete m_playSource; delete m_recordTarget; @@ -2328,16 +2331,21 @@ SVCERR << "createAudioIO: Preferred record device = \"" << preference.recordDevice << "\"" << endl; + if (!m_resamplerWrapper) { + m_resamplerWrapper = new breakfastquay::ResamplerWrapper(m_playSource); + m_playSource->setResamplerWrapper(m_resamplerWrapper); + } + if (m_soundOptions & WithAudioInput) { m_audioIO = breakfastquay::AudioFactory:: - createCallbackIO(m_recordTarget, m_playSource, preference); + createCallbackIO(m_recordTarget, m_resamplerWrapper, preference); if (m_audioIO) { m_audioIO->suspend(); // start in suspended state m_playSource->setSystemPlaybackTarget(m_audioIO); } } else { m_playTarget = breakfastquay::AudioFactory:: - createCallbackPlayTarget(m_playSource, preference); + createCallbackPlayTarget(m_resamplerWrapper, preference); if (m_playTarget) { m_playTarget->suspend(); // start in suspended state m_playSource->setSystemPlaybackTarget(m_playTarget); diff -r c732251237b1 -r b9d8c7a690d6 framework/MainWindowBase.h --- a/framework/MainWindowBase.h Wed Dec 07 12:04:41 2016 +0000 +++ b/framework/MainWindowBase.h Wed Dec 07 13:57:45 2016 +0000 @@ -65,8 +65,9 @@ class AlignmentModel; namespace breakfastquay { -class SystemPlaybackTarget; -class SystemAudioIO; + class SystemPlaybackTarget; + class SystemAudioIO; + class ResamplerWrapper; } /** @@ -343,6 +344,7 @@ AudioCallbackPlaySource *m_playSource; AudioRecordTarget *m_recordTarget; + breakfastquay::ResamplerWrapper *m_resamplerWrapper; breakfastquay::SystemPlaybackTarget *m_playTarget; // only one of this... breakfastquay::SystemAudioIO *m_audioIO; // ... and this exists