Macos OpenAL-alSourceQueueBuffers增加AL\u缓冲区\u已处理计数?

Macos OpenAL-alSourceQueueBuffers增加AL\u缓冲区\u已处理计数?,macos,openal,Macos,Openal,在MacOSX上使用系统框架处理OpenAL中的流媒体源时,我遇到了一些困难。我仍然不确定是什么触发了它,但有时,在停止流媒体源并再次播放它之后,将缓冲区排队会增加AL_BUFFERS_PROCESSED值。我使用如下所示的while循环来处理源的缓冲区: alGetSourcei(source, AL_BUFFERS_PROCESSED, &processed); while (processed--) { ALuint buffer; // Get a free

在MacOSX上使用系统框架处理OpenAL中的流媒体源时,我遇到了一些困难。我仍然不确定是什么触发了它,但有时,在停止流媒体源并再次播放它之后,将缓冲区排队会增加AL_BUFFERS_PROCESSED值。我使用如下所示的while循环来处理源的缓冲区:

alGetSourcei(source, AL_BUFFERS_PROCESSED, &processed);

while (processed--)
{
    ALuint buffer;

    // Get a free buffer.
    alSourceUnqueueBuffers(source, 1, &buffer);
    streamAtomic(buffer, decoder); // streamAtomic decodes compressed audio data and calls alBufferData.
    alSourceQueueBuffers(source, 1, &buffer);
}
可以找到源类的完整源代码

正常情况下,此更新循环工作正常,但每当触发此错误时,调用alSourceQueueBuffers似乎会增加已处理的AL_BUFFERS_,这意味着每个更新周期,此循环会花费越来越长的时间,直到达到排队的缓冲区总数,在此情况下为32,在此情况下,它会一直停留到暂停或停止源,在这一点上,AL_缓冲区处理重置-并立即开始再次增加。我检查了,调用alSourceUnqueueBuffers后,计数确实减少了1。只有在调用alSourceQueueBuffers之后,计数才会再次增加

我一直在仔细研究我的代码、OpenAL规范、堆栈溢出、OpenAL邮件列表和Google,我找不到任何关于这一情况的文档,也找不到任何关于我是否做错了什么或这是否是OpenAL实现中的错误的指示。值得一提的是,在Windows和Linux上的OpenAL软件下,使用完全相同的代码,此错误不会发生。不过,我无法让OpenAL软件在我的Mac上正常工作以进行测试


有什么想法吗?

如果所有缓冲区都已处理,并且没有更多缓冲区排队,则声音播放将停止。即使您将更多缓冲区排队,声音也不会自动启动。检查while循环后源是否正在播放。如果源未播放,则重新启动播放alSourcePlay。源不会停止。事实上,播放过程似乎没有受到影响。它似乎正在处理正常提供的缓冲区,但数量没有减少。这很令人困惑。