WAVまたはWAVE(ウェイヴ、ウェヴ、ワヴ) (RIFF waveform Audio Format) は、マイクロソフトIBMにより開発された音声データ記述のためのフォーマットである。RIFFの一種。主としてWindowsで使われるファイル形式である。ファイルに格納した場合の拡張子は、.wav。

Waveform
拡張子 .wav
MIMEタイプ audio/vnd.wave, audio/x-wav
タイプコード WAVE
UTI com.microsoft.waveform-audio
マジック
ナンバー
WAVE (8バイト目から)
開発者 マイクロソフトIBM
種別 音声
派生元 RIFF

RIFF上の識別子は「WAVE」であるが、拡張子から、WAVフォーマットという呼び名が一般化した。音楽業界ではweb(ウェブ)と響きを区別する為に、ワブとも呼ばれる。

通常は非圧縮、リニアPCMサンプリングデータ用のフォーマットとして扱われるが、WAVはいわゆるコンテナ形式で、データ形式は自由であり、μ-lawや、ADPCMMP3WMAなどの圧縮データを格納することもできる。Windows以外のOSで作成したリニアPCMデータを直接Windowsで閲覧するとwavとして認識される。

WAVフォーマットでは、データ長が32ビット符号なし整数型で記述されているため、4GBを超えるファイルを作成できない。この制限を越えるため、データ長を64ビット符号なし整数型で記述するWave64 (.w64) というフォーマットも存在する。

RIFFのチャンクとして、WAVファイル内にタグ情報を付加する事が出来るが、使用する文字コードは特に規定されておらず、互換性に問題が生じ易い仕様になっている。

仕様編集

RIFF編集

RIFFファイルはタグ付きのファイル形式で、チャンクと呼ばれるコンテナの集合である[1]。 チャンクには4文字のタグ)FourCC)とチャンクのサイズ(バイト数)があり、タグによってチャンクのフォーマットが区別される。 いくつか標準的なタグがあり、4文字すべてが大文字のタグは予約されたタグである。
RIFFファイルの一番外側のチャンクはRIFFタグを持つ。 チャンクデータの最初の4バイトはフォームの種類を指定するFourCCでその後ろにサブチャンクが続く。 WAVファイルの場合、FourCCはWAVEである。
RIFF形式ではチャンクの出現順には一般的な規定がないが、fmt チャンクはdataチャンクの直前に置くという例外がある。
タグファイル形式の利点として、RIFFファイルの利用者が知らないタグは読み飛ばし、処理可能なチャンクのみを扱うことができる点があげられる。

RIFFフォーマットにおいて複数バイトで表現されるデータの並びはリトルエンディアンである。

RIFFファイルの一例を挙げる。 この例ではオフセット0x0にRIFFチャンクがあり、チャンクの長さは0x00630b20である。 FourCCWAVEであり、ファイルがWAVファイルであることを示している。 オフセット0x12からはサブチャンクが続く。 オフセット0x30からfmt チャンクが始まり、オフセット0x48からdataチャンクが始まっている。

00000000   52 49 46 46 20 0b 63 00 57 41 56 45 4a 55 4e 4b  RIFF .c.WAVEJUNK
00000010   1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000030   66 6d 74 20 10 00 00 00 01 00 02 00 44 ac 00 00  fmt ........D...
00000040   10 b1 02 00 04 00 10 00 64 61 74 61 d8 0a 63 00  ........data..c.
00000050   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000060   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000070   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000080   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
...

fmt チャンク編集

fmt チャンクの構造は、拡張可能なWAVEFORMATEX構造体によって定義される[2]

チャンネル数、サンプルレート、サンプルのビット数などが定義される。

typedef struct {
    WORD  wFormatTag;
    WORD  nChannels;
    DWORD nSamplesPerSec;
    DWORD nAvgBytesPerSec;
    WORD  nBlockAlign;
    WORD  wBitsPerSample;
    WORD  cbSize;
} WAVEFORMATEX;

fmt チャンクのサイズが16バイトのときは、拡張を持たないフォーマットでありcbSizeは存在しない。

フォーマットはwFormatTagであらわされ、リニアPCMの場合は1(WAVE_FORMAT_PCM)、32ビット浮動小数点の場合は3(WAVE_FORMAT_IEEE_FLOAT)となっている。 これらの定数はWindows SDKに含まれるmmreg.h[3]によって定義されており、さらにそれぞれのフォーマットによってfmt チャンクの構造の詳細が決まる。

dataチャンク編集

dataチャンクの中身はfmt チャンクによって定義されるフォーマットに基づく。

2チャンネルのリニアPCMの場合には、左チャンネル・右チャンネルの順に符号付整数(2の補数)で格納される。

浮動小数点数で格納される場合、慣習からデータ値の範囲は-1.0から+1.0に限られる。

Windows上での圧縮編集

Windows上では、ACMを利用すれば、圧縮などが行える。この機能が利用できるソフトウェアとして、サウンド レコーダーがある。

脚注編集

[脚注の使い方]

関連項目編集

  • AIFF - wavと同じ用途で使用されるコンテナフォーマット
  • Broadcast Wave Format (BWF) - wavの内包するデータを厳密化、チャンクを拡張した形式
  • Cwav - wavを利用した圧縮形式

外部リンク編集

解説サイト編集