質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

5669閲覧

wave.Error: file does not start with RIFF id

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/11/03 01:09

編集2017/11/03 02:22

wave.Error: file does not start with RIFF idとエラーが出ました。
views.py に

from mfcc import * import numpy as np import os if __name__ == "__main__": train_label = np.array([]) test_label = np.array([]) nfft = 2048 nceps = 12 train_data = np.empty((0, 12), float) test_data = np.empty((0, 12), float) directory = os.listdir('/sound_app/sounds') for file_name in directory: feature = get_feature(file_name, nfft, nceps) if len(train_data) == 0: train_data = feature else: train_data = np.vstack((train_data, feature)) train_label = np.append(train_label) test_label = np.append(test_label,file_name)

と書いてmfcc.pyに

import wave import numpy as np import scipy.signal import scipy.fftpack import scipy.fftpack.realtransforms from pylab import * def get_feature(wavfile,nfft,nceps): wav,fs = wavread(wavfile) t = np.arange(0.0,len(wav)/fs,1/fs) center =len(wav)/2 cuttime = 0.8 global wavdata wavdata = wav[int(center-cuttime/2*fs):int(center+cuttime/2*fs)] global time time = t[int(center-cuttime/2*fs):int(center+cuttime/2*fs)] ceps = mfcc(wavdata,nfft,fs,nceps) return ceps.tolist()

と書きました。
/sound_app/soundsにはたくさんのwavファイルが入っていて、これらのwav ファイルは本当にwavファイルなのか確認するためコマンドを打つと

RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz

と戻ってきてwavファイルであることが確認できました。なぜこのようなエラーが出てしまうのでしょうか?どのようにエラーを直せば良いでしょうか?Tracebackには

Traceback (most recent call last): File "sound.py", line 24, in <module> feature = get_feature(file_name, nfft, nceps) File "/Users/xxx/sound_recognition/mfcc.py", line 76, in get_feature wav,fs = wavread(wavfile) File "/Users/xxx/sound_recognition/mfcc.py", line 13, in wavread wf = wave.open(filename,"r") File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wave.py", line 511, in open return Wave_read(f) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wave.py", line 164, in __init__ self.initfp(f) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/wave.py", line 131, in initfp raise Error, 'file does not start with RIFF id' wave.Error: file does not start with RIFF id

と出ました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/11/03 02:08

例外が出ている行がどこかや、wavreadが何者かわかるようにimportを明記していただいたほうがよいと思います。
退会済みユーザー

退会済みユーザー

2017/11/03 02:24

情報を追加しました。もし何かお分かりでしたらお願いいたします。
KSwordOfHaste

2017/11/03 02:45

残念ながら・・・自分の環境(python 3.6.0 Windows)ではmfcc.pyと同じimportをしてもwavreadがないと言われます。pythonのバージョンや各ライブラリーのバージョンも書いた方がよいかも知れませんね。
can110

2017/11/03 03:33

waveファイルはどのようなコマンドで確認しましたか?また、そのwaveファイルの先頭数十バイト程度を16進表記で提示ください。
KSwordOfHaste

2017/11/03 03:44 編集

手軽に16進数でダンプするには次のようにすればよいと思います。(Linux/Macどちらでも大丈夫かな..) od -tx1 xxx.wav | head -5
guest

回答1

0

ベストアンサー

おかしいところに気づきました。

listdirを使ってるのがまずいのではないでしょうか?これは指定ディレクトリーの下にある全てのディレクトリー名とファイル名(フルパス名ではなくファイル名だけ)を列挙します。

以下のコードを実行してみるとこの2つの関数の振る舞いの違いがわかります。

python

1import os 2import glob 3 4basedir = '/sound_app/sounds' 5 6print('-- use listdir --') 7directory = os.listdir(basedir) 8for file_name in directory: 9 print('file_name =', file_name) 10 11print('-- use glob --') 12files = glob.glob(os.path.join(basedir, '*.wav')) 13for file_name in files: 14 print('file_name =', file_name)

もしsoundsディレクトリーにsubdirというディレクトリーとa.mp3, a.wavというファイルがあったら実行結果は次のようになります。

-- use listdir -- file_name = subdir file_name = a.mp3 file_name = b.wav -- use glob -- file_name = /sound_app/sounds/a.wav

投稿2017/11/03 04:53

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問