2013-07-23 24 views
1

我正在嘗試編寫一些代碼,用於從MP3中提取幅度數據作爲時間的函數。我使用這個函數在MATLAB上寫了一個粗略的版本:http://labrosa.ee.columbia.edu/matlab/mp3read.html但是我找不到一個相當於Python的版本。從mp3讀取幅度數據

我已經做了大量的研究,到目前爲止,我已經收集到我需要使用類似mpg321的東西將.mp3轉換爲.wav。我一直無法弄清楚如何讓這個工作。

下一步將讀取.wav文件中的數據,我也沒有取得任何成功。有沒有人做過類似的事情,或者可以推薦一些圖書館來幫助這個?謝謝!

回答

1

可以使用subprocess模塊調用mpg123

import subprocess 
import sys 

inname = 'foo.mp3' 
outname = 'out.wav' 
try: 
    subprocess.check_call(['mpg123', '-w', outname, inname]) 
except CalledProcessError as e: 
    print e 
    sys.exit(1) 

對於閱讀WAV文件,你應該使用波模塊,像這樣:

import wave 
import numpy as np 

wr = wave.open('input.wav', 'r') 
sz = 44100 # Read and process 1 second at a time. 
da = np.fromstring(wr.readframes(sz), dtype=np.int16) 
wr.close() 
left, right = da[0::2], da[1::2] 

之後,leftright包含相同頻道的樣本。

你可以找到一個更詳細的例子here

+0

不錯的代碼,但關閉文件! :D'wr.close()' – tamasgal

+0

請您詳細說明使用'subprocess'來調用'mpg123'嗎?謝謝。 –

1

Pymedia圖書館似乎是穩定的,並處理你所需要的。