mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-21 04:58:38 -05:00
DSD demod: diagnostics on GUI. Audio volume and audio mute
This commit is contained in:
parent
17de736f36
commit
837c22fd67
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
// Copyright (C) 2015 F4EXB //
|
// Copyright (C) 2016 F4EXB //
|
||||||
// written by Edouard Griffiths //
|
// written by Edouard Griffiths //
|
||||||
// //
|
// //
|
||||||
// This program is free software; you can redistribute it and/or modify //
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
// Copyright (C) 2015 F4EXB //
|
// Copyright (C) 2016 F4EXB //
|
||||||
// written by Edouard Griffiths //
|
// written by Edouard Griffiths //
|
||||||
// //
|
// //
|
||||||
// This program is free software; you can redistribute it and/or modify //
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
@ -32,6 +32,12 @@ public:
|
|||||||
short *getAudio(int& nbSamples) { return m_decoder.getAudio(nbSamples); }
|
short *getAudio(int& nbSamples) { return m_decoder.getAudio(nbSamples); }
|
||||||
void resetAudio() { m_decoder.resetAudio(); }
|
void resetAudio() { m_decoder.resetAudio(); }
|
||||||
|
|
||||||
|
int getInLevel() const { return m_decoder.getInLevel(); }
|
||||||
|
const char *getFrameTypeText() const { return m_decoder.getFrameTypeText(); }
|
||||||
|
const char *getModulationText() const { return m_decoder.getModulationText(); }
|
||||||
|
|
||||||
|
void setAudioGain(float gain) { m_decoder.setAudioGain(gain); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DSDcc::DSDDecoder m_decoder;
|
DSDcc::DSDDecoder m_decoder;
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
// Copyright (C) 2015 F4EXB //
|
// Copyright (C) 2016 F4EXB //
|
||||||
// written by Edouard Griffiths //
|
// written by Edouard Griffiths //
|
||||||
// //
|
// //
|
||||||
// This program is free software; you can redistribute it and/or modify //
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
@ -157,64 +157,21 @@ void DSDDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||||||
m_scopeSampleBuffer.push_back(s);
|
m_scopeSampleBuffer.push_back(s);
|
||||||
m_dsdDecoder.pushSample(sample);
|
m_dsdDecoder.pushSample(sample);
|
||||||
|
|
||||||
// if (m_running.m_audioMute)
|
|
||||||
// {
|
|
||||||
// m_audioBuffer[m_audioBufferFill].l = 0;
|
|
||||||
// m_audioBuffer[m_audioBufferFill].r = 0;
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// m_audioBuffer[m_audioBufferFill].l = (sample * m_running.m_volume) / 100;
|
|
||||||
// m_audioBuffer[m_audioBufferFill].r = (sample * m_running.m_volume) / 100;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// ++m_audioBufferFill;
|
|
||||||
//
|
|
||||||
// if (m_audioBufferFill >= m_audioBuffer.size())
|
|
||||||
// {
|
|
||||||
// uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 10);
|
|
||||||
//
|
|
||||||
// if (res != m_audioBufferFill)
|
|
||||||
// {
|
|
||||||
// qDebug("DSDDemod::feed: %u/%u audio samples written", res, m_audioBufferFill);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// m_audioBufferFill = 0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
m_interpolatorDistanceRemain += m_interpolatorDistance;
|
m_interpolatorDistanceRemain += m_interpolatorDistance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (m_audioBufferFill > 0)
|
|
||||||
// {
|
|
||||||
// uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill, 10);
|
|
||||||
//
|
|
||||||
// if (res != m_audioBufferFill)
|
|
||||||
// {
|
|
||||||
// qDebug("NFMDemod::feed: %u/%u tail samples written", res, m_audioBufferFill);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// m_audioBufferFill = 0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
int nbAudioSamples;
|
int nbAudioSamples;
|
||||||
short *dsdAudio = m_dsdDecoder.getAudio(nbAudioSamples);
|
short *dsdAudio = m_dsdDecoder.getAudio(nbAudioSamples);
|
||||||
|
|
||||||
if (nbAudioSamples > 0)
|
if (nbAudioSamples > 0)
|
||||||
{
|
{
|
||||||
uint res = m_audioFifo.write((const quint8*) dsdAudio, nbAudioSamples, 10);
|
if (!m_running.m_audioMute) {
|
||||||
qDebug("DSDDemod::feed: written %d audio samples (%d)", res, nbAudioSamples);
|
uint res = m_audioFifo.write((const quint8*) dsdAudio, nbAudioSamples, 10);
|
||||||
m_dsdDecoder.resetAudio();
|
}
|
||||||
// qDebug("\nDSDDemod::feed: got %d audio samples (%lu)", nbAudioSamples, m_audioBuffer.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
// if (nbAudioSamples >= m_audioBuffer.size())
|
m_dsdDecoder.resetAudio();
|
||||||
// {
|
}
|
||||||
// uint res = m_audioFifo.write((const quint8*) dsdAudio, nbAudioSamples, 10);
|
|
||||||
// qDebug("DSDDemod::feed: written %d audio samples (%d)", res, nbAudioSamples);
|
|
||||||
// m_dsdDecoder.resetAudio();
|
|
||||||
// }
|
|
||||||
|
|
||||||
if ((m_scope != 0) && (m_scopeEnabled))
|
if ((m_scope != 0) && (m_scopeEnabled))
|
||||||
{
|
{
|
||||||
@ -318,6 +275,11 @@ void DSDDemod::apply()
|
|||||||
//m_squelchLevel *= m_squelchLevel;
|
//m_squelchLevel *= m_squelchLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_config.m_volume != m_running.m_volume)
|
||||||
|
{
|
||||||
|
m_dsdDecoder.setAudioGain(m_config.m_volume / 10.0f);
|
||||||
|
}
|
||||||
|
|
||||||
m_running.m_inputSampleRate = m_config.m_inputSampleRate;
|
m_running.m_inputSampleRate = m_config.m_inputSampleRate;
|
||||||
m_running.m_inputFrequencyOffset = m_config.m_inputFrequencyOffset;
|
m_running.m_inputFrequencyOffset = m_config.m_inputFrequencyOffset;
|
||||||
m_running.m_rfBandwidth = m_config.m_rfBandwidth;
|
m_running.m_rfBandwidth = m_config.m_rfBandwidth;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
// Copyright (C) 2015 F4EXB //
|
// Copyright (C) 2016 F4EXB //
|
||||||
// written by Edouard Griffiths //
|
// written by Edouard Griffiths //
|
||||||
// //
|
// //
|
||||||
// This program is free software; you can redistribute it and/or modify //
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
@ -61,6 +61,8 @@ public:
|
|||||||
Real getMagSq() { return m_magsq; }
|
Real getMagSq() { return m_magsq; }
|
||||||
bool getSquelchOpen() const { return m_squelchOpen; }
|
bool getSquelchOpen() const { return m_squelchOpen; }
|
||||||
|
|
||||||
|
const DSDDecoder& getDecoder() const { return m_dsdDecoder; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class MsgConfigureDSDDemod : public Message {
|
class MsgConfigureDSDDemod : public Message {
|
||||||
MESSAGE_CLASS_DECLARATION
|
MESSAGE_CLASS_DECLARATION
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
// Copyright (C) 2015 F4EXB //
|
// Copyright (C) 2016 F4EXB //
|
||||||
// written by Edouard Griffiths //
|
// written by Edouard Griffiths //
|
||||||
// //
|
// //
|
||||||
// This program is free software; you can redistribute it and/or modify //
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
@ -251,7 +251,8 @@ DSDDemodGUI::DSDDemodGUI(PluginAPI* pluginAPI, QWidget* parent) :
|
|||||||
m_basicSettingsShown(false),
|
m_basicSettingsShown(false),
|
||||||
m_doApplySettings(true),
|
m_doApplySettings(true),
|
||||||
m_squelchOpen(false),
|
m_squelchOpen(false),
|
||||||
m_channelPowerDbAvg(20,0)
|
m_channelPowerDbAvg(20,0),
|
||||||
|
m_tickCount(0)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
@ -369,4 +370,18 @@ void DSDDemodGUI::tick()
|
|||||||
ui->audioMute->setStyleSheet("QToolButton { background:rgb(79,79,79); }");
|
ui->audioMute->setStyleSheet("QToolButton { background:rgb(79,79,79); }");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// "slow" updates
|
||||||
|
|
||||||
|
if (m_tickCount < 10)
|
||||||
|
{
|
||||||
|
m_tickCount++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ui->inLevelText->setText(QString::number(m_dsdDemod->getDecoder().getInLevel()));
|
||||||
|
ui->syncText->setText(QString(m_dsdDemod->getDecoder().getFrameTypeText()));
|
||||||
|
ui->modulationText->setText(QString(m_dsdDemod->getDecoder().getModulationText()));
|
||||||
|
m_tickCount = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
// Copyright (C) 2015 F4EXB //
|
// Copyright (C) 2016 F4EXB //
|
||||||
// written by Edouard Griffiths //
|
// written by Edouard Griffiths //
|
||||||
// //
|
// //
|
||||||
// This program is free software; you can redistribute it and/or modify //
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
@ -83,6 +83,7 @@ private:
|
|||||||
bool m_audioMute;
|
bool m_audioMute;
|
||||||
bool m_squelchOpen;
|
bool m_squelchOpen;
|
||||||
MovingAverage<Real> m_channelPowerDbAvg;
|
MovingAverage<Real> m_channelPowerDbAvg;
|
||||||
|
int m_tickCount;
|
||||||
|
|
||||||
explicit DSDDemodGUI(PluginAPI* pluginAPI, QWidget* parent = NULL);
|
explicit DSDDemodGUI(PluginAPI* pluginAPI, QWidget* parent = NULL);
|
||||||
virtual ~DSDDemodGUI();
|
virtual ~DSDDemodGUI();
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>503</width>
|
<width>520</width>
|
||||||
<height>898</height>
|
<height>898</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -16,6 +16,12 @@
|
|||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>520</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<family>Sans Serif</family>
|
<family>Sans Serif</family>
|
||||||
@ -129,6 +135,54 @@
|
|||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="modulationText">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>30</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Modulation type detected</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>____</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="syncText">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>80</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Synchronized on this frame type</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>No Sync______</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="inLevelText">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Input level (%) valid when synchronized</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>00</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="channnelPowerLayout">
|
<layout class="QHBoxLayout" name="channnelPowerLayout">
|
||||||
<item>
|
<item>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
// Copyright (C) 2015 F4EXB //
|
// Copyright (C) 2016 F4EXB //
|
||||||
// written by Edouard Griffiths //
|
// written by Edouard Griffiths //
|
||||||
// //
|
// //
|
||||||
// This program is free software; you can redistribute it and/or modify //
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
// Copyright (C) 2015 F4EXB //
|
// Copyright (C) 2016 F4EXB //
|
||||||
// written by Edouard Griffiths //
|
// written by Edouard Griffiths //
|
||||||
// //
|
// //
|
||||||
// This program is free software; you can redistribute it and/or modify //
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
Loading…
Reference in New Issue
Block a user