配信の音声セットアップを自動化した話(Voicemeeter)
以前、OBSとVoicemeeterで配信環境を整えた、という記事を書いたのだが、
実際にしばらく使ってみて、以下の問題が生じた。
Voicemeeter用エフェクトのホストツール(Minihost)がたまに機能しなくなる(ノイズが出る)。ホストツールを何回か再起動すると直る
windowsの「既存のデバイス」等を一々変更して最後にまた戻すのがダルい
各種配信用ツールを一々立ち上げるのがダルい
上記問題がおよそ対応できたので、その改善方法についてnoteを書いていく。
MinihostからCantabileへ
Voicemeeterでマイクのノイズ軽減処理を行うにあたり、VSTホストプラグインが必要となる。今まではImage-LineのMinihost Modularを使用していた。理由としてはVoicemeeterが公認だから(各種ドキュメントにMinihost Modularの画面が登場している)。一方で、以下の問題があり、個人的にはあまり納得がいっていなかった。
2014年6月(8年前)のBeta版が最新。古い
対応していないプラグインが多い。少なくともVST3は対応していない
オーディオデバイスのリフレッシュが画面から一発ではできない(メニュー等からいけるかは未確認)
ネット記事では、Voicemeeter用のVSTホストプラグインとしてCantabileというツールを使用している記事もあった。今回上記の問題を解消するべく、Cantabileへの乗り換えを試してみたのだが、これが思いのほか良かったので紹介する。
いくつかエディションがあるが、無料のLite版でも今回の目的は達成できた。ユーザー登録のみで使うことができる。各種設定はMinihostと同様で、Voicemeeter Insert Virtual ASIOのチャンネル指定等も考え方は同じ。詳しい設定方法は割愛。
嬉しい点としては、
比較的新しいツールのため、VST3も使える。iZotope RX8 elementsが動いた
画面UIから一発でオーディオデバイスのオンオフ(=再起動)ができる
一方、困った点としては、
WavesのQシリーズEQ使えたが、再起動するときにプラグインの読み込みに失敗した
UIが不必要にデカく、使い勝手が悪い
Wavesプラグインの使用不可問題については、もともとWavesプラグインの作り(互換性周り)が経験的に若干怪しいので仕方ない。UIのデカさはセットアップ時のみの問題なので、一度エフェクト類を組んでしまえばそこまで気にならない。
再起動のしやすさについては、トラブルシューティングの迅速化に繋がるため非常にありがたい。RX8が動く点についても申し分なし。
ちなみに、RX8のスタンドアロン版とVoicemeeterを直接繋ぐ方法も試したのだが、RX8が無限に落ち続ける結果となったので断念した。おそらくVoicemeeter側の互換性の問題と思われるが真相は不明。
「既定のデバイス」変更をコマンドラインから行う
Voicemeeterとの音声系ルーティングのため、Windowsの既定のデバイス等を一々変更しなければならず非常にダルいという問題があった。
そもそも必要以上に変更をしていた気がしていたので、改善の名目で「どの作業が必要か」を洗い出した。
まず、録音デバイスについては、それぞれ個々のツールで個別に設定をしていたため、既定のデバイスを指定しているものは存在せず、設定変更不要。Discordも、常にVoicemeeter Outputを指定する設定になっていた。
既定の通信デバイス(再生)について、こちらもDiscord上は常にVoicemeeter Inputを指定する設定になっており、設定変更は不要。
よって、実質的に以下の一項目のみを変更すれば良いと分かった。
既定のデバイス(再生)をコマンドライン上から変更できれば、バッチファイルにまとめるなどして自動実行/ワンクリック実行も可能になる。方法が無いか調べたところ、AudioDeviceCmdletsなるツールを見つけた。
このツールはMITライセンスのツールで、既定のデバイス(再生)および規定のデバイス(録音)をpowershell上で変更可能とするものである。
ドキュメントを一読したが、既定の"通信"デバイスについてはおそらく設定不可。既定の通信デバイスも変更したい場合は、例えばDiscordのconfigファイルを変更するなどして対応したい。Discordのconfigファイルにオーディオデバイス情報書かれてるか知らんけど。
AudioDeviceCmdletsの使い方や導入方法については、以下の記事が詳しい。本noteでは割愛。
晴れてCLIから「既定のデバイス」を変更できるようになったので、バッチファイルを書き、各種ツールもついでに立ち上げるようにした。
バッチファイルの記載例
rem #既定のデバイスを変更
powershell -Command "Set-AudioDevice -ID '{xx}.{xxx}'"
rem #各種ツールの立ち上げ(OBS, Cantabile等)
start xxx.exe
rem #Voicemeeter立ち上げ
call voicemeeterpro.exe
rem #Voicemeeter終了後、既定のデバイスをもとに戻し、終了
powershell -Command "Set-AudioDevice -ID '{xx}.{xxx}'"
exit
バッチファイルをクリックすれば各種配信用ツールが立ち上がり、オーディオ設定が変更される。Voicemeeterを終了すれば、オーディオ設定が元に戻り、バッチ終了。
バッチファイルの書き方作法等には詳しくないので、あくまで参考とするに留めてほしい。cdコマンド、オーディオデバイスのID等は略。
AudioDeviceCmdletsのコマンドではオーディオデバイスのインデックスによる指定もあるのだが、お察しの通りオーディオデバイスの抜き挿しで簡単にインデックスが変わってしまうため、今回はID指定とした。
各種ツールの立ち上げ処理をバッチファイルに組み込むことで、OBSやCantabile等の付属ツールも一括で立ち上げている。なおCantabileは、起動時に所定の状態(マイクノイズ軽減のためのプラグインセット)を読みこむ設定にしてある。これにより、バッチファイルを実行するだけで配信が始められる状態まで持っていける。
各種ツールはstartで、Voicemeeterはcallで呼んでいる。こうすることで、各種ツールを立ち上げたのちにVoicemeeterが立ち上がり、バッチファイル自体はVoicemeeterの終了を待機する状態となる。配信が終わった後、Voicemeeterを終了すれば、バッチファイルに処理が戻り、「既定のデバイス」を以前の状態に戻したうえでバッチファイル自体も自動終了する。地味だがこういう「終わった後元に戻す」系の処理は忘れがちなので自動化できるのはありがたい。
Voicemeeter以外にも終了を待機したい処理がある場合は、別バッチファイルを呼び出す等して平行処理を行えば問題ないかと思われる。知らんけど。
おわりに
自動化でだいぶ楽になった。自動化最高!
……一方、レイテンシの問題はまだ道筋が見えていないので、今後考えていくこととする。
おまけ
現在、細々とYoutubeに自作曲や演奏動画を上げている。現状、YoutubeLive配信まで手が回っていないのだが、今年中にはチャレンジしていきたいと考えている。興味があればぜひ、チャンネル登録と高評価をお願いします!(定期)
気に入っていただけたらぜひサポートをお願いします! もっと良い記事を書けるよう頑張りますね!