11月12日に公開しました「Windows Meida Plyerは音質が悪い?」を見て頂いた方々から、間違いを指摘して頂いたり、僕が知らなかった点を教えて頂いたりしました。この場で訂正や補足をさせて頂きます。
内容の訂正や補足
・レポート中で「カーネルミキサー」と呼んでいる、Windowsの内部で音声を扱っている部分は、Vista以降のWindowsでは「オーディオエンジン」と改名されています。本来、カーネルミキサーという名前が使われていたのはWindows
XPまでですが、XP、Vista、Win7 どのWindows上の話でも共通で使える呼び名が有りませんので、その場合にはとりあえず旧名称カーネルミキサーのままで呼ぶ事にします。
今後のレポート等では、Vista以降に限定した話の場合にはオーディオエンジン、XPの場合と、XPまで含めた話の場合はカーネルミキサーと記述する事に致します。
・「どんな種類のアプリの音が劣化させられているか?」章にある図がいい加減だと指摘して頂いた方もいらっしゃるようです。
本文中にも記載しております通り、使われるAPIの種類と音声の流れを、主題のピークリミッタを通るか通らないかが判るように概略化しただけの図ですので、そのままでも大きな問題は無いと思っております。
次の様なマイクロソフトの資料がある事も教えて頂きました。
僕の概略図ですとMME(MSの図では「マルチメディアAPI」)とDirectX/DirectSound(MSの図では「DirectShow/DirectSound」)から直接オーディオエンジンに音声が渡されているかの様になっていますが、実際にはどちらもWASAPI共有モードとしてまとめられてからオーディオエンジンに渡される様です。使う側からはどちらでも大差無い気がしますので、そのままにしておきます。
僕の概略図ではWindows Meida
PlayerがDirectX/DirectSoundに対して音声を送っている様に書かれていますが、実際には「Media
Foundation経由で送られているのは?」といった情報も頂きました。 そもそも僕の図には
Media Foundationが無い・・・
この点、実際のところは良く判りませんので、もし判りましたら追記・訂正致します。
新しく知った情報
・オーディオエンジン内にピークリミッタが実装されているらしい事を伺わせるマイクロソフトの資料を見つけて頂きました。
Custom Audio Effects in Windows Vista
http://msdn.microsoft.com/en-us/windows/hardware/gg463025
ハードウェアベンダーなどが独自のエフェクタなどをAPOとして実装するための参考資料の様ですが、Downloadで得られる.docファイルの7ページのFigure
3の中に、[Limiter] と書かれたAPO(?)が複数見られます。
アプリケーション(もしくはオーディオセッション?)からの音声は、ミキシングされる前にリミッタがかかり、更に全体がミキシングされた後にもマスターリミッタが掛かるらしい事が伺えます。
文書内にはこのリミッタに関する詳しい説明は何も無いので、これが今回の検証で発動しているピークリミッタであるという確証は持てませんが・・・
・音声出力がピークまで振れずにリミットされてしまっている事を述べているマイクロソフトの方のブログを教えて頂きました。
恐らくボリュームフェーダーやレベルメーターの動作を確認するために再生中の波形の実際の振幅値を取得するテストプログラムの説明なのではないかと思います。
ここにも詳しい内容が書かれている訳ではないのですが、
「読み出される振幅値が0.985(およそ-0.13dB)で頭打ちになるが、これは CAudioLimiter と呼ばれている APO によるもの・・・」
といった旨の事が、その事を示すグラフと共に記載されております。
・以前からこのリミッタの動作検証を行っておられた方もいらっしゃるようです。
yamamoto2002さん WASAPI共有モードのリミッターAPO
http://community.phileweb.com/mypage/entry/2721/20101113/21492/
オーディオエンジンの動作に関して正式な資料がほとんど無い中、リサンプラやディザリングなどについても色々と検証されていて、実にすばらしい内容だと感じました。
間違いを指摘して頂いた方、情報を教えて頂いた方々、ありがとうございました。
2012年11月16日 ありぱぱP