音が出るまで、のこと その4
定期的にPCMデータを再生用バッファに書き込みます。
この手順はサンプルソースaudiooutput.cppの関数pullTimerExpired()に集約されています。
QAudioOutputのインスタンスが生成されていることと状態がStoppedStateでないことを確認し、その場合のみ再生バッファへの書き込みを行います。
bytesFree()は現在の再生バッファのトータルの空きサイズ(バイト)を返します。periodSize()は一度の書き込みで必要なデータサイズ(バイト)を返します。一度にperiodSize()分だけ書き込んでトータルbytesFree()サイズ分まで書き込めるので、最大bytesFree()/periodSize()回だけ書き込みを行います。この回数がchunksの値ですね。
void AudioTest::pullTimerExpired() { if (m_audioOutput && m_audioOutput->state() != QAudio::StoppedState) { int chunks = m_audioOutput->bytesFree()/m_audioOutput->periodSize(); while (chunks) { const qint64 len = m_generator->read(m_buffer.data(), m_audioOutput->periodSize()); if (len) m_output->write(m_buffer.data(), len); if (len != m_audioOutput->periodSize()) break; --chunks; } } }
« 音が出るまで、のこと その3 | トップページ | 音が出るまで、のこと その5 »
コメント