ASIOBridgeでWin32アプリ出力にVST Effectを掛ける

というわけで仮想サラウンドシステム猛レース(Sony VPT、Dolby HeadphoneOpenAL Soft HRTF、ffdshow HRTF、Xear3d、...)を準備していて、その過程で、Windowsアプリケーションの出力にVST Effectを掛けたいというシチュエーションが出てきた。もっとショートカットが有るかもしれないが、手元のオーディオDSPコードが大体Jackで入出力しているのでその都合上。
2chオーディオで十分なら、VSTHostはDirectSoundデバイスから直接音声を入力できる。

できること

例えば: 普通のDirectSowndアプリ(KbMediaPlayer)の出力をJackサーバ経由でVSTHost( http://www.hermannseib.com/english/vsthost.htm )に入力し、DHWrapper VST Effect経由でドルビーヘッドホンを適用する。
もっと一般的には、普通のWin32アプリケーションを、あたかもASIO入出力対応のように見せることができる。ASIO4LLのような"普通のWDMカーネルストリーミングデバイスをASIOに見せるドライバ"の逆と考えればわかりやすい。

準備するもの

ちなみに、Virtual Audio Cableのような普通のパススルーデバイスも提供している。ドネーションウェアで、ドネーションをすると更に2デバイスを入手できる。
他に適当なASIOアプリケーション。今回は、ASIOのルーティングと単純な出力のためにJack( http://jackaudio.org/ )を使った。

セットアップ

(おおきいの - http://storage.osdev.info/pub/idmjt/diaryimage/1312/neta131223l1.png )
今回は、VSTプラグインに5.1ch信号を入力したいので、C:\Program Files (x86)\Jack\32bitsのJackRouter.iniを編集し、6chデバイスにする。その後、管理者権限のコンソールでregsvr32 JackRouter.dllしてJackRouter ASIOデバイスを登録する。
また、ASIOBridgeもデフォルトでは2chなので、タスクトレイのスピーカーを右クリック→再生デバイス→"Hi-Fi Cable Input"→構成 から5.1サラウンドを選択しておく。
(ここから先のセットアップはかなり順番にセンシティブなので、オーディオシステムの電源を入れるように順序付けて行う)

  1. "Jack Portaudio"を起動し、Jackサーバを常駐させる(これにより、JackRouter ASIOデバイスが使用できるようになる)
  2. VSTHostを起動し、適当にグラフをセットアップしてRunする - Jackが勝手に接続をセットアップしてしまうので注意
  3. "Jack Control"(qjackctl)を起動し、"Connect"→"Disconnect all"
  4. ASIOBridgeを起動し、ASIO Direct(中央のボタン)を押してキャプチャモードにし、"ASIO Device"(水色のテキスト)をクリックして"JackRouter"を選択する
  5. VSTHostでDevices→WaveからJackRouterを選択し、をEngine→Runする - VSTHostはASIOを使う場合Input/Outputで同じデバイスを使うのでInputは選択できなくなる
  6. Jack Controlでスクリーンショットのように配線する
  7. 再生を開始する

応用

実はJackにはネットワークオーディオ機能があるので、これを活用するとネットワーク経由でWindowsホスト上のオーディオを転送できる。セットアップが超面倒なのであまりオススメしないが。。