« 音が出るまで、のこと その3 | トップページ | 音が出るまで、のこと その5 »

2014年4月20日 (日)

音が出るまで、のこと その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 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/2011805/55858504

この記事へのトラックバック一覧です: 音が出るまで、のこと その4:

« 音が出るまで、のこと その3 | トップページ | 音が出るまで、のこと その5 »