2017-01-21 17 views
2

fftを実行するためにwavファイルを読み込もうとしていますが、scipyでエラーが発生しています。wavファイルをPythonで読む

import matplotlib.pyplot as plt 
from scipy.io import wavfile as wav 
import scipy  
from scipy.fftpack import fft 
import numpy as np 

rate, data = scipy.io.wavfile.read('a1.wav') 
fft_out = fft(data) 
#matplotlib inline 
plt.plot(data, np.abs(fft_out)) 
plt.show() 
print 'exit' 

私はに実行しているエラーは、次のとおりです。

Traceback (most recent call last): 
    File "test.py", line 9, in <module> 
     rate, data = scipy.io.wavfile.read('a1.wav') 
    File "/usr/local/lib/python2.7/site-packages/scipy/io/wavfile.py", line 275, in read 
     return fs, data 
UnboundLocalError: local variable 'data' referenced before assignment 

私はそれが私はアナコンダを削除し、私はまだこの問題に実行しているよアナコンダエラーだったかもしれないと思いました。

wavファイルを読み込んでfftsを実行できるようにするには、私に教えてください!ありがとう!

+0

どのscipyのバージョンについて話していますか?最新のものを試して、エラーが継続するかどうかを確認してください。 – cel

+0

0.18.1(最新のもの)、エラーは引き続き発生します。 – user1883614

+0

別のWAVファイルを読み込めませんか?問題は 'a1.wav'に固有の問題かもしれません。 – wildwilhelm

答えて

1

あなたはGitHubの上の特定のwavefile.read()hereのコードを見れば、あなたはdataは、機能だけで一つの場所に設定されていることがわかります:

 elif chunk_id == b'data': 
      if not fmt_chunk_received: 
       raise ValueError("No fmt chunk before data") 
      data = _read_data_chunk(fid, format_tag, channels, bit_depth, 
            is_big_endian, mmap) 

ときのPythonだから、この条件が満たされることはありませんインタプリタがコードを実行すると、割り当て前に参照例外が発生します。

wavファイルは、ヘッダとそれに続く一連のチャンクで構成されています。さまざまなタイプのチャンクがあります。例えば、データフォーマットに関する情報、サンプリングレート、データを含むものがあります。この場合、Scipyのreadが新しくこのdata chunckに遭遇したようです。したがって、wavファイルに問題があるか、Scipyの実装がまだサポートしていない新しいフォーマットの可能性があります。