Allow for tx periods shorter than the audio buffer size

Audio will not start until at least one buffer full is achieved and as
we use a large target latency of 2s to minimize CPU usage and glitches
we must pad with silence when  the QAudioOutput pulls buffers from the
Modulator i/o device. This is  all necessary with pulseaudio using the
underlying o/s ALSA device, i.e. on Linux.
This commit is contained in:
Bill Somerville 2019-01-27 00:50:25 +00:00
parent d9f4a27a3e
commit 9b942910e0
2 changed files with 7 additions and 1 deletions

View File

@ -319,6 +319,12 @@ qint64 Modulator::readData (char * data, qint64 maxSize)
// done for this chunk - continue on next call // done for this chunk - continue on next call
// qint64 ms1=QDateTime::currentMSecsSinceEpoch() - m_ms0; // qint64 ms1=QDateTime::currentMSecsSinceEpoch() - m_ms0;
// if(m_ic>=4*144*160) qDebug() << "Modulator finished" << m_ic << 0.001*ms1; // if(m_ic>=4*144*160) qDebug() << "Modulator finished" << m_ic << 0.001*ms1;
while (samples != end) // pad block with silence
{
samples = load (0, samples);
++framesGenerated;
}
return framesGenerated * bytesPerFrame (); return framesGenerated * bytesPerFrame ();
} }
// fall through // fall through

View File

@ -101,7 +101,7 @@ void SoundOutput::restart (QIODevice * source)
m_stream->setBufferSize (m_stream->format().bytesForDuration((m_msBuffered ? m_msBuffered : MS_BUFFERED) * 1000)); m_stream->setBufferSize (m_stream->format().bytesForDuration((m_msBuffered ? m_msBuffered : MS_BUFFERED) * 1000));
// qDebug() << "B" << m_stream->bufferSize() << // qDebug() << "B" << m_stream->bufferSize() <<
// m_stream->periodSize() << m_stream->notifyInterval(); // m_stream->periodSize() << m_stream->notifyInterval();
m_stream->setCategory ("production");
m_stream->start (source); m_stream->start (source);
} }