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 - 如何播放未衰减的音效?的主要内容,如果未能解决你的问题,请参考以下文章