何をしたいか
numpy で保持されている音の波形データを、ファイルに保存したい。
ただし、scikits.audiolab ではなくて、標準のモジュールだけを使ってしたい。
詰まったところと解決策
Wave_write クラスのパラメータ
Wave_write クラスのドキュメント に
setparams で渡すパラメータのうち4番目のフレーム数は、
「あとからフレームが書き込まれるとフレーム数は変更されます。」
と書かれているが、0 にするとうまく行かなかった。
バイナリの作り方
wave の writeframes に渡す波形を表すバイナリの作り方。
numpy.tostring() だとダメで、 array で 'h' に変換したあと、tostring するとうまくできた。
コード
import numpy, wave, array
filename = "wave_file_name.wav"
# save wav file
buf = <numpy の波形データが入っている>
w = wave.Wave_write(filename)
w.setparams((
1, # channel
2, # byte width
16000, # sampling rate
len(buf), # number of frames
"NONE", "not compressed" # no compression
))
w.writeframes(array.array('h', buf).tostring())
w.close()