mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-03 05:37:50 -04: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)
|
void SSBMod::pullAF(Complex& sample)
|
||||||
{
|
{
|
||||||
|
if (m_running.m_audioMute)
|
||||||
|
{
|
||||||
|
sample.real(0.0f);
|
||||||
|
sample.imag(0.0f);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int16_t audioSample[2];
|
int16_t audioSample[2];
|
||||||
Complex ci;
|
Complex ci;
|
||||||
fftfilt::cmplx *filtered;
|
fftfilt::cmplx *filtered;
|
||||||
@ -216,8 +223,12 @@ void SSBMod::pullAF(Complex& sample)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SSBModInputFile:
|
case SSBModInputFile:
|
||||||
|
// Monaural (mono):
|
||||||
// sox f4exb_call.wav --encoding float --endian little f4exb_call.raw
|
// sox f4exb_call.wav --encoding float --endian little f4exb_call.raw
|
||||||
// ffplay -f f32le -ar 48k -ac 1 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.is_open())
|
||||||
{
|
{
|
||||||
if (m_ifstream.eof())
|
if (m_ifstream.eof())
|
||||||
@ -236,10 +247,28 @@ void SSBMod::pullAF(Complex& sample)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Real real;
|
if (m_running.m_audioBinaural)
|
||||||
m_ifstream.read(reinterpret_cast<char*>(&real), sizeof(Real));
|
{
|
||||||
ci.real(real * m_running.m_volumeFactor);
|
Complex c;
|
||||||
ci.imag(0.0f);
|
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
|
else
|
||||||
@ -250,8 +279,26 @@ void SSBMod::pullAF(Complex& sample)
|
|||||||
break;
|
break;
|
||||||
case SSBModInputAudio:
|
case SSBModInputAudio:
|
||||||
m_audioFifo.read(reinterpret_cast<quint8*>(audioSample), 1, 10);
|
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;
|
break;
|
||||||
case SSBModInputCWTone:
|
case SSBModInputCWTone:
|
||||||
if (m_cwKeyer.getSample())
|
if (m_cwKeyer.getSample())
|
||||||
|
@ -264,6 +264,16 @@ void SSBModGUI::on_dsb_toggled(bool checked)
|
|||||||
setNewRate(m_spanLog2);
|
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)
|
void SSBModGUI::on_spanLog2_valueChanged(int value)
|
||||||
{
|
{
|
||||||
if (setNewRate(value))
|
if (setNewRate(value))
|
||||||
|
@ -62,6 +62,8 @@ private slots:
|
|||||||
void on_deltaFrequency_changed(quint64 value);
|
void on_deltaFrequency_changed(quint64 value);
|
||||||
void on_deltaMinus_toggled(bool minus);
|
void on_deltaMinus_toggled(bool minus);
|
||||||
void on_dsb_toggled(bool checked);
|
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_spanLog2_valueChanged(int value);
|
||||||
void on_BW_valueChanged(int value);
|
void on_BW_valueChanged(int value);
|
||||||
void on_lowCut_valueChanged(int value);
|
void on_lowCut_valueChanged(int value);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user