1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-08-12 22:43:36 -04:00

All modulators: use buffer for input audio that is always in use while generation is running. This fixes lockup problem reported in issue #11

This commit is contained in:
f4exb
2016-12-26 01:39:34 +01:00
parent f5572eebc0
commit e02ac85e50
11 changed files with 131 additions and 79 deletions
+17 -6
View File
@@ -57,8 +57,8 @@ AMMod::AMMod() :
apply();
//m_audioBuffer.resize(1<<14);
//m_audioBufferFill = 0;
m_audioBuffer.resize(1<<14);
m_audioBufferFill = 0;
m_movingAverage.resize(16, 0);
m_volumeAGC.resize(4096, 0.003, 0);
@@ -121,6 +121,7 @@ void AMMod::pull(Sample& sample)
}
}
m_audioBufferFill++;
m_interpolatorDistanceRemain += m_interpolatorDistance;
ci *= m_carrierNco.nextIQ(); // shift to carrier frequency
@@ -136,6 +137,19 @@ void AMMod::pull(Sample& sample)
sample.m_imag = (FixReal) ci.imag();
}
void AMMod::pullAudio(int nbSamples)
{
// qDebug("AMMod::pullAudio: %d", nbSamples);
if (nbSamples > m_audioBuffer.size())
{
m_audioBuffer.resize(nbSamples);
}
m_audioFifo.read(reinterpret_cast<quint8*>(&m_audioBuffer[0]), nbSamples*sizeof(AudioSample), 10);
m_audioBufferFill = 0;
}
void AMMod::modulateSample()
{
Real t;
@@ -149,8 +163,6 @@ void AMMod::modulateSample()
void AMMod::pullAF(Real& sample)
{
int16_t audioSample[2];
switch (m_afInput)
{
case AMModInputTone:
@@ -186,8 +198,7 @@ void AMMod::pullAF(Real& sample)
}
break;
case AMModInputAudio:
m_audioFifo.read(reinterpret_cast<quint8*>(audioSample), 1, 10);
sample = ((audioSample[0] + audioSample[1]) / 65536.0f) * m_running.m_volumeFactor;
sample = ((m_audioBuffer[m_audioBufferFill].l + m_audioBuffer[m_audioBufferFill].r) / 65536.0f) * m_running.m_volumeFactor;
break;
case AMModInputCWTone:
Real fadeFactor;