mirror of
https://github.com/f4exb/sdrangel.git
synced 2026-08-14 23:43:43 -04:00
BFM Demodulator: added an audio mute button. Fixes #2413
This commit is contained in:
@@ -236,6 +236,9 @@ void BFMDemod::applySettings(const BFMDemodSettings& settings, bool force)
|
||||
if ((settings.m_volume != m_settings.m_volume) || force) {
|
||||
reverseAPIKeys.append("volume");
|
||||
}
|
||||
if ((settings.m_audioMute != m_settings.m_audioMute) || force) {
|
||||
reverseAPIKeys.append("audioMute");
|
||||
}
|
||||
if ((settings.m_audioStereo != m_settings.m_audioStereo) || force) {
|
||||
reverseAPIKeys.append("audioStereo");
|
||||
}
|
||||
@@ -389,6 +392,9 @@ void BFMDemod::webapiUpdateChannelSettings(
|
||||
if (channelSettingsKeys.contains("squelch")) {
|
||||
settings.m_squelch = response.getBfmDemodSettings()->getSquelch();
|
||||
}
|
||||
if (channelSettingsKeys.contains("audioMute")) {
|
||||
settings.m_audioMute = response.getBfmDemodSettings()->getAudioMute() != 0;
|
||||
}
|
||||
if (channelSettingsKeys.contains("audioStereo")) {
|
||||
settings.m_audioStereo = response.getBfmDemodSettings()->getAudioStereo() != 0;
|
||||
}
|
||||
@@ -457,6 +463,7 @@ void BFMDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& resp
|
||||
response.getBfmDemodSettings()->setAfBandwidth(settings.m_afBandwidth);
|
||||
response.getBfmDemodSettings()->setVolume(settings.m_volume);
|
||||
response.getBfmDemodSettings()->setSquelch(settings.m_squelch);
|
||||
response.getBfmDemodSettings()->setAudioMute(settings.m_audioMute ? 1 : 0);
|
||||
response.getBfmDemodSettings()->setAudioStereo(settings.m_audioStereo ? 1 : 0);
|
||||
response.getBfmDemodSettings()->setLsbStereo(settings.m_lsbStereo ? 1 : 0);
|
||||
response.getBfmDemodSettings()->setShowPilot(settings.m_showPilot ? 1 : 0);
|
||||
@@ -671,6 +678,9 @@ void BFMDemod::webapiFormatChannelSettings(
|
||||
if (channelSettingsKeys.contains("squelch") || force) {
|
||||
swgBFMDemodSettings->setSquelch(settings.m_squelch);
|
||||
}
|
||||
if (channelSettingsKeys.contains("audioMute") || force) {
|
||||
swgBFMDemodSettings->setAudioMute(settings.m_audioMute ? 1 : 0);
|
||||
}
|
||||
if (channelSettingsKeys.contains("audioStereo") || force) {
|
||||
swgBFMDemodSettings->setAudioStereo(settings.m_audioStereo ? 1 : 0);
|
||||
}
|
||||
|
||||
@@ -193,6 +193,12 @@ void BFMDemodGUI::on_squelch_valueChanged(int value)
|
||||
applySettings();
|
||||
}
|
||||
|
||||
void BFMDemodGUI::on_audioMute_toggled(bool mute)
|
||||
{
|
||||
m_settings.m_audioMute = mute;
|
||||
applySettings();
|
||||
}
|
||||
|
||||
void BFMDemodGUI::on_audioStereo_toggled(bool stereo)
|
||||
{
|
||||
if (!stereo)
|
||||
@@ -512,6 +518,7 @@ void BFMDemodGUI::displaySettings()
|
||||
ui->squelch->setValue(m_settings.m_squelch);
|
||||
ui->squelchText->setText(QString("%1 dB").arg(m_settings.m_squelch));
|
||||
|
||||
ui->audioMute->setChecked(m_settings.m_audioMute);
|
||||
ui->audioStereo->setChecked(m_settings.m_audioStereo);
|
||||
ui->lsbStereo->setChecked(m_settings.m_lsbStereo);
|
||||
ui->showPilot->setChecked(m_settings.m_showPilot);
|
||||
@@ -881,6 +888,7 @@ void BFMDemodGUI::makeUIConnections()
|
||||
QObject::connect(ui->afBW, &QSlider::valueChanged, this, &BFMDemodGUI::on_afBW_valueChanged);
|
||||
QObject::connect(ui->volume, &QSlider::valueChanged, this, &BFMDemodGUI::on_volume_valueChanged);
|
||||
QObject::connect(ui->squelch, &QSlider::valueChanged, this, &BFMDemodGUI::on_squelch_valueChanged);
|
||||
QObject::connect(ui->audioMute, &QToolButton::toggled, this, &BFMDemodGUI::on_audioMute_toggled);
|
||||
QObject::connect(ui->audioStereo, &QToolButton::toggled, this, &BFMDemodGUI::on_audioStereo_toggled);
|
||||
QObject::connect(ui->lsbStereo, &ButtonSwitch::toggled, this, &BFMDemodGUI::on_lsbStereo_toggled);
|
||||
QObject::connect(ui->showPilot, &ButtonSwitch::clicked, this, &BFMDemodGUI::on_showPilot_clicked);
|
||||
|
||||
@@ -110,6 +110,7 @@ private slots:
|
||||
void on_afBW_valueChanged(int value);
|
||||
void on_volume_valueChanged(int value);
|
||||
void on_squelch_valueChanged(int value);
|
||||
void on_audioMute_toggled(bool mute);
|
||||
void on_audioStereo_toggled(bool stereo);
|
||||
void on_lsbStereo_toggled(bool lsb);
|
||||
void on_showPilot_clicked();
|
||||
|
||||
@@ -267,6 +267,24 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="audioMute">
|
||||
<property name="toolTip">
|
||||
<string>Mute/Unmute audio</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>...</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../../sdrgui/resources/res.qrc">
|
||||
<normaloff>:/sound_on.png</normaloff>
|
||||
<normalon>:/sound_off.png</normalon>:/sound_on.png</iconset>
|
||||
</property>
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -1883,11 +1901,6 @@
|
||||
</widget>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>ButtonSwitch</class>
|
||||
<extends>QToolButton</extends>
|
||||
<header>gui/buttonswitch.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>RollupContents</class>
|
||||
<extends>QWidget</extends>
|
||||
@@ -1900,6 +1913,11 @@
|
||||
<header>gui/valuedialz.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>ButtonSwitch</class>
|
||||
<extends>QToolButton</extends>
|
||||
<header>gui/buttonswitch.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>LevelMeterSignalDB</class>
|
||||
<extends>QWidget</extends>
|
||||
|
||||
@@ -46,6 +46,7 @@ void BFMDemodSettings::resetToDefaults()
|
||||
m_afBandwidth = 15000;
|
||||
m_volume = 2.0;
|
||||
m_squelch = -60.0;
|
||||
m_audioMute = false;
|
||||
m_audioStereo = false;
|
||||
m_lsbStereo = false;
|
||||
m_showPilot = false;
|
||||
@@ -101,6 +102,7 @@ QByteArray BFMDemodSettings::serialize() const
|
||||
s.writeS32(22, m_workspaceIndex);
|
||||
s.writeBlob(23, m_geometryBytes);
|
||||
s.writeBool(24, m_hidden);
|
||||
s.writeBool(25, m_audioMute);
|
||||
|
||||
return s.final();
|
||||
}
|
||||
@@ -178,6 +180,7 @@ bool BFMDemodSettings::deserialize(const QByteArray& data)
|
||||
d.readS32(22, &m_workspaceIndex, 0);
|
||||
d.readBlob(23, &m_geometryBytes);
|
||||
d.readBool(24, &m_hidden, false);
|
||||
d.readBool(25, &m_audioMute, false);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ struct BFMDemodSettings
|
||||
Real m_afBandwidth;
|
||||
Real m_volume;
|
||||
Real m_squelch;
|
||||
bool m_audioMute;
|
||||
bool m_audioStereo;
|
||||
bool m_lsbStereo;
|
||||
bool m_showPilot;
|
||||
|
||||
@@ -96,6 +96,10 @@ void BFMDemodSink::feed(const SampleVector::const_iterator& begin, const SampleV
|
||||
|
||||
m_sampleBuffer.clear();
|
||||
|
||||
if (m_settings.m_audioMute) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (SampleVector::const_iterator it = begin; it != end; ++it)
|
||||
{
|
||||
Complex c(it->real() / SDR_RX_SCALEF, it->imag() / SDR_RX_SCALEF);
|
||||
|
||||
@@ -48,6 +48,10 @@ This is the power of the reconstructed stereo pilot signal.
|
||||
|
||||
Use this button to activate or de-activate RDS decoding
|
||||
|
||||
<h3>Audio mute</h3>
|
||||
|
||||
Use this button to mute or unmute audio
|
||||
|
||||
<h3>A.8: Level meter in dB</h3>
|
||||
|
||||
- top bar (green): average value
|
||||
|
||||
@@ -2956,6 +2956,9 @@ margin-bottom: 20px;
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"audioMute" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"audioStereo" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
@@ -59647,7 +59650,7 @@ except ApiException as e:
|
||||
</div>
|
||||
<div id="generator">
|
||||
<div class="content">
|
||||
Generated 2026-01-03T10:36:00.091+01:00
|
||||
Generated 2026-01-03T23:29:39.831+01:00
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,6 +16,8 @@ BFMDemodSettings:
|
||||
squelch:
|
||||
type: number
|
||||
format: float
|
||||
audioMute:
|
||||
type: integer
|
||||
audioStereo:
|
||||
type: integer
|
||||
lsbStereo:
|
||||
|
||||
@@ -16,6 +16,8 @@ BFMDemodSettings:
|
||||
squelch:
|
||||
type: number
|
||||
format: float
|
||||
audioMute:
|
||||
type: integer
|
||||
audioStereo:
|
||||
type: integer
|
||||
lsbStereo:
|
||||
|
||||
@@ -2956,6 +2956,9 @@ margin-bottom: 20px;
|
||||
"type" : "number",
|
||||
"format" : "float"
|
||||
},
|
||||
"audioMute" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
"audioStereo" : {
|
||||
"type" : "integer"
|
||||
},
|
||||
@@ -59647,7 +59650,7 @@ except ApiException as e:
|
||||
</div>
|
||||
<div id="generator">
|
||||
<div class="content">
|
||||
Generated 2026-01-03T10:36:00.091+01:00
|
||||
Generated 2026-01-03T23:29:39.831+01:00
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -38,6 +38,8 @@ SWGBFMDemodSettings::SWGBFMDemodSettings() {
|
||||
m_volume_isSet = false;
|
||||
squelch = 0.0f;
|
||||
m_squelch_isSet = false;
|
||||
audio_mute = 0;
|
||||
m_audio_mute_isSet = false;
|
||||
audio_stereo = 0;
|
||||
m_audio_stereo_isSet = false;
|
||||
lsb_stereo = 0;
|
||||
@@ -88,6 +90,8 @@ SWGBFMDemodSettings::init() {
|
||||
m_volume_isSet = false;
|
||||
squelch = 0.0f;
|
||||
m_squelch_isSet = false;
|
||||
audio_mute = 0;
|
||||
m_audio_mute_isSet = false;
|
||||
audio_stereo = 0;
|
||||
m_audio_stereo_isSet = false;
|
||||
lsb_stereo = 0;
|
||||
@@ -134,6 +138,7 @@ SWGBFMDemodSettings::cleanup() {
|
||||
|
||||
|
||||
|
||||
|
||||
if(title != nullptr) {
|
||||
delete title;
|
||||
}
|
||||
@@ -180,6 +185,8 @@ SWGBFMDemodSettings::fromJsonObject(QJsonObject &pJson) {
|
||||
|
||||
::SWGSDRangel::setValue(&squelch, pJson["squelch"], "float", "");
|
||||
|
||||
::SWGSDRangel::setValue(&audio_mute, pJson["audioMute"], "qint32", "");
|
||||
|
||||
::SWGSDRangel::setValue(&audio_stereo, pJson["audioStereo"], "qint32", "");
|
||||
|
||||
::SWGSDRangel::setValue(&lsb_stereo, pJson["lsbStereo"], "qint32", "");
|
||||
@@ -243,6 +250,9 @@ SWGBFMDemodSettings::asJsonObject() {
|
||||
if(m_squelch_isSet){
|
||||
obj->insert("squelch", QJsonValue(squelch));
|
||||
}
|
||||
if(m_audio_mute_isSet){
|
||||
obj->insert("audioMute", QJsonValue(audio_mute));
|
||||
}
|
||||
if(m_audio_stereo_isSet){
|
||||
obj->insert("audioStereo", QJsonValue(audio_stereo));
|
||||
}
|
||||
@@ -345,6 +355,16 @@ SWGBFMDemodSettings::setSquelch(float squelch) {
|
||||
this->m_squelch_isSet = true;
|
||||
}
|
||||
|
||||
qint32
|
||||
SWGBFMDemodSettings::getAudioMute() {
|
||||
return audio_mute;
|
||||
}
|
||||
void
|
||||
SWGBFMDemodSettings::setAudioMute(qint32 audio_mute) {
|
||||
this->audio_mute = audio_mute;
|
||||
this->m_audio_mute_isSet = true;
|
||||
}
|
||||
|
||||
qint32
|
||||
SWGBFMDemodSettings::getAudioStereo() {
|
||||
return audio_stereo;
|
||||
@@ -525,6 +545,9 @@ SWGBFMDemodSettings::isSet(){
|
||||
if(m_squelch_isSet){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(m_audio_mute_isSet){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
if(m_audio_stereo_isSet){
|
||||
isObjectUpdated = true; break;
|
||||
}
|
||||
|
||||
@@ -60,6 +60,9 @@ public:
|
||||
float getSquelch();
|
||||
void setSquelch(float squelch);
|
||||
|
||||
qint32 getAudioMute();
|
||||
void setAudioMute(qint32 audio_mute);
|
||||
|
||||
qint32 getAudioStereo();
|
||||
void setAudioStereo(qint32 audio_stereo);
|
||||
|
||||
@@ -127,6 +130,9 @@ private:
|
||||
float squelch;
|
||||
bool m_squelch_isSet;
|
||||
|
||||
qint32 audio_mute;
|
||||
bool m_audio_mute_isSet;
|
||||
|
||||
qint32 audio_stereo;
|
||||
bool m_audio_stereo_isSet;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user