帰りの電車の中で、なんとなくビットパーフェクトとかを考えていた。
ビットパーフェクトな再生というと、デジタルオーディオデータがオーディオインターフェースのD/Aコンバータまで途中で改変されることなく送られるということである。Windows7は通常ミキサやらビットコンバータなどを経由するので、途中でデータが改変されてしまう。
WASAPIの排他モードはそういう改変するミキサなどをバイパスして直接ドライバにデータを送る。なのでドライバまではビットパーフェクトが保証される。
気になるのはドライバからD/Aに送られるまでにデータが改変されないかだ。答えは「楽しいハック講座 (4) Windows7 オーディオアーキテクチャの概要」に書いてあった。
「理想的な」ドライバでは、ドライバが自身の都合でオーディオサンプルを改変することが禁止されています。どういうことかと言いますと、オーディオデバイスが例えば内部で 12bit のみに対応していた場合、以前はドライバが 16bit → 12bit に変換してからハードウェアに渡す、といったことが許されていました(!)。前述の「理想的な」ドライバではこれが禁止されており、改変していると Windows7 Certitfied ロゴが取得できません。そのため、「理想的な」ドライバでは、排他モード WASAPI アプリケーションがエンドポイントバッファに書き込んだオーディオサンプルはそのまま1bit も変化することなくハードウェアに渡ることが保証されています。
理想的なドライバとは何かというと、UAA 準拠しているか「デバイスベンダー提供のWaveRT ミニポートドライバを使用し、かつ、そのドライバが Windows7 Certified ロゴを取得している」ドライバである。
UAAとかWaveRTミニポートドライバとかはWHDCのドキュメントを読めばわかりそうだけど、量が多いなあ。。
http://www.microsoft.com/japan/whdc/device/audio/default.mspx