14

scipyを使用して.wavファイルを読み取ろうとしています。私はこれをします:

from scipy.io import wavfile

filename = "myWavFile.wav"
print "Processing " + filename

samples = wavfile.read(filename)

そして、私はこの醜いエラーを受け取ります:

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/io/wavfile.py:121: WavFileWarning: chunk not understood
  warnings.warn("chunk not understood", WavFileWarning)
Traceback (most recent call last):
  File "fingerFooler.py", line 15, in <module>
    samples = wavfile.read(filename)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/scipy/io/wavfile.py", line 127, in read
    size = struct.unpack(fmt, data)[0]
struct.error: unpack requires a string argument of length 4

Python 2.6.6、numpy 1.6.2、scipy0.11.0を使用しています

これが問題の原因となるwavファイルです。

何かご意見は?ここで何が問題になっていますか?

4

5 に答える 5

26

ファイルは利用できなくなりました(9か月後には驚くことではありません!)が、将来の参照のために、最も可能性の高い原因は、scipyが解析できない余分なメタデータがあったことです。

私の場合、Audacityによって追加されたのはデフォルトのメタデータ(著作権、トラック名など)でした。Audacityでファイルを開き、[ファイル]...[メタデータエディターを開く]を使用して表示できます。次に、[クリア]ボタンを使用してそれを取り除き、再試行します。

scipyの現在のバージョンは、次のRIFFチャンクをサポートしています-'fmt'、'fact'、'data'、および'LIST'。 RIFFのウィキペディアページには、WAVファイルの構造についてもう少し詳しく説明されています。たとえば、サポートされていないが人気のあるINFOチャンクが含まれている可能性があります。

于 2013-09-23T11:57:46.320 に答える
9

WAVファイル形式については何も知りませんが、コードを掘り下げると、ファイルの終わりに向かって存在するチャンクに精通していないscipyように見えます(チャンクIDは、2753632バイトです)。そのチャンクは603バイトの長さとして宣言されているため、603バイト後に別のチャンクIDを期待してそれを超えて読み取ります。チャンクは見つからず(ファイルが不足)、フォールオーバーします。scipybext

他のWAVファイルでうまく試しましたか?これはどのように生成されましたか?

于 2013-01-15T23:37:37.693 に答える
2

同じエラーが発生し、読み取り可能なものに正常に変換できました。

私の元のファイルはLogicProからのものでした。次に、大胆さを使用してファイルを読み取りました。

于 2017-11-10T07:58:26.783 に答える
1

また、(おそらく)Audacityによって導入されたメタデータが原因でこのエラーが発生しました。別のDAW(Ableton Live)からwavファイルをエクスポートしたところ、scipy.io.wavfileがエラーなしでロードしました。

于 2015-09-30T02:47:03.010 に答える
0

この問題の最も簡単な解決策は、SoXを使用してwavファイルを他のwavファイルに変換することです。

$ sox wavfile.wav wavfile2.wav

私のために働く!

于 2021-02-23T14:57:16.003 に答える