1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-06-11 19:12:32 -04:00

SSB Demod: clamp audio to 16 bit samples boundaries for better audio overdrive robustness. Fixes #2452

This commit is contained in:
f4exb 2025-06-02 22:01:21 +02:00
parent f7b9727ef9
commit c333fb505c

View File

@ -195,16 +195,12 @@ void SSBDemodSink::processOneSample(Complex &ci)
if (m_audioBinaual)
{
if (m_audioFlipChannels)
{
m_audioBuffer[m_audioBufferFill].r = (qint16)(z.imag() * m_volume);
m_audioBuffer[m_audioBufferFill].l = (qint16)(z.real() * m_volume);
}
else
{
m_audioBuffer[m_audioBufferFill].r = (qint16)(z.real() * m_volume);
m_audioBuffer[m_audioBufferFill].l = (qint16)(z.imag() * m_volume);
}
Real left = m_audioFlipChannels ? z.imag() : z.real();
Real right = m_audioFlipChannels ? z.real() : z.imag();
left = std::clamp(left * m_volume, -32767.0f, 32767.0f);
right = std::clamp(right * m_volume, -32767.0f, 32767.0f);
m_audioBuffer[m_audioBufferFill].l = (qint16)left;
m_audioBuffer[m_audioBufferFill].r = (qint16)right;
m_demodBuffer[m_demodBufferFill++] = z.real();
m_demodBuffer[m_demodBufferFill++] = z.imag();
@ -212,7 +208,7 @@ void SSBDemodSink::processOneSample(Complex &ci)
else
{
Real demod = (z.real() + z.imag()) * 0.7;
qint16 sample = (qint16)(demod * m_volume);
qint16 sample = (qint16)(std::clamp(demod * m_volume, -32767.0f, 32767.0f));
m_audioBuffer[m_audioBufferFill].l = sample;
m_audioBuffer[m_audioBufferFill].r = sample;
m_demodBuffer[m_demodBufferFill++] = (z.real() + z.imag()) * 0.7;