如何在OpenAL中停止声音平滑

时间:2017-11-20 03:22:44

标签: ios objective-c openal

我在OpenAL中播放的声音太多了,而且来源的数量太多,有时候我必须停止一些使用功能alSourceStop的来源。但它经常会产生破音(音爆),如何避免这种现象?

1 个答案:

答案 0 :(得分:0)

注意:我不是iOS开发人员,只是展示了我将在任何其他平台上使用的解决方案。

您可以通过在决定停止后逐渐改变源的增益一段时间来实现声音淡出。 基本上,这就是你必须做的事情

float t = now - stopTime;
float d = 10
if(t > d)
   //Stop sound and delete source
else 
    alSourcef(source, AL_GAIN, originalGain * (1F - t / d)) 

在这个伪代码中originalGain是没有淡出的源的增益

now - 当前时间 stopTime - 你决定停止采购的那一刻 10 - 淡出的持续时间

通过使用这些值,您可以在完全增益和0之间进行线性插值,并防止破坏声音效果。