ベストのオーディオインターフェイスはどれ?

 ときどきメールでいただくのが、このタイトルの質問である。具体的には「VISTAなんですが、どれが一番いいですか」とか「なんでASIOを使わないんですか?ASIO4ALLというのがありますよ」とか、「OS標準とどのあたりが改善されるのでしょうか」などいろいろだが、ベストの状態で音楽を聴きたい!と求める点は共通している。

 ただ多くはホームページやブログの断片的な受け売りの情報を土台としているようで、いろいろ整理して回答しなければいけないことが多い。このブログも同じく断片的な記述であり、受け売りであり、勉強不足で間違っていて、それが修正がされないままの内容が多くある。そこでこの辺で整理をかねてまとめてみることにする。

図の簡単な説明
 音楽を再生するのに使うWindows Media Playerや、このブログでときどき書いているFoobar2000などアプリケーション(上段オレンジ)は、サウンドカード(最下段茶色)を直接コントロールして音を出すことはできない。必ずAPI(黄色)と呼ばれる方法の中から1つを選択して、そこで決められた手続きで音楽データを渡す。その後は、そのAPIの流儀(実装)に従って、各サウンドカードメーカが提供するドライバ(青色)に渡され、サウンドカードに信号として伝えられる。

DirectX Audio(Direct Sound)

 今では信じられないことだが、以前は複数のアプリケーションで同時にサウンド出力するだけでパソコンがハングすることがよくあった。各サウンドカードメーカまかせだった処理を、OSの構造レベルで整理したのがこのしくみである。初期にはいろいろな問題はあったが、SP(サービスパック)が出るたびに密かに?改善されてきた機能でもある。DirectX AudioはDirectx8以降の表記だが、Direct Soundとほぼ同意。

 この機能とKernel Mode Audio Mixer(カーネルミキサー)の関係は外せない。図では3本の矢印が上から来ているが、これは3つのアプリケーションの音、例えば、OSのポンという音、メディアプレイヤーの音楽、ブラウザーのYoutubeの音とすると、それらのデータをミキシングしてドライバーに伝えるという非常に重要な役割を果たしている。このミキサーがカーネルモードで動作することにより、OSの安定性は大きく改善されたのである。ちなみにこの表記はMSDNの文書によって揺れがあり、Kernel Mixerだけだったりする。

 さてよくカーネルミキサーが音に悪さをしているといわれるが、これには2つの意味がある。確かに初期には性能が悪かった。レイテンシーも大きくバグも多々あった。しかしこれらは実はXPのSP以降大分改善されている。2つ目の意味はどちらかというとしょうがないものである。


 例えばさきほどのOSのポンという音は、最近は調べていないがそのサンプリングレートは22KHzとか非常に低いデータである。一方CDのような44.1KHzの音もあり、48KHzの音もあり、これらの音が同時に鳴らされた場合には、ミキシングしなければならない。そうするとどうしてもサンプリングレートを統一、つまりレートコンバージョン(SRC)が発生する。

 このレートコンバージョンはデータの変化を伴なうため、音に影響、通常は悪い影響を与える。またどのレートにコンバージョンされるかは、仕様上は最高レートかつサウンドカードの対応する最高レートではあるが、これが実際不定であることが多いのである。ただ仕様上は192KHzなどのハイサンプリングレートに対応していないということは決してない。

ASIO
 ドイツのSteinberg社が開発した仕様である。長年Cubaseユーザであるが、VST音源が出始めた頃、再生してみるとその遅れが気になってしょうがなかった。が、それを解決するためにだろうかASIOが登場した。まあ当時はおまじないのようにしか理解していなかったが...。

 これはカーネルミキサーをバイパスするため、前述の問題は取り除かれる。音声データがドライバにたどり着くまでに変化がないことから、Bit Exact(ビットイグザクト)という表記で示されることが多い。

 ただこれはASIOに対応したドライバに対して真の意味で有効である。最初に書いたASIO4ALLであるが、実際は図で示したとおり後述のカーネルストリーミングをラップしているものであり、カーネルストリーミングが再生プレイヤーで対応している場合には、全く使う必要がない。プレイヤー側にASIOしかプラグインがないというやむを得ない理由の場合だけに使用すべきである。

Kernel Streaming(カーネルストリーミング)
 これはWDM(Windows Drive Model)準拠ドライバの仕様を生かした機能であるともいえるが、文字通りカーネルモードでデータを流しこむしくみ(というか方法)である。これもBit Exactである。ASIOとは異なり、WDM準拠のドライバであれば自動的にこの方法が使えるので、事実上ほぼすべてのサウンドカードが対応するともいえる。XP環境ではベストの選択である。

 ただこのカーネルストリーミングでデータを送れるプレイヤーが少なく、ドライバ側の音声データの扱い仕様があいまいなこともあり、使用中に例えばOSのポンという音が発声されると、サウンドカードによっては、ノイズや音声の歪、再生の停止、最悪ブルー画面などが起きることもあって、「純粋に音楽だけを楽しむ」という環境以外では適さないかもしれない。

WASAPI(Windows Audio Session API )
 VISTAから導入されたOSのAPIである(あのKernel MixerもAudio Engineに代わっている)。図ではややこしくなるのでDirectX Audioなどと並列に並べているが、役割としては文字通りOSのコアとなるAPIであり、正確にはDirect Soundもこれを共有モードで使う。

 ただここでは違いを強調するため排他モードでの動作を示しており、図のとおりAudio Engineを介さないためBit Exactな再生を実現できる。構造的にはKernel Streamingと同様にASIOよりも低レイテンシーであり、VISTA、Windows7ではベストの選択である。

 先のKernel Streamingとの違いは、OSのAPIであるが故に実現できる堅固な安定性である。排他モードで再生している場合には、他のアプリケーションからの再生割り込みがあっても、それは遮断されるので、カーネルストリーミングであったような音声の断絶等の問題は起きない。