Python基础知识:需要参数输入帮助,IndexError:列表索引超出范围

时间:2012-12-25 04:09:49

标签: python audio spectrogram

我正在尝试测试一个Python脚本,希望从wav文件生成音频谱图。我假设我需要输入一个wav的路径,但是我收到一个错误:IndexError:当我在这里输入它时,列表索引超出范围:

sr,x = scipy.io.wavfile.read('mySoundFile.wav')

我也在命令行中尝试将路径作为参数,但我没有把它弄好。有什么帮助吗?

http://mail.python.org/pipermail/chicago/2010-December/007314.html

"""
Compute and display a spectrogram.
Give WAV file as input
"""
import matplotlib.pyplot as plt
import scipy.io.wavfile
import numpy as np
import sys

wavfile = sys.argv[1]

sr,x = scipy.io.wavfile.read('BeatBoy01.wav')

## Parameters: 10ms step, 30ms window
nstep = int(sr * 0.01)
nwin  = int(sr * 0.03)
nfft = nwin

window = np.hamming(nwin)

## will take windows x[n1:n2].  generate
## and loop over n2 such that all frames
## fit within the waveform
nn = range(nwin, len(x), nstep)

X = np.zeros( (len(nn), nfft/2) )

for i,n in enumerate(nn):
    xseg = x[n-nwin:n]
    z = np.fft.fft(window * xseg, nfft)
    X[i,:] = np.log(np.abs(z[:nfft/2]))

plt.imshow(X.T, interpolation='nearest',
    origin='lower',
    aspect='auto')

plt.show()

2 个答案:

答案 0 :(得分:1)

您可以使用此try / except来绕过IndexError

try:
   wavefile = sys.argv[1]
except IndexError:
   wavfile = 'BeatBoy01.wav'

sr,x = scipy.io.wavfile.read(wavfile)

如果没有参数传递给脚本,这会有效地将默认文件设置为BeatBoy01.wav。请记住,BeatBoy01.wav应该与执行脚本的目录位于同一目录中。

为了便于参数解析,请查看OptParse库。

答案 1 :(得分:-1)

不要使用“ wavfile ”作为变量,它是库的名称。

试试这个:

inputFile = sys.argv[1]

sr,x = scipy.io.wavfile.read(inputFile)