2009-06-02 148 views
4

我正在尋找改變聲音文件的速度,但在如何實現它的過程中,我感到不知所措。我假設在減慢速度的情況下需要進行某種類型的插值,但我不確定如何實現加速 - 也許是幾個樣本的平均值?無論現在改變速度還是改變速度並不重要,我都希望學會如何完成這兩項任務,但至少希望完成其中一項或另一項。更改聲音文件的速度

如果有人有任何這些類型的操作背後的數學引用,他們將不勝感激!

謝謝, 奔

+1

這是一個有趣的冠冕堂皇的題目:) – 2009-06-02 14:33:45

+4

是的,我幾乎把它看作是「改變聲音的速度」 – 2009-06-02 14:35:03

回答

9

有兩個選項,以加快聲音文件的回放:

  • 提高採樣率
  • 減少每單位時間的樣本的數目。

在任何一種方法中,回放速度的增加都會使聲音的音高有相應的變化。

增加採樣率

增加採樣率將增加聲音的回放速度。例如,從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) 

我還張貼了回答的一個問題:「」裏,我走進了一些關於可以執行的一些基本音頻操作的細節,所以也許這也可能是有趣的。

3

維基百科上有關於sample rate conversion的很好的解釋。基本上,您可以將信號轉換爲兩個採樣率的最小公倍數,濾除不符合目標採樣率(或不是來源)的任何頻率,然後以目標採樣率採集新採樣。有數學技巧可以使計算花費大大減少資源(多相分解),但這應該讓你開始。