【问题标题】:JS pitch shift with timbre control带有音色控制的 JS 音高变换
【发布时间】:2018-11-25 13:22:41
【问题描述】:

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

【问题讨论】:

    标签: javascript web-audio-api pitch-shifting


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-16
      • 2011-06-26
      • 2018-11-19
      • 2013-08-25
      • 1970-01-01
      • 2013-09-30
      • 2019-06-01
      相关资源
      最近更新 更多