From fc89d3ea5cf54cd1266032ec61d540fcf8bc1843 Mon Sep 17 00:00:00 2001 From: f4exb Date: Sat, 5 Dec 2015 19:57:48 +0100 Subject: [PATCH] SSB demod: add flip binaural channels option --- plugins/channel/ssb/ssbdemod.cpp | 24 ++++++++++++++++++------ plugins/channel/ssb/ssbdemod.h | 17 ++++++++++++----- plugins/channel/ssb/ssbdemodgui.cpp | 13 ++++++++++++- plugins/channel/ssb/ssbdemodgui.h | 2 ++ plugins/channel/ssb/ssbdemodgui.ui | 9 ++++++++- 5 files changed, 52 insertions(+), 13 deletions(-) diff --git a/plugins/channel/ssb/ssbdemod.cpp b/plugins/channel/ssb/ssbdemod.cpp index 2a7b85f29..fe1105a0a 100644 --- a/plugins/channel/ssb/ssbdemod.cpp +++ b/plugins/channel/ssb/ssbdemod.cpp @@ -30,7 +30,8 @@ SSBDemod::SSBDemod(SampleSink* sampleSink) : m_sampleSink(sampleSink), m_audioFifo(4, 24000), m_settingsMutex(QMutex::Recursive), - m_audioBinaual(false) + m_audioBinaual(false), + m_audioFlipChannels(false) { setObjectName("SSBDemod"); @@ -72,9 +73,10 @@ void SSBDemod::configure(MessageQueue* messageQueue, Real LowCutoff, Real volume, int spanLog2, - bool audioBinaural) + bool audioBinaural, + bool audioFlipChannel) { - Message* cmd = MsgConfigureSSBDemod::create(Bandwidth, LowCutoff, volume, spanLog2, audioBinaural); + Message* cmd = MsgConfigureSSBDemod::create(Bandwidth, LowCutoff, volume, spanLog2, audioBinaural, audioFlipChannel); messageQueue->push(cmd); } @@ -127,8 +129,16 @@ void SSBDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto if (m_audioBinaual) { - m_audioBuffer[m_audioBufferFill].r = (qint16)(sideband[i].real() * m_volume * 100); - m_audioBuffer[m_audioBufferFill].l = (qint16)(sideband[i].imag() * m_volume * 100); + if (m_audioFlipChannels) + { + m_audioBuffer[m_audioBufferFill].r = (qint16)(sideband[i].imag() * m_volume * 100); + m_audioBuffer[m_audioBufferFill].l = (qint16)(sideband[i].real() * m_volume * 100); + } + else + { + m_audioBuffer[m_audioBufferFill].r = (qint16)(sideband[i].real() * m_volume * 100); + m_audioBuffer[m_audioBufferFill].l = (qint16)(sideband[i].imag() * m_volume * 100); + } } else { @@ -234,6 +244,7 @@ bool SSBDemod::handleMessage(const Message& cmd) m_spanLog2 = cfg.getSpanLog2(); m_audioBinaual = cfg.getAudioBinaural(); + m_audioFlipChannels = cfg.getAudioFlipChannels(); m_settingsMutex.unlock(); @@ -241,7 +252,8 @@ bool SSBDemod::handleMessage(const Message& cmd) << " m_LowCutoff: " << m_LowCutoff << " m_volume: " << m_volume << " m_spanLog2: " << m_spanLog2 - << " m_audioBinaual: " << m_audioBinaual; + << " m_audioBinaual: " << m_audioBinaual + << " m_audioFlipChannels: " << m_audioFlipChannels; return true; } diff --git a/plugins/channel/ssb/ssbdemod.h b/plugins/channel/ssb/ssbdemod.h index 96669a577..0e1fc0f89 100644 --- a/plugins/channel/ssb/ssbdemod.h +++ b/plugins/channel/ssb/ssbdemod.h @@ -39,7 +39,8 @@ public: Real LowCutoff, Real volume, int spanLog2, - bool audioBinaural); + bool audioBinaural, + bool audioFlipChannels); virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly); virtual void start(); @@ -58,14 +59,16 @@ private: Real getVolume() const { return m_volume; } int getSpanLog2() const { return m_spanLog2; } bool getAudioBinaural() const { return m_audioBinaural; } + bool getAudioFlipChannels() const { return m_audioFlipChannels; } static MsgConfigureSSBDemod* create(Real Bandwidth, Real LowCutoff, Real volume, int spanLog2, - bool audioBinaural) + bool audioBinaural, + bool audioFlipChannels) { - return new MsgConfigureSSBDemod(Bandwidth, LowCutoff, volume, spanLog2, audioBinaural); + return new MsgConfigureSSBDemod(Bandwidth, LowCutoff, volume, spanLog2, audioBinaural, audioFlipChannels); } private: @@ -74,18 +77,21 @@ private: Real m_volume; int m_spanLog2; bool m_audioBinaural; + bool m_audioFlipChannels; MsgConfigureSSBDemod(Real Bandwidth, Real LowCutoff, Real volume, int spanLog2, - bool audioBinaural) : + bool audioBinaural, + bool audioFlipChannels) : Message(), m_Bandwidth(Bandwidth), m_LowCutoff(LowCutoff), m_volume(volume), m_spanLog2(spanLog2), - m_audioBinaural(audioBinaural) + m_audioBinaural(audioBinaural), + m_audioFlipChannels(audioFlipChannels) { } }; @@ -104,6 +110,7 @@ private: int m_sampleRate; int m_frequency; bool m_audioBinaual; + bool m_audioFlipChannels; bool m_usb; Real m_magsq; diff --git a/plugins/channel/ssb/ssbdemodgui.cpp b/plugins/channel/ssb/ssbdemodgui.cpp index 90b97a0df..b28e3b530 100644 --- a/plugins/channel/ssb/ssbdemodgui.cpp +++ b/plugins/channel/ssb/ssbdemodgui.cpp @@ -72,6 +72,7 @@ QByteArray SSBDemodGUI::serialize() const s.writeS32(6, ui->lowCut->value()); s.writeS32(7, ui->spanLog2->value()); s.writeBool(8, m_audioBinaural); + s.writeBool(9, m_audioFlipChannels); return s.final(); } @@ -111,6 +112,8 @@ bool SSBDemodGUI::deserialize(const QByteArray& data) setNewRate(tmp); d.readBool(8, &m_audioBinaural); ui->audioBinaural->setChecked(m_audioBinaural); + d.readBool(9, &m_audioFlipChannels); + ui->audioFlipChannels->setChecked(m_audioFlipChannels); blockApplySettings(false); m_channelMarker.blockSignals(false); @@ -152,6 +155,12 @@ void SSBDemodGUI::on_audioBinaural_toggled(bool binaural) applySettings(); } +void SSBDemodGUI::on_audioFlipChannels_toggled(bool flip) +{ + m_audioFlipChannels = flip; + applySettings(); +} + void SSBDemodGUI::on_deltaFrequency_changed(quint64 value) { if (ui->deltaMinus->isChecked()) @@ -267,6 +276,7 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, QWidget* parent) : m_rate(6000), m_spanLog2(3), m_audioBinaural(false), + m_audioFlipChannels(false), m_channelPowerDbAvg(20,0) { ui->setupUi(this); @@ -385,7 +395,8 @@ void SSBDemodGUI::applySettings() ui->lowCut->value() * 100.0, ui->volume->value() / 10.0, m_spanLog2, - m_audioBinaural); + m_audioBinaural, + m_audioFlipChannels); } } diff --git a/plugins/channel/ssb/ssbdemodgui.h b/plugins/channel/ssb/ssbdemodgui.h index 4d128be89..051770f92 100644 --- a/plugins/channel/ssb/ssbdemodgui.h +++ b/plugins/channel/ssb/ssbdemodgui.h @@ -41,6 +41,7 @@ private slots: void on_deltaFrequency_changed(quint64 value); void on_deltaMinus_toggled(bool minus); void on_audioBinaural_toggled(bool binaural); + void on_audioFlipChannels_toggled(bool flip); void on_BW_valueChanged(int value); void on_lowCut_valueChanged(int value); void on_volume_valueChanged(int value); @@ -58,6 +59,7 @@ private: int m_rate; int m_spanLog2; bool m_audioBinaural; + bool m_audioFlipChannels; MovingAverage m_channelPowerDbAvg; ThreadedSampleSink* m_threadedChannelizer; diff --git a/plugins/channel/ssb/ssbdemodgui.ui b/plugins/channel/ssb/ssbdemodgui.ui index b0a5df0c0..eeaa90c47 100644 --- a/plugins/channel/ssb/ssbdemodgui.ui +++ b/plugins/channel/ssb/ssbdemodgui.ui @@ -142,10 +142,17 @@ + + + + Qt::Vertical + + + - Binaural audio + Binaural I/Q audio ...