1

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

alSourcef(source, AL_PITCH, aPitch);

但是,当我执行此操作时,我注意到有咔哒声。除了音高是完美的,正确的音高等。有什么想法可能导致这种情况吗?

4

2 回答 2

0

我有这方面的经验,主要是因为你将音高移动得太高或太低,移动音高会拉伸或缩小波数据长度,如果你的数据没有足够的样本来拉伸它会听起来“很奇怪",如果您的播放缓冲区没有足够的样本来及时馈送,则在缩短长度(音高)的情况下,它将滞后或抖动,因为从概念上讲,由于缩短了音频长度,播放速率会增加,主要是点击或弹出是你听到的。

为了防止这种情况,你应该限制移位范围,大多数声卡的限制大多是 0.5 到 2.0,并且它因声卡而异,因为通过使用 DSP 中的一些高级平滑和处理可以更好地移动音高,所以这将取决于您的 DSP 或 CPU 的处理能力来进行此类处理。我用板载intel HDA试过了,限制大多是0.5到2.0,但是使用X-Fi声卡更好,切换到0.1 .. 5.0没有问题

于 2010-03-06T16:46:46.747 回答
0

我没有使用过 OpenAL,但在其他声音库中我已经看到了这个“神器”。通常,在处理音调发生器等时,音调达到 100% 音量所需的时间有一个变量,我可能一辈子都不记得它叫什么了:)

像这样:

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

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

无论如何,如果您有能力设置此变量,请尝试这样做,只需将其设置为 10 毫秒。您将听不到它,但它在我用于 iPhone 的开源声音库和我过去使用的一些 Java/Processing 库中为我消除了点击声音。

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

于 2010-03-02T22:54:21.017 回答