mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-03 13:47:50 -04:00
Fixed audio FIFO write overflows in modulators using audio input. Also fixes #1236 in SSB modulator
This commit is contained in:
parent
7a8cab7879
commit
cc8b2e6462
@ -40,9 +40,6 @@ AMModBaseband::AMModBaseband() :
|
|||||||
Qt::QueuedConnection
|
Qt::QueuedConnection
|
||||||
);
|
);
|
||||||
|
|
||||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(m_source.getAudioFifo(), getInputMessageQueue());
|
|
||||||
m_source.applyAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getInputSampleRate());
|
|
||||||
|
|
||||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(m_source.getFeedbackAudioFifo(), getInputMessageQueue());
|
DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(m_source.getFeedbackAudioFifo(), getInputMessageQueue());
|
||||||
m_source.applyFeedbackAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getOutputSampleRate());
|
m_source.applyFeedbackAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getOutputSampleRate());
|
||||||
|
|
||||||
@ -199,7 +196,6 @@ void AMModBaseband::applySettings(const AMModSettings& settings, bool force)
|
|||||||
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
||||||
audioDeviceManager->removeAudioSource(getAudioFifo());
|
audioDeviceManager->removeAudioSource(getAudioFifo());
|
||||||
audioDeviceManager->addAudioSource(getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
|
|
||||||
int audioSampleRate = audioDeviceManager->getInputSampleRate(audioDeviceIndex);
|
int audioSampleRate = audioDeviceManager->getInputSampleRate(audioDeviceIndex);
|
||||||
|
|
||||||
if (getAudioSampleRate() != audioSampleRate)
|
if (getAudioSampleRate() != audioSampleRate)
|
||||||
@ -210,6 +206,18 @@ void AMModBaseband::applySettings(const AMModSettings& settings, bool force)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((settings.m_modAFInput != m_settings.m_modAFInput) || force)
|
||||||
|
{
|
||||||
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
|
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
||||||
|
|
||||||
|
if (settings.m_modAFInput == AMModSettings::AMModInputAudio) {
|
||||||
|
audioDeviceManager->addAudioSource(getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
|
||||||
|
} else {
|
||||||
|
audioDeviceManager->removeAudioSource(getAudioFifo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((settings.m_feedbackAudioDeviceName != m_settings.m_feedbackAudioDeviceName) || force)
|
if ((settings.m_feedbackAudioDeviceName != m_settings.m_feedbackAudioDeviceName) || force)
|
||||||
{
|
{
|
||||||
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
|
@ -37,6 +37,8 @@ AMModSource::AMModSource() :
|
|||||||
m_ifstream(nullptr),
|
m_ifstream(nullptr),
|
||||||
m_mutex(QMutex::Recursive)
|
m_mutex(QMutex::Recursive)
|
||||||
{
|
{
|
||||||
|
m_audioFifo.setLabel("AMModSource.m_audioFifo");
|
||||||
|
m_feedbackAudioFifo.setLabel("AMModSource.m_feedbackAudioFifo");
|
||||||
m_audioBuffer.resize(24000);
|
m_audioBuffer.resize(24000);
|
||||||
m_audioBufferFill = 0;
|
m_audioBufferFill = 0;
|
||||||
m_audioReadBuffer.resize(24000);
|
m_audioReadBuffer.resize(24000);
|
||||||
|
@ -40,9 +40,6 @@ FreeDVModBaseband::FreeDVModBaseband() :
|
|||||||
Qt::QueuedConnection
|
Qt::QueuedConnection
|
||||||
);
|
);
|
||||||
|
|
||||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(m_source.getAudioFifo(), getInputMessageQueue());
|
|
||||||
m_source.applyAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getInputSampleRate());
|
|
||||||
|
|
||||||
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
|
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,7 +192,6 @@ void FreeDVModBaseband::applySettings(const FreeDVModSettings& settings, bool fo
|
|||||||
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
||||||
audioDeviceManager->removeAudioSource(getAudioFifo());
|
audioDeviceManager->removeAudioSource(getAudioFifo());
|
||||||
audioDeviceManager->addAudioSource(getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
|
|
||||||
int audioSampleRate = audioDeviceManager->getInputSampleRate(audioDeviceIndex);
|
int audioSampleRate = audioDeviceManager->getInputSampleRate(audioDeviceIndex);
|
||||||
|
|
||||||
if (getAudioSampleRate() != audioSampleRate) {
|
if (getAudioSampleRate() != audioSampleRate) {
|
||||||
@ -203,6 +199,18 @@ void FreeDVModBaseband::applySettings(const FreeDVModSettings& settings, bool fo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((settings.m_modAFInput != m_settings.m_modAFInput) || force)
|
||||||
|
{
|
||||||
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
|
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
||||||
|
|
||||||
|
if (settings.m_modAFInput == FreeDVModSettings::FreeDVModInputAudio) {
|
||||||
|
audioDeviceManager->addAudioSource(getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
|
||||||
|
} else {
|
||||||
|
audioDeviceManager->removeAudioSource(getAudioFifo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_source.applySettings(settings, force);
|
m_source.applySettings(settings, force);
|
||||||
|
|
||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
@ -211,4 +219,4 @@ void FreeDVModBaseband::applySettings(const FreeDVModSettings& settings, bool fo
|
|||||||
int FreeDVModBaseband::getChannelSampleRate() const
|
int FreeDVModBaseband::getChannelSampleRate() const
|
||||||
{
|
{
|
||||||
return m_channelizer->getChannelSampleRate();
|
return m_channelizer->getChannelSampleRate();
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,7 @@ FreeDVModSource::FreeDVModSource() :
|
|||||||
m_scaleFactor(SDR_TX_SCALEF),
|
m_scaleFactor(SDR_TX_SCALEF),
|
||||||
m_mutex(QMutex::Recursive)
|
m_mutex(QMutex::Recursive)
|
||||||
{
|
{
|
||||||
|
m_audioFifo.setLabel("FreeDVModSource.m_audioFifo");
|
||||||
m_SSBFilter = new fftfilt(m_lowCutoff / m_audioSampleRate, m_hiCutoff / m_audioSampleRate, m_ssbFftLen);
|
m_SSBFilter = new fftfilt(m_lowCutoff / m_audioSampleRate, m_hiCutoff / m_audioSampleRate, m_ssbFftLen);
|
||||||
m_SSBFilterBuffer = new Complex[m_ssbFftLen>>1]; // filter returns data exactly half of its size
|
m_SSBFilterBuffer = new Complex[m_ssbFftLen>>1]; // filter returns data exactly half of its size
|
||||||
std::fill(m_SSBFilterBuffer, m_SSBFilterBuffer+(m_ssbFftLen>>1), Complex{0,0});
|
std::fill(m_SSBFilterBuffer, m_SSBFilterBuffer+(m_ssbFftLen>>1), Complex{0,0});
|
||||||
|
@ -40,9 +40,6 @@ NFMModBaseband::NFMModBaseband() :
|
|||||||
Qt::QueuedConnection
|
Qt::QueuedConnection
|
||||||
);
|
);
|
||||||
|
|
||||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(m_source.getAudioFifo(), getInputMessageQueue());
|
|
||||||
m_source.applyAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getInputSampleRate());
|
|
||||||
|
|
||||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(m_source.getFeedbackAudioFifo(), getInputMessageQueue());
|
DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(m_source.getFeedbackAudioFifo(), getInputMessageQueue());
|
||||||
m_source.applyFeedbackAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getOutputSampleRate());
|
m_source.applyFeedbackAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getOutputSampleRate());
|
||||||
|
|
||||||
@ -199,7 +196,6 @@ void NFMModBaseband::applySettings(const NFMModSettings& settings, bool force)
|
|||||||
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
||||||
audioDeviceManager->removeAudioSource(getAudioFifo());
|
audioDeviceManager->removeAudioSource(getAudioFifo());
|
||||||
audioDeviceManager->addAudioSource(getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
|
|
||||||
int audioSampleRate = audioDeviceManager->getInputSampleRate(audioDeviceIndex);
|
int audioSampleRate = audioDeviceManager->getInputSampleRate(audioDeviceIndex);
|
||||||
|
|
||||||
if (getAudioSampleRate() != audioSampleRate)
|
if (getAudioSampleRate() != audioSampleRate)
|
||||||
@ -210,6 +206,18 @@ void NFMModBaseband::applySettings(const NFMModSettings& settings, bool force)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((settings.m_modAFInput != m_settings.m_modAFInput) || force)
|
||||||
|
{
|
||||||
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
|
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
||||||
|
|
||||||
|
if (settings.m_modAFInput == NFMModSettings::NFMModInputAudio) {
|
||||||
|
audioDeviceManager->addAudioSource(getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
|
||||||
|
} else {
|
||||||
|
audioDeviceManager->removeAudioSource(getAudioFifo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((settings.m_feedbackAudioDeviceName != m_settings.m_feedbackAudioDeviceName) || force)
|
if ((settings.m_feedbackAudioDeviceName != m_settings.m_feedbackAudioDeviceName) || force)
|
||||||
{
|
{
|
||||||
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
|
@ -40,6 +40,8 @@ NFMModSource::NFMModSource() :
|
|||||||
m_ifstream(nullptr),
|
m_ifstream(nullptr),
|
||||||
m_mutex(QMutex::Recursive)
|
m_mutex(QMutex::Recursive)
|
||||||
{
|
{
|
||||||
|
m_audioFifo.setLabel("NFMModSource.m_audioFifo");
|
||||||
|
m_feedbackAudioFifo.setLabel("NFMModSource.m_feedbackAudioFifo");
|
||||||
m_audioBuffer.resize(24000);
|
m_audioBuffer.resize(24000);
|
||||||
m_audioBufferFill = 0;
|
m_audioBufferFill = 0;
|
||||||
m_audioReadBuffer.resize(24000);
|
m_audioReadBuffer.resize(24000);
|
||||||
|
@ -41,9 +41,6 @@ SSBModBaseband::SSBModBaseband() :
|
|||||||
Qt::QueuedConnection
|
Qt::QueuedConnection
|
||||||
);
|
);
|
||||||
|
|
||||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(m_source.getAudioFifo(), getInputMessageQueue());
|
|
||||||
m_source.applyAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getInputSampleRate());
|
|
||||||
|
|
||||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(m_source.getFeedbackAudioFifo(), getInputMessageQueue());
|
DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(m_source.getFeedbackAudioFifo(), getInputMessageQueue());
|
||||||
m_source.applyFeedbackAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getOutputSampleRate());
|
m_source.applyFeedbackAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getOutputSampleRate());
|
||||||
|
|
||||||
@ -205,7 +202,6 @@ void SSBModBaseband::applySettings(const SSBModSettings& settings, bool force)
|
|||||||
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
||||||
audioDeviceManager->removeAudioSource(getAudioFifo());
|
audioDeviceManager->removeAudioSource(getAudioFifo());
|
||||||
audioDeviceManager->addAudioSource(getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
|
|
||||||
int audioSampleRate = audioDeviceManager->getInputSampleRate(audioDeviceIndex);
|
int audioSampleRate = audioDeviceManager->getInputSampleRate(audioDeviceIndex);
|
||||||
|
|
||||||
if (getAudioSampleRate() != audioSampleRate)
|
if (getAudioSampleRate() != audioSampleRate)
|
||||||
@ -218,6 +214,18 @@ void SSBModBaseband::applySettings(const SSBModSettings& settings, bool force)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((settings.m_modAFInput != m_settings.m_modAFInput) || force)
|
||||||
|
{
|
||||||
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
|
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
||||||
|
|
||||||
|
if (settings.m_modAFInput == SSBModSettings::SSBModInputAudio) {
|
||||||
|
audioDeviceManager->addAudioSource(getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
|
||||||
|
} else {
|
||||||
|
audioDeviceManager->removeAudioSource(getAudioFifo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((settings.m_feedbackAudioDeviceName != m_settings.m_feedbackAudioDeviceName) || force)
|
if ((settings.m_feedbackAudioDeviceName != m_settings.m_feedbackAudioDeviceName) || force)
|
||||||
{
|
{
|
||||||
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
|
@ -72,7 +72,7 @@ public:
|
|||||||
void setInputFileStream(std::ifstream *ifstream) { m_source.setInputFileStream(ifstream); }
|
void setInputFileStream(std::ifstream *ifstream) { m_source.setInputFileStream(ifstream); }
|
||||||
AudioFifo *getAudioFifo() { return m_source.getAudioFifo(); }
|
AudioFifo *getAudioFifo() { return m_source.getAudioFifo(); }
|
||||||
AudioFifo *getFeedbackAudioFifo() { return m_source.getFeedbackAudioFifo(); }
|
AudioFifo *getFeedbackAudioFifo() { return m_source.getFeedbackAudioFifo(); }
|
||||||
void setSpectrumSink(SpectrumVis *sampleSink) { m_spectrumVis = sampleSink; m_source.setSpectrumSink((BasebandSampleSink *) sampleSink); }
|
void setSpectrumSink(SpectrumVis *sampleSink) { m_spectrumVis = sampleSink; m_source.setSpectrumSink(sampleSink); }
|
||||||
void setChannel(ChannelAPI *channel);
|
void setChannel(ChannelAPI *channel);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include "dsp/basebandsamplesink.h"
|
#include "dsp/spectrumvis.h"
|
||||||
#include "dsp/misc.h"
|
#include "dsp/misc.h"
|
||||||
#include "dsp/datafifo.h"
|
#include "dsp/datafifo.h"
|
||||||
#include "util/messagequeue.h"
|
#include "util/messagequeue.h"
|
||||||
@ -31,6 +31,7 @@ const int SSBModSource::m_levelNbSamples = 480; // every 10ms
|
|||||||
SSBModSource::SSBModSource() :
|
SSBModSource::SSBModSource() :
|
||||||
m_channelSampleRate(48000),
|
m_channelSampleRate(48000),
|
||||||
m_channelFrequencyOffset(0),
|
m_channelFrequencyOffset(0),
|
||||||
|
m_spectrumSink(nullptr),
|
||||||
m_audioSampleRate(48000),
|
m_audioSampleRate(48000),
|
||||||
m_audioFifo(12000),
|
m_audioFifo(12000),
|
||||||
m_feedbackAudioFifo(48000),
|
m_feedbackAudioFifo(48000),
|
||||||
@ -40,6 +41,8 @@ SSBModSource::SSBModSource() :
|
|||||||
m_ifstream(nullptr),
|
m_ifstream(nullptr),
|
||||||
m_mutex(QMutex::Recursive)
|
m_mutex(QMutex::Recursive)
|
||||||
{
|
{
|
||||||
|
m_audioFifo.setLabel("SSBModSource.m_audioFifo");
|
||||||
|
m_feedbackAudioFifo.setLabel("SSBModSource.m_feedbackAudioFifo");
|
||||||
m_SSBFilter = new fftfilt(m_settings.m_lowCutoff / m_audioSampleRate, m_settings.m_bandwidth / m_audioSampleRate, m_ssbFftLen);
|
m_SSBFilter = new fftfilt(m_settings.m_lowCutoff / m_audioSampleRate, m_settings.m_bandwidth / m_audioSampleRate, m_ssbFftLen);
|
||||||
m_DSBFilter = new fftfilt((2.0f * m_settings.m_bandwidth) / m_audioSampleRate, 2 * m_ssbFftLen);
|
m_DSBFilter = new fftfilt((2.0f * m_settings.m_bandwidth) / m_audioSampleRate, 2 * m_ssbFftLen);
|
||||||
m_SSBFilterBuffer = new Complex[m_ssbFftLen>>1]; // filter returns data exactly half of its size
|
m_SSBFilterBuffer = new Complex[m_ssbFftLen>>1]; // filter returns data exactly half of its size
|
||||||
|
@ -36,8 +36,8 @@
|
|||||||
|
|
||||||
#include "ssbmodsettings.h"
|
#include "ssbmodsettings.h"
|
||||||
|
|
||||||
class BasebandSampleSink;
|
|
||||||
class ChannelAPI;
|
class ChannelAPI;
|
||||||
|
class SpectrumVis;
|
||||||
|
|
||||||
class SSBModSource : public QObject, public ChannelSampleSource
|
class SSBModSource : public QObject, public ChannelSampleSource
|
||||||
{
|
{
|
||||||
@ -68,7 +68,7 @@ public:
|
|||||||
}
|
}
|
||||||
void applySettings(const SSBModSettings& settings, bool force = false);
|
void applySettings(const SSBModSettings& settings, bool force = false);
|
||||||
void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = 0);
|
void applyChannelSettings(int channelSampleRate, int channelFrequencyOffset, bool force = 0);
|
||||||
void setSpectrumSink(BasebandSampleSink *sampleSink) { m_spectrumSink = sampleSink; }
|
void setSpectrumSink(SpectrumVis *sampleSink) { m_spectrumSink = sampleSink; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int m_channelSampleRate;
|
int m_channelSampleRate;
|
||||||
@ -101,7 +101,7 @@ private:
|
|||||||
int m_DSBFilterBufferIndex;
|
int m_DSBFilterBufferIndex;
|
||||||
static const int m_ssbFftLen;
|
static const int m_ssbFftLen;
|
||||||
|
|
||||||
BasebandSampleSink* m_spectrumSink;
|
SpectrumVis* m_spectrumSink;
|
||||||
SampleVector m_sampleBuffer;
|
SampleVector m_sampleBuffer;
|
||||||
|
|
||||||
fftfilt::cmplx m_sum;
|
fftfilt::cmplx m_sum;
|
||||||
|
@ -40,9 +40,6 @@ WFMModBaseband::WFMModBaseband() :
|
|||||||
Qt::QueuedConnection
|
Qt::QueuedConnection
|
||||||
);
|
);
|
||||||
|
|
||||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSource(m_source.getAudioFifo(), getInputMessageQueue());
|
|
||||||
m_source.applyAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getInputSampleRate());
|
|
||||||
|
|
||||||
DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(m_source.getFeedbackAudioFifo(), getInputMessageQueue());
|
DSPEngine::instance()->getAudioDeviceManager()->addAudioSink(m_source.getFeedbackAudioFifo(), getInputMessageQueue());
|
||||||
m_source.applyFeedbackAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getOutputSampleRate());
|
m_source.applyFeedbackAudioSampleRate(DSPEngine::instance()->getAudioDeviceManager()->getOutputSampleRate());
|
||||||
|
|
||||||
@ -198,7 +195,6 @@ void WFMModBaseband::applySettings(const WFMModSettings& settings, bool force)
|
|||||||
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
||||||
audioDeviceManager->removeAudioSource(getAudioFifo());
|
audioDeviceManager->removeAudioSource(getAudioFifo());
|
||||||
audioDeviceManager->addAudioSource(getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
|
|
||||||
int audioSampleRate = audioDeviceManager->getInputSampleRate(audioDeviceIndex);
|
int audioSampleRate = audioDeviceManager->getInputSampleRate(audioDeviceIndex);
|
||||||
|
|
||||||
if (getAudioSampleRate() != audioSampleRate) {
|
if (getAudioSampleRate() != audioSampleRate) {
|
||||||
@ -206,6 +202,18 @@ void WFMModBaseband::applySettings(const WFMModSettings& settings, bool force)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((settings.m_modAFInput != m_settings.m_modAFInput) || force)
|
||||||
|
{
|
||||||
|
AudioDeviceManager *audioDeviceManager = DSPEngine::instance()->getAudioDeviceManager();
|
||||||
|
int audioDeviceIndex = audioDeviceManager->getInputDeviceIndex(settings.m_audioDeviceName);
|
||||||
|
|
||||||
|
if (settings.m_modAFInput == WFMModSettings::WFMModInputAudio) {
|
||||||
|
audioDeviceManager->addAudioSource(getAudioFifo(), getInputMessageQueue(), audioDeviceIndex);
|
||||||
|
} else {
|
||||||
|
audioDeviceManager->removeAudioSource(getAudioFifo());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_source.applySettings(settings, force);
|
m_source.applySettings(settings, force);
|
||||||
|
|
||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
|
@ -39,6 +39,8 @@ WFMModSource::WFMModSource() :
|
|||||||
m_ifstream(nullptr),
|
m_ifstream(nullptr),
|
||||||
m_mutex(QMutex::Recursive)
|
m_mutex(QMutex::Recursive)
|
||||||
{
|
{
|
||||||
|
m_audioFifo.setLabel("WFMModSource.m_audioFifo");
|
||||||
|
m_feedbackAudioFifo.setLabel("WFMModSource.m_feedbackAudioFifo");
|
||||||
m_rfFilter = new fftfilt(-62500.0 / 384000.0, 62500.0 / 384000.0, m_rfFilterFFTLength);
|
m_rfFilter = new fftfilt(-62500.0 / 384000.0, 62500.0 / 384000.0, m_rfFilterFFTLength);
|
||||||
m_rfFilterBuffer = new Complex[m_rfFilterFFTLength];
|
m_rfFilterBuffer = new Complex[m_rfFilterFFTLength];
|
||||||
std::fill(m_rfFilterBuffer, m_rfFilterBuffer+m_rfFilterFFTLength, Complex{0,0});
|
std::fill(m_rfFilterBuffer, m_rfFilterBuffer+m_rfFilterFFTLength, Complex{0,0});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user