generated at
NimでWAVファイルのライブラリを書いた
Nimでライブラリを自作した
wavファイルを扱うモジュールがなかったので
pythonwaveモジュールを参考に実装してみた

作ったもの
工夫したところ
読み込み時のメモリ消費量の軽減
WAVは非圧縮音声データなのでファイルサイズが肥大化しやすい
GB単位とか普通にいく
よって実装を楽にするために全部データを読み込んでからデータをバラすのはやめた
streamsのFileStreamを使って順次必要なデータを読むのと、位置を記憶するようにした
pythonのwaveモジュールもそんな実装になっている
代償としてjsバックエンドでこのライブラリを使えなくなった
streamsモジュールはjsバックエンドでは使用できない

感想
バイナリを読み書きするコードを真面目に書いたのは初めてだった
WAVファイルの書式を読みながらバイト単位でデータを読み書きするのをひたすらやっている
今回のライブラリ作成で得た学びは以下
バイナリファイルを読み書きするの、難しいというイメージがあった
しかしバイナリの書式がきちんと明記されているので実装は簡単だった
日本語のドキュメントも探したら結構見つかったのも救い
特にWAVファイルは圧縮処理が絡まないので実装が楽
sh
$ wc -l src/**/*.nim 7 src/wave.nim 195 src/wave/waveread.nim 190 src/wave/wavetypes.nim 103 src/wave/wavewrite.nim 495 合計
読み書き部分だけなら300行