ストリーミング オーディオを実装しようとしていますが、OpenAL がエラー コードを表示するという問題に遭遇しました。ドキュメントの情報では不可能のようです。
int buffersProcessed = 0;
alGetSourcei(m_Source, AL_BUFFERS_PROCESSED, &buffersProcessed);
PrintALError();
int toAddBufferIndex;
// Remove the first buffer from the queue and move it to
//the end after buffering new data.
if (buffersProcessed > 0)
{
ALuint unqueued;
alSourceUnqueueBuffers(m_Source, 1, &unqueued);
/////////////////////////////////
PrintALError(); // Prints AL_INVALID_OPERATION //
/////////////////////////////////
toAddBufferIndex = firstBufferIndex;
}
ドキュメント [PDF]によると、 AL_INVALID_OPERATION
「現在のコンテキストはありません」という意味です。OpenAL は他のオーディオを正常に再生し続けているため、これは真実ではないようです。
念のため、ALCcontext* temp = alcGetCurrentContext( );
ここで呼び出したところ、有効なコンテキストが返されました。
ドキュメントに記載されていない、ここで発生する可能性のある他のエラー状態はありますか?
詳細: このコードが呼び出されているときは音源が再生されていますが、仕様を読んで感じたのは、ソースの再生中に処理済みのバッファーを安全にアンキューできるということです。エラーが発生した場合に出力PrintALError
される単なるラッパーです。alGetError
問題が発生した場合に備えて、私は Mac (OS 10.8.3) を使用しています。