Multiple audio support: removed audio methods from DSP engine and use AudioDeviceManager instead

pull/154/head
f4exb 2018-03-24 03:36:49 +01:00
rodzic f387ae884c
commit 15e62814de
18 zmienionych plików z 42 dodań i 108 usunięć

Wyświetl plik

@ -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);

Wyświetl plik

@ -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);

Wyświetl plik

@ -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<AudioSample>(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;

Wyświetl plik

@ -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);

Wyświetl plik

@ -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);

Wyświetl plik

@ -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);

Wyświetl plik

@ -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);
}
}

Wyświetl plik

@ -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)

Wyświetl plik

@ -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;

Wyświetl plik

@ -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);

Wyświetl plik

@ -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;

Wyświetl plik

@ -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<DSPDeviceSourceEngine*>::iterator it = m_deviceSourceEngines.begin();

Wyświetl plik

@ -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();

Wyświetl plik

@ -1,13 +1,13 @@
#include <gui/audiodialog.h>
#include "audiodialog.h"
#include <audio/audiodevicemanager.h>
#include <QTreeWidgetItem>
#include "ui_audiodialog.h"
AudioDialog::AudioDialog(AudioDeviceManager* audioDeviceInfo, QWidget* parent) :
AudioDialog::AudioDialog(AudioDeviceManager* audioDeviceManager, QWidget* parent) :
QDialog(parent),
ui(new Ui::AudioDialog),
m_audioDeviceInfo(audioDeviceInfo)
m_audioDeviceManager(audioDeviceManager)
{
ui->setupUi(this);
QTreeWidgetItem* treeItem;
@ -18,7 +18,7 @@ AudioDialog::AudioDialog(AudioDeviceManager* audioDeviceInfo, QWidget* parent) :
treeItem = new QTreeWidgetItem(ui->audioOutTree);
treeItem->setText(0, tr("Default (use first suitable device)"));
const QList<QAudioDeviceInfo>& outputDevices = m_audioDeviceInfo->getOutputDevices();
const QList<QAudioDeviceInfo>& outputDevices = m_audioDeviceManager->getOutputDevices();
i = 0;
for(QList<QAudioDeviceInfo>::const_iterator it = outputDevices.begin(); it != outputDevices.end(); ++it)
@ -26,7 +26,7 @@ AudioDialog::AudioDialog(AudioDeviceManager* audioDeviceInfo, QWidget* parent) :
treeItem = new QTreeWidgetItem(ui->audioOutTree);
treeItem->setText(0, qPrintable(it->deviceName()));
if (i == m_audioDeviceInfo->getOutputDeviceIndex())
if (i == m_audioDeviceManager->getOutputDeviceIndex())
{
ui->audioOutTree->setCurrentItem(treeItem);
}
@ -39,7 +39,7 @@ AudioDialog::AudioDialog(AudioDeviceManager* audioDeviceInfo, QWidget* parent) :
treeItem = new QTreeWidgetItem(ui->audioInTree);
treeItem->setText(0, tr("Default (use first suitable device)"));
const QList<QAudioDeviceInfo>& inputDevices = m_audioDeviceInfo->getInputDevices();
const QList<QAudioDeviceInfo>& inputDevices = m_audioDeviceManager->getInputDevices();
i = 0;
for(QList<QAudioDeviceInfo>::const_iterator it = inputDevices.begin(); it != inputDevices.end(); ++it)
@ -47,7 +47,7 @@ AudioDialog::AudioDialog(AudioDeviceManager* audioDeviceInfo, QWidget* parent) :
treeItem = new QTreeWidgetItem(ui->audioInTree);
treeItem->setText(0, qPrintable(it->deviceName()));
if (i == m_audioDeviceInfo->getInputDeviceIndex())
if (i == m_audioDeviceManager->getInputDeviceIndex())
{
ui->audioInTree->setCurrentItem(treeItem);
}
@ -65,7 +65,7 @@ AudioDialog::AudioDialog(AudioDeviceManager* audioDeviceInfo, QWidget* parent) :
ui->tabWidget->setCurrentIndex(0);
m_inputVolume = m_audioDeviceInfo->m_inputVolume;
m_inputVolume = m_audioDeviceManager->m_inputVolume;
ui->inputVolume->setValue((int) (m_inputVolume * 100.0f));
ui->inputVolumeText->setText(QString("%1").arg(m_inputVolume, 0, 'f', 2));
}
@ -80,9 +80,9 @@ void AudioDialog::accept()
int inIndex = ui->audioInTree->indexOfTopLevelItem(ui->audioInTree->currentItem());
int outIndex = ui->audioOutTree->indexOfTopLevelItem(ui->audioOutTree->currentItem());
m_audioDeviceInfo->m_inputDeviceIndex = inIndex - 1;
m_audioDeviceInfo->m_outputDeviceIndex = outIndex - 1;
m_audioDeviceInfo->m_inputVolume = m_inputVolume;
m_audioDeviceManager->m_inputDeviceIndex = inIndex - 1;
m_audioDeviceManager->m_outputDeviceIndex = outIndex - 1;
m_audioDeviceManager->m_inputVolume = m_inputVolume;
QDialog::accept();
}

