1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-04-10 13:40:37 -04:00

WFM modulator: use settings in modulator (2)

This commit is contained in:
f4exb 2017-10-14 04:45:44 +02:00
parent e76c95f7a2
commit 1d1e885709
2 changed files with 57 additions and 26 deletions

View File

@ -66,7 +66,7 @@ WFMMod::WFMMod() :
memset(m_rfFilterBuffer, 0, sizeof(Complex)*(m_rfFilterFFTLength));
m_rfFilterBufferIndex = 0;
apply();
//apply();
m_audioBuffer.resize(1<<14);
@ -86,6 +86,8 @@ WFMMod::WFMMod() :
m_cwKeyer.setWPM(13);
m_cwKeyer.setMode(CWKeyer::CWNone);
m_cwKeyer.reset();
applySettings(m_settings, true);
}
WFMMod::~WFMMod()
@ -110,7 +112,7 @@ void WFMMod::configure(MessageQueue* messageQueue,
void WFMMod::pull(Sample& sample)
{
if (m_running.m_channelMute)
if (m_settings.m_channelMute)
{
sample.m_real = 0.0f;
sample.m_imag = 0.0f;
@ -139,7 +141,7 @@ void WFMMod::pull(Sample& sample)
pullAF(ri);
}
m_modPhasor += (m_running.m_fmDeviation / (float) m_running.m_outputSampleRate) * ri.real() * M_PI * 2.0f;
m_modPhasor += (m_settings.m_fmDeviation / (float) m_settings.m_outputSampleRate) * ri.real() * M_PI * 2.0f;
ci.real(cos(m_modPhasor) * 29204.0f); // -1 dB
ci.imag(sin(m_modPhasor) * 29204.0f);
@ -185,7 +187,7 @@ void WFMMod::pullAF(Complex& sample)
switch (m_afInput)
{
case WFMModInputTone:
sample.real(m_toneNcoRF.next() * m_running.m_volumeFactor);
sample.real(m_toneNcoRF.next() * m_settings.m_volumeFactor);
sample.imag(0.0f);
break;
case WFMModInputFile:
@ -195,7 +197,7 @@ void WFMMod::pullAF(Complex& sample)
{
if (m_ifstream.eof())
{
if (m_running.m_playLoop)
if (m_settings.m_playLoop)
{
m_ifstream.clear();
m_ifstream.seekg(0, std::ios::beg);
@ -211,7 +213,7 @@ void WFMMod::pullAF(Complex& sample)
{
Real s;
m_ifstream.read(reinterpret_cast<char*>(&s), sizeof(Real));
sample.real(s * m_running.m_volumeFactor);
sample.real(s * m_settings.m_volumeFactor);
sample.imag(0.0f);
}
}
@ -223,7 +225,7 @@ void WFMMod::pullAF(Complex& sample)
break;
case WFMModInputAudio:
{
sample.real(((m_audioBuffer[m_audioBufferFill].l + m_audioBuffer[m_audioBufferFill].r) / 65536.0f) * m_running.m_volumeFactor);
sample.real(((m_audioBuffer[m_audioBufferFill].l + m_audioBuffer[m_audioBufferFill].r) / 65536.0f) * m_settings.m_volumeFactor);
sample.imag(0.0f);
}
break;
@ -233,14 +235,14 @@ void WFMMod::pullAF(Complex& sample)
if (m_cwKeyer.getSample())
{
m_cwSmoother.getFadeSample(true, fadeFactor);
sample.real(m_toneNcoRF.next() * m_running.m_volumeFactor * fadeFactor);
sample.real(m_toneNcoRF.next() * m_settings.m_volumeFactor * fadeFactor);
sample.imag(0.0f);
}
else
{
if (m_cwSmoother.getFadeSample(false, fadeFactor))
{
sample.real(m_toneNcoRF.next() * m_running.m_volumeFactor * fadeFactor);
sample.real(m_toneNcoRF.next() * m_settings.m_volumeFactor * fadeFactor);
sample.imag(0.0f);
}
else
@ -296,19 +298,45 @@ bool WFMMod::handleMessage(const Message& cmd)
{
UpChannelizer::MsgChannelizerNotification& notif = (UpChannelizer::MsgChannelizerNotification&) cmd;
m_config.m_basebandSampleRate = notif.getBasebandSampleRate();
m_config.m_outputSampleRate = notif.getSampleRate();
m_config.m_inputFrequencyOffset = notif.getFrequencyOffset();
WFMModSettings settings = m_settings;
apply();
settings.m_basebandSampleRate = notif.getBasebandSampleRate();
settings.m_outputSampleRate = notif.getSampleRate();
settings.m_inputFrequencyOffset = notif.getFrequencyOffset();
applySettings(settings);
qDebug() << "WFMMod::handleMessage: MsgChannelizerNotification:"
<< " m_basebandSampleRate: " << m_config.m_basebandSampleRate
<< " m_outputSampleRate: " << m_config.m_outputSampleRate
<< " m_inputFrequencyOffset: " << m_config.m_inputFrequencyOffset;
<< " m_basebandSampleRate: " << settings.m_basebandSampleRate
<< " m_outputSampleRate: " << settings.m_outputSampleRate
<< " m_inputFrequencyOffset: " << settings.m_inputFrequencyOffset;
return true;
}
else if (MsgConfigureWFMMod::match(cmd))
{
MsgConfigureWFMMod& cfg = (MsgConfigureWFMMod&) cmd;
WFMModSettings settings = cfg.getSettings();
settings.m_basebandSampleRate = m_settings.m_basebandSampleRate;
settings.m_outputSampleRate = m_settings.m_outputSampleRate;
settings.m_inputFrequencyOffset = m_settings.m_inputFrequencyOffset;
qDebug() << "NFWFMMod::handleMessage: MsgConfigureWFMMod:"
<< " m_rfBandwidth: " << settings.m_rfBandwidth
<< " m_afBandwidth: " << settings.m_afBandwidth
<< " m_fmDeviation: " << settings.m_fmDeviation
<< " m_volumeFactor: " << settings.m_volumeFactor
<< " m_toneFrequency: " << settings.m_toneFrequency
<< " m_channelMute: " << settings.m_channelMute
<< " m_playLoop: " << settings.m_playLoop
<< " force: " << cfg.getForce();
applySettings(settings, cfg.getForce());
return true;
}
else if (MsgConfigureWFMModPrivate::match(cmd))
{
MsgConfigureWFMModPrivate& cfg = (MsgConfigureWFMModPrivate&) cmd;
@ -323,7 +351,7 @@ bool WFMMod::handleMessage(const Message& cmd)
apply();
qDebug() << "WFMMod::handleMessage: MsgConfigureWFMMod:"
qDebug() << "WFMMod::handleMessage: MsgConfigureWFMModPrivate:"
<< " m_rfBandwidth: " << m_config.m_rfBandwidth
<< " m_afBandwidth: " << m_config.m_afBandwidth
<< " m_fmDeviation: " << m_config.m_fmDeviation

View File

@ -439,7 +439,7 @@ void WFMModGUI::blockApplySettings(bool block)
m_doApplySettings = !block;
}
void WFMModGUI::applySettings(bool force __attribute__((unused)))
void WFMModGUI::applySettings(bool force)
{
if (m_doApplySettings)
{
@ -451,14 +451,17 @@ void WFMModGUI::applySettings(bool force __attribute__((unused)))
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
m_wfmMod->configure(m_wfmMod->getInputMessageQueue(),
m_settings.m_rfBandwidth,
m_settings.m_afBandwidth,
m_settings.m_fmDeviation,
m_settings.m_toneFrequency,
m_settings.m_volumeFactor,
m_settings.m_channelMute,
m_settings.m_playLoop);
WFMMod::MsgConfigureWFMMod *msgConf = WFMMod::MsgConfigureWFMMod::create(m_settings, force);
m_wfmMod->getInputMessageQueue()->push(msgConf);
// m_wfmMod->configure(m_wfmMod->getInputMessageQueue(),
// m_settings.m_rfBandwidth,
// m_settings.m_afBandwidth,
// m_settings.m_fmDeviation,
// m_settings.m_toneFrequency,
// m_settings.m_volumeFactor,
// m_settings.m_channelMute,
// m_settings.m_playLoop);
// m_wfmMod->configure(m_wfmMod->getInputMessageQueue(),
// m_rfBW[ui->rfBW->currentIndex()],