mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-03-07 03:48:39 -05:00
SSB Modulator: implemented audio mute, binaural and flip channels
This commit is contained in:
parent
b45ecd2418
commit
db3375ca3e
@ -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())
|
||||
@ -236,10 +247,28 @@ void SSBMod::pullAF(Complex& sample)
|
||||
}
|
||||
else
|
||||
{
|
||||
Real real;
|
||||
m_ifstream.read(reinterpret_cast<char*>(&real), sizeof(Real));
|
||||
ci.real(real * m_running.m_volumeFactor);
|
||||
ci.imag(0.0f);
|
||||
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));
|
||||
ci.real(real * m_running.m_volumeFactor);
|
||||
ci.imag(0.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -250,8 +279,26 @@ void SSBMod::pullAF(Complex& sample)
|
||||
break;
|
||||
case SSBModInputAudio:
|
||||
m_audioFifo.read(reinterpret_cast<quint8*>(audioSample), 1, 10);
|
||||
ci.real(((audioSample[0] + audioSample[1]) / 65536.0f) * m_running.m_volumeFactor);
|
||||
ci.imag(0.0f);
|
||||
|
||||
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())
|
||||
|
@ -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))
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user