Wyświetl plik

@ -15,13 +15,13 @@ class SDRGUI_API AudioDialog : public QDialog {
Q_OBJECT
public:
explicit AudioDialog(AudioDeviceManager* audioDeviceInfo, QWidget* parent = NULL);
explicit AudioDialog(AudioDeviceManager* audioDeviceManager, QWidget* parent = 0);
~AudioDialog();
private:
Ui::AudioDialog* ui;
AudioDeviceManager* m_audioDeviceInfo;
AudioDeviceManager* m_audioDeviceManager;
float m_inputVolume;
private slots:

Wyświetl plik

@ -1416,9 +1416,6 @@ void MainWindow::on_action_Audio_triggered()
{
AudioDialog audioDialog(m_dspEngine->getAudioDeviceManager(), this);
audioDialog.exec();
m_dspEngine->setAudioInputVolume(m_dspEngine->getAudioDeviceManager()->getInputVolume());
m_dspEngine->setAudioInputDeviceIndex(m_dspEngine->getAudioDeviceManager()->getInputDeviceIndex());
m_dspEngine->setAudioOutputDeviceIndex(m_dspEngine->getAudioDeviceManager()->getOutputDeviceIndex());
}
void MainWindow::on_action_Logging_triggered()

Wyświetl plik

@ -280,10 +280,6 @@ int WebAPIAdapterGUI::instanceAudioPatch(
m_mainWindow.m_dspEngine->getAudioDeviceManager()->setInputDeviceIndex(inputIndex);
m_mainWindow.m_dspEngine->getAudioDeviceManager()->setOutputDeviceIndex(outputIndex);
m_mainWindow.m_dspEngine->setAudioInputVolume(inputVolume);
m_mainWindow.m_dspEngine->setAudioInputDeviceIndex(inputIndex);
m_mainWindow.m_dspEngine->setAudioOutputDeviceIndex(outputIndex);
response.setInputVolume(m_mainWindow.m_dspEngine->getAudioDeviceManager()->getInputVolume());
response.setInputIndex(m_mainWindow.m_dspEngine->getAudioDeviceManager()->getInputDeviceIndex());
response.setOutputIndex(m_mainWindow.m_dspEngine->getAudioDeviceManager()->getOutputDeviceIndex());

Wyświetl plik

@ -281,10 +281,6 @@ int WebAPIAdapterSrv::instanceAudioPatch(
m_mainCore.m_dspEngine->getAudioDeviceManager()->setInputDeviceIndex(inputIndex);
m_mainCore.m_dspEngine->getAudioDeviceManager()->setOutputDeviceIndex(outputIndex);
m_mainCore.m_dspEngine->setAudioInputVolume(inputVolume);
m_mainCore.m_dspEngine->setAudioInputDeviceIndex(inputIndex);
m_mainCore.m_dspEngine->setAudioOutputDeviceIndex(outputIndex);
response.setInputVolume(m_mainCore.m_dspEngine->getAudioDeviceManager()->getInputVolume());
response.setInputIndex(m_mainCore.m_dspEngine->getAudioDeviceManager()->getInputDeviceIndex());
response.setOutputIndex(m_mainCore.m_dspEngine->getAudioDeviceManager()->getOutputDeviceIndex());