WAV

RIFF waveform Audio Format（WAV）は音声データ用のコンテナ規格である。元の意味に含まれる英単語は「波形」を意味する。「波」の意味を持つ英単語から転じて、WAVE（ウェイヴ、ウェーヴ、ウェイブ、ウェーブ）とも呼ばれる。拡張子はcodice_1。
概要.
RIFF waveform Audio Format (WAV) はマイクロソフトとIBMにより開発された、RIFFベースの音声ファイルフォーマットである。RIFF上の識別子は「WAVE」であるが、拡張子からWAVフォーマットという呼び名が一般化した。
英語圏では元の意味からWAVを「ウェイヴ」（）と読む（発音する）ことが多いが、日本の音楽業界では（ウェブ）と響きを区別するために、ワブ（ワヴ）とも呼ばれる。
非圧縮リニアPCMで符号化した音声の格納にWAVはよく用いられる。一方でWAVはあくまでコンテナ規格であり、μ-lawや、ADPCM、MP3、WMAなど他の音声コーデックも格納できる。Windows以外のOSで作成したリニアPCMデータを直接Windowsで閲覧するとwavとして認識される。
WAVフォーマットでは、データ長が32ビット符号なし整数型で記述されているため、4GBを超えるファイルを作成できない。この制限を越えるため、データ長を64ビット符号なし整数型で記述するWave64 (.w64) というフォーマットも存在する。
RIFFのチャンクとして、WAVファイル内にタグ情報を付加することができるが、使用する文字コードは特に規定されておらず、互換性に問題が生じ易い仕様になっている。
音声分野で広く利用される他のコンテナ規格にはMP4、Ogg、WebMなどが挙げられる。
仕様.
RIFF.
RIFFファイルはタグ付きのファイル形式で、チャンクと呼ばれるコンテナの集合である。
チャンクには4文字のタグ（FourCC）とチャンクのサイズ（バイト数）があり、タグによってチャンクのフォーマットが区別される。
いくつか標準的なタグがあり、4文字すべてが大文字のタグは予約されたタグである。
RIFFファイルの一番外側のチャンクはRIFFタグを持つ。
チャンクデータの最初の4バイトはフォームの種類を指定するFourCCでその後ろにサブチャンクが続く。
WAVファイルの場合、FourCCはcodice_2である。
RIFF形式ではチャンクの出現順には一般的な規定がないが、codice_3チャンクはcodice_4チャンクの直前に置くという例外がある。
タグファイル形式の利点として、RIFFファイルの利用者が知らないタグは読み飛ばし、処理可能なチャンクのみを扱うことができる点が挙げられる。
RIFFフォーマットにおいて複数バイトで表現されるデータの並びはリトルエンディアンである。
RIFFファイルの一例を挙げる。
この例ではオフセット0x0にcodice_5チャンクがあり、チャンクの長さは0x00630b20である。
codice_6はcodice_2であり、ファイルがWAVファイルであることを示している。
オフセット0x12からはサブチャンクが続く。
オフセット0x30からcodice_3チャンクが始まり、オフセット0x48からcodice_4チャンクが始まっている。
fmt チャンク.
codice_3チャンクの構造は、codice_11構造体などによって定義される。
チャンネル数、サンプルレート、サンプルのビット数などが定義される。
上記の他、サイズが14バイトのcodice_12構造体や、サイズが16バイトでcbSizeが存在しないcodice_13構造体、サイズが40バイトでcodice_14の値が22のcodice_15構造体がある。ただしcodice_12はWindowsでは廃止されて使用不可能であり、codice_13も廃止されている。
wFormatTag.
wFormatTagは音声コーデックを指定する。例として次が挙げられる。
これらの定数はWindows SDKに含まれるmmreg.hによって定義されており、さらにそれぞれのフォーマットによってcodice_24チャンクの構造の詳細が決まる。
dataチャンク.
codice_4チャンクの中身はcodice_3チャンクによって定義されるフォーマットに基づく。
2チャンネルのリニアPCMの場合には、左チャンネル・右チャンネルの順に符号付整数（2の補数）で格納される。
浮動小数点数で格納される場合、慣習からデータ値の範囲は-1.0から+1.0に限られる。
Windows上での圧縮.
Windows上では、ACMを利用すれば、圧縮などが行える。この機能が利用できるソフトウェアとして、サウンド レコーダーがある。