WAV (Waveform Audio File Format)

RIFFチャンク (RIFF chunk)

RIFF (Resource Interchange File Format) チャンクは、データの種類を示します。

フィールド バイト数 内容
ckID 4 チャンクID 'RIFF'
cksize 4 チャンクサイズ 4+n
WAVE ID 4 Wave ID 'WAVE'
WAVEチャンク n 書式情報とサンプルデータ

fmtチャンク (fmt chunk)

fmtチャンクは、データの書式を示します。

フィールド バイト数 内容
ckID 4 Chunk ID: "fmt "
cksize 4 Chunk size: 16, 18 or 40
wFormatTag 2 Format code
nChannels 2 Number of interleaved channels
nSamplesPerSec 4 Sampling rate (blocks per second)
nAvgBytesPerSec 4 Data rate
nBlockAlign 2 Data block size (bytes)
wBitsPerSample 2 Bits per sample
cbSize 2 Size of the extension (0 or 22)
wValidBitsPerSample 2 Number of valid bits
dwChannelMask 4 Speaker position mask
SubFormat 16 GUID, including the data format code

フォーマットコード (Format Code)

Format Code PreProcessor Symbol Data
0x0001 WAVE_FORMAT_PCM PCM
0x0003 WAVE_FORMAT_IEEE_FLOAT IEEE float
0x0006 WAVE_FORMAT_ALAW 8-bit ITU-T G.711 A-law
A-law algorithm - Wikipedia
0x0007 WAVE_FORMAT_MULAW 8-bit ITU-T G.711 µ-law
μ-law algorithm - Wikipedia
0xFFFE WAVE_FORMAT_EXTENSIBLE Determined by SubFormat
fmt Chunk - Wave File Specifications

拡張チャンク (extra chunk)

 

factチャンク (fact chunk)

factチャンクは、圧縮された、非PCM形式であることを示します。

フィールド バイト数 内容
ckID 4 Chunk ID: "fact"
cksize 4 Chunk size: minimum 4
dwSampleLength 4 Number of samples (per channel)

dataチャンク (data chunk)

dataチャンクは、サンプルデータを示します。

フィールド バイト数 内容
ckID 4 Chunk ID: "data"
cksize 4 Chunk size: n
sampled data n Samples
pad byte 0 or 1 Padding byte if n is odd

実例

矩形波 (4000Hz) は、次のような内容となります。

FF 00
FF 00
64.0 Kbps, 8 000 Hz, 8 bits, 1 channel, PCM (Little / Unsigned)
FF 7F 00 80
FF 7F 00 80
128 Kbps, 8 000 Hz, 16 bits, 1 channel, PCM (Little / Signed)
FF FF FF 7F 00 00 00 80
FF FF FF 7F 00 00 00 80
256 Kbps, 8 000 Hz, 32 bits, 1 channel, PCM (Little / Signed)
00 00 80 3F 00 00 80 BF
00 00 80 3F 00 00 80 BF
256 Kbps, 8 000 Hz, 32 bits, 1 channel, PCM (IEEE ) (Float)

INFOチャンク

アーティスト名などのメタ情報を示します。

実例

たとえばAudacityで「アーティスト名」を「AAA」とした場合は、'INFO'以降は次のようになります。

49 4E 46 4F 49 41 52 54 04 00 00 00 41 41 41 00
69 64 33 20 18 00 00 00 49 44 33 03 00 00 00 00
00 0E 54 50 45 31 00 00 00 04 00 00 00 41 41 41
データ フィールド 説明
49 4E 46 4F ckID チャンクID 'INFO'
49 41 52 54 cksize タグID 'IART' (Artist)
04 00 00 00   タグのバイト数 0x04
41 41 41 00   タグの内容 'AAA'
69 64 33 20   タグID? 'id3 '
18 00 00 00   タグのバイト数
(これ以降のすべて)
0x18 (24)
49 44 33   ファイル識別子 'ID3'
03 00   ID3タグのバージョン ID3v2.3.0
00   ID3タグのフラグ  
00 00 00 0E   ID3タグのバイト数 0x0E (14)
54 50 45 31   フレームID 'TPE1'
00 00 00 04   フレームのバイト数 0x04
00 00   フレームのフラグ  
00   フレームのエンコーディング ISO-8859-1
41 41 41   フレームの内容 'AAA'

この例ではメタ情報は2つの規格で記録されており、たとえばエクスプローラでは最初の'IART'の内容を参照しますが、他のツールでは'TPE1'を参照するものもあります。

PCMデータ

PCMデータは、次のような形式となります。

区分 アドレス バイト数 フィールド 説明
  0x00 4 ckID チャンクID 'RIFF'
0x04 4 cksize 次の項目以降のファイルサイズ  
0x08 4 WAVEID Wave ID 'WAVE'
fmtチャンク 0x0C 4 ckID チャンクID 'fmt '
0x10 4 cksize fmtチャンクのバイト数
(16、18または40)
  • 16 (0x10) … 拡張なし
  • 18 (0x12) … 拡張のサイズ (2バイト) のみがある
  • 40 (0x28) … 拡張のサイズ (2バイト) とその内容 (22バイト) がある
0x12 2 wFormatTag フォーマットコード  
0x14 2 nChannels チャンネル数  
0x18 4 nSamplesPerSec サンプリングレート (1秒あたりのブロック数)  
0x1C 4 nAvgBytesPerSec データ速度  
0x1E 2 nBlockAlign ブロックサイズ [byte]  
0x20 2 wBitsPerSample サンプルあたりのビット数  
0x22 2 cbSize 拡張のサイズ
(0または22)
(fmtチャンクのバイト数が16ならば、この項目は存在しない)
  • 0 (0x00) … 拡張なし
  • 22 (0x16) … 拡張が22バイトある
0x24 cbSize   拡張  
dataチャンク 0x24+cbSize 4 ckID チャンクID 'data'
0x28+cbSize 4 cksize 波形データのバイト数  
0x2C+cbSize cksize   波形データ  

データは下位バイトから順に配置される、リトルエンディアン (little endian) です。

実例

たとえば次のような矩形波 (1000Hz、10msec) は、


square.wav

次のようなデータとなります。

52 49 46 46 74 00 00 00 57 41 56 45 66 6D 74 20
10 00 00 00 01 00 01 00 40 1F 00 00 40 1F 00 00
01 00 08 00 64 61 74 61 50 00 00 00 FF FF FF FF
00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF
00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF
00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF
00 00 00 00 FF FF FF FF 00 00 00 00 FF FF FF FF
00 00 00 00 FF FF FF FF 00 00 00 00

この意味は、下表の通りです。

データ フィールド 説明
52 49 46 46 ckID チャンクID 'RIFF'
74 00 00 00 cksize ファイルサイズ 0x00000074 (116 byte)
57 41 56 45 WAVEID Wave ID 'WAVE'
66 6D 74 20 ckID チャンクID 'fmt '
10 00 00 00 cksize fmtチャンクのバイト数 0x00000010 (16 byte)
01 00 wFormatTag フォーマットID 0x01
01 00 nChannels チャンネル数 0x01
40 1F 00 00 nSamplesPerSec サンプリングレート 0x00001F40 (8000 Hz)
40 1F 00 00 nAvgBytesPerSec データ速度 0x00001F40 (8000)
01 00 nBlockAlign ブロックサイズ 0x01
08 00 wBitsPerSample サンプルあたりのビット数 0x08 (8bit)
64 61 74 61 ckID チャンクID 'data'
50 00 00 00 cksize 波形データのバイト数 0x00000050 (80 byte)
複数の技術系サイトから、まとめて検索