从mp3绘制spectragram

2024-06-17 15:09:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从python 2.7.3(使用ubuntu)中的mp3文件直接绘制spect程序。我可以从一个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格式。


Tags: 文件fromimport程序signalbinubuntuusr
1条回答
网友
1楼 · 发布于 2024-06-17 15:09:32

我将安装Debian/Ubuntu包libav-tools,并调用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)

Bird Song Spectrgrams

相关问题 更多 >