mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-02-03 09:44:01 -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 //
|
||||
// //
|
||||
// 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 //
|
||||
// //
|
||||
// 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); }
|
||||
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:
|
||||
DSDcc::DSDDecoder m_decoder;
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (C) 2015 F4EXB //
|
||||
// Copyright (C) 2016 F4EXB //
|
||||
// written by Edouard Griffiths //
|
||||
// //
|
||||
// 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_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;
|
||||
}
|
||||
}
|
||||
|
||||
// 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;
|
||||
short *dsdAudio = m_dsdDecoder.getAudio(nbAudioSamples);
|
||||
|
||||
if (nbAudioSamples > 0)
|
||||
{
|
||||
uint res = m_audioFifo.write((const quint8*) dsdAudio, nbAudioSamples, 10);
|
||||
qDebug("DSDDemod::feed: written %d audio samples (%d)", res, nbAudioSamples);
|
||||
m_dsdDecoder.resetAudio();
|
||||
// qDebug("\nDSDDemod::feed: got %d audio samples (%lu)", nbAudioSamples, m_audioBuffer.size());
|
||||
}
|
||||
if (!m_running.m_audioMute) {
|
||||
uint res = m_audioFifo.write((const quint8*) dsdAudio, nbAudioSamples, 10);
|
||||
}
|
||||
|
||||
// if (nbAudioSamples >= m_audioBuffer.size())
|
||||
// {
|
||||
// uint res = m_audioFifo.write((const quint8*) dsdAudio, nbAudioSamples, 10);
|
||||
// qDebug("DSDDemod::feed: written %d audio samples (%d)", res, nbAudioSamples);
|
||||
// m_dsdDecoder.resetAudio();
|
||||
// }
|
||||
m_dsdDecoder.resetAudio();
|
||||
}
|
||||
|
||||
if ((m_scope != 0) && (m_scopeEnabled))
|
||||
{
|
||||
@ -318,6 +275,11 @@ void DSDDemod::apply()
|
||||
//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_inputFrequencyOffset = m_config.m_inputFrequencyOffset;
|
||||
m_running.m_rfBandwidth = m_config.m_rfBandwidth;
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (C) 2015 F4EXB //
|
||||
// Copyright (C) 2016 F4EXB //
|
||||
// written by Edouard Griffiths //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
@ -61,6 +61,8 @@ public:
|
||||
Real getMagSq() { return m_magsq; }
|
||||
bool getSquelchOpen() const { return m_squelchOpen; }
|
||||
|
||||
const DSDDecoder& getDecoder() const { return m_dsdDecoder; }
|
||||
|
||||
private:
|
||||
class MsgConfigureDSDDemod : public Message {
|
||||
MESSAGE_CLASS_DECLARATION
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (C) 2015 F4EXB //
|
||||
// Copyright (C) 2016 F4EXB //
|
||||
// written by Edouard Griffiths //
|
||||
// //
|
||||
// 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_doApplySettings(true),
|
||||
m_squelchOpen(false),
|
||||
m_channelPowerDbAvg(20,0)
|
||||
m_channelPowerDbAvg(20,0),
|
||||
m_tickCount(0)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
@ -369,4 +370,18 @@ void DSDDemodGUI::tick()
|
||||
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 //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
@ -83,6 +83,7 @@ private:
|
||||
bool m_audioMute;
|
||||
bool m_squelchOpen;
|
||||
MovingAverage<Real> m_channelPowerDbAvg;
|
||||
int m_tickCount;
|
||||
|
||||
explicit DSDDemodGUI(PluginAPI* pluginAPI, QWidget* parent = NULL);
|
||||
virtual ~DSDDemodGUI();
|
||||
|
@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>503</width>
|
||||
<width>520</width>
|
||||
<height>898</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -16,6 +16,12 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>520</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Sans Serif</family>
|
||||
@ -129,6 +135,54 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</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>
|
||||
<layout class="QHBoxLayout" name="channnelPowerLayout">
|
||||
<item>
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (C) 2015 F4EXB //
|
||||
// Copyright (C) 2016 F4EXB //
|
||||
// written by Edouard Griffiths //
|
||||
// //
|
||||
// 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 //
|
||||
// //
|
||||
// This program is free software; you can redistribute it and/or modify //
|
||||
|
Loading…
Reference in New Issue
Block a user