2012-02-13 24 views
2

我想在python中構建一些可以分析上傳的mp3並生成必要的數據來構建波形圖形的東西。我發現的一切都比我需要的複雜得多。最終,我正在嘗試構建像你在SoundCloud上看到的東西。從mp3生成音量曲線

我一直在尋找numpyfft's,但這一切似乎比我需要更復雜。最好的辦法是什麼?我將使用畫布構建實際的圖形,所以不要擔心它的那一部分,我只需要繪製數據。

+1

'fft'是針對光譜的。爲了繪製音量,你可以從字面上使用波形本身(或者它是方形的,在技術上更精確)。 – wim 2012-02-13 01:57:06

+0

這種證實了我的懷疑。你能詳細闡述一些細節(首選模塊,「方形」或其他有用的東西)嗎? – Scott 2012-02-13 02:04:39

+0

您需要將mp3文件解碼爲PCM波形,您可以將其存儲在「numpy」數組中。 – wim 2012-02-13 02:08:19

回答

1

MP3文件是波形的編碼版本。在使用波形之前,您必須先將MP3數據解碼爲PCM波形。一旦獲得PCM數據,每個採樣代表該時間點的波形幅度。如果我們假設MP3解碼器輸出帶符號的16位值,則幅度範圍將從-16384到+16383。如果通過將每個樣本除以16384來標準化樣本,則波形樣本的範圍將介於+/- 1.0之間。

這個問題確實是MP3解碼到PCM的問題之一。據我所知,沒有本地的Python解碼器。但是,您可以使用LAME,從python調用它作爲子流程,或者稍微多做一些工作,將LAME庫直接連接到像SWIG之類的Python。不是一項簡單的任務。

繪製該數據然後成爲讀者的練習。

1

我建議你使用Pygame,如果你不想處理MP3文件格式的內部工作。

Pygame是一個多媒體庫,可以打開常見的音頻文件格式 - 包括.mp3和.ogg作爲「聲音」對象 - 如果你有Numpy安裝在下面,你可以瀏覽未壓縮的(因此,後fft轉換)聲音,使用pygame.sndarray.array調用 - 它會返回一個帶有聲音樣本的numpy數組對象。

我發現了一個小竅門 - 請確保您的.mp3文件具有相同的參數(用於頻率,位採樣大小和n.of聲道)或調用sndarray時調用pygame.mixer.init .array可能會引發異常。

檢查文檔http://www.pygame.org/docs/