すごくメモ帳

すごくほぼメモ帳ぐらいなブログ

WAVフォーマット

C言語で音楽を扱ってみて、WAVファイルを作成したのでそのメモ。

WAVフォーマット

パラメーター 大きさ[B]
riff_chunk_ID 4 {'R', 'I', 'F', 'F'} 文字
riff_chunk_size 4 36 + data_chunk_size 整数
file_format_type 4 {'W', 'A', 'V', 'E'} 文字
fmt_chunk_ID 4 {'f', 'm', 't', ' '} 文字
fmt_chunk_size 4 16 整数
wave_format_type 2 PCMは1 整数
channel 2 モノラル:1, ステレオ:2 整数
samples_per_sec 4 標本化周波数 整数
bytes_per_sec 4 ブロックサイズ × 標本化周波数 整数
block_size 2 量子化精度 × チャンネル数 ÷ 8 整数
bits_per_sample 2 量子化精度 整数
data_chunk_ID 4 {'d', 'a', 't', 'a'} 文字
data_chunk_size 4 音データーの大きさ 整数
data data_chunk_size 音データー 整数

標本化周波数とは

1秒にいくつの音データーがあるか 標本化定理より、必要な周波数の倍の周波数があればいい。 ヒトが聞こえる周波数は20kHzくらいなので、44.1kHzがよく使われる。

量子化精度とは

標本化するときに音の精度。

1ビットだと、0と1しか表せないため機械音に。 8ビットだと、ファミコンのような階段状の波に。 16ビットだと、きれいな音が再現できる。

作ったwavファイルを見てみる

音がまったくないファイルはこのようになっている。

$ od test.wav -h
0000000 4952 4646 0024 0000 4157 4556 6d66 2074
0000020 0010 0000 0001 0001 ac44 0000 2b11 0000
0000040 0002 0010 6164 6174 0000 0000
0000054

フォーマットが違うと、アプリケーションで読み取れないので注意。