WAVファイルのフォーマットについて

仕様

はじめに

Windows WAVファイルは、RIFFというファイルフォーマットで作成されています。
以下では、RIFFファイルフォーマットについて、記載いたします。

RIFFとは

RIFF(Resource Interchange File Format)は、タグ付きの画像や音声などのデータを1つのファイルに格納するための汎用ファイルフォーマットです。RIFFは、チャンク(chunk)と呼ばれる論理的なデータ単位で各データを記載します。
チャンクには、以下のような種類があります。WAVファイルでは、RIFFチャンク、fmtチャンク及びdataチャンクが使用されています。
データは、下位バイトから順に配置するリトルエンディアンで記載します。

  • RIFFチャンク(必須)
  • fmtチャンク(必須)
  • factチャンク(PCMフォーマットでは、オプション)
  • peakチャンク(オプション)
  • dataチャンク(必須)
  • など

チャンクのデータ構造について

項目サイズ
(バイト)
説明
ckID4チャンクを識別するための4文字の固定長のコードです。
1~4文字で構成されます。
4文字未満の場合は、余りをスペース(空白)にします。
ckSize4データサイズnをバイト単位で指定します。
datanデータ本体を格納します。

各チャンクのデータ構造について

各チャンクのデータ構造について、以下に記載します

【RIFFチャンク】

項目サイズ
(バイト)
説明
ckID4チャンクID:”RIFF”を記述します。
(0x52,0x49,0x46,0x46)
ckSize4チャンクサイズ:4+nを記載いたします。
(ckIDとckSizeを除いたファイル全体のサイズ)
format4WAVEファイルの場合は、”WAVE”を記載します。
(0x57,0x41,0x56,0x45)
Datanデータ本体を記載します。

【fmtチャンク】

項目サイズ
(バイト)
説明
ckID4チャンクID:”fmt”を記載します。
(0x66,0x6d,0x74,0x20)
ckSize4チャンクサイズ:nを記載します。
(ckIDとckSizeを除いたチャンクサイズ)
wFormatTag2データのフォーマットを記載します。
0x01:PCM(0x01,0x00)
0x06:G.711 A-law(0x06,0x00)
0x07:G.711 μ-law(0x07,0x00)
nChannels2チャネル数を記載します。
0x01:モノラル(0x01,0x00)
0x02:ステレオ(0x02,0x00)
nSamplePerSec4サンプリングレートを記載します。
nAvgBytesPerSec4平均バイトレートを記載します。
サンプリングレート*1ブロックのバイト数
nBlockAlign21ブロックのバイト数を記載します。
1サンプル当たりのバイト数*チャネル数。
nBitsPerSample21サンプルあたりのビット数を記載します。
8ビット:0x08、16ビット:0x10
cbSize2追加情報のサイズを記載します。
追加情報がない場合は、0。
追加情報n追加情報を記載します。

【factチャンク】

項目サイズ
(バイト)
説明
ckID4チャンクID:”fact”を記載します。
(0x66,0x61,0x63,0x74)
ckSize4チャンクサイズ:4を記載します。
(ckIDとckSizeを除いたチャンクサイズ)
dwSampleLength41チャネルあたりのサンプル数を記載します。

【dataチャンク】

項目サイズ
(バイト)
説明
ckID4チャンクID:”data”を記載します。
(0x50,0x45,0x41,0x4b)
ckSize4チャンクサイズ:n or n+1
(ckIDとckSizeを除いたチャンクサイズ)
samleDatanサンプルデータを記載します。
(padingData)0 or 1ckSizeが奇数の場合にのみ追加します。
タイトルとURLをコピーしました