コンテナサイズと有効データサイズ
当初wBitsPerSampleは有効データサイズ、つまり1サンプル点を何ビットで表するのか、という意味で使われていました。(単位はBit)
ウェーブデータはバイト境界のメモリに収納されますが、データサイズが8Bitと16Bitしか無かった当時は、wBitsPerSampleが8の倍数であったため、コンテナサイズについて特に意識する必要はありませんでした。
コンテナサイズとデータサイズの対応は以下の表に示すとおり一目瞭然です。
wBitsPerSample | コンテナサイズ |
---|---|
8Bit | 1Byte |
16Bit | 2Byte |
しかし20Bit高精度A/Dなど8の倍数でないデータサイズや、4Byteのコンテナに24Bitデータを収納するケースなどが登場すると、wBitsPerSampleだけでは正確に状況を表現できなくなりました。
そこで新しい規格では、WAVEFORMATEXTENSIBLE構造体にwValidBitsPerSampleという変数が導入され、以下の様に定義されました。これによってコンテナサイズとデータサイズを自由に定義できるようになりました。
wValidBitsPerSampleはwBitsPerSampleにゼロでない値が指定されている場合のみ有効です。
変数名 | 単位 | 意味 | 注意点 |
---|---|---|---|
wBitsPerSample | Bit | 1チャンネル当り1サンプル点を収容するコンテナサイズ | 8の倍数でなければならない |
wValidBitsPerSample | Bit | 1チャンネル当り1サンプル点の表現に必要なデータサイズ | wBitsPerSampleより等しいか小さくなければならない |
もしデータサイズがコンテナサイズより小さい場合、データはMSB側に詰めて配置します。余ったLSB側はゼロで埋めておきます。