Language agnostic 音高无变化的音频

Language agnostic 音高无变化的音频,language-agnostic,open-source,audio,Language Agnostic,Open Source,Audio,我正试图找到一个库或示例代码或一些正确的方向,可以帮助我改变音频的速度,同时保持正常的音调。我需要在开源应用程序中使用此功能,因此最好库本身是开源的。有什么想法可以让我走上正轨吗?维基百科上的文章可能会有所帮助。基本想法是,你需要将信号沿时间轴转换为信号随时间和频率轴的变化。然后适当地修改该信号,然后再次转换回 加窗快速傅里叶变换是一种常见的方法-取一小段信号,转换到频域,在信号中重复周期性的步骤。修改信号基本上意味着在应用逆变换之前重新标记频率和/或时间轴缩放。窗口可能会有一点重叠,因此可以从

我正试图找到一个库或示例代码或一些正确的方向,可以帮助我改变音频的速度,同时保持正常的音调。我需要在开源应用程序中使用此功能,因此最好库本身是开源的。有什么想法可以让我走上正轨吗?

维基百科上的文章可能会有所帮助。

基本想法是,你需要将信号沿时间轴转换为信号随时间和频率轴的变化。然后适当地修改该信号,然后再次转换回

加窗快速傅里叶变换是一种常见的方法-取一小段信号,转换到频域,在信号中重复周期性的步骤。修改信号基本上意味着在应用逆变换之前重新标记频率和/或时间轴缩放。窗口可能会有一点重叠,因此可以从一个块混合(交叉淡入)到另一个块

另一种可能的方法是使用小波变换、滤波器组或其他一些密切相关的多分辨率方法。其基础是使用积分变换,在积分变换中,每个频率都以适当的比例(相对于波长)进行处理。例如,morlet基非常类似于作为傅里叶变换基础的正弦+余弦组合的单一波长受限变化

从理论上讲,这应该会带来更好的结果。由于变换自然具有时间轴和频率轴,因此无需通过窗口“人工”生成时间轴。这可以避免使用加窗傅里叶变换方法时块之间有时明显的交叉衰落问题。我猜可能还有其他的人工制品,但我不知道它们是什么


很抱歉,如果我的术语对多分辨率内容有误导性或错误-我远不是专家。

如果您需要在音频域中传递信号,按时间播放但不按音高播放: 你必须知道你的信号是由什么组成的。以便在有价值的情况下综合出好的频率

1/你知道所有的参数,比如在模拟合成中,你知道你想合成一个音符,所以你可以将所有振荡器的频率调整到这个值:我猜这不是你能做的,任何虚拟/虚拟模拟合成器都可以根据你的要求做这件事

2/你有一个想要控制的声音源 你必须把它分解成你可以控制的项目,然后在时间和节奏的约束下进一步满足你的和声约束:3种解决方案

a。FFT,快速Fourier变换,为您提供源声音所有谐波的功率,并由您来放大某些谐波或其他谐波的时间尺度(真正的烹饪食谱,但真正值得一试)

b。小波,接近FFT,但关注谐波细节,无论何时发生,以及发生的精确程度。(想象一下,这就像每次对一些有意义的频率进行FFT优化一样)

c颗粒合成,我认为它是最简单的:它执行窗口(对声音的每个时间片段应用高斯法向定律),就像原始声音上的窗口云,将其分解为许多部分,在音调和持续时间(应用于声音的窗口的速度和周期)上完全可管理


可能还有很多其他技巧,但我不知道。

你需要说明你在谈论什么样的源材料-例如,通常你对语音和音乐使用不同的算法。@Paul,这两种方法都适用,但如果你说它们是不同的算法,请告诉我这两种算法都使用了哪些算法。维基百科的文章对此做了很好的介绍——SOLA/PSOLA用于语音,相位声码器用于音乐。+1用于提供搜索该领域其他材料的术语。