我正在使用 OpenAL,当我调用 alSourcePlay() 时,我的声音缓冲区“轻柔地”启动。我找不到从 AL_GAIN 开始的方法。图片显示了两条记录,第一条是我想要的(我通过在不停止播放的情况下提供流缓冲区来模拟它)。第二条记录是使用新缓冲区调用 alSourcePlay() 时发生的情况。任何想法如何在没有软启动的情况下启动?
最佳答案
OpenAL 将单声道声音视为位置音频(在 3D 空间中),因此如果您希望单声道声音文件“全局”播放,无论位置如何,都可以在开始播放之前运行:
alSourcei(source, AL_SOURCE_RELATIVE, AL_TRUE);
这很好用。或者,您必须将听者和源的位置设置为每帧相同,但这会浪费 CPU 周期,并可能导致音频源“滞后”(从后面播放)如果您正在高速行驶(例如在车辆或飞机内)并且您的游戏循环更新位置太慢,因为例如在短时间内以较低的 fps 运行。
此外,通过复制音频 channel 将单声道声音文件转换为立体声会浪费内存并导致加载时间稍长(因为它处理相同的数据两次)。永远不要那样做。
关于macos - OpenAL 关闭软启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61856452/