gpt4 book ai didi

audio - OpenAL:alBufferData 返回 AL_INVALID_VALUE,即使输入变量 *look* OK?

转载 作者:行者123 更新时间:2023-12-01 02:34:18 25 4
gpt4 key购买 nike

所以,我正在构建一个线程化的 IMA ADPCM 解码器,将音频数据流式传输到 OpenAL(简短描述见下文),但我遇到了一些麻烦。

我的问题之一是有时我对 alBufferData 的调用:
alBufferData(*bufferID, format, pcmData, sizeInBytes, bitRate);
返回 AL_INVALID_VALUE即使,在检查参数时,它们看起来像这样:
bufferID='109770616', format='AL_FORMAT_STEREO16', dataPtr='109754188', sizeInBytes='8164'
任何线索,有人吗?发生这种情况时,实际播放的声音会有点口吃,并且错误通常会连续发生约 10 次(在相同的声音上)。当我重复启动相同的声音时,通常也会发生这种情况(例如,当用 LMG 短时间射击时……;))

流式解码器模块的快速简化之旅

如何播放声音:

  • 触发声音播放。
  • 一个 bufferSize 的音频被解码,其余的被排队等待进一步解码。
  • 触发 OpenAL 开始播放声音。

  • 解码/流循环
  • 对于排队等待解码的每个声音,解码 bufferSize 值的音频。
  • 解码后的音频被添加到具有适当 bufferID 的 alBuffer(参见上面的调用)中。
  • 最佳答案

    如果还不算太晚,我会告诉你我在使用 BufferData 时遇到的类似问题,这就是我修复它的方法。尽管请记住,我不知道您的线程程序的细节。

    由于多种原因返回了无效值,我知道的原因是......
    - 如果源已经分配了 bufferID(因为如果您设置缓冲区 id,它将被设置为静态),则将新缓冲区(到流式源)排队。如果是这样,请删除源属性中的 ID。
    - 在播放中更改缓冲区格式。一旦源开始播放,您不能更改任何缓冲区设置(fmt,采样率),除了缓冲区数据本身,即使它在另一个排队的。

    听起来您可能正在另一个线程中更改其中一个设置。

    可能导致爆裂声的另一件事是重放声音。再次调用 play 只是停止源冷,然后倒回当前缓冲区并从头开始播放。演奏这样的枪声听起来不像你想要的那样(我假设是分层的)。 2个选项,将剩余的枪声混合到缓冲区中然后重播,但这可能行不通。另一个简单的证明就是使用多个来源并轮流在每次开火时调用哪些来源。

    祝你的项目好运。

    关于audio - OpenAL:alBufferData 返回 AL_INVALID_VALUE,即使输入变量 *look* OK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10996917/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com