代码之家  ›  专栏  ›  技术社区  ›  Ian1971

在OpenAL中变桨时可听到咔嗒声

  •  1
  • Ian1971  · 技术社区  · 16 年前

    我正在使用OpenAL来改变音符的音调。例如

    alSourcef(source, AL_PITCH, aPitch);
    

    但我注意到,当我这样做时,会听到咔哒声。除此之外,音高是完美的,正确的音高等等。 你知道这是什么原因吗?

    2 回复  |  直到 16 年前
        1
  •  0
  •   RickiG    16 年前

    我没有使用OpenAL,但在其他声音库中我看到了这个“工件”。通常,在处理音调发生器等时,当音调达到100%音量水平时,会有一个变量,我一辈子都不记得它叫什么:)

    这样地:

    playTone(400 Hz, 40 dB, 50 ms, 3000 ms).
    

    其中,400表示赫兹,40 dB表示音量,3000毫秒表示持续时间和 50毫秒是从音量0(或+100dB)开始音调到达到40 dB所需的时间。 我现在简直找不到这个词。

    不管怎么说,如果你有能力设置这个变量,试着这样做,只需将它设置为10毫秒左右。你将听不到它,但它为我消除了iPhone使用的开源声音库和过去使用的一些Java/处理库中的点击声音。

    也许这与底层代码触发连接到扬声器的硬件的方式有关?

        2
  •  0
  •   uray    16 年前

    我在这方面有经验,主要是因为你把音高调得太高或太低,把音高调得太高或太低都会拉伸或收缩波数据长度,如果你的数据没有足够的样本来拉伸,听起来会很“奇怪”,如果播放缓冲区没有足够的样本输入时间,则在缩短长度(调高)的情况下,它将延迟或抖动,因为从概念上讲,播放速率会因音频长度的缩短而增加,您听到的主要是咔哒声或弹出声。

    为了防止这种情况发生,您应该限制移位范围,大多数声卡的移位范围通常为0.5到2.0,并且在声卡上有所不同,因为在DSP中使用一些高级平滑和处理可以使音调移位更好,因此这将取决于DSP或CPU的处理能力来进行此类处理。我曾尝试过使用内置intel HDA,其限制大多为0.5到2.0,但使用X-Fi声卡更好,改为0.1。。5.0没有问题