質問: ### WAVのヘッダーについて pythonで外部のサーバーからおとしたPCMデータをwavに変換して再生したいのですが, WAVに変換するためのヘッダーの書き方がわかりません。 詳しい方がいらっしゃいましたらご教授よろしくお願いします。 PCMの形式は以下の通りです。 【符号化方式】リニアPCM 【チャネル数】1(モノラル) 【サンプル周波数】16000 【ビット深度】16bit(ビッグエンディアン)
回答: waveモジュールのWave_write.setparamsでヘッダ部分は作ってくれるようなので、あとはWave_write.writeframesで生PCMを書き出せばよいと思います。 上述の`setparams`でエンディアン指定できるかは未調査です。 参考:Pythonでサイン波(正弦波)をつくる #### 追記 上記例で正しいWaveファイルが作成できない場合は、生PCMのエンディアンをbig->littleに変換して書き込んでみてはいかがでしょうか? 以下はbig -> littleにエンディアン変換する例です。 ``` # サンプルデータ big from struct import * dat_big = pack( '>4h', 0, 1, 255, 256) # > = big (signed short) print(dat_big) # b'\x00\x00\x00\x01\x00\xff\x01\x00' # big -> little import array dat_little = array.array('h',dat_big) dat_little.byteswap() # big -> little print(bytes(dat_little)) # b'\x00\x00\x01\x00\xff\x00\x00\x01' # テスト書込 with open('dat_big.dat', 'wb') as f: f.write(dat_big) with open('dat_little.dat', 'wb') as f: f.write(dat_little) ```