如何在不改变音高的情况下重新采样音频信号?

信息处理 声音的 重采样
2022-02-21 18:28:27

我正在再次连接视频,这次使用不同的播放速度。视频流部分很容易,但音频部分是目前让我难过的部分。

目前,我已经设法通过将时间戳乘以与所需播放速度成反比的因子来做到这一点,这样如果播放速度为半速,则时间戳乘以 2。

不仅如此,我还更改了音频样本(以字节数组的形式),以便当播放为半速时,重复每个样本(四个字节),而当播放为双速时,每秒样品被丢弃。

我的问题是这种方法也会改变生成的音轨的音高——半速播放会降低音高,双速播放会提高音高。

如何在不改变音高的情况下重新采样这些样本?

1个回答

简单的重新采样不适用于您的情况。重采样虽然在时域中拉伸/压缩信号,但也在频域中进行逆运算。

您可能想要研究的一些基本时间拉伸算法(不会导致音高变化)是:

1)OLA - 重叠和添加

2) PSOLA——音高同步重叠和相加

如果这就是你所拥有的,这些对单声道信号很有效。

3)相位声码器

这也适用于复音信号。但是在使用相位声码器方法时,您可能必须小心瞬变。

可能有时间延长器插件,您可以查看哪些使用这些插件。您还可以在 MATLAB/Python 等中找到一些开源代码和时移信号。

希望这可以帮助。让我们知道结果如何!