2013-01-17 102 views
1

我想通過遵循GameDev.net的指導,嘗試使用基本節拍檢測(在C和/或Java中)進行一些工作。我理解算法實現背後的邏輯,然而我很困惑如何獲得歌曲左右聲道(即mp3或wav)的「聲音幅度」數據。信號處理和音頻節拍檢測

例如,他開始與如下假設:

在這個模型中,我們將通過計算信號的平均聲能,並將其與即時聲音能量檢測聲能的變化。假設我們正在使用兩個值列表進行立體聲模式工作:(an)和(bn)。 (an)包含左聲道每隔Te秒捕獲的聲音幅度值列表,(bn)右聲道每隔Te秒捕獲的聲音幅度值列表。

然後他繼續操作anbn使用他的以下算法。我想知道如何進行必要的信號處理,以獲得anbnTe秒,這樣我就可以開始跟隨他的指導,並在歌曲中進行一些簡單的節拍檢測。

回答

1

未壓縮的音頻文件(例如.wav或.aiff)大部分是大量樣本。每個樣本由給定時間點的振幅組成。當錄製音樂時,每秒鐘會採集很多這些幅度樣本。 對於立體聲(雙聲道)音頻文件,陣列中的採樣通常會交替切換通道:[sample1 left,sample1 right,sample2 left,sample2 right,etc ...]。

大多數音頻解析庫已經有一種方法來爲每個通道單獨返回樣本。

一旦您爲每個通道設置了樣本數組,只要您知道採樣速率或每秒樣本數,就可以輕鬆找到特定秒的樣本。例如,如果文件的採樣率爲每秒44100個採樣點,並且您希望在第012秒採集n的採樣點,則可以使用介於(n * 44100)和( (n + 1)* 44100)。