改变声音文件的速度

时间:2009-06-02 14:32:15

标签: algorithm audio multimedia

我希望改变声音文件的速度,但是如何完成它却不知所措。我假设在减慢速度的情况下必须进行某种类型的插值,但我不确定如何实现加速 - 也许是几个样本的平均值?无论是改变速度还是音高,目前并不重要,我想学习如何完成两者,但至少要完成其中一个或另一个。

如果有人对这些类型的操作背后的数学有任何参考,他们将不胜感激!

谢谢, 本

2 个答案:

答案 0 :(得分:10)

有两种方法可以加快声音文件的播放速度:

  • 提高采样率
  • 减少每单位时间的样本数量。

在其中任何一种方法中,播放速度的增加都会使声音的音高发生相应的变化。

提高采样率

提高采样率将提高声音的播放速度。例如,从22 KHz采样率到44 KHz将使播放声音的速度提高到原始速度的两倍。在此方法中,原始采样数据不会改变 - 只需要更改音频播放设置。

减少每单位时间的样本数量

在这种方法中,播放采样率保持不变,但样本数量减少 - 一些样本被丢弃。

使声音播放速度达到原始速度两倍的简单方法是删除所有其他样本,并以原始播放采样率播放。

然而,使用这种方法,一些信息将会丢失,我希望有些工件会被引入音频,所以这不是最理想的方法。

虽然我自己没有尝试过,但是平均样本来创建新样本的想法是一个很好的开始。这似乎意味着,不仅仅是丢弃音频信息,它可以通过平均过程“保留”到一定程度。

作为这个过程的一个粗略概念,这里有一段伪代码可以使播放速度加倍:

original_samples = [0, 0.1, 0.2, 0.3, 0.4, 0.5]

def faster(samples):
    new_samples = []
    for i = 0 to samples.length:
        if i is even:
            new_samples.add(0.5 * (samples[i] + samples[i+1]))
    return new_samples

faster_samples = faster(original_samples)

我还回答了一个问题“Getting started with programmatic audio”的答案,其中我详细介绍了可以执行的一些基本音频操作,所以也许这可能也会引起人们的兴趣。

答案 1 :(得分:4)

对维基百科上的sample rate conversion有一个很好的解释。基本上,您将信号转换为两个采样率的最小公倍数,过滤掉任何不符合目标采样率(或不来自源)的频率,并在目标采样率下选取新样本。有一些数学技巧可以使计算占用大量资源(多相分解),但这应该可以让你开始。