藤本健のDigital Audio Laboratory
862回
高性能にASIO化できる? 万能仮想ミキサー「VoiceMeeter Banana」のASIO出力を検証
2020年8月17日 10:15
以前、非常に便利で万能な仮想ミキサーとして紹介した、ドネーションウェアの「VoiceMeeter Banana」(第852回参照)。
記事を公開した後、SNSなどを通じて複数の方から、「非ASIO対応のオーディオインターフェイスやサウンド機能をASIO化する上で、ASIO4ALLより高性能だ」といった情報がよせられ、気になっていた。実際のところはどうなのか、お盆休み中にASIO4ALLなどとも比較しながら試してみたので、紹介してみよう。
Windowsのオーディオドライバ問題
オーディオドライバの状況について簡単に説明しておくと、MacはCoreAudioが標準だが、Windowsは同じオーディオインターフェイス、同じサウンドデバイスであっても、複数の種類のドライバが存在する。
具体的には……
- MME
- WDM/KS
- Direct Sound
- WASAPI
- ASIO
……などが存在しており、過去にはGSIF(GigaSampler Interface)といったものもあった。
それぞれ同じレイヤーにいるわけではなく、Direct SoundやWASAPIはドライバというよりAPIの一つであるため、状況によって使えるもの、使えないものがある。またWASAPIには排他モードと共有モードがあり、どちらのモードであるかによって、動作も異なる。しかもソフトによってはWASAPIのことをWDMと表現することがあるなど、とにかく分かりにくいのがWindowsのオーディオドライバなのだ。
Digital Audio Laboratoryにおいて、過去に何度も「問題である」と指摘してきたカーネルミキサー(現在の正式名称はAudio Engine)。カーネルミキサーとは、Windowsの内部ミキサーのことだが、このカーネルミキサーを通すことで音質劣化が生じる。
Windows標準のドライバであるMME、Direct Sound、WASAPI(共有モード)においては必ずカーネルミキサーを経由して音が出るため、音が劣化するのはWindowsの大きな欠点といってもいいだろう。どう劣化するのかについては過去記事で何度も取り上げているので、そちらを参照いただきたいが、音量が最大値の0dBに近づいたときに勝手にリミッターが掛かるので、音が変質してしまうという問題がある。
この問題を避けるために登場したのが、Steinbergが提唱したASIOというドライバ。まあ、カーネルミキサーを避けるため、という表現は語弊があるかもしれない。ASIOはマルチチャンネルのオーディオインターフェイスとスムーズにやりとりできるようにするために作られた規格であり、その際カーネルミキサーは経由せず直接データのやりとりを可能にしたもの。結果として、ASIOドライバを使うことで、音質劣化を避けることができるわけだ。
ASIOと同様に、カーネルミキサーを介さず音を出力できるようにする仕組みをマイクロソフトも打ち出したのが、WASAPIの排他モード。ただしWindows標準のWindows Media PlayerやミュージックはWASAPI排他モードに対応していないため、foober 2000などの特殊なプレイヤーを入手しないと使えないというのが実情だ。
一方、CubaseやStudio One、FL Studio、Ableton LiveといったDAWが標準として使うのがASIO。シンプルで使いやすいことが大きなメリットであり、レイテンシーを小さく抑えられるのも重要なポイントとなっている。
以上のように、ASIOはさまざまなメリットがあるが、最大のデメリットは「Windows標準ではないため、メーカーがASIOドライバを用意する必要がある」という点。つまりオンボードのサウンド機能であったり、USBオーディオインターフェイスやUSB-DACにおいては、メーカーがASIOドライバを用意しない限り使えないのだ。
それを解決する手段として登場したのが、すべてのオーディオデバイスでASIOが使えるようになるフリーウェアの「ASIO4ALL」だ。MMEに被せるような形でASIO化することで、カーネルミキサーのバイパスを実現。バッファサイズも変更できるので、レイテンシーを調整することができる。
しかし、個人的にはASIO4ALLが好きではない。うまく設定できなかったり、落ちてしまったり、動作が不安定になるなど、気持ちよく使えないケースが多いためだ。ただ最近は、DAWメーカーなどがASIO4ALLに相当するものを作るようになってきた。具体的にはSteinbergのCubaseなどをインストールすると自動的に入ってくる「Generic Low Latancy ASIO」や、FL Studioをインストールする際に入ってくる「FL Studio ASIO」などだ。
Generic Low Latency ASIOは、WASAPIをASIOに見せかけるためのツールでCubase内でしか使えないが、FL Studio ASIOであれば、ほかのソフトでも利用できる汎用的なツールだ。ASIO4ALLと比較すると設定項目は少ないが、安定して動作してくれるという印象を持っている。FL Studio ASIOで設定するのは入出力ポートに何を使うか? バッファサイズをいくつにするか? というだけのシンプルな内容になっている。
やや前置きが長くなってしまったが、前述のASIO4ALLやFL Studio ASIOのようなことがVoiceMeeter Bananaでもできると聞き、今回試してみたわけだ。
VoiceMeeter Bananaでは3つのASIOドライバが選択可能
VoiceMeeter Bananaの細かい使い方は以前の記事に譲るが、同ソフトをインストールすると、プレイヤーソフトやDAWからは……
- Voicemeeter Virtual ASIO
- Voicemeeter AUX ASIO
- Voicemeeter Insert Virtual ASIO
……という3つのASIOドライバが見えるようになる。
このうちVirtual ASIOとAUX ASIOはほぼ同等のもので、このドライバに対して送った信号はVoiceMeeter Bananaの仮想入力チャンネルと仮想入力AUXチャンネルに入ってくる。WindowsのHD Audioデバイスなどを想定しているものと思うが、いずれも8chの入出力になっているのがユニークな点だ。
一方のInsert Virtual ASIOはさらに細かくルーティングできるようになっていて、22in/22outのドライバとして見えるようになっている。とはいえ2in/2outで使う上では、どれもほぼ同じ性能のものなので、ここではVoicemeeter Virtual ASIOを使うことにする。
なお、多くのオーディオインターフェイスのASIOは排他的になっており、1つのソフトで使うと別のソフトでは同時に使用できない。しかし、VoiceMeeter BananaのVirtual ASIOなどは、最大4つのソフトで同時に使うことができるため、ASIOをマルチクライアント化する上でも活用することができる。
プレイヤーソフトやDAWからは、Voicemeeter Virtual ASIOとして送り出した信号はVoiceMeeter BananaのVIRTUAL INPUTに入ってくるわけだが、その後その信号はA1、A2、A3およびB1、B2に出力できる仕組みになっている。
A1、A2、A3は物理出力であり、あらかじめHARDWARE OUTとして指定しておいたドライバへ送られる。一方、B1、B2は仮想ドライバとなっており、ソフト的に利用するバスとなっている。つまりHARDWARE OUTとしてはMMEを設定すれば、結果としてASIOドライバに対応していないオーディオインターフェイスをASIO化できる。
しかも、HARDWARE OUTにはMMEのほかに、WDM(=WASAPI)、KS(=Kernel Streaming)も設定できるので、どれを選ぶかによって、内部的に使うドライバ、設定できるバッファサイズ、レイテンシーが連動して変わってくるため、それらの変化をチェックしてみようというわけだ。
ASIO出力を試す。“ASIO4ALLより高性能”はホント?
実験には、Native InstrumentsのKOMPLETE AUDIO 2というUSB接続のオーディオインターフェイスを使った。
KOMPLETE AUDIO 2には専用ドライバが用意されており、普通はASIO4ALLなどを使う必要はない。ただ、これ自体がUSBクラスコンプライアントなデバイスになっているため、ドライバをインストールしなくてもそのまま使えるので実験素材として使うことにした。
本機を接続した状態で、VoiceMeeter BananaのHARDWARE OUTを見てみると……
- WDM:スピーカー(KompleteAudio 2)
- MME:スピーカー(KompleteAudio 2)
……という2つが表示されている。
なぜKSが見えないのか? その理由はハッキリわからなかったが、ここではWDM(=WASAPI)、およびMMEを使って試してみる。
最初に試してみたのはMME。DAWなどから音を出すと、問題なく音が出ているし、しっかりASIO経由での出力ができていることが確認できる。ただし、DAWから音を出し、ソフトウェア音源などを弾いてみると、大きなレイテンシーがあることに気づく。
System settingsという設定画面を見ると、デフォルトでのバッファサイズが1,024サンプルとなっているので、ここで大きな遅れが生じるのだ。
計算上においては……
1÷44.1kHz×1,024=23.2ms
……というレイテンシーだが、いつも使っているCentranceのASIO Latency Test Utilityで測定してみたところ、46.46msと表示され、ちょうど倍の数字となった。入力と出力それぞれでバッファを通すので、この数値になったのだと思うが、理論通りの結果になっているのはちょっと驚いた。
このバッファサイズはVoiceMeeter Bananaの設定画面で変更可能になっている。
1,024という数字をクリックすると、いちいちアラートが表示されるのが、ちょっと面倒なところだが、最小で480サンプルまで設定できる。480にしても問題なく動作し、音が途切れるようなこともない。この状態で再度テストしてみると、43.56msという結果であって、1,024時と大きく変わらない。ここがMMEを使うボトルネックなのかもしれない。
では、WDMに切り替えるとどうなるか? こちらはデフォルトで512サンプルとなっており、理論値的には1,024の半分の11.6msという計算だが、これを測定してみた結果は先ほどのMMEの場合とほぼ同じ46.46msとなった。
なぜこうなるのかはわからないが、WDMではバッファサイズをもっと小さくできるので、これも試してみた。少しずつ小さくしていき160サンプルでは、14.54msというところまで縮めることができた。が、なぜか128サンプルを選んでも、1,024サンプルが設定されてしまい160サンプルが限界。これがレイテンシーにおいてはVoiceMeeter Bananaの最小値ということのようだった。
では、これをASIO4ALL、FL Studio ASIOでどうなるのか、同じ44.1kHzで実験してみた。
まずASIO4ALLだが、デフォルトでのバッファサイズは512サンプルとなっており、詳細画面を見てみるとWaveRTなどほかにもさまざまな設定項目がある。この状態でレイテンシーをテストしてみると46.67msとなった。
右側のパラメーターは今回動かさないが、バッファサイズを縮めることができる。これを128サンプルまで縮めると31.72msとなったものの、さらに下げていくと、うまく動作しないのか64サンプルでは72.24msになってしまった。
もう一つ試してみたのがFL Studio ASIO。こちらもデフォルトでは512サンプルとなっていたので、そのまま測定してみると11.66msとなった。そこそこいい値で動いているし、この状態でDAWを使っても音が途切れるようなこともなかった。
では、このバッファサイズを下げるとどうなるか? 256サンプルというものがあったので、実験してみたが、なぜかほぼ同じ数字になった。やはり不可解なところはあるが、条件によって設定できるバッファサイズと設定できないバッファサイズがある、ということなのかもしれない。
最後に使用したのは、Native Instrumentsが出しているKomplete Audio 2用のメーカー純正ドライバだ。
デフォルトの512サンプルでテストしてみると、レイテンシーは35.12ms。しかし、設定を最初で8サンプルまでにできるので、これで実行してみると、5.69msという結果を得ることができた。8サンプルで音切れなどが起きないか、念のためStudio Oneで試してみたところ大丈夫だし、レイテンシーはまったく感じない。さすがメーカー製といったところだろう。
以上、いろいろと検証してみたが、いかがだっただろうか。VoiceMeeter Bananaは非常に柔軟なシステムではあるけれど、バッファサイズを縮めるという意味では、そこまで大きな威力はないのでは、という印象だ。
一方でほとんど使ったことのなかったFL Studio ASIOは、オーディオインターフェイスによってはASIO4ALLよりもいい結果となる可能性もありそう。やはりメーカーが用意してくれるASIOドライバを使うのがベストなのは間違いないが、もしない場合はいくつか試してみて一番相性のいいものを選ぶのがいいのかもしれない。