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

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

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

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

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

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

【问题讨论】:

  • 使用立体声听起来是解决这个问题的好方法。

标签: 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 声音)
  • 此外,速度不是相对完成的,因此您实际上必须设置源的速度(并每帧更新它)以阻止多普勒效应发生
  • 其实没有,这种方式很好用。您只需确保不再移动声源
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    随便用

    alSourcei(id, AL_DIRECT_CHANNELS_SOFT, 1)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多