藤本健のDigital Audio Laboratory
第832回
Windowsのオーディオ音質改善? JRiverプレーヤーを使った方法を検証
2019年12月16日 12:18
この連載においても過去何度も取り上げてきたWindowsの“カーネルミキサー”の音質への影響。カーネルミキサーとはWindowsの内部ミキサーのことで、現在マイクロソフトの正式名称は「オーディオエンジン」に変更されているが、国内外で、カーネルミキサーと呼ばれることが多いので、ここではそう呼ぶことにする。このカーネルミキサーの何が問題かというと、ここを通すと音質が変わってしまうことであり、「できるだけいい音で聴きたい」人に指摘されてきた部分だ。
これを回避するためにASIOドライバやWASAPI排他モードというものがあるが、いまもiTunesやWindows Media Playerを含む多くのアプリケーションはカーネルミキサーを経由する。そうした中「カーネルミキサーをバイパスできる手法があるらしい」という情報をネットで見つけたので、実際に試してみた。それはJRiver Media Centerという再生ソフトを使うものだが、その具体的な方法や、どんなメリットがあるのか細かく検証してみたのでレポートする。
WASAPI排他など、従来の方法以外でも音質問題を解消できる?
カーネルミキサーについて、あまりご存知ない方もいると思うので、改めて簡単に説明するとWindowsでサウンドを扱う際、各ソフトウェアはサウンドドライバを介してオーディオインターフェイス機能にオーディオ信号を渡して音を出す形になっている。そのサウンドドライバにはMME、DirectSoud、WASAPI(共有)、WASAPI(排他)、ASIOなど、複数のものがあるが、このうち標準となっているのがMME、DirectSound、WASAPI(共有)と呼ばれるもので、Windows Media PlayerやGrooveミュージック、またiTunesやSpotify、そしてIE、Edge、Chromeなどのブラウザもこれらを介して音を出す形になっている。
Windowsのサウンド設定画面において、出力デバイスの設定があるが、この設定によって音の出る先が変わるアプリケーションは、すべてMME、DirectSound、WASAPI(共有)を使って音を出していると考えていいし、一般的なソフトのほぼすべてがそうなっている。そして、これを経由すると、もれなくカーネルミキサーを経由する形となり、音が劣化するのだ。でも、なぜ、マイクロソフトは、わざわざ音を劣化させるようなことをしているのか。
Windowsでは複数のアプリケーションから音が同時に出るケースがあり、単純に足し算で音をミックスしていくと、音が限界を超えて過大となってしまい、デジタルノイズが発生してしまう可能性がある。そこで、ある一定の音量を超えたらリミッターが効く仕掛けがカーネルミキサーに搭載されており、しかもバッファを利用することでしきい値を超えるのを事前に予測し、早めにリミッターを掛けるようになっているのだ。
このため、複数のアプリケーションから同時に大きな音を出しても、音割れせずに、キレイな音で出せるようになっている。それがカーネルミキサーの重要な役割の一つだ。この過大な音量と判断するのは複数のアプリケーションからの音が同時になる場合に限らず、単独のアプリケーションだけでも同様。たとえば一般的なCDの楽曲などは、マキシマイザで思い切り音圧を上げて制作されているため、これを鳴らせば即、カーネルミキサーのリミッターに引っかかってしまうのだ。
前述のカーネルミキサーを介すことで音質劣化するというのは、このリミッターが効いてしまうという話であり、ノイズが入るとか、音が圧縮されてしまう……といったものではないから、多くの人は気にならないとは思うけれど、オーディオファンとしては勝手に音をいじられてしまうのは納得のいかないところ。そのため、ASIOドライバやWASAPI(排他)を用いて、カーネルミキサーを通さない形で音を出すのがPCオーディオファンの常識となっている。
「SpotifyでASIOドライバ出力」の方法を検証
そうした中、「SpotifyをASIOドライバで出力する方法」というのをネットで見つけ、これはどういうことだろうと思い、調べてみた。これはJRiver Media Centerを用いて実現させる非常にユニークな方法で、Spotifyに限らず、Windowsのサウンド設定を利用するアプリケーションすべてで利用できる方法だという。
シェアウェアとしてオンライン流通しているJRiver Media Centerについては、以前、VSTプラグインが利用できるプレーヤーソフトとして、HPL2の記事において紹介したことがあったが、そんな機能があったことはまったく知らなかった。ネットの記事などを見る限り、図のようにカーネルミキサーをバイパスすることができそうなニュアンスだった。
その方法を説明すると、まずJRiver Media Centerをインストールし、起動し、ツールメニューのオプションを選択。この左側の「全般」を開き、「機能」にある「WDMドライバー」というところにチェックを入れる。すると「JRiver Media Center」というサウンドライバが生成されるので、Windowsのサウンド設定でこれを選ぶ。こうすることで、各アプリケーションが出力するサウンドの信号はすべて一旦JRiver Media Centerに送られる形になるのだ。
一方で、JRiver Media Centerはオーディオの出力先としてMMEやDirectSoundなどはもちろん、ASIOでもWASAPI(排他)でも選択できるため、ここでASIOドライバを選んでおけば、結果としてカーネルミキサーを経由せずに、オーディオ出力することができるのではないか、というのが仮説。これまでWindows Media PlayerもGrooveミュージックもiTunesも、そしてSpotifyもカーネルミキサーを経由するのは必須だったので、もしこれが本当だとしたら、画期的な手段ということになる。
これを試してみたところ、確かにWindows 10標準のプレーヤーソフトであるGrooveミュージックの音がJRiver Media Centerに送られているようで、JRiver Media Centerの小さなスペクトラムアナライザが動いているのも分かる。そして、何よりJRiver Media Centerで設定したASIOドライバの出力先から音が出ている。
ここで試しに、Spotifyからのストリーミングを流しながら、JRiver Media CenterのDSPスタジオという機能を試してみた。
この機能を使うと、たとえばイコライザーを動かした時には、Spotifyからの音が明らかに変化するし、ルーム補正を使うと音場が変化する。また、「効果」の項目ではリバーブをかけられるなど、Spotify単独ではできない音の調整をリアルタイムに行なえる。
次は、今回のテーマである「これによってカーネルミキサーを回避できるのか? 」という点。JRiver Media Centerからの出力先を、先日紹介したSteinbergのUSB-CオーディオインターフェイスであるUR816CのS/PDIFに設定。そのS/PDIFからのオプティカル出力をローランドのオーディオインターフェイスであるUA-101のオプティカル入力に入れてみたところ、44.1kHzでロックがかかり、確実に受信できることが確認できた。そこで、UA-101のS/PDIF入力で受信した信号をSound Forgeで録音してみることにした。
ここでGrooveミュージックで再生したWAVファイルと、それを録音したオーディオ信号のWAVファイルが完全一致すればビットパーフェクトが実現できたこととなり、カーネルミキサーを回避できたことが証明できる。そのビットパーフェクトが実現できているか、efu氏開発のソフトWaveCompareを使って比較してみた。しかし、残念ながらまったく一致しないようだった。
もしかして設定などが誤っているのではないか、ボリューム設定が間違っているのではないかと、すべての音量を最大にするとともに、JRiver Media Centerでも音量をいじれないようにするなど、確認しては、何度も実験を繰り返したが結果は同じとなってしまった。
そこで、Grooveミュージックで再生する楽曲の頭に1サンプル分だけ目印となるフラグを立てて、Sound Forgeでキャプチャした音と比較できるようにするとともに、片方の位相を反転させて重ねてみた。
これによって差分が分かるはずなのだが、小さなノイズが入っているように見受けられる。それを拡大してみると、どうも見覚えのある差分が出てきてしまった。つまり、カーネルミキサーによるリミッターが効いた際の挙動であり、ピークを打つところで、リミッターが作動し、音が変化してしまっているのだ。
というわけで、結構時間をかけて実験してみたが、結果はJRiver Media Centerを経由してASIO出力をしても、結局カーネルミキサーを回避することはできなかった。もっとも、前述の通り、これをエフェクトとして使うことはできるので無駄ではないし、そもそもプレーヤーソフトとして非常に優秀なものなので、十分価値はあるのだが、カーネルミキサー問題を解決できるツールというわけではなかった。やはり、マイクロソフトに抜本的な解決を期待するしかないのだが、これまでの動きを見る限り、それは難しそうなのが残念なところではある。