音频不改变音高

3

我正在尝试寻找一个库或示例代码或其他有助于我改变音频速度同时保持正常音高的东西。我需要在一个开源应用程序中使用这个功能,因此最好是该库本身也是开源的。有什么想法可以帮助我找到正确的方向吗?


你需要说明你所讨论的是什么类型的源材料——例如,通常对于语音和音乐会使用不同的算法。 - Paul R
@Paul,它应该可以使用两种算法,但如果你说它们是不同的算法,请告诉我分别使用了哪些算法。 - silow
维基百科的文章已经很好地涵盖了它 - SOLA/PSOLA用于语音,相位编码器用于音乐。 - Paul R
3个回答

2

提供领域内搜索附加材料的术语,+1。 - Android Eve

2

如果您需要在音频领域传达信号,要按时播放但不改变音高:

您必须知道您的信号由什么组成。以便在值得时合成好的频率。

1/ 您已经知道所有参数,就像模拟合成一样,您知道要合成一个音符,所以您可以调整所有振荡器的频率以达到这个值:我想这不是您能做的任何虚拟/虚拟模拟合成器都可以根据您的需求完成此操作。

2/ 您有一个要控制的源声音 您必须将其分解为您可以控制的项目,以满足您的谐波约束,时间和节奏限制:3种解决方案。

a. FFT,快速傅里叶变换,给出您源声音所有谐波功率的数量,由您来扩大某些谐波或另一些谐波的时间尺度(非常酷的技巧,但实验非常值得)

b. 小波变换,接近FFT,但关注谐波细节,无论它们发生在何时以及它们发生的精确程度。(想象一下它就像FFT在每个时间上优化某些有意义的频率)

c. 颗粒合成,我认为这是最简单的:它执行窗口(在声音的每个时间片段上应用一种类似于高斯正则分布的方法),就像云彩般的窗口覆盖您原始的声音,将其解耦成许多部分,在它们的音高和持续时间(应用于声音的窗口的速度和周期)上完全可控。

可能还有很多其他技术,但我不太清楚。


1
基本思路是需要将一个沿时间轴的信号转换为在时间和频率轴上的信号,然后适当地修改该信号,再次进行转换。
窗口快速傅里叶变换是一种常见方法-取信号的短段,转换为频域,重复周期性步骤通过信号。修改信号基本上意味着在应用反向变换之前重新标记您的频率和/或时间轴比例尺。窗口可能会有一些重叠,因此您可以从一个块淡入淡出到另一个块。
另一个可能的方法是使用小波变换、滤波器组或其他密切相关的多分辨率方法。这些的基础是积分变换的使用,其中每个频率相对于波长在适当的尺度上处理。例如,莫尔基函数就非常像傅立叶变换的正弦+j.余弦组合的单波长限制变化。
理论上,这些应该提供更好的结果。由于转换自然具有时间和频率轴,因此无需通过窗口生成时间轴“人工”。这可能避免了窗口傅里叶变换方法中明显的块间交叉淡入淡出问题。我猜可能会有其他工件,但我不知道它们是什么。

如果我在多分辨率方面的术语使用不准确或错误,对此我深感抱歉 - 我离专家还有很长的路要走。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接