C言語 wavファイルのヘッダを読む
オーディオフォーマットであるwavのヘッダーを読むプログラムを作ってみる。Windowsなら普通はAPIを使って、こんな部分は自分で作らないものだけど、wavの勉強と、プラットフォーム非依存という意味もあって作ってみた。でも、きっちり作るのは面倒なので、自分が使っているwavの範囲で動けばよい。読み込みたいデータはfmtだけ。fmt(オーディオファオーマット)には基本的な、チャンネル数、ステレオ/モノラル、サンプリング周波数、ビット数などが書かれている。他にもいろいろな情報が書けるようだが、LISTぐらいしか見たことがないので、LISTが出てきたら、その部分をスキップして、データの部分に飛ばすというプログラム。実際に使う場合は、ヘッダにある基本情報を取得することと、データの開始位置を把握するのが目的。その予備実験。
上のソースではexeと同じ階層にsample.wavというオーディオファイルがあることを前提としている。その上で実行すると、sample.wavのヘッダーに書かれている内容が表示される。表示と一部のデータ取得が目的なので、書込みなど、使い回しが効かない。プログラムはダラダラと無駄に長いソースになってしまった。エラーチェックとかちゃんとやっていないので、あまりよろしくない状態。実際に使う場合は、いろいろ手を加えることにする。fmtのデータは構造体に保存するようにした。それ以外は内容を表示するだけ。LIST項目はタグ情報などが書き込まれるのだが、加工には必要ないので、スキップして、データ開始位置まで飛ばしている。データ開始位置の特定は文字 'd' をバイト単位で探して、発見したら "data" かどうか文字列のチェックをしている。dataであれば、サイズをチェックして、そこをスタート地点とし、終了する。
wavフォーマット参考資料
http://en.wikipedia.org/wiki/WAV
Audio File Format Specifications
C言語 ANSI C89 Meadow & MinGW GCC 目次はこちら
|
sample.wav [RIFF] size: 1222802 byte [WAVE] [fmt ] Size: 16 byte AudioFormat: 1 Channels: 1 Samling Rate: 44100 Hz ByteRate: 176400 BlockAlign: 4 BitsPerSample: 32 bit [LIST] size: 74 byte [data] size: 1222684 byte data start point: 126 byte |
http://en.wikipedia.org/wiki/WAV
Audio File Format Specifications
C言語 ANSI C89 Meadow & MinGW GCC 目次はこちら