NimでWAVファイルのライブラリを書いた
作ったもの
工夫したところ
読み込み時のメモリ消費量の軽減
WAVは非圧縮音声データなのでファイルサイズが肥大化しやすい よって実装を楽にするために全部データを読み込んでからデータをバラすのはやめた
streamsのFileStreamを使って順次必要なデータを読むのと、位置を記憶するようにした
代償としてjsバックエンドでこのライブラリを使えなくなった
streamsモジュールはjsバックエンドでは使用できない
感想
バイナリを読み書きするコードを真面目に書いたのは初めてだった 今回のライブラリ作成で得た学びは以下
バイナリファイルを読み書きするの、難しいというイメージがあった
しかしバイナリの書式がきちんと明記されているので実装は簡単だった
日本語のドキュメントも探したら結構見つかったのも救い
特にWAVファイルは圧縮処理が絡まないので実装が楽
code: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行