From 508486f791c4be1cae330109b6f0f0128959a728 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 7 Dec 2015 08:55:22 +0100 Subject: [PATCH] BFM demod: implemented mono/stereo control from GUI --- plugins/channel/bfm/bfmdemod.cpp | 53 +++++++++++++++++++---------- plugins/channel/bfm/bfmdemod.h | 17 +++++---- plugins/channel/bfm/bfmdemodgui.cpp | 5 ++- 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/plugins/channel/bfm/bfmdemod.cpp b/plugins/channel/bfm/bfmdemod.cpp index 89ad77806..7d3d7c0ed 100644 --- a/plugins/channel/bfm/bfmdemod.cpp +++ b/plugins/channel/bfm/bfmdemod.cpp @@ -65,9 +65,9 @@ BFMDemod::~BFMDemod() DSPEngine::instance()->removeAudioSink(&m_audioFifo); } -void BFMDemod::configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, Real volume, Real squelch) +void BFMDemod::configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, Real volume, Real squelch, bool audioStereo) { - Message* cmd = MsgConfigureBFMDemod::create(rfBandwidth, afBandwidth, volume, squelch); + Message* cmd = MsgConfigureBFMDemod::create(rfBandwidth, afBandwidth, volume, squelch, audioStereo); messageQueue->push(cmd); } @@ -119,29 +119,42 @@ void BFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto m_m2Sample = m_m1Sample; m_m1Sample = rf[i]; - // TODO: conditional to stereo mode selected - Real pilotSample; - m_pilotPLL.process(demod, pilotSample); m_sampleBuffer.push_back(Sample(demod * (1<<15), 0.0)); - //m_sampleBuffer.push_back(Sample(pilotSample * (1<<15), 0.0)); // debug pilot - - Complex s(demod*2.0*pilotSample, 0); quint16 sampleStereo; - if (m_interpolatorStereo.interpolate(&m_interpolatorStereoDistanceRemain, s, &cs)) - { - sampleStereo = (qint16)(cs.real() * 3000 * m_running.m_volume); - } + // Process stereo if stereo mode is selected + if (m_running.m_audioStereo) + { + Real pilotSample; + m_pilotPLL.process(demod, pilotSample); + //m_sampleBuffer.push_back(Sample(pilotSample * (1<<15), 0.0)); // debug pilot + + Complex s(demod*2.0*pilotSample, 0); + + if (m_interpolatorStereo.interpolate(&m_interpolatorStereoDistanceRemain, s, &cs)) + { + sampleStereo = (qint16)(cs.real() * 3000 * m_running.m_volume); + } + } Complex e(demod, 0); - if(m_interpolator.interpolate(&m_interpolatorDistanceRemain, e, &ci)) + if (m_interpolator.interpolate(&m_interpolatorDistanceRemain, e, &ci)) { quint16 sample = (qint16)(ci.real() * 3000 * m_running.m_volume); - //m_sampleBuffer.push_back(Sample(sample, sample)); - m_audioBuffer[m_audioBufferFill].l = sample + sampleStereo; - m_audioBuffer[m_audioBufferFill].r = sample - sampleStereo; + + if (m_running.m_audioStereo) + { + m_audioBuffer[m_audioBufferFill].l = sample + sampleStereo; + m_audioBuffer[m_audioBufferFill].r = sample - sampleStereo; + } + else + { + m_audioBuffer[m_audioBufferFill].l = sample; + m_audioBuffer[m_audioBufferFill].r = sample; + } + ++m_audioBufferFill; if(m_audioBufferFill >= m_audioBuffer.size()) @@ -220,13 +233,15 @@ bool BFMDemod::handleMessage(const Message& cmd) m_config.m_afBandwidth = cfg.getAFBandwidth(); m_config.m_volume = cfg.getVolume(); m_config.m_squelch = cfg.getSquelch(); + m_config.m_audioStereo = cfg.getAudioStereo(); apply(); qDebug() << "BFMDemod::handleMessage: MsgConfigureBFMDemod: m_rfBandwidth: " << m_config.m_rfBandwidth << " m_afBandwidth: " << m_config.m_afBandwidth << " m_volume: " << m_config.m_volume - << " m_squelch: " << m_config.m_squelch; + << " m_squelch: " << m_config.m_squelch + << " m_audioStereo: " << m_config.m_audioStereo; return true; } @@ -245,7 +260,8 @@ bool BFMDemod::handleMessage(const Message& cmd) void BFMDemod::apply() { - if (m_config.m_inputSampleRate != m_running.m_inputSampleRate) + if ((m_config.m_inputSampleRate != m_running.m_inputSampleRate) + || (m_config.m_audioStereo && (m_config.m_audioStereo != m_running.m_audioStereo))) { m_pilotPLL.configure(19000.0/m_config.m_inputSampleRate, 50.0/m_config.m_inputSampleRate, 0.01); } @@ -309,5 +325,6 @@ void BFMDemod::apply() m_running.m_squelch = m_config.m_squelch; m_running.m_volume = m_config.m_volume; m_running.m_audioSampleRate = m_config.m_audioSampleRate; + m_running.m_audioStereo = m_config.m_audioStereo; } diff --git a/plugins/channel/bfm/bfmdemod.h b/plugins/channel/bfm/bfmdemod.h index 62f6ebfad..32541fbd1 100644 --- a/plugins/channel/bfm/bfmdemod.h +++ b/plugins/channel/bfm/bfmdemod.h @@ -37,7 +37,7 @@ public: BFMDemod(SampleSink* sampleSink); virtual ~BFMDemod(); - void configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, Real volume, Real squelch); + void configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, Real volume, Real squelch, bool audioStereo); int getSampleRate() const { return m_config.m_inputSampleRate; } virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po); @@ -58,10 +58,11 @@ private: Real getAFBandwidth() const { return m_afBandwidth; } Real getVolume() const { return m_volume; } Real getSquelch() const { return m_squelch; } + bool getAudioStereo() const { return m_audioStereo; } - static MsgConfigureBFMDemod* create(Real rfBandwidth, Real afBandwidth, Real volume, Real squelch) + static MsgConfigureBFMDemod* create(Real rfBandwidth, Real afBandwidth, Real volume, Real squelch, bool audioStereo) { - return new MsgConfigureBFMDemod(rfBandwidth, afBandwidth, volume, squelch); + return new MsgConfigureBFMDemod(rfBandwidth, afBandwidth, volume, squelch, audioStereo); } private: @@ -69,13 +70,15 @@ private: Real m_afBandwidth; Real m_volume; Real m_squelch; + bool m_audioStereo; - MsgConfigureBFMDemod(Real rfBandwidth, Real afBandwidth, Real volume, Real squelch) : + MsgConfigureBFMDemod(Real rfBandwidth, Real afBandwidth, Real volume, Real squelch, bool audioStereo) : Message(), m_rfBandwidth(rfBandwidth), m_afBandwidth(afBandwidth), m_volume(volume), - m_squelch(squelch) + m_squelch(squelch), + m_audioStereo(audioStereo) { } }; @@ -98,6 +101,7 @@ private: Real m_squelch; Real m_volume; quint32 m_audioSampleRate; + bool m_audioStereo; Config() : m_inputSampleRate(-1), @@ -106,7 +110,8 @@ private: m_afBandwidth(-1), m_squelch(0), m_volume(0), - m_audioSampleRate(0) + m_audioSampleRate(0), + m_audioStereo(false) { } }; diff --git a/plugins/channel/bfm/bfmdemodgui.cpp b/plugins/channel/bfm/bfmdemodgui.cpp index 67ae5ef28..ad6151301 100644 --- a/plugins/channel/bfm/bfmdemodgui.cpp +++ b/plugins/channel/bfm/bfmdemodgui.cpp @@ -222,6 +222,8 @@ void BFMDemodGUI::on_audioStereo_toggled(bool stereo) { ui->audioStereo->setStyleSheet("QToolButton { background:rgb(79,79,79); }"); } + + applySettings(); } void BFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown) @@ -318,7 +320,8 @@ void BFMDemodGUI::applySettings() m_rfBW[ui->rfBW->value()], ui->afBW->value() * 1000.0, ui->volume->value() / 10.0, - ui->squelch->value()); + ui->squelch->value(), + ui->audioStereo->isChecked()); } }