hap*_*per 5 audio openal audio-streaming adpcm
因此,我正在构建一个线程 IMA ADPCM 解码器,将音频数据流式传输到 OpenAL (请参阅下面的简短描述),但我遇到了一些麻烦。
我的问题之一是有时我对 alBufferData 的调用:
alBufferData(*bufferID, format, pcmData, sizeInBytes, bitRate);
AL_INVALID_VALUE即使在检查参数时也会返回,例如,如下所示:
bufferID='109770616', format='AL_FORMAT_STEREO16', dataPtr='109754188', sizeInBytes='8164'
有任何线索吗?发生这种情况时,实际播放的声音会有些卡顿,并且错误通常会连续发生约 10 次(在同一声音上)。当我重复启动相同的声音时,通常也会发生这种情况(例如,用轻机枪进行短时间连发射击时......;))
流媒体解码器模块的快速简化浏览
声音的播放方式:
解码/流媒体循环
如果还不算太晚,我会告诉您我在 BufferData 中遇到的类似问题,以下是我的修复方法。不过,请记住,我不知道您的线程程序的具体情况。
由于多种原因返回无效值,我知道的原因是... -
如果源已经分配了 bufferID,则对新缓冲区进行排队(到流媒体源)(因为如果设置缓冲区 ID,它将设置为静态) 。如果是这样,请删除源属性中的 ID。
- 更改播放中的缓冲区格式。一旦源开始播放,您就无法更改任何缓冲区设置(fmt、采样率),除了缓冲区数据本身,即使它位于另一个排队的源上。
听起来您可能正在另一个线程中更改这些设置之一。
另一件可能导致爆音的事情是重放声音。再次调用 play 只是停止源,然后倒回当前缓冲区并从头开始播放。像这样演奏枪声听起来不像你想要的(我认为是分层的)。2 个选项,将剩余的枪声混合到缓冲区中然后重播,但这可能不起作用。另一个万无一失的方法是使用多个来源并轮流在每次开火时调用哪些来源。
祝你的项目好运。