そこで、オーディオ データを OpenAL にストリーミングするスレッド化された IMA ADPCM デコーダを構築しています (簡単な説明については以下を参照)が、いくつかの問題に遭遇しました。
私の問題の 1 つは、alBufferData への呼び出しが時々あることです。
alBufferData(*bufferID, format, pcmData, sizeInBytes, bitRate);
AL_INVALID_VALUE
ただし、パラメーターをチェックすると、たとえば次のようになります。
bufferID='109770616', format='AL_FORMAT_STEREO16', dataPtr='109754188', sizeInBytes='8164'
手がかりはありますか?これが発生すると、再生されている実際のサウンドが途切れ途切れになり、エラーは通常、(同じサウンドで) 連続して ~ 10 回発生します。また、通常、同じ音を繰り返し開始したときにも発生します (たとえば、LMG で短いバーストを撃ったときなど... ;))
streaming-decoder-module-thing のクイック ツアー
サウンドの再生方法:
- サウンドがトリガーされて再生されます。
- 1 bufferSize 相当のオーディオがデコードされ、残りはさらにデコードするためにキューに入れられます。
- OpenAL がトリガーされ、サウンドの再生が開始されます。
デコード/ストリーミング ループ
- デコードのためにキューに入れられたサウンドごとに、bufferSize 相当のオーディオをデコードします。
- デコードされたオーディオは、適切な bufferID を使用して alBuffer (上記の呼び出しを参照) に追加されます。