diff --git a/plugins/channelrx/wdsprx/CMakeLists.txt b/plugins/channelrx/wdsprx/CMakeLists.txt
index 0903740d1..9af100082 100644
--- a/plugins/channelrx/wdsprx/CMakeLists.txt
+++ b/plugins/channelrx/wdsprx/CMakeLists.txt
@@ -41,6 +41,8 @@ if(NOT SERVER_MODE)
wdsprxeqdialog.ui
wdsprxfmdialog.cpp
wdsprxfmdialog.ui
+ wdsprxpandialog.cpp
+ wdsprxpandialog.ui
wdsprxsquelchdialog.cpp
wdsprxsquelchdialog.ui
wdsprxgui.cpp
@@ -56,6 +58,7 @@ if(NOT SERVER_MODE)
wdsprxdnrdialog.h
wdsprxeqdialog.h
wdsprxfmdialog.h
+ wdsprxpandialog.h
wdsprxsquelchdialog.h
)
set(TARGET_NAME wdsprx)
diff --git a/plugins/channelrx/wdsprx/wdsprxdnrdialog.cpp b/plugins/channelrx/wdsprx/wdsprxdnrdialog.cpp
index 6d118a4af..da4ae0d45 100644
--- a/plugins/channelrx/wdsprx/wdsprxdnrdialog.cpp
+++ b/plugins/channelrx/wdsprx/wdsprxdnrdialog.cpp
@@ -38,14 +38,6 @@ void WDSPRxDNRDialog::setSNB(bool snb)
m_snb = snb;
}
-void WDSPRxDNRDialog::setANF(bool anf)
-{
- ui->anf->blockSignals(true);
- ui->anf->setChecked(anf);
- ui->anf->blockSignals(false);
- m_anf = anf;
-}
-
void WDSPRxDNRDialog::setNRScheme(WDSPRxProfile::WDSPRxNRScheme scheme)
{
ui->nr->blockSignals(true);
@@ -92,12 +84,6 @@ void WDSPRxDNRDialog::on_snb_clicked(bool checked)
emit valueChanged(ChangedSNB);
}
-void WDSPRxDNRDialog::on_anf_clicked(bool checked)
-{
- m_anf = checked;
- emit valueChanged(ChangedANF);
-}
-
void WDSPRxDNRDialog::on_nr_currentIndexChanged(int index)
{
m_nrScheme = (WDSPRxProfile::WDSPRxNRScheme) index;
diff --git a/plugins/channelrx/wdsprx/wdsprxdnrdialog.h b/plugins/channelrx/wdsprx/wdsprxdnrdialog.h
index a0a8d7641..4e2fef336 100644
--- a/plugins/channelrx/wdsprx/wdsprxdnrdialog.h
+++ b/plugins/channelrx/wdsprx/wdsprxdnrdialog.h
@@ -30,7 +30,6 @@ class WDSPRxDNRDialog : public QDialog {
public:
enum ValueChanged {
ChangedSNB,
- ChangedANF,
ChangedNR,
ChangedNR2Gain,
ChangedNR2NPE,
@@ -42,7 +41,6 @@ public:
~WDSPRxDNRDialog();
void setSNB(bool snb);
- void setANF(bool anf);
void setNRScheme(WDSPRxProfile::WDSPRxNRScheme scheme);
void setNR2Gain(WDSPRxProfile::WDSPRxNR2Gain gain);
void setNR2NPE(WDSPRxProfile::WDSPRxNR2NPE nr2NPE);
@@ -50,7 +48,6 @@ public:
void setNR2ArtifactReduction(bool nr2ArtifactReducion);
bool getSNB() const { return m_snb; }
- bool getANF() const { return m_anf; }
WDSPRxProfile::WDSPRxNRScheme getNRScheme() const { return m_nrScheme; }
WDSPRxProfile::WDSPRxNR2Gain getNR2Gain() const { return m_nr2Gain; }
WDSPRxProfile::WDSPRxNR2NPE getNR2NPE() const { return m_nr2NPE; }
@@ -63,7 +60,6 @@ signals:
private:
Ui::WDSPRxDNRDialog *ui;
bool m_snb;
- bool m_anf;
WDSPRxProfile::WDSPRxNRScheme m_nrScheme;
WDSPRxProfile::WDSPRxNR2Gain m_nr2Gain;
WDSPRxProfile::WDSPRxNR2NPE m_nr2NPE;
@@ -72,7 +68,6 @@ private:
private slots:
void on_snb_clicked(bool checked);
- void on_anf_clicked(bool checked);
void on_nr_currentIndexChanged(int index);
void on_nr2Gain_currentIndexChanged(int index);
void on_nr2NPE_currentIndexChanged(int index);
diff --git a/plugins/channelrx/wdsprx/wdsprxdnrdialog.ui b/plugins/channelrx/wdsprx/wdsprxdnrdialog.ui
index 51a4f546b..4494fd2b5 100644
--- a/plugins/channelrx/wdsprx/wdsprxdnrdialog.ui
+++ b/plugins/channelrx/wdsprx/wdsprxdnrdialog.ui
@@ -53,16 +53,6 @@
- -
-
-
- Automatic Notch Filter
-
-
- ANF
-
-
-
-
diff --git a/plugins/channelrx/wdsprx/wdsprxgui.cpp b/plugins/channelrx/wdsprx/wdsprxgui.cpp
index 8198bbe0b..3ff8640e5 100644
--- a/plugins/channelrx/wdsprx/wdsprxgui.cpp
+++ b/plugins/channelrx/wdsprx/wdsprxgui.cpp
@@ -45,6 +45,7 @@
#include "wdsprxcwpeakdialog.h"
#include "wdsprxsquelchdialog.h"
#include "wdsprxeqdialog.h"
+#include "wdsprxpandialog.h"
WDSPRxGUI* WDSPRxGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSink *rxChannel)
{
@@ -238,6 +239,13 @@ void WDSPRxGUI::on_dnb_toggled(bool checked)
applySettings();
}
+void WDSPRxGUI::on_anf_toggled(bool checked)
+{
+ m_settings.m_anf = checked;
+ m_settings.m_profiles[m_settings.m_profileIndex].m_anf = m_settings.m_anf;
+ applySettings();
+}
+
void WDSPRxGUI::on_cwPeaking_toggled(bool checked)
{
m_settings.m_cwPeaking = checked;
@@ -538,6 +546,9 @@ WDSPRxGUI::WDSPRxGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSam
CRightClickEnabler *equalizerRightClickEnabler = new CRightClickEnabler(ui->equalizer);
connect(equalizerRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(equalizerSetupDialog(const QPoint &)));
+ CRightClickEnabler *panRightClickEnabler = new CRightClickEnabler(ui->audioBinaural);
+ connect(panRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(panSetupDialog(const QPoint &)));
+
CRightClickEnabler *demodRightClickEnabler = new CRightClickEnabler(ui->demod);
connect(demodRightClickEnabler, SIGNAL(rightClick(const QPoint &)), this, SLOT(demodSetupDialog(const QPoint &)));
@@ -816,6 +827,7 @@ void WDSPRxGUI::displaySettings()
ui->agcGainText->setText(s);
ui->dnr->setChecked(m_settings.m_dnr);
ui->dnb->setChecked(m_settings.m_dnb);
+ ui->anf->setChecked(m_settings.m_anf);
ui->cwPeaking->setChecked(m_settings.m_cwPeaking);
ui->squelch->setChecked(m_settings.m_squelch);
ui->squelchThreshold->setValue(m_settings.m_squelchThreshold);
@@ -1035,7 +1047,6 @@ void WDSPRxGUI::dnrSetupDialog(const QPoint& p)
m_dnrDialog = new WDSPRxDNRDialog();
m_dnrDialog->move(p);
m_dnrDialog->setSNB(m_settings.m_snb);
- m_dnrDialog->setANF(m_settings.m_anf);
m_dnrDialog->setNRScheme(m_settings.m_nrScheme);
m_dnrDialog->setNR2Gain(m_settings.m_nr2Gain);
m_dnrDialog->setNR2NPE(m_settings.m_nr2NPE);
@@ -1063,11 +1074,6 @@ void WDSPRxGUI::dnrSetup(int32_t iValueChanged)
m_settings.m_profiles[m_settings.m_profileIndex].m_snb = m_settings.m_snb;
applySettings();
break;
- case WDSPRxDNRDialog::ValueChanged::ChangedANF:
- m_settings.m_anf = m_dnrDialog->getANF();
- m_settings.m_profiles[m_settings.m_profileIndex].m_anf = m_settings.m_anf;
- applySettings();
- break;
case WDSPRxDNRDialog::ValueChanged::ChangedNR:
m_settings.m_nrScheme = m_dnrDialog->getNRScheme();
m_settings.m_profiles[m_settings.m_profileIndex].m_nrScheme = m_settings.m_nrScheme;
@@ -1333,6 +1339,38 @@ void WDSPRxGUI::equalizerSetup(int iValueChanged)
}
}
+void WDSPRxGUI::panSetupDialog(const QPoint& p)
+{
+ m_panDialog = new WDSPRxPanDialog();
+ m_panDialog->move(p);
+ m_panDialog->setPan(m_settings.m_audioPan);
+ QObject::connect(m_panDialog, &WDSPRxPanDialog::valueChanged, this, &WDSPRxGUI::panSetup);
+ m_panDialog->exec();
+ QObject::disconnect(m_panDialog, &WDSPRxPanDialog::valueChanged, this, &WDSPRxGUI::panSetup);
+ m_panDialog->deleteLater();
+ m_panDialog = nullptr;
+}
+
+void WDSPRxGUI::panSetup(int iValueChanged)
+{
+ if (!m_panDialog) {
+ return;
+ }
+
+ WDSPRxPanDialog::ValueChanged valueChanged = (WDSPRxPanDialog::ValueChanged) iValueChanged;
+
+ switch (valueChanged)
+ {
+ case WDSPRxPanDialog::ChangedPan:
+ m_settings.m_audioPan = m_panDialog->getPan();
+ m_settings.m_profiles[m_settings.m_profileIndex].m_audioPan = m_settings.m_audioPan;
+ applySettings();
+ break;
+ default:
+ break;
+ }
+}
+
void WDSPRxGUI::tick()
{
double powDbAvg, powDbPeak;
@@ -1379,6 +1417,8 @@ void WDSPRxGUI::makeUIConnections()
QObject::connect(ui->volume, &QDial::valueChanged, this, &WDSPRxGUI::on_volume_valueChanged);
QObject::connect(ui->agc, &ButtonSwitch::toggled, this, &WDSPRxGUI::on_agc_toggled);
QObject::connect(ui->dnr, &ButtonSwitch::toggled, this, &WDSPRxGUI::on_dnr_toggled);
+ QObject::connect(ui->dnb, &ButtonSwitch::toggled, this, &WDSPRxGUI::on_dnb_toggled);
+ QObject::connect(ui->anf, &ButtonSwitch::toggled, this, &WDSPRxGUI::on_anf_toggled);
QObject::connect(ui->agcGain, &QDial::valueChanged, this, &WDSPRxGUI::on_agcGain_valueChanged);
QObject::connect(ui->audioMute, &QToolButton::toggled, this, &WDSPRxGUI::on_audioMute_toggled);
QObject::connect(ui->spanLog2, &QSlider::valueChanged, this, &WDSPRxGUI::on_spanLog2_valueChanged);
diff --git a/plugins/channelrx/wdsprx/wdsprxgui.h b/plugins/channelrx/wdsprx/wdsprxgui.h
index ebc44fb8c..96dcc892f 100644
--- a/plugins/channelrx/wdsprx/wdsprxgui.h
+++ b/plugins/channelrx/wdsprx/wdsprxgui.h
@@ -42,6 +42,7 @@ class WDSPRxFMDialog;
class WDSPRxCWPeakDialog;
class WDSPRxSquelchDialog;
class WDSPRxEqDialog;
+class WDSPRxPanDialog;
class SpectrumVis;
class BasebandSampleSink;
@@ -105,6 +106,7 @@ private:
WDSPRxCWPeakDialog* m_cwPeakDialog;
WDSPRxSquelchDialog* m_squelchDialog;
WDSPRxEqDialog* m_equalizerDialog;
+ WDSPRxPanDialog* m_panDialog;
QIcon m_iconDSBUSB;
QIcon m_iconDSBLSB;
@@ -136,6 +138,7 @@ private slots:
void on_agc_toggled(bool checked);
void on_dnr_toggled(bool checked);
void on_dnb_toggled(bool checked);
+ void on_anf_toggled(bool checked);
void on_agcGain_valueChanged(int value);
void on_audioMute_toggled(bool checked);
void on_spanLog2_valueChanged(int value);
@@ -169,6 +172,8 @@ private slots:
void squelchSetup(int valueChanged);
void equalizerSetupDialog(const QPoint& p);
void equalizerSetup(int valueChanged);
+ void panSetupDialog(const QPoint& p);
+ void panSetup(int valueChanged);
void tick();
};
diff --git a/plugins/channelrx/wdsprx/wdsprxgui.ui b/plugins/channelrx/wdsprx/wdsprxgui.ui
index 1b09b804a..af38871ef 100644
--- a/plugins/channelrx/wdsprx/wdsprxgui.ui
+++ b/plugins/channelrx/wdsprx/wdsprxgui.ui
@@ -559,7 +559,7 @@
- Highpass filter cutoff frequency (SSB)
+ Bandpass filter near (to 0) cutoff frequency (SSB)
-60
@@ -641,7 +641,7 @@
- Lowpass filter cutoff frequency
+ Bandpass filter far (from 0) cutoff frequency
-60
@@ -989,6 +989,19 @@
+ -
+
+
+ Toggle Automatic Notch Filter
+
+
+ ANF
+
+
+ true
+
+
+
-
diff --git a/plugins/channelrx/wdsprx/wdsprxpandialog.cpp b/plugins/channelrx/wdsprx/wdsprxpandialog.cpp
new file mode 100644
index 000000000..f2978ad23
--- /dev/null
+++ b/plugins/channelrx/wdsprx/wdsprxpandialog.cpp
@@ -0,0 +1,55 @@
+///////////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2024 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////////
+
+#include "wdsprxpandialog.h"
+#include "ui_wdsprxpandialog.h"
+
+WDSPRxPanDialog::WDSPRxPanDialog(QWidget* parent) :
+ QDialog(parent),
+ ui(new Ui::WDSPRxPanDialog)
+{
+ ui->setupUi(this);
+}
+
+WDSPRxPanDialog::~WDSPRxPanDialog()
+{
+ delete ui;
+}
+
+void WDSPRxPanDialog::setPan(double pan)
+{
+ ui->pan->blockSignals(true);
+ ui->pan->setValue((int) ((pan - 0.5)*200.0));
+ ui->pan->blockSignals(false);
+ ui->panText->setText(tr("%1").arg(ui->pan->value()));
+ m_pan = pan;
+}
+
+void WDSPRxPanDialog::on_zero_clicked()
+{
+ ui->pan->setValue(0);
+ ui->panText->setText(tr("%1").arg(ui->pan->value()));
+ m_pan = 0.5;
+ emit valueChanged(ChangedPan);
+}
+
+void WDSPRxPanDialog::on_pan_valueChanged(int value)
+{
+ ui->panText->setText(tr("%1").arg(ui->pan->value()));
+ m_pan = 0.5 + (value / 200.0);
+ emit valueChanged(ChangedPan);
+}
diff --git a/plugins/channelrx/wdsprx/wdsprxpandialog.h b/plugins/channelrx/wdsprx/wdsprxpandialog.h
new file mode 100644
index 000000000..95b7694dc
--- /dev/null
+++ b/plugins/channelrx/wdsprx/wdsprxpandialog.h
@@ -0,0 +1,53 @@
+///////////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2024 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// (at your option) any later version. //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////////
+#ifndef INCLUDE_WDSPRXPANDIALOG_H
+#define INCLUDE_WDSPRXPANDIALOG_H
+
+#include
+
+#include "wdsprxsettings.h"
+
+namespace Ui {
+ class WDSPRxPanDialog;
+}
+
+class WDSPRxPanDialog : public QDialog {
+ Q_OBJECT
+public:
+ enum ValueChanged {
+ ChangedPan,
+ };
+
+ explicit WDSPRxPanDialog(QWidget* parent = nullptr);
+ ~WDSPRxPanDialog();
+
+ void setPan(double pan);
+ double getPan() const { return m_pan; }
+
+signals:
+ void valueChanged(int valueChanged);
+
+private:
+ Ui::WDSPRxPanDialog *ui;
+ double m_pan;
+
+private slots:
+ void on_zero_clicked();
+ void on_pan_valueChanged(int value);
+};
+
+#endif
diff --git a/plugins/channelrx/wdsprx/wdsprxpandialog.ui b/plugins/channelrx/wdsprx/wdsprxpandialog.ui
new file mode 100644
index 000000000..f7cbbc5b5
--- /dev/null
+++ b/plugins/channelrx/wdsprx/wdsprxpandialog.ui
@@ -0,0 +1,210 @@
+
+
+ WDSPRxPanDialog
+
+
+
+ 0
+ 0
+ 385
+ 111
+
+
+
+ Audio Pan
+
+
+
-
+
+
-
+
+
+
+ 30
+ 16777215
+
+
+
+ Reset to 0 (center)
+
+
+ 0
+
+
+
+ -
+
+
+ Pan value (%) negative: left positive: right
+
+
+ -100
+
+
+ 100
+
+
+ 1
+
+
+ 0
+
+
+ Qt::Horizontal
+
+
+ QSlider::TicksBelow
+
+
+ 5
+
+
+
+ -
+
+
+
+ 32
+ 0
+
+
+
+ -100
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+
+
+ -
+
+
-
+
+
+
+ 30
+ 0
+
+
+
+
+ 30
+ 16777215
+
+
+
+
+
+
+
+ -
+
+
+ L
+
+
+
+ -
+
+
+
+ 12
+ 16777215
+
+
+
+ 0
+
+
+ Qt::AlignCenter
+
+
+
+ -
+
+
+ R
+
+
+ Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
+
+
+
+ -
+
+
+
+ 32
+ 0
+
+
+
+
+ 32
+ 16777215
+
+
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Close
+
+
+
+
+
+
+
+ TickedSlider
+ QSlider
+
+
+
+
+
+
+ buttonBox
+ accepted()
+ WDSPRxPanDialog
+ accept()
+
+
+ 248
+ 254
+
+
+ 157
+ 274
+
+
+
+
+ buttonBox
+ rejected()
+ WDSPRxPanDialog
+ reject()
+
+
+ 316
+ 260
+
+
+ 286
+ 274
+
+
+
+
+
diff --git a/plugins/channelrx/wdsprx/wdsprxsettings.cpp b/plugins/channelrx/wdsprx/wdsprxsettings.cpp
index c0a0098d9..335415faf 100644
--- a/plugins/channelrx/wdsprx/wdsprxsettings.cpp
+++ b/plugins/channelrx/wdsprx/wdsprxsettings.cpp
@@ -44,6 +44,7 @@ void WDSPRxSettings::resetToDefaults()
m_demod = WDSPRxProfile::DemodSSB;
m_audioBinaural = false;
m_audioFlipChannels = false;
+ m_audioPan = 0.5;
m_dsb = false;
m_audioMute = false;
m_dbOrS = true;
@@ -127,6 +128,7 @@ QByteArray WDSPRxSettings::serialize() const
}
s.writeU32( 5, m_rgbColor);
+ s.writeDouble( 6, m_audioPan);
s.writeBool( 7, m_dbOrS);
s.writeBool( 8, m_audioBinaural);
s.writeBool( 9, m_audioFlipChannels);
@@ -227,6 +229,7 @@ QByteArray WDSPRxSettings::serialize() const
s.writeBool (106 + 100*i, (int) m_profiles[i].m_audioFlipChannels);
s.writeBool (107 + 100*i, (int) m_profiles[i].m_dsb);
s.writeBool (108 + 100*i, (int) m_profiles[i].m_dbOrS);
+ s.writeDouble(109 + 100*i, m_profiles[i].m_audioPan);
// Filter
s.writeS32 (100 + 100*i, m_profiles[i].m_spanLog2);
s.writeS32 (101 + 100*i, m_profiles[i].m_highCutoff / 100.0);
@@ -335,6 +338,7 @@ bool WDSPRxSettings::deserialize(const QByteArray& data)
}
d.readU32( 5, &m_rgbColor);
+ d.readDouble( 6, &m_audioPan, 0.5);
d.readBool( 7, &m_dbOrS, true);
d.readBool( 8, &m_audioBinaural, false);
d.readBool( 9, &m_audioFlipChannels, false);
@@ -456,6 +460,7 @@ bool WDSPRxSettings::deserialize(const QByteArray& data)
d.readBool( 106 + 100*i, &m_profiles[i].m_audioFlipChannels, false);
d.readBool( 107 + 100*i, &m_profiles[i].m_dsb, false);
d.readBool( 108 + 100*i, &m_profiles[i].m_dbOrS, true);
+ d.readDouble(109 + 100*i, &m_profiles[i].m_audioPan, 0.5);
// Filter
d.readS32 (100 + 100*i, &m_profiles[i].m_spanLog2, 3);
d.readS32 (101 + 100*i, &tmp, 30);
diff --git a/plugins/channelrx/wdsprx/wdsprxsettings.h b/plugins/channelrx/wdsprx/wdsprxsettings.h
index 80052b24a..737adedbe 100644
--- a/plugins/channelrx/wdsprx/wdsprxsettings.h
+++ b/plugins/channelrx/wdsprx/wdsprxsettings.h
@@ -88,6 +88,7 @@ struct WDSPRxProfile
WDSPRxDemod m_demod;
bool m_audioBinaural;
bool m_audioFlipChannels;
+ double m_audioPan;
bool m_dsb;
bool m_dbOrS;
// Filter
@@ -151,6 +152,7 @@ struct WDSPRxProfile
m_demod(DemodSSB),
m_audioBinaural(false),
m_audioFlipChannels(false),
+ m_audioPan(0.5),
m_dsb(false),
m_dbOrS(true),
m_spanLog2(3),
@@ -214,6 +216,7 @@ struct WDSPRxSettings
// int m_spanLog2;
bool m_audioBinaural;
bool m_audioFlipChannels;
+ double m_audioPan;
bool m_dsb;
bool m_audioMute;
bool m_dbOrS;
diff --git a/plugins/channelrx/wdsprx/wdsprxsink.cpp b/plugins/channelrx/wdsprx/wdsprxsink.cpp
index 4cfc42634..cdcbc66fb 100644
--- a/plugins/channelrx/wdsprx/wdsprxsink.cpp
+++ b/plugins/channelrx/wdsprx/wdsprxsink.cpp
@@ -747,12 +747,18 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force)
}
if ((m_settings.m_audioBinaural != settings.m_audioBinaural)
+ || (m_settings.m_audioPan != settings.m_audioPan)
|| (m_settings.m_audioFlipChannels != settings.m_audioFlipChannels) || force)
{
- if (settings.m_audioBinaural) {
+ if (settings.m_audioBinaural)
+ {
WDSP::PANEL::SetPanelCopy(*m_rxa, settings.m_audioFlipChannels ? 3 : 0);
- } else {
+ WDSP::PANEL::SetPanelPan(*m_rxa, settings.m_audioPan);
+ }
+ else
+ {
WDSP::PANEL::SetPanelCopy(*m_rxa, settings.m_audioFlipChannels ? 2 : 1);
+ WDSP::PANEL::SetPanelPan(*m_rxa, 0.5);
}
}