0

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

4

1 回答 1

2

这个问题涉及一个非常广泛的主题。这里有几点建议。

通常,可以通过偏移形成语音材料的频率来改变音高。一个简单的版本是在时间域中重新采样,其中基本上以不同的速度播放记录。这自然也会导致节奏变化,这通常是不可取的。

为了保持速度,您需要将材料“分解”成其组件,换句话说,将域从时域更改为频域。这就是傅立叶变换的用途。完成后,您可以估计每个样本的一组频率(以及如果在复杂空间中正确完成的相应相位)。

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

您可以使用傅里叶逆变换从频谱(频率)域向后移动到时间(时间)域。

总而言之,转移音高的简单方法需要将样本从时间域转换到频谱域,沿时间轴重新采样,然后进行傅里叶逆变换以返回时域。

除了傅里叶变换,您还可以使用小波。我希望这能让你开始。

于 2018-11-25T14:06:01.407 回答