改变声音文件的速度

use*_*293 5 algorithm audio multimedia

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

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

谢谢,本

coo*_*ird 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)
Run Code Online (Sandbox Code Playgroud)

我还回答了一个问题" 程序化音频入门 "的问题,其中我详细介绍了一些可以执行的基本音频操作,所以也许这可能也会引起人们的兴趣.


Ant*_*sma 5

维基百科上有关于采样率转换的很好的解释。基本上,您将信号转换为两个采样率的最小公倍数,过滤掉任何不适合目标采样率(或不是来自源)的频率,并以目标采样率选择新样本。有一些数学技巧可以使计算占用的资源大大减少(多相分解),但这应该可以帮助您入门。