diff --git a/sdrbase/dsp/dspengine.cpp b/sdrbase/dsp/dspengine.cpp index a85491adb..3b95503c7 100644 --- a/sdrbase/dsp/dspengine.cpp +++ b/sdrbase/dsp/dspengine.cpp @@ -27,7 +27,9 @@ DSPEngine::DSPEngine() : m_deviceSourceEnginesUIDSequence(0), m_deviceSinkEnginesUIDSequence(0), m_audioOutputSampleRate(48000), // Use default output device at 48 kHz - m_audioInputSampleRate(48000) // Use default input device at 48 kHz + m_audioInputSampleRate(48000), // Use default input device at 48 kHz + m_audioInputDeviceIndex(-1), // default device + m_audioOutputDeviceIndex(-1) // default device { m_dvSerialSupport = false; } @@ -90,7 +92,7 @@ void DSPEngine::removeLastDeviceSinkEngine() void DSPEngine::startAudioOutput() { - m_audioOutput.start(-1, m_audioOutputSampleRate); + m_audioOutput.start(m_audioOutputDeviceIndex, m_audioOutputSampleRate); m_audioOutputSampleRate = m_audioOutput.getRate(); // update with actual rate } @@ -101,7 +103,7 @@ void DSPEngine::stopAudioOutput() void DSPEngine::startAudioOutputImmediate() { - m_audioOutput.start(-1, m_audioOutputSampleRate); + m_audioOutput.start(m_audioOutputDeviceIndex, m_audioOutputSampleRate); m_audioOutputSampleRate = m_audioOutput.getRate(); // update with actual rate } @@ -112,7 +114,7 @@ void DSPEngine::stopAudioOutputImmediate() void DSPEngine::startAudioInput() { - m_audioInput.start(-1, m_audioInputSampleRate); + m_audioInput.start(m_audioInputDeviceIndex, m_audioInputSampleRate); m_audioInputSampleRate = m_audioInput.getRate(); // update with actual rate } @@ -123,7 +125,7 @@ void DSPEngine::stopAudioInput() void DSPEngine::startAudioInputImmediate() { - m_audioInput.start(-1, m_audioInputSampleRate); + m_audioInput.start(m_audioInputDeviceIndex, m_audioInputSampleRate); m_audioInputSampleRate = m_audioInput.getRate(); // update with actual rate } diff --git a/sdrbase/dsp/dspengine.h b/sdrbase/dsp/dspengine.h index 30955636f..ad6cf73e8 100644 --- a/sdrbase/dsp/dspengine.h +++ b/sdrbase/dsp/dspengine.h @@ -50,12 +50,14 @@ public: void stopAudioOutput(); void startAudioOutputImmediate(); void stopAudioOutputImmediate(); + void setAudioOutputDeviceIndex(int index) { m_audioOutputDeviceIndex = index; } void startAudioInput(); void stopAudioInput(); void startAudioInputImmediate(); void stopAudioInputImmediate(); void setAudioInputVolume(float volume) { m_audioInput.setVolume(volume); } + void setAudioInputDeviceIndex(int index) { m_audioInputDeviceIndex = index; } DSPDeviceSourceEngine *getDeviceSourceEngineByIndex(uint deviceIndex) { return m_deviceSourceEngines[deviceIndex]; } DSPDeviceSourceEngine *getDeviceSourceEngineByUID(uint uid); @@ -105,6 +107,8 @@ private: AudioInput m_audioInput; uint m_audioOutputSampleRate; uint m_audioInputSampleRate; + int m_audioInputDeviceIndex; + int m_audioOutputDeviceIndex; bool m_dvSerialSupport; #ifdef DSD_USE_SERIALDV DVSerialEngine m_dvSerialEngine; diff --git a/sdrbase/mainwindow.cpp b/sdrbase/mainwindow.cpp index d548e2100..2249eddd0 100644 --- a/sdrbase/mainwindow.cpp +++ b/sdrbase/mainwindow.cpp @@ -740,6 +740,8 @@ void MainWindow::on_action_Audio_triggered() AudioDialog audioDialog(m_audioDeviceInfo, this); audioDialog.exec(); m_dspEngine->setAudioInputVolume(m_audioDeviceInfo->getInputVolume()); + m_dspEngine->setAudioInputDeviceIndex(m_audioDeviceInfo->getInputDeviceIndex()); + m_dspEngine->setAudioOutputDeviceIndex(m_audioDeviceInfo->getOutputDeviceIndex()); } void MainWindow::on_action_My_Position_triggered()