OpenAL - 如何播放未衰减的音效?

Posted

技术标签:

【中文标题】OpenAL - 如何播放未衰减的音效?【英文标题】:OpenAL - how to play unattenuated sound effects? 【发布时间】:2011-03-01 21:44:45 【问题描述】:

我在我的 iPhone 项目中使用 OpenAL 来创建声音,当远离听者时会减弱。

但是 - 我也想播放一些不会被距离衰减的音效。

到目前为止,我通过使用不会衰减的立体声解决了这个问题。但现在我要添加大量的配音,这需要相当多的空间 - 所以我希望它们是单声道的,但现在又遇到了一个问题,即它们会因距离而衰减。

我的下一个解决方案是将播放语音样本的源的“AL_MIN_GAIN”设置为 1.0,但这似乎只适用于模拟器,而不适用于设备。

有没有其他方法可以用openAL播放不因距离而衰减的音效?

【问题讨论】:

使用立体声听起来是解决这个问题的好方法。 【参考方案1】:
alSourcei (sourceName, AL_SOURCE_RELATIVE, AL_TRUE);
alSource3f (sourceName, AL_POSITION, 0.0f, 0.0f, 0.0f);
alSource3f (sourceName, AL_VELOCITY, 0.0f, 0.0f, 0.0f);

然后源应该停留在听者的位置。

【讨论】:

如果您移动监听器,这实际上不起作用。我相信AL_SOURCE_RELATIVE 这一定是声源位置的初始规范,但是如果听者移动,声源不会随之移动(所以它仍然起作用像 3d 声音) 此外,速度不是相对完成的,因此您实际上必须设置源的速度(并每帧更新它)以阻止多普勒效应发生 Excellent post discussing my first comment here 其实没有,这种方式很好用。您只需确保不再移动声源【参考方案2】:

您可以尝试打开没有距离模型的第二个上下文。我不确定 ios 是否支持多个上下文...

或者,只需将“声音”源与听众保持在同一位置即可。

【讨论】:

【参考方案3】:

随便用

alSourcei(id, AL_DIRECT_CHANNELS_SOFT, 1)

AL_DIRECT_CHANNELS_SOFT宏定义在<AL/alext.h>

【讨论】:

以上是关于OpenAL - 如何播放未衰减的音效?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone游戏中的音效

如何将来自 OpenAL 的音频与 iPod 音乐混合?

如何播放/停止背景音乐和音效?

如何在 Android 中播放音效

如何在 AVAudioPlayer 中播放 0.5 秒的 1 秒音效?

在 Xcode 中播放音效