WindowsPCが音を出す仕組み

カーネルミキサー(WDM)世代:Windows XP,Windows 2000~ Windows Vista

DirectSoundとKernel Mixerについて知ろう

従前,Windows OS環境では,Direct Soundという仕組みを使って音声の出力を管理していました。Direct Soundは,音声再生を要求する様々なアプリケーション(たとえばメディアプレーヤー,OS標準の警告音や効果音)の音声を一元管理し,同時に再生させるという意味で画期的な機能であったといえます。

▼ダイレクトサウンドについて
○DirectSound ドライバ モデル
http://msdn.microsoft.com/ja-jp/library/cc353944.aspx

しかし,同時に複数の音を再生するということは,音声信号を合成する必要があるわけです。Direct SoundはKernel Mixerという機能を用いて複数の音声信号を合成していましたが,このとき「カーネル ミキサは、ミキシングを要求されたサウンドに基づいてフォーマットを選択する。出力フォーマットは、ミキシングを要求されたサウンドの最高品質のフォーマットか、ハードウェアでサポートされている、それに最も近いフォーマットに設定される。」(上掲MSDN)という仕組みが非常に問題であったわけです。
つまり,48kHzの音声と44.1kHzの音声が同時に出力された場合には,ハードウェアが48kHzをサポートしているときには48kHzでリサンプリングされる,ということであり,このリサンプリングの品質が非常に悪い(聴感上音が悪く聞こえる)ということが問題視されたわけです。
加えて,OSの仕組みとしては常時48kHzでリサンプリングするわけではないにせよ一部のサウンドデバイスは内部で48kHzに強制リサンプリングをしていたものもあり(その後44.1kHzに戻して出力するという荒技…),結果的にバイナリ不一致になる例が多く見られました。

Windows XP時代になって,Kernel Mixerを経由してもバイナリが一致する使い方というのは実際存在したわけですが,DTM用途においては,Direct Sound環境のレイテンシ(外部入力信号の遅延)が非常に問題であったため,XP時代になってもSteinbergのASIOが流行していたわけです。

▼カーネルミキサーの機能と有用性について
○がしそふと開発室日誌 2007/03
http://www.geocities.co.jp/SiliconValley-SanJose/8700/11KAI_0703.HTM
○PCをトランスポートにするその9(カーネルミキサー経由で無変換出力)
http://blog.tcp-ip.or.jp/ar/m-syuuta/index.php?itemid=472

▼カーネルミキサーによるミキシングが低品質であることについて
○Windowsの音質を阻害するカーネルミキサー
http://dtm.newsblog.jp/archives/51403556.html
○Foobar 2000とプレーヤーソフトの周辺知識
http://vaiopocket.seesaa.net/article/136144401.html
○PCオーディオ(ソフトウェア編)
http://sound-structure.at.webry.info/200705/article_3.html
○Hinata Blog » MIDI レイテンシを回避する その1
http://www.hinatablog.org/?p=2794

バイナリ一致模索の歴史

【ASIO】

ドイツSteinberg社が提唱した規格で,WindowsやMacなどのOS標準環境とは異なる規格として発展しました。一般的に最も普及したDTM環境がASIOといっても過言ではないでしょう。ASIO規格に対応したドライバを開発しなければならないという点はネックでしたが,サウンドデバイスを排他的に使用するためバイナリが完全に一致する,低レイテンシ動作が可能,マルチchも可能,とDTM用途では理想的な規格でした(今でもOSに依存しないという意味で優位性があるといえるでしょう)。

【WDM/KS】

こちらはWindows XP以降にOS標準機能となったKernel Streamingという仕組みを流用して,OSのMixerをバイパスしてしまおうという手法です。Mixerをバイパスするので,サウンドデバイスを排他的に使用することができ,バイナリも当然一致しました。
OS標準機能を使っているため,ASIOに比べて対応出来るオーディオインターフェースが若干多かったのですが,ソフトウェアDAWでのWDM/KSの対応が普及しなかったことと,ASIOに比べて明確なアドバンテージがなかったこともあり,あまり普及しませんでした。

