前提・実現したいこと
読み込んだwavファイルに何らかの処理をした後別名のwavファイルとして保存したい
発生している問題・エラーメッセージ
Traceback (most recent call last): File "fir.py", line 40, in <module> save(y, fs, 1024, "fir_test.wav") File "fir.py", line 19, in save wf.setsampwidth(bit // 8) File "/home/hoge/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/wave.py", line 343, in setsampwidth raise Error('bad sample width') wave.Error: bad sample width Exception ignored in: <bound method Wave_write.__del__ of <wave.Wave_write object at 0x7fa577d73e80>> Traceback (most recent call last): File "/home/hoge/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/wave.py", line 316, in __del__ self.close() File "/home/hoge/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/wave.py", line 434, in close self._ensure_header_written(0) File "/home/hoge/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/wave.py", line 454, in _ensure_header_written raise Error('sample width not specified') wave.Error: sample width not specified
該当のソースコード
python3.6.3
1#coding:utf-8 2import wave 3import struct 4from pylab import * 5 6def fir(x,b): 7 y = [0.0] * len(x) 8 N = len(b) - 1 9 for n in range(len(x)): 10 for i in range(N+1): 11 if n - i >= 0: 12 y[n] += b[i] * x[n - i] 13 return y 14 15def save(data, fs, bit, filename): 16 """波形データをWAVEファイルへ出力""" 17 wf = wave.open(filename, "w") 18 wf.setnchannels(1) 19 wf.setsampwidth(bit // 8) 20 wf.setframerate(fs) 21 wf.writeframes(data) 22 wf.close() 23 24if __name__ == '__main__': 25 wf = wave.open("data/VOICEACTRESS100_092.wav", "r") 26 fs = wf.getnframes() 27 28 x = wf.readframes(wf.getnframes()) 29 x = frombuffer(x, dtype="int16") // 32768.0 #-1 ~ 1 30 31 # FIRフィルタをかける 32 b = [1, -0.97] 33 y = fir(x, b) 34 35 # 正規化前のバイナリデータに戻す 36 y = [int(v * 32767.0) for v in y] 37 y = struct.pack("h" * len(y), *y) 38 39 # 音声を保存 40 save(y, fs, 1024, "fir_test.wav")
試したこと
Wave_write.setsampwidth(n)がc言語のmallocのように出力先の容量を確保していると考え、元データの695484bytes(685.5kB)が入るよう1024を指定した。
補足情報(FW/ツールのバージョンなど)
こちらのサイトを参考に、サイトで使われていたwavファイルでは実行できたものの、手元のwavファイルでは実行できなかった。
http://aidiary.hatenablog.com/entry/20111023/1319334639
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/05 01:58