1

うまくいけばwavファイルからオーディオスペクトログラムを生成するPythonスクリプトをテストしようとしています。私は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()
4

2 に答える 2

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ライブラリを参照してください。

于 2012-12-25T04:29:33.050 に答える
-1

「 wavfile 」を変数として使用しないでください。これはライブラリの名前です。

これを試して:

inputFile = sys.argv[1]

sr,x = scipy.io.wavfile.read(inputFile)
于 2012-12-25T04:35:32.717 に答える