我需要一个很好的音调转换解决方案来更改我的项目的声音。周围有很多变调js库-尝试了所有,但它们没有提供理想的结果。最主要的是无法控制结果的声音音色,我得到了米老鼠或地狱僵尸听起来的东西,但没有真正的声音。而在这里,如果用vega的声音进行测试,结果将非常出色:http://www.sonicapi.com/docs/live-task-demo?task=process-elastiqueTune#demo_form
不幸的是,我对音频处理的总评价为零,并且至少想知道它是如何完成的,这里使用了哪种类型的移位算法,以及我们如何实现对音色/共振峰的控制。任何提示高度赞赏。谢谢 ;)

最佳答案

这个问题涉及一个非常广泛的主题。这里有一些提示。

通常,可以通过抵消形成语音材料的频率来改变音高。一个简单的版本是在时域中重新采样,本质上是以不同的速度回放记录。这自然也会导致速度变化,这通常是不希望的。

为了保持速度,您需要将素材“分解”为其组成部分,换言之,将时域从频域更改为频域。这就是Fourier Transform的用途。完成后,您就可以估算每个样本的频率集(如果在复杂的空间中正确完成,还可以包含相应的相位)。

语音的感知音色取决于称为overtones的频率集的相对振幅。说话者的声道和听者都会形成泛音,并与基本频率一起听到。您可以在时域,频谱中使用不同的滤波器来控制音色
(频率)域或cepstral域。这种信号处理是一个装满书籍的图书馆部分的主题。

您可以使用逆傅立叶变换从频谱(频率)域移回到时间(时间)域。

综上所述,要改变音调的幼稚方法需要将样本从时域转换到频谱域,沿时间轴重新采样,然后进行傅立叶逆变换以返回到时域。

除了傅立叶变换,您还可以使用wavelets。我希望这可以帮助您入门。

08-16 06:39