我安裝的Debian/Ubuntu的軟件包libav-tools並調用avconv
到MP3到臨時wav文件進行解碼:
編輯:您的其他問題被關閉,所以在這裏我要擴大我的回答有一個簡單的帶通濾波例子。在你鏈接的文件中,它看起來像大多數鳥鳴集中在4 kHz - 5.5 kHz。
import os
from subprocess import check_call
from tempfile import mktemp
from scikits.audiolab import wavread, play
from scipy.signal import remez, lfilter
from pylab import *
# convert mp3, read wav
mp3filename = 'XC124158.mp3'
wname = mktemp('.wav')
check_call(['avconv', '-i', mp3filename, wname])
sig, fs, enc = wavread(wname)
os.unlink(wname)
# bandpass filter
bands = array([0,3500,4000,5500,6000,fs/2.0])/fs
desired = [0, 1, 0]
b = remez(513, bands, desired)
sig_filt = lfilter(b, 1, sig)
sig_filt /= 1.05 * max(abs(sig_filt)) # normalize
subplot(211)
specgram(sig, Fs=fs, NFFT=1024, noverlap=0)
axis('tight'); axis(ymax=8000)
title('Original')
subplot(212)
specgram(sig_filt, Fs=fs, NFFT=1024, noverlap=0)
axis('tight'); axis(ymax=8000)
title('Filtered')
show()
play(sig_filt, fs)
感謝。這有效,但它給出了略有不同的譜。原始的mp3在http://www.xeno-canto.org/download.php?XC=124158。與x軸標記不同的主要區別在於,使用原始mp3和您的代碼的版本在結尾處以及在圖像的頂部都包含空白時段。我只是做了跛腳版本的wav版本 - 解碼XC124158.mp3。 – Majid 2013-03-09 18:09:09
我剛纔看到你也可能知道http://stackoverflow.com/questions/15309155/extract-faint-bird-song-from-background-noise。如果你對此也有任何意見,那將是非常棒的。 – Majid 2013-03-09 18:42:37
我將其簡化爲只使用'mktemp'(事實證明,avconv無法在管道中編寫正確的wav頭文件)並向FFT中添加了更多的bin,並且沒有重疊。軸('緊')擺脫空白部分。您可能也想使用'axis(ymax = 8000)',因爲大部分功率都低於8 kHz。 – eryksun 2013-03-09 20:10:46