Music TO GO!

2010年07月03日

マイクロソフトのブログによるWindows7オーディオの仕組みの解説

ちょっとおもしろいことに6/28付けのMicrosoftのMSDN(デベロッパ用)のブログでWindows7のオーディオアーキテクチャについての解説がなされています。MSDNはマイクロソフトのデベロッパ用のサイトです。このブログはMSDNのサブスクリプションライセンスに関係なく見られます。
「PCオーディオファン2」が手元にある方はP200からの「Windows Vista/7の音声システムの秘密」もあわせて読むとよいと思います。エンドポイントとはなにかというようなことはそちらに書いてあります。

こちらがそのブログのアドレスです。
http://blogs.msdn.com/b/windows_multimedia_jp/archive/2010/06/28/4-windows7.aspx

これは開発者用のMSDNなのでそれなりの知識が必要ですが、けっこう胆な興味深いことがいろいろと書いてあります。また、ビットパーフェクト(バイナリ一致)の様にPCオーディオ用語を使って解説してくれてるのが新鮮です。

まずそのビットパーフェクトの保障ですけど、つまりはWindows7 Certifiedドライバー、またはMicrosoft のドライバ(標準ドライバ)でなければ、排他モードのWASAPI 経由であってもビットパーフェクトは保障されないということですね。もちろんこれはOS部分(経路)の話なので、ここに書いているようにその前後のアプリケーション(つまりプレーヤーソフト)やハード・デバイス側でリサンプルしたりデジタルボリューム処理をしていたら成り立ちません。
XPでのカーネルミキサーに代わるオーディオエンジンも、カーネルミキサーが固定小数点演算してたのに比べれば、単精度(32bit)でも浮動小数点処理しているので少しましということになります。

またレイテンシーの短縮について、アドレスマッピングで実装されているというところがちょっと面白いところです。
排他モードWASAPIのときは(ユーザー空間にある)エンドポイントバッファにアプリケーションがオーディオデータを書き込めるとありますが、これはエンドポイントバッファ経由でドライバにオーディオデータを渡す(コピーする)のではなく、直にドライバーのデータエリアに書いてることと同じということです。
基本的な話として、アプリケーションはユーザーモード(ユーザー権限)で動作しているので、ドライバーの保護されたカーネル空間に直にデータを書き込めるわけではありません。ただしこうしてマップすることであたかも直接カーネル空間に書いてることと同じということです。PCオーディオファン2の図1ではエンドポイントバッファは線にまたがる様に書かれていますが、こういうきちんとした訳があったということです。
コンテキストスイッチングするからゼロではないにせよ、コピーなしの参照で済むということはかなり時間短縮になります。逆に言うと他のシステムでもこういう実装しているのなら、レイテンシーはOSのオーバーヘッドに左右されるということでしょうか。

また、Vista/7ではOSのオーディオコンポーネントがユーザーモードにある(つまりはマイクロカーネル的な考え方をしている)というのは、本来OSの一部であるVista/7のオーディオエンジン(XPのカーネルミキサー)はカーネルモードではなくユーザー権限で動作していることでも分かります。ブログの図では明確に分かりますね。PCオーディオファン2の図1ではユーザーモードとカーネルモードの両方にまたがっていますが、ここはブログの図のように完全にユーザーモードにあると見るべきでしょうね。
このようなマイクロカーネル的な考え方をしているというのはWindows7の優れた点の一つです。ただここは少しOSのアーキテクチャの解説が必要なのでまたそのうちに書きたいと思います。

いずれにせよ、マイクロソフトでも作り手のほうがオーディオ的な考え方を意識してくれているというのはなかなか良いことですね。
ちょっと今後も楽しみにしていきたいところです。
posted by ささき at 00:37 | TrackBack(0) | __→ PCオーディオ・ソフト編 | このブログの読者になる | 更新情報をチェックする

この記事へのトラックバック