1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-09-28 15:56:33 -04:00

SSB Modulator: implemented audio mute, binaural and flip channels

This commit is contained in:
f4exb 2016-12-14 13:52:46 +01:00
parent b45ecd2418
commit db3375ca3e
3 changed files with 65 additions and 6 deletions

View File

@ -189,6 +189,13 @@ void SSBMod::modulateSample()
void SSBMod::pullAF(Complex& sample)
{
if (m_running.m_audioMute)
{
sample.real(0.0f);
sample.imag(0.0f);
return;
}
int16_t audioSample[2];
Complex ci;
fftfilt::cmplx *filtered;
@ -216,8 +223,12 @@ void SSBMod::pullAF(Complex& sample)
}
break;
case SSBModInputFile:
// Monaural (mono):
// sox f4exb_call.wav --encoding float --endian little f4exb_call.raw
// ffplay -f f32le -ar 48k -ac 1 f4exb_call.raw
// Binaural (stereo):
// sox f4exb_call.wav --encoding float --endian little f4exb_call.raw
// ffplay -f f32le -ar 48k -ac 2 f4exb_call.raw
if (m_ifstream.is_open())
{
if (m_ifstream.eof())
@ -235,6 +246,23 @@ void SSBMod::pullAF(Complex& sample)
ci.imag(0.0f);
}
else
{
if (m_running.m_audioBinaural)
{
Complex c;
m_ifstream.read(reinterpret_cast<char*>(&c), sizeof(Complex));
if (m_running.m_audioFlipChannels)
{
ci.real(c.imag() * m_running.m_volumeFactor);
ci.imag(c.real() * m_running.m_volumeFactor);
}
else
{
ci = c * m_running.m_volumeFactor;
}
}
else
{
Real real;
m_ifstream.read(reinterpret_cast<char*>(&real), sizeof(Real));
@ -242,6 +270,7 @@ void SSBMod::pullAF(Complex& sample)
ci.imag(0.0f);
}
}
}
else
{
ci.real(0.0f);
@ -250,8 +279,26 @@ void SSBMod::pullAF(Complex& sample)
break;
case SSBModInputAudio:
m_audioFifo.read(reinterpret_cast<quint8*>(audioSample), 1, 10);
if (m_running.m_audioBinaural)
{
if (m_running.m_audioFlipChannels)
{
ci.real((audioSample[1] / 32768.0f) * m_running.m_volumeFactor);
ci.imag((audioSample[0] / 32768.0f) * m_running.m_volumeFactor);
}
else
{
ci.real((audioSample[0] / 32768.0f) * m_running.m_volumeFactor);
ci.imag((audioSample[1] / 32768.0f) * m_running.m_volumeFactor);
}
}
else
{
ci.real(((audioSample[0] + audioSample[1]) / 65536.0f) * m_running.m_volumeFactor);
ci.imag(0.0f);
}
break;
case SSBModInputCWTone:
if (m_cwKeyer.getSample())

View File

@ -264,6 +264,16 @@ void SSBModGUI::on_dsb_toggled(bool checked)
setNewRate(m_spanLog2);
}
void SSBModGUI::on_audioBinaural_toggled(bool checked)
{
applySettings();
}
void SSBModGUI::on_audioFlipChannels_toggled(bool checked)
{
applySettings();
}
void SSBModGUI::on_spanLog2_valueChanged(int value)
{
if (setNewRate(value))

View File

@ -62,6 +62,8 @@ private slots:
void on_deltaFrequency_changed(quint64 value);
void on_deltaMinus_toggled(bool minus);
void on_dsb_toggled(bool checked);
void on_audioBinaural_toggled(bool checked);
void on_audioFlipChannels_toggled(bool checked);
void on_spanLog2_valueChanged(int value);
void on_BW_valueChanged(int value);
void on_lowCut_valueChanged(int value);