以下は、Nistyserveから転載したWAVEフォーマットに関しての 文書です。利用・転載などについては文書にある内容に従ってください。
WAVE フォーマット解説('96 5/4) ■ はじめに 本ドキュメントは、WAVE フォ
ーマットのごく基本的な部分を解説したものです。 ここに記載されているもの
が WAVE フォーマットの全仕様ではありません。 また、本ドキュメントには私
が独自に調べた情報なども含まれていますが、内容についての保証はいたしかね
ます。予めご了承ください。 -- ■ 構造 ... ・RIFFヘッダ dword 'RIFF', size
※1 ・WAVEヘッダ dword 'WAVE' ・[fmt ] チャンク dword 'fmt ', size word
フォーマットID word チャネル数 dword サンプリング周波数 dword 平均デー
タ速度 word ブロックサイズ word 1サンプル当たりのビット数 word ヘッダ拡
張部サイズ(byte) ※2 〜 ヘッダ拡張部 ※2※3 ・[fact] チャンク ※2 dword 'fact',
size dword 全サンプル数 ・[data] チャンク dword 'data', size 〜 データ
数値はリトルエンディアンで格納される。 ' でくくられた文字列はそのまま
書き込まれる。 ※1. ファイルサイズ - 8 になる。※2. フォーマットID が 1 (
リニア PCM) の時は不要。※3. ヘッダ拡張部サイズが 0000h の時には無い。
■ フォーマットID 0001h: リニア PCM 0002h: MS ADPCM 0005h: IBM CSVD 0006h:
A-Law 0007h: μ-Law 0010h: OKI ADPCM 0011h: ADPCM(IMA/DVI) 0012h: MediaSpace
ADPCM 0013h: Sierra ADPCM 0014h: ADPCM(G.723) 0020h: YAMAHA ADPCM 0022h:
TrueSpeech 0030h: DOLBY AC2 0031h: GSM 6.10 0040h: ADPCM(G.721) 0050h:
MPEG 0200h: CREATIVE ADPCM 0300h: FM-TOWNS SND (この他にも沢山存在する)
■ リニア PCM について 8bit, 16bit が存在する。 8bit は符号無し、16bit
は符号付きリトルエンディアンである。 ステレオデータでは、左チャネル、
右チャネルの順で記録される。 ヘッダ拡張部や [fact] チャンクが無いのは古
いフォーマットとの互換性のためだと思われる。 ■ μ-Law, A-Law について WAVE
フォーマットでの μ-Law, A-Law は以下の通り。 ( 符号化: Linear 絶対値 15bit
→ μ-Law, A-Law 下位 7bit 復号化: μ-Law, A-Law 下位 7bit → Linear
絶対値 15bit ) μ-Law 符号化: + 1000_0100 = 000_0000_1abc_d??? → 000abcd
^ 1111111 + 1000_0100 = 000_0001_abcd_???? → 001abcd ^ 1111111 + 1000_0100
= 000_001a_bcd?_???? → 010abcd ^ 1111111 + 1000_0100 = 000_01ab_cd??_????
→ 011abcd ^ 1111111 + 1000_0100 = 000_1abc_d???_???? → 100abcd ^ 1111111
+ 1000_0100 = 001_abcd_????_???? → 101abcd ^ 1111111 + 1000_0100 = 01a_bcd?_????_????
→ 110abcd ^ 1111111 + 1000_0100 = 1ab_cd??_????_???? → 111abcd ^ 1111111
+ 1000_0100 > 111_1111_1111_1111 → 1111111 ^ 1111111 μ-Law 復号化: ^ 1111111
= 000abcd → 000_0000_1abc_d100 - 1000_0100 ^ 1111111 = 001abcd → 000_0001_abcd_1000
- 1000_0100 ^ 1111111 = 010abcd → 000_001a_bcd1_0000 - 1000_0100 ^ 1111111
= 011abcd → 000_01ab_cd10_0000 - 1000_0100 ^ 1111111 = 100abcd → 000_1abc_d100_0000
- 1000_0100 ^ 1111111 = 101abcd → 001_abcd_1000_0000 - 1000_0100 ^ 1111111
= 110abcd → 01a_bcd1_0000_0000 - 1000_0100 ^ 1111111 = 111abcd → 1ab_cd10_0000_0000
- 1000_0100 A-Law 符号化: 000_0000_abcd_???? → 000abcd ^ 1010101 000_0001_abcd_????
→ 001abcd ^ 1010101 000_001a_bcd?_???? → 010abcd ^ 1010101 000_01ab_cd??_????
→ 011abcd ^ 1010101 000_1abc_d???_???? → 100abcd ^ 1010101 001_abcd_????_????
→ 101abcd ^ 1010101 01a_bcd?_????_???? → 110abcd ^ 1010101 1ab_cd??_????_????
→ 111abcd ^ 1010101 A-Law 復号化: ^ 1010101 = 000abcd → 000_0000_abcd_1000
^ 1010101 = 001abcd → 000_0001_abcd_1000 ^ 1010101 = 010abcd → 000_001a_bcd1_0000
^ 1010101 = 011abcd → 000_01ab_cd10_0000 ^ 1010101 = 100abcd → 000_1abc_d100_0000
^ 1010101 = 101abcd → 001_abcd_1000_0000 ^ 1010101 = 110abcd → 01a_bcd1_0000_0000
^ 1010101 = 111abcd → 1ab_cd10_0000_0000 μ-Law, A-Law とも MSB は符
号ビット(0:負/1:正)。 ※ 「^」は排他的論理和を表す。 ■ IMA/DVI フォーマ
ットについて 4bit と 3bit が存在する。(2bit は CoolEdit 独自フォーマッ
ト) ブロックサイズは 4 x チャネル数 の倍数 ならば何でもよい様だが、 256
x チャネル数 x サンプリング周波数 / 11k が使われることが多い。 ・[fmt ]
チャンク, ヘッダ拡張部 word ブロック中のサンプル数 ブロック中のサンプル
数には先頭の Value(後述) も含まれる。 ・ブロックの構造 mono: 00h word Value
02h byte Index 03h byte ?(00h) 04h 〜 data .... stereo: 00h word Left-Value
02h byte Left-Index 03h byte ?(00h) 04h word Right-Value 06h byte Right-Index
07h byte ?(00h) 08h dword Left-data 0ch dword Right-data 10h dword Left-data
14h dword Right-data .... Value は 16bit 符号付き PCM で表された、一番
目の出力値。 Index は適応差分インデックスの初期値。 data はバイト中の下
位から順に格納される。 ブロックに余りが出た場合、0 で埋めておくべきであ
ろう。 ・復号化 入力値(a)、前回の出力値及び適応差分インデックスを用いて
出力値を決定する。 インデックスの示すステップサイズを s とすると、差分値
は 4bit: a(bit2-0) 000 s/8 001 s/8 + s/4 010 s/8 + s/2 011 s/8 + s/4 + s/2
100 s/8 + s 101 s/8 + s/4 + s 110 s/8 + s/2 + s 111 s/8 + s/4 + s/2 + s
3bit: a(bit1,0) 00 s/4 01 s/4 + s/2 10 s/4 + s 11 s/4 + s/2 + s で定義
され、符号は a の MSB(0:正,1:負)で決まる。 出力値は、前回の出力値にこの
差分値を足したものである。 この後、入力値 a によってインデックスを更新す
る。 4bit: -1 ← 0000, 0001, 0010, 0011, 1000, 1001, 1010, 1011 +2 ← 0100,
1100 +4 ← 0101, 1101 +6 ← 0110, 1110 +8 ← 0111, 1111 3bit: -1 ← 000,
001, 100, 101 +1 ← 010, 110 +2 ← 011, 111 上表の値を、インデックスに
加える。 なお、出力値は -32768 〜 32767、インデックスは 0 〜 88 で、上限
、下限を越えた場合はそれぞれ上限値、下限値に戻す。 高速化を行う場合は入
力値とインデックスから差分値、及びインデックス移動先を引く表を作ると良い
。 ※ステップサイズ(インデックス 0 〜 88) 7, 8, 9, 10, 11, 12, 13, 14 16,
17, 19, 21, 23, 25, 28, 31 34, 37, 41, 45, 50, 55, 60, 66 73, 80, 88, 97,
107, 118, 130, 143 157, 173, 190, 209, 230, 253, 279, 307 337, 371, 408,
449, 494, 544, 598, 658 724, 796, 876, 963, 1060, 1166, 1282, 1411 1552,
1707, 1878, 2066, 2272, 2499, 2749, 3024 3327, 3660, 4026, 4428, 4871,
5358, 5894, 6484 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899 15289,
16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 -- ■ Windows95
標準サポートフォーマットについて > 0001h: リニア PCM > 0002h: MS ADPCM > 0006h:
A-Law > 0007h: μ-Law > 0011h: ADPCM(IMA/DVI) > 0022h: TrueSpeech > 0031h:
GSM 6.10 が標準でサポートされています。 ただし、μ-Law、A-Law などはモ
ノラルのみ、ADPCM(IMA/DVI) は 4bit のみ対応になります。 > 0002h: MS ADPCM
> 0011h: ADPCM(IMA/DVI) 上記のフォーマットについては Windows3.1 でも Video
for Windows 1.1 以降をインストールすることによって演奏可能になることが
確認されています。 ■ 注意 ・本アーカイブ内容の著作権は安島雄一郎が保有
しますが、転載・配布・引用は 自由に行って結構です。形態についても一切自
由とします。 ・本ドキュメントに部分的な変更・修正を加えたものの配布は禁
止します。 ・本アーカイブ内容の使用に伴う如何なる損害に関しても、作者は
責任を負わな いものとします。 -- いぬ。BBS INU00002/あじ NIFTY-Serve PXA01002/
あじ 東京BBS KGB KGB-3162 POCKET通信Ver3 #5384/あじ