0

ストリーミング オーディオを実装しようとしていますが、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) を使用しています。

4

2 に答える 2

-1

複数のバッファの条件を処理するには、ループを使用します。以下は iOS と Linux で動作します:

// UN queue used buffers ALint buffers_processed = 0; alGetSourcei(streaming_source, AL_BUFFERS_PROCESSED, & buffers_processed); // get source parameter num used buffs while (buffers_processed > 0) { // we have a consumed buffer so we need to replenish ALuint unqueued_buffer; alSourceUnqueueBuffers(streaming_source, 1, & unqueued_buffer); available_AL_buffer_array_curr_index--; available_AL_buffer_array[available_AL_buffer_array_curr_index] = unqueued_buffer; buffers_processed--; }
于 2013-05-30T19:11:01.127 に答える