From 15e62814de41d6b1ff8a29f10367ed5312ff1706 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 24 Mar 2018 03:36:49 +0100 Subject: [PATCH] Multiple audio support: removed audio methods from DSP engine and use AudioDeviceManager instead --- plugins/channelrx/demodam/amdemod.cpp | 4 +-- plugins/channelrx/demodbfm/bfmdemod.cpp | 4 +-- plugins/channelrx/demoddsd/dsddemod.cpp | 8 ++--- plugins/channelrx/demodnfm/nfmdemod.cpp | 4 +-- plugins/channelrx/demodssb/ssbdemod.cpp | 4 +-- plugins/channelrx/demodwfm/wfmdemod.cpp | 4 +-- plugins/channelrx/udpsrc/udpsrc.cpp | 6 ++-- plugins/channeltx/modam/ammod.cpp | 4 +-- plugins/channeltx/modnfm/nfmmod.cpp | 4 +-- plugins/channeltx/modssb/ssbmod.cpp | 4 +-- plugins/channeltx/modwfm/wfmmod.cpp | 4 +-- sdrbase/dsp/dspengine.cpp | 46 ------------------------- sdrbase/dsp/dspengine.h | 17 +++------ sdrgui/gui/audiodialog.cpp | 22 ++++++------ sdrgui/gui/audiodialog.h | 4 +-- sdrgui/mainwindow.cpp | 3 -- sdrgui/webapi/webapiadaptergui.cpp | 4 --- sdrsrv/webapi/webapiadaptersrv.cpp | 4 --- 18 files changed, 42 insertions(+), 108 deletions(-) diff --git a/plugins/channelrx/demodam/amdemod.cpp b/plugins/channelrx/demodam/amdemod.cpp index 131636ca3..1590c6d1b 100644 --- a/plugins/channelrx/demodam/amdemod.cpp +++ b/plugins/channelrx/demodam/amdemod.cpp @@ -63,7 +63,7 @@ AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) : m_magsq = 0.0; - DSPEngine::instance()->addAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(&m_audioFifo); m_audioNetSink = new AudioNetSink(0); // parent thread allocated dynamically m_audioNetSink->setDestination(m_settings.m_udpAddress, m_settings.m_udpPort); @@ -78,7 +78,7 @@ AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) : AMDemod::~AMDemod() { - DSPEngine::instance()->removeAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo); delete m_audioNetSink; m_deviceAPI->removeChannelAPI(this); m_deviceAPI->removeThreadedSink(m_threadedChannelizer); diff --git a/plugins/channelrx/demodbfm/bfmdemod.cpp b/plugins/channelrx/demodbfm/bfmdemod.cpp index 0ebd113d2..d70c045a5 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.cpp +++ b/plugins/channelrx/demodbfm/bfmdemod.cpp @@ -84,7 +84,7 @@ BFMDemod::BFMDemod(DeviceSourceAPI *deviceAPI) : m_audioBuffer.resize(16384); m_audioBufferFill = 0; - DSPEngine::instance()->addAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(&m_audioFifo); m_audioNetSink = new AudioNetSink(0); // parent thread allocated dynamically m_audioNetSink->setDestination(m_settings.m_udpAddress, m_settings.m_udpPort); m_audioNetSink->setStereo(true); @@ -105,7 +105,7 @@ BFMDemod::~BFMDemod() delete m_rfFilter; } - DSPEngine::instance()->removeAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo); delete m_audioNetSink; m_deviceAPI->removeChannelAPI(this); diff --git a/plugins/channelrx/demoddsd/dsddemod.cpp b/plugins/channelrx/demoddsd/dsddemod.cpp index 9592b1e76..4295c8a99 100644 --- a/plugins/channelrx/demoddsd/dsddemod.cpp +++ b/plugins/channelrx/demoddsd/dsddemod.cpp @@ -72,8 +72,8 @@ DSDDemod::DSDDemod(DeviceSourceAPI *deviceAPI) : m_magsqPeak = 0.0f; m_magsqCount = 0; - DSPEngine::instance()->addAudioSink(&m_audioFifo1); - DSPEngine::instance()->addAudioSink(&m_audioFifo2); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(&m_audioFifo1); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(&m_audioFifo2); // m_udpBufferAudio = new UDPSink(this, m_udpBlockSize, m_settings.m_udpPort); // m_audioFifo1.setUDPSink(m_udpBufferAudio); @@ -96,8 +96,8 @@ DSDDemod::DSDDemod(DeviceSourceAPI *deviceAPI) : DSDDemod::~DSDDemod() { delete[] m_sampleBuffer; - DSPEngine::instance()->removeAudioSink(&m_audioFifo1); - DSPEngine::instance()->removeAudioSink(&m_audioFifo2); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo1); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo2); // delete m_udpBufferAudio; delete m_audioNetSink; diff --git a/plugins/channelrx/demodnfm/nfmdemod.cpp b/plugins/channelrx/demodnfm/nfmdemod.cpp index 93f91cf98..d2c6a82cc 100644 --- a/plugins/channelrx/demodnfm/nfmdemod.cpp +++ b/plugins/channelrx/demodnfm/nfmdemod.cpp @@ -80,7 +80,7 @@ NFMDemod::NFMDemod(DeviceSourceAPI *devieAPI) : m_ctcssDetector.setCoefficients(3000, 6000.0); // 0.5s / 2 Hz resolution m_afSquelch.setCoefficients(24, 600, 48000.0, 200, 0); // 0.5ms test period, 300ms average span, 48kS/s SR, 100ms attack, no decay - DSPEngine::instance()->addAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(&m_audioFifo); m_audioNetSink = new AudioNetSink(0); // parent thread allocated dynamically m_audioNetSink->setDestination(m_settings.m_udpAddress, m_settings.m_udpPort); @@ -95,7 +95,7 @@ NFMDemod::NFMDemod(DeviceSourceAPI *devieAPI) : NFMDemod::~NFMDemod() { - DSPEngine::instance()->removeAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo); delete m_audioNetSink; m_deviceAPI->removeChannelAPI(this); m_deviceAPI->removeThreadedSink(m_threadedChannelizer); diff --git a/plugins/channelrx/demodssb/ssbdemod.cpp b/plugins/channelrx/demodssb/ssbdemod.cpp index 6209a7cc5..9ba4601df 100644 --- a/plugins/channelrx/demodssb/ssbdemod.cpp +++ b/plugins/channelrx/demodssb/ssbdemod.cpp @@ -85,7 +85,7 @@ SSBDemod::SSBDemod(DeviceSourceAPI *deviceAPI) : SSBFilter = new fftfilt(m_LowCutoff / m_audioSampleRate, m_Bandwidth / m_audioSampleRate, ssbFftLen); DSBFilter = new fftfilt((2.0f * m_Bandwidth) / m_audioSampleRate, 2 * ssbFftLen); - DSPEngine::instance()->addAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(&m_audioFifo); m_audioNetSink = new AudioNetSink(0); // parent thread allocated dynamically m_audioNetSink->setDestination(m_settings.m_udpAddress, m_settings.m_udpPort); @@ -102,7 +102,7 @@ SSBDemod::~SSBDemod() { if (SSBFilter) delete SSBFilter; if (DSBFilter) delete DSBFilter; - DSPEngine::instance()->removeAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo); delete m_audioNetSink; m_deviceAPI->removeChannelAPI(this); diff --git a/plugins/channelrx/demodwfm/wfmdemod.cpp b/plugins/channelrx/demodwfm/wfmdemod.cpp index fd74e0c9e..c27e28882 100644 --- a/plugins/channelrx/demodwfm/wfmdemod.cpp +++ b/plugins/channelrx/demodwfm/wfmdemod.cpp @@ -59,7 +59,7 @@ WFMDemod::WFMDemod(DeviceSourceAPI* deviceAPI) : m_audioBuffer.resize(16384); m_audioBufferFill = 0; - DSPEngine::instance()->addAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(&m_audioFifo); m_audioNetSink = new AudioNetSink(0); // parent thread allocated dynamically m_audioNetSink->setDestination(m_settings.m_udpAddress, m_settings.m_udpPort); @@ -79,7 +79,7 @@ WFMDemod::~WFMDemod() delete m_rfFilter; } - DSPEngine::instance()->removeAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo); delete m_audioNetSink; m_deviceAPI->removeChannelAPI(this); diff --git a/plugins/channelrx/udpsrc/udpsrc.cpp b/plugins/channelrx/udpsrc/udpsrc.cpp index c913421ea..70dec15ad 100644 --- a/plugins/channelrx/udpsrc/udpsrc.cpp +++ b/plugins/channelrx/udpsrc/udpsrc.cpp @@ -118,7 +118,7 @@ UDPSrc::~UDPSrc() delete m_udpBufferMono16; delete[] m_udpAudioBuf; if (UDPFilter) delete UDPFilter; - if (m_settings.m_audioActive) DSPEngine::instance()->removeAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo); m_deviceAPI->removeChannelAPI(this); m_deviceAPI->removeThreadedSink(m_threadedChannelizer); delete m_threadedChannelizer; @@ -543,11 +543,11 @@ void UDPSrc::applySettings(const UDPSrcSettings& settings, bool force) if (settings.m_audioActive) { m_audioBufferFill = 0; - DSPEngine::instance()->addAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(&m_audioFifo); } else { - DSPEngine::instance()->removeAudioSink(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSink(&m_audioFifo); } } diff --git a/plugins/channeltx/modam/ammod.cpp b/plugins/channeltx/modam/ammod.cpp index 8d09466fd..8789f46c6 100644 --- a/plugins/channeltx/modam/ammod.cpp +++ b/plugins/channeltx/modam/ammod.cpp @@ -66,7 +66,7 @@ AMMod::AMMod(DeviceSinkAPI *deviceAPI) : m_magsq = 0.0; m_toneNco.setFreq(1000.0, m_settings.m_audioSampleRate); - DSPEngine::instance()->addAudioSource(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(&m_audioFifo); // CW keyer m_cwKeyer.setSampleRate(m_settings.m_audioSampleRate); @@ -88,7 +88,7 @@ AMMod::~AMMod() m_deviceAPI->removeThreadedSource(m_threadedChannelizer); delete m_threadedChannelizer; delete m_channelizer; - DSPEngine::instance()->removeAudioSource(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSource(&m_audioFifo); } void AMMod::pull(Sample& sample) diff --git a/plugins/channeltx/modnfm/nfmmod.cpp b/plugins/channeltx/modnfm/nfmmod.cpp index 8648cb257..709527bf5 100644 --- a/plugins/channeltx/modnfm/nfmmod.cpp +++ b/plugins/channeltx/modnfm/nfmmod.cpp @@ -73,7 +73,7 @@ NFMMod::NFMMod(DeviceSinkAPI *deviceAPI) : m_toneNco.setFreq(1000.0, m_settings.m_audioSampleRate); m_ctcssNco.setFreq(88.5, m_settings.m_audioSampleRate); - DSPEngine::instance()->addAudioSource(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(&m_audioFifo); // CW keyer m_cwKeyer.setSampleRate(m_settings.m_audioSampleRate); @@ -91,7 +91,7 @@ NFMMod::NFMMod(DeviceSinkAPI *deviceAPI) : NFMMod::~NFMMod() { - DSPEngine::instance()->removeAudioSource(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSource(&m_audioFifo); m_deviceAPI->removeChannelAPI(this); m_deviceAPI->removeThreadedSource(m_threadedChannelizer); delete m_threadedChannelizer; diff --git a/plugins/channeltx/modssb/ssbmod.cpp b/plugins/channeltx/modssb/ssbmod.cpp index 3ecf9766e..3f0790d66 100644 --- a/plugins/channeltx/modssb/ssbmod.cpp +++ b/plugins/channeltx/modssb/ssbmod.cpp @@ -88,7 +88,7 @@ SSBMod::SSBMod(DeviceSinkAPI *deviceAPI) : m_magsq = 0.0; m_toneNco.setFreq(1000.0, m_settings.m_audioSampleRate); - DSPEngine::instance()->addAudioSource(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(&m_audioFifo); // CW keyer m_cwKeyer.setSampleRate(m_settings.m_audioSampleRate); @@ -126,7 +126,7 @@ SSBMod::~SSBMod() delete m_DSBFilterBuffer; } - DSPEngine::instance()->removeAudioSource(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSource(&m_audioFifo); m_deviceAPI->removeChannelAPI(this); m_deviceAPI->removeThreadedSource(m_threadedChannelizer); diff --git a/plugins/channeltx/modwfm/wfmmod.cpp b/plugins/channeltx/modwfm/wfmmod.cpp index ecd75409c..e1cdc90c7 100644 --- a/plugins/channeltx/modwfm/wfmmod.cpp +++ b/plugins/channeltx/modwfm/wfmmod.cpp @@ -75,7 +75,7 @@ WFMMod::WFMMod(DeviceSinkAPI *deviceAPI) : m_toneNco.setFreq(1000.0, m_settings.m_audioSampleRate); m_toneNcoRF.setFreq(1000.0, m_outputSampleRate); - DSPEngine::instance()->addAudioSource(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(&m_audioFifo); // CW keyer m_cwKeyer.setSampleRate(m_outputSampleRate); @@ -96,7 +96,7 @@ WFMMod::~WFMMod() { delete m_rfFilter; delete[] m_rfFilterBuffer; - DSPEngine::instance()->removeAudioSource(&m_audioFifo); + DSPEngine::instance()->getAudioDeviceManager()->removeAudioSource(&m_audioFifo); m_deviceAPI->removeChannelAPI(this); m_deviceAPI->removeThreadedSource(m_threadedChannelizer); delete m_threadedChannelizer; diff --git a/sdrbase/dsp/dspengine.cpp b/sdrbase/dsp/dspengine.cpp index fa99246b9..fdede4a90 100644 --- a/sdrbase/dsp/dspengine.cpp +++ b/sdrbase/dsp/dspengine.cpp @@ -91,52 +91,6 @@ void DSPEngine::removeLastDeviceSinkEngine() } } -void DSPEngine::startAudioOutput() -{ - m_audioOutput.start(m_audioOutputDeviceIndex, m_audioOutputSampleRate); - m_audioOutputSampleRate = m_audioOutput.getRate(); // update with actual rate -} - -void DSPEngine::stopAudioOutput() -{ - m_audioOutput.stop(); -} - -void DSPEngine::startAudioInput() -{ - m_audioInput.start(m_audioInputDeviceIndex, m_audioInputSampleRate); - m_audioInputSampleRate = m_audioInput.getRate(); // update with actual rate -} - -void DSPEngine::stopAudioInput() -{ - m_audioInput.stop(); -} - -void DSPEngine::addAudioSink(AudioFifo* audioFifo) -{ - qDebug("DSPEngine::addAudioSink"); - m_audioOutput.addFifo(audioFifo); -} - -void DSPEngine::removeAudioSink(AudioFifo* audioFifo) -{ - qDebug("DSPEngine::removeAudioSink"); - m_audioOutput.removeFifo(audioFifo); -} - -void DSPEngine::addAudioSource(AudioFifo* audioFifo) -{ - qDebug("DSPEngine::addAudioSource"); - m_audioInput.addFifo(audioFifo); -} - -void DSPEngine::removeAudioSource(AudioFifo* audioFifo) -{ - qDebug("DSPEngine::removeAudioSource"); - m_audioInput.removeFifo(audioFifo); -} - DSPDeviceSourceEngine *DSPEngine::getDeviceSourceEngineByUID(uint uid) { std::vector::iterator it = m_deviceSourceEngines.begin(); diff --git a/sdrbase/dsp/dspengine.h b/sdrbase/dsp/dspengine.h index 629afc9f2..73472bc1f 100644 --- a/sdrbase/dsp/dspengine.h +++ b/sdrbase/dsp/dspengine.h @@ -50,14 +50,11 @@ public: void removeLastDeviceSinkEngine(); AudioDeviceManager *getAudioDeviceManager() { return &m_audioDeviceManager; } - void startAudioOutput(); - void stopAudioOutput(); - void setAudioOutputDeviceIndex(int index) { m_audioOutputDeviceIndex = index; } + void startAudioOutput() { m_audioDeviceManager.startAudioOutput(); } + void stopAudioOutput() { m_audioDeviceManager.stopAudioOutput(); } - void startAudioInput(); - void stopAudioInput(); - void setAudioInputVolume(float volume) { m_audioInput.setVolume(volume); } - void setAudioInputDeviceIndex(int index) { m_audioInputDeviceIndex = index; } + void startAudioInput() { m_audioDeviceManager.startAudioInput(); } + void stopAudioInput() {m_audioDeviceManager.stopAudioInput(); } DSPDeviceSourceEngine *getDeviceSourceEngineByIndex(uint deviceIndex) { return m_deviceSourceEngines[deviceIndex]; } DSPDeviceSourceEngine *getDeviceSourceEngineByUID(uint uid); @@ -65,12 +62,6 @@ public: DSPDeviceSinkEngine *getDeviceSinkEngineByIndex(uint deviceIndex) { return m_deviceSinkEngines[deviceIndex]; } DSPDeviceSinkEngine *getDeviceSinkEngineByUID(uint uid); - void addAudioSink(AudioFifo* audioFifo); //!< Add the audio sink - void removeAudioSink(AudioFifo* audioFifo); //!< Remove the audio sink - - void addAudioSource(AudioFifo* audioFifo); //!< Add an audio source - void removeAudioSource(AudioFifo* audioFifo); //!< Remove an audio source - // Serial DV methods: bool hasDVSerialSupport(); diff --git a/sdrgui/gui/audiodialog.cpp b/sdrgui/gui/audiodialog.cpp index c19a8c92f..83b01cdaa 100644 --- a/sdrgui/gui/audiodialog.cpp +++ b/sdrgui/gui/audiodialog.cpp @@ -1,13 +1,13 @@ -#include +#include "audiodialog.h" #include