从MP3情节频谱图(Plot spectogram from mp3)

2019-07-21 06:44发布

我试图从蟒蛇2.7.3 MP3文件(使用Ubuntu)直绘制频谱图。 我可以从一个WAV文件如下做到这一点。

#!/usr/bin/python
from scikits.audiolab import wavread
from pylab import *

signal, fs, enc = wavread('XC124158.wav')
specgram(signal)
show()

什么是MP3文件,而不是WAV做同样的事情最彻底的方法? 我不希望所有的MP3文件转换为WAV,如果我能避免它。

Answer 1:

我安装的Debian / Ubuntu的软件包libav工具 ,并呼吁avconv的MP3解码到一个临时wav文件:


编辑:你的另一个问题是封闭的,所以在这里我要扩大我的回答有点用一个简单的过滤带通例子。 在文件中,你链接看起来像极了鸟鸣声都集中在4千赫兹 - 5.5千赫。

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)



文章来源: Plot spectogram from mp3