mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-12-23 18:15:45 -05:00
BFM demod: implemented mono/stereo control from GUI
This commit is contained in:
parent
83423e13e0
commit
508486f791
@ -65,9 +65,9 @@ BFMDemod::~BFMDemod()
|
||||
DSPEngine::instance()->removeAudioSink(&m_audioFifo);
|
||||
}
|
||||
|
||||
void BFMDemod::configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, Real volume, Real squelch)
|
||||
void BFMDemod::configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, Real volume, Real squelch, bool audioStereo)
|
||||
{
|
||||
Message* cmd = MsgConfigureBFMDemod::create(rfBandwidth, afBandwidth, volume, squelch);
|
||||
Message* cmd = MsgConfigureBFMDemod::create(rfBandwidth, afBandwidth, volume, squelch, audioStereo);
|
||||
messageQueue->push(cmd);
|
||||
}
|
||||
|
||||
@ -119,29 +119,42 @@ void BFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
||||
m_m2Sample = m_m1Sample;
|
||||
m_m1Sample = rf[i];
|
||||
|
||||
// TODO: conditional to stereo mode selected
|
||||
Real pilotSample;
|
||||
m_pilotPLL.process(demod, pilotSample);
|
||||
m_sampleBuffer.push_back(Sample(demod * (1<<15), 0.0));
|
||||
//m_sampleBuffer.push_back(Sample(pilotSample * (1<<15), 0.0)); // debug pilot
|
||||
|
||||
Complex s(demod*2.0*pilotSample, 0);
|
||||
quint16 sampleStereo;
|
||||
|
||||
if (m_interpolatorStereo.interpolate(&m_interpolatorStereoDistanceRemain, s, &cs))
|
||||
{
|
||||
sampleStereo = (qint16)(cs.real() * 3000 * m_running.m_volume);
|
||||
}
|
||||
// Process stereo if stereo mode is selected
|
||||
|
||||
if (m_running.m_audioStereo)
|
||||
{
|
||||
Real pilotSample;
|
||||
m_pilotPLL.process(demod, pilotSample);
|
||||
//m_sampleBuffer.push_back(Sample(pilotSample * (1<<15), 0.0)); // debug pilot
|
||||
|
||||
Complex s(demod*2.0*pilotSample, 0);
|
||||
|
||||
if (m_interpolatorStereo.interpolate(&m_interpolatorStereoDistanceRemain, s, &cs))
|
||||
{
|
||||
sampleStereo = (qint16)(cs.real() * 3000 * m_running.m_volume);
|
||||
}
|
||||
}
|
||||
|
||||
Complex e(demod, 0);
|
||||
|
||||
if(m_interpolator.interpolate(&m_interpolatorDistanceRemain, e, &ci))
|
||||
if (m_interpolator.interpolate(&m_interpolatorDistanceRemain, e, &ci))
|
||||
{
|
||||
quint16 sample = (qint16)(ci.real() * 3000 * m_running.m_volume);
|
||||
//m_sampleBuffer.push_back(Sample(sample, sample));
|
||||
m_audioBuffer[m_audioBufferFill].l = sample + sampleStereo;
|
||||
m_audioBuffer[m_audioBufferFill].r = sample - sampleStereo;
|
||||
|
||||
if (m_running.m_audioStereo)
|
||||
{
|
||||
m_audioBuffer[m_audioBufferFill].l = sample + sampleStereo;
|
||||
m_audioBuffer[m_audioBufferFill].r = sample - sampleStereo;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_audioBuffer[m_audioBufferFill].l = sample;
|
||||
m_audioBuffer[m_audioBufferFill].r = sample;
|
||||
}
|
||||
|
||||
++m_audioBufferFill;
|
||||
|
||||
if(m_audioBufferFill >= m_audioBuffer.size())
|
||||
@ -220,13 +233,15 @@ bool BFMDemod::handleMessage(const Message& cmd)
|
||||
m_config.m_afBandwidth = cfg.getAFBandwidth();
|
||||
m_config.m_volume = cfg.getVolume();
|
||||
m_config.m_squelch = cfg.getSquelch();
|
||||
m_config.m_audioStereo = cfg.getAudioStereo();
|
||||
|
||||
apply();
|
||||
|
||||
qDebug() << "BFMDemod::handleMessage: MsgConfigureBFMDemod: m_rfBandwidth: " << m_config.m_rfBandwidth
|
||||
<< " m_afBandwidth: " << m_config.m_afBandwidth
|
||||
<< " m_volume: " << m_config.m_volume
|
||||
<< " m_squelch: " << m_config.m_squelch;
|
||||
<< " m_squelch: " << m_config.m_squelch
|
||||
<< " m_audioStereo: " << m_config.m_audioStereo;
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -245,7 +260,8 @@ bool BFMDemod::handleMessage(const Message& cmd)
|
||||
|
||||
void BFMDemod::apply()
|
||||
{
|
||||
if (m_config.m_inputSampleRate != m_running.m_inputSampleRate)
|
||||
if ((m_config.m_inputSampleRate != m_running.m_inputSampleRate)
|
||||
|| (m_config.m_audioStereo && (m_config.m_audioStereo != m_running.m_audioStereo)))
|
||||
{
|
||||
m_pilotPLL.configure(19000.0/m_config.m_inputSampleRate, 50.0/m_config.m_inputSampleRate, 0.01);
|
||||
}
|
||||
@ -309,5 +325,6 @@ void BFMDemod::apply()
|
||||
m_running.m_squelch = m_config.m_squelch;
|
||||
m_running.m_volume = m_config.m_volume;
|
||||
m_running.m_audioSampleRate = m_config.m_audioSampleRate;
|
||||
m_running.m_audioStereo = m_config.m_audioStereo;
|
||||
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ public:
|
||||
BFMDemod(SampleSink* sampleSink);
|
||||
virtual ~BFMDemod();
|
||||
|
||||
void configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, Real volume, Real squelch);
|
||||
void configure(MessageQueue* messageQueue, Real rfBandwidth, Real afBandwidth, Real volume, Real squelch, bool audioStereo);
|
||||
|
||||
int getSampleRate() const { return m_config.m_inputSampleRate; }
|
||||
virtual void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool po);
|
||||
@ -58,10 +58,11 @@ private:
|
||||
Real getAFBandwidth() const { return m_afBandwidth; }
|
||||
Real getVolume() const { return m_volume; }
|
||||
Real getSquelch() const { return m_squelch; }
|
||||
bool getAudioStereo() const { return m_audioStereo; }
|
||||
|
||||
static MsgConfigureBFMDemod* create(Real rfBandwidth, Real afBandwidth, Real volume, Real squelch)
|
||||
static MsgConfigureBFMDemod* create(Real rfBandwidth, Real afBandwidth, Real volume, Real squelch, bool audioStereo)
|
||||
{
|
||||
return new MsgConfigureBFMDemod(rfBandwidth, afBandwidth, volume, squelch);
|
||||
return new MsgConfigureBFMDemod(rfBandwidth, afBandwidth, volume, squelch, audioStereo);
|
||||
}
|
||||
|
||||
private:
|
||||
@ -69,13 +70,15 @@ private:
|
||||
Real m_afBandwidth;
|
||||
Real m_volume;
|
||||
Real m_squelch;
|
||||
bool m_audioStereo;
|
||||
|
||||
MsgConfigureBFMDemod(Real rfBandwidth, Real afBandwidth, Real volume, Real squelch) :
|
||||
MsgConfigureBFMDemod(Real rfBandwidth, Real afBandwidth, Real volume, Real squelch, bool audioStereo) :
|
||||
Message(),
|
||||
m_rfBandwidth(rfBandwidth),
|
||||
m_afBandwidth(afBandwidth),
|
||||
m_volume(volume),
|
||||
m_squelch(squelch)
|
||||
m_squelch(squelch),
|
||||
m_audioStereo(audioStereo)
|
||||
{ }
|
||||
};
|
||||
|
||||
@ -98,6 +101,7 @@ private:
|
||||
Real m_squelch;
|
||||
Real m_volume;
|
||||
quint32 m_audioSampleRate;
|
||||
bool m_audioStereo;
|
||||
|
||||
Config() :
|
||||
m_inputSampleRate(-1),
|
||||
@ -106,7 +110,8 @@ private:
|
||||
m_afBandwidth(-1),
|
||||
m_squelch(0),
|
||||
m_volume(0),
|
||||
m_audioSampleRate(0)
|
||||
m_audioSampleRate(0),
|
||||
m_audioStereo(false)
|
||||
{ }
|
||||
};
|
||||
|
||||
|
@ -222,6 +222,8 @@ void BFMDemodGUI::on_audioStereo_toggled(bool stereo)
|
||||
{
|
||||
ui->audioStereo->setStyleSheet("QToolButton { background:rgb(79,79,79); }");
|
||||
}
|
||||
|
||||
applySettings();
|
||||
}
|
||||
|
||||
void BFMDemodGUI::onWidgetRolled(QWidget* widget, bool rollDown)
|
||||
@ -318,7 +320,8 @@ void BFMDemodGUI::applySettings()
|
||||
m_rfBW[ui->rfBW->value()],
|
||||
ui->afBW->value() * 1000.0,
|
||||
ui->volume->value() / 10.0,
|
||||
ui->squelch->value());
|
||||
ui->squelch->value(),
|
||||
ui->audioStereo->isChecked());
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user