我正在尝试实现流式音频,但我遇到了一个问题,鉴于文档中的信息,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) 上,以防万一。