▼WDM/KSについて
○偏ったDTM用語辞典 – ダブリュディーエムケイエス:WDM/KSとは
http://www.g200kg.com/jp/docs/dic/wdmks.html
○SONARやHomeStudioは、どのようにして、WDMドライバを使った場合のレイテンシを短くしているのですか?
http://www.roland.co.jp/support/faq/index.cfm?ln=jp&Dst=0&Faq=JP06-12364&dsp=1

【ASIO4ALL】

WDM/KSがDTM方面で登場したのに対して,同じくKernel Streamingを利用して,ASIOのように振る舞うアプリが登場しました。発想としてはOS上はASIOドライバが動いているようにみえ,サウンドデバイスからはKernel Streamingで動いているようにみえるというものです。
レイテンシという観点でいけば,Kernel Streamingを直接使うものに比べて変換という手間がある以上レイテンシが悪化するのは確実なのですが,リリース当時はKernel Streamingに直接対応するメディアプレーヤーアプリが殆ど無かったため,特にASIO対応のオーディオインターフェースを所有していないユーザーの間で大変な流行を見せました。

▼ASIO4ALLの仕組みについて
ASIO4ALL – Universal ASIO Driver
http://tippach.business.t-online.de/asio4all/intro.html
○ASIO4ALL使う?使わない?
http://sites.google.com/site/niusounds/top/asio4all

【Kernel Streaming】

上述したように,ASIO4ALLはややトリッキーなアプリでしたので動作しないケースがあったため,メディアプレーヤー側で正式にKernel Streamingに対応するものがでてきました。代表的なものとしてはfoobar2000あたりがそうです。
XP世代としては,ASIO対応のオーディオインターフェースを使っている場合にはASIO,層でない場合にはKernel Streamingという形でリスニング専用の環境は棲み分けがなされていました。

▼カーネルミキサー,ASIO,カーネルストリーミングの関係について
○ASIOな日々
http://www.geocities.co.jp/SiliconValley-PaloAlto/9956/audio/asio.html
○オーディオドライバの種類
http://altered.s201.xrea.com/documentsdaw/m20070615driveraudio.html
○ベストのオーディオインターフェイスはどれ?
http://pcde24bit192khz.blogspot.com/2010/04/blog-post_17.html

WASAPI世代:Windows Vista SP1,Windows 7~

Microsoftは長年に渡り(音質に拘るユーザーから)大変評判が悪かった音声に関する処理を変更し,Windows Vista SP1以降,WASAPI(Windows Audio Session API)という新しい仕組みを導入しました。

画期的なWASAPIの機能

これによる改善点は,共有モードと排他モードをユーザーが選択できるようになったこと(以前はユーザーがこうした設定を変更することはできませんでした),排他モードにおけるバイナリ一致が可能になったこと,排他モードではPCM方式の音源以外も扱えるようになったこと,ASIO同等の低レイテンシを実現したこと,など多岐にわたります。
Windows7においては,さらに低レイテンシで動作するよう処理が改善されました。特に,WASAPI排他モードでメディアファイルを再生している最中に他のプロセスの優先度を落とすなど,積極的に映像や音声のクオリティを高めようという工夫がみられるようになったことや,OS提供メーカーが排他モード使用時のバイナリ一致を条件付きながら保証しているという点で画期的なものであるということが出来ます。


「楽しいハック講座 (4) Windows7 オーディオアーキテクチャの概要 – Windows Multimedia Hacks – Site Home – MSDN Blogs」(http://blogs.msdn.com/b/windows_multimedia_jp/archive/2010/06/28/4-windows7.aspx Microsoft 2010)

このように,OS標準の機能としてバイナリ一致出力が可能になったことは大変喜ばしいことです。現状ではWindows Media PlayerやiTunesが排他モードに対応しないといった点で,一般的な普及はこれからといった感がありますが,高音質を標榜するメディアプレーヤーの多くはWASAPI排他モードに標準で対応しており,急速に知名度が高まっているといえるでしょう。

▼WASAPIの仕組みについて
○つれづれ。 | WASAPIについて、覚え書き。
http://turedure4410.blog32.fc2.com/blog-entry-388.html
○Windows 7 のオーディオ設定とWASAPIについて
http://vaiopocket.seesaa.net/article/155985528.html
○WASAPI(27) – About the Windows Core Audio APIs
http://sfpg.seesaa.net/article/132980513.html
○WASAPI(28) – About the Windows Core Audio APIs(2)
http://sfpg.seesaa.net/article/133011743.html