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
フォーマットが違うと、アプリケーションで読み取れないので注意。