見出し画像

OBS+Discord+Voicemeeterで音楽配信環境構築した話

最近、特定の少数メンバー向けにジャズの講習みたいなことをしている。試行錯誤して、OBS+DiscordGoLive+αで行こうという話になったのだが、色々環境構築がめんどくさかったのでメモ

やりたかったこと

  • 配信ツールは無料であること

  • 時間制限無し、あるいは制限60分以上の配信

  • 双方向的なやり取りが、テキスト/音声で可能(視聴者が、チャットや会話に参加できること)

  • そこそこの音質、そこそこの画質で配信可能

  • マイクの音、エレピの音、PCアプリの音を配信に乗せられること

  • 視聴者からの音声でのコメントが、配信に乗らない(自分にだけ聞こえる)こと

  • ブラウザ画面、Webカム(エレピ俯瞰撮影)、PCアプリ画面を配信に乗せられること

やりたいことを念頭に、どんなサービス/アプリを使うかをまず検討した。配信の画面を作るにあたってOBSを使おうというところまではすんなり決まったが、配信サービスについてはだいぶ決めるのに時間を要した。

配信サービスの検討

配信サービスは、音質や画質を求めるとTwitch, YoutubeLiveといった大手配信サービスが強いのだが、音声での双方向的なやり取りはできない(正確にはできるのだが、例えばDiscordなど他のツールを視聴者側に用意してもらい、その上で配信にアクセスしてもらう必要があり、視聴者負担が大きい)。

双方向性を重視するのであれば、Web会議ツールが候補となるのだが、無料のWeb会議ツールのほとんどは一回の会議時間の制限が厳しい。例えばZoomは40分まで、GoogleMeet / MicrosoftTeamsは60分まで。これらのツールはコロナの影響で一時期無制限のWeb会議を認めていたが、社会のニューノーマルへの移行に伴い、今は無料ユーザーへの制限を復活させている。一枠60分は申し分ないのだが、事前のセットアップや事後の質疑応答などで少しだけ追加時間が発生するため、やや物足りず、今回は導入を見送った。

Discord Go Liveを使おう

色々検討したのだが、結局Discrod Go Live(の画面共有機能)を使用することとした。Discord Go Liveはホスト含め10名までしかできないのだが、コロナ対応ということで一時的に50名まで拡大されている(終了時期未定)。無料枠では720p/30fpsとなるものの、時間制限はない。満足な品質ではないが、許容範囲内。今回の視聴者数は10-12名ほどなので、参加メンバー拡大キャンペーンがいつ終わるかは不透明なものの、Discord Go Liveを使うこととした。

OBSとの闘い

さて、OBS + Discordで配信をしようというところまでは決まったのだが、OBSに限らずソフトウェアの音声周りは色々と複雑である。まず、最終的にDiscordにこちらのミックスダウンした音声を送るために、何らかのinputチャンネル(マイクなりライン入力なり)を用意する必要がある。OBSだか何かで音声のミックスダウンをして、用意したinputチャンネルにこちらの音声を送り出す。ネットで調べたところ、「仮想オーディオケーブルを使い、OBSのモニターチャンネルからDiscordの音声チャンネルに音声を繋ぐと良い」という内容の記事があったので、これに従ってオーディオ環境を構築したのだが……なぜか動かない。正確には、動いていたのだが、途中で切れてしまった。さっぱりわからない(湯川学)。

現実的に解釈すれば、仮想オーディオケーブルツールが何らかの事情で落ち、それに伴って音声が乗らなくなった、というのが原因と思われる。シンプルに仮想オーディオケーブルを再起動すればよいのだが、このやり方ではそもそもPCアプリの音を乗せられないという問題があった

OBSの"コンピューター音声"について

PCアプリの音声は、基本的にOBSの"コンピューター音声"でキャッチすることになるが、これが曲者である。OBSのコンピューター音声は、「今聴こえている音声そのもの」をミラーリングして配信に乗せるものだ(たぶん)。ので、Discord通話をしながらOBSのコンピューター音声をキャッチしようとすると、当然ながらDiscrod通話の音が配信に乗る。話している視聴者からすると、自分の声がそのまま返ってくることになるので鬱陶しいことこの上ないし、ハウリングする可能性もある。

Discordアプリから出た音がそのままDiscordに流されてしまう

上記を回避するためには、Discordの通話音声と、PCアプリの音声とを別系統で管理する必要がある(例えば、オーディオインターフェースを二台用意して、片方はDiscord通話音声用、片方はPCアプリ用にする、など)。ただ、これを愚直に現実世界で行おうとすると、配信用の二台目PCを用意するか、二台目オーディオインターフェース+ミキサーを用意するか、といった大掛かりな投資が必要となる。今回は節約したかったので(エコラウンド)、PCくんには頑張ってもらうこととして仮想ミキサーツールを使うこととした
(OBSについては適当なタイミングで調べるのをやめてしまったので、もしかしたら方法があるかもしれない。知ってる人、コメント等で教えてください)

Voicemeeter Bananaを使おう

仮想ミキサーツールを最初から素直に導入しなかったのは、ひとえに設定がめんどくさすぎるから。色々できるツールは、それだけ設定項目も多くて時間がかかる上、どんなツールでも音声周りは複雑なので(二回目)、非常に動かすのに時間がかかる。とはいえ、シンプルなツールではやりたいことができないのであれば、実際複雑なツールを使いこなすしかない。そこで、Voicemeeter Bananaの登場です。

Voicemeeterはいくつかバージョンがあり、ハードウェアインプットの数や仮想インプット/アウトプットの数などで少し違いがある。これから導入しようという人は少し迷うかもしれないが、基本的にはBananaを選んでおけば問題はないと思われる。足りなければPotatoで。

Voicemeeter Bananaとの闘い

音声系アプリの例にもれず、Voicemeeterの設定は難しい。ネットの集合知にも頼りながら設定を進めた。

まず、ハードウェアインプットとしては、エレピの音とマイクの音をそれぞれ設定。持っているエレピ(正確にはシンセサイザー)のJUNO-DSには幸いなことにオーディオインターフェース機能がついているので、PCからは独立のオーディオインプットチャンネルとして見える。マイクの音は、メインのオーディオインターフェースのUR242で拾う。

バーチャルインプットおよびバーチャルアウトプットは、Bananaの場合は各二つ用意されている。Windowsの音声設定を弄り、それぞれを"既定の通信デバイス"および"既定のデバイス"に振り分ける。"既定の通信デバイス"は、Discordでの音声入力/出力に使われ、それ以外のPC音は"既定のデバイス"で入出力される。具体的には以下のように設定する。ちなみに、使っていないものもあるので四つすべてをこのように設定しなくてもきちんと動作する。

  • VoiceMeeter Aux Input: 既定のデバイス(再生)

  • VoiceMeeter Input: 既定の通信デバイス(再生)

  • VoiceMeeter Aux Output: 既定のデバイス(録音)

  • VoiceMeeter Output: 既定の通信デバイス(録音)

VoiceMeeterはAアウトプットとBアウトプットがあるのだが、Aアウトプット(正確にはA1)はリアルな音声出力装置、Bアウトプットは仮想的な音声出力装置である。自分のヘッドホンでモニターしたい音声系統(エレピ、PC音、Discord音声)はA1に流れるようにし、配信に乗せたい音声系統(エレピ、マイク、PC音)はB1に流すようにする。A1にモニターで使用する音声デバイスを選択し、あとは、Discord側でB1アウトプットに指定されている"VoiceMeeter Output"をマイクとして設定すれば、ミックスした音をDiscordに流すことができる。

Voicemeeterでの実際の設定

メインとなる問題はこれでクリアされるのだが、このままでは一つ問題が残されている。マイクのノイズがデカすぎる

マイクノイズとの闘い

まず、上記の仮想ミキサーを使用した場合、普段DiscordなりZoomなりで通話をしているときに使っているような、アプリ側でのノイズリダクション機能は使えない。エレピやPC音声の音声は自明に人の声ではないので、ノイズリダクション機能をオンにしたままではこれらの音がアプリ側で消されてしまう

そこで、Voicemeeter側でミックスするタイミングで、マイクのノイズをカットする必要がある。Voicemeeterビルトインのノイズ軽減機能は1ノブのゲートフィルターで、これでもまあ無いよりはマシなのだが、正直使いにくい。そこで、VSTプラグインの出番である。Voicemeeterから一度フィルターを通し、ノイズカットの処理を行ったうえで、Voicemeeterに音声を戻してやればよい

スタンドアロンでVSTエフェクタをホストし、Voicemeeterと連携できるツールとして、ネットを探したところMinihost Modularを使用している例があった。こちらを参考に、Minihost Modularを導入し、更なる闘いを始めた。

Minihost Modularとの闘い

Minihost ModularはImage-Line社の開発したVSTプラグインホストツールである。2014年6月にBeta版が出ており、これが最新となる。そんなもので何とかしようとするな

正直もっと良いツールはありそうな気もするのだが、今回は調べる手間も惜しかったのでそのまま。8年前のツールなので、お察しの通りVST3は対応しておらず、何ならVST2の64bitバージョンも怪しいかも、という感じ。そんなもので何とかしようとするな(2回目)。

手元にあるプラグインで、ノイズ軽減に使えそうなものを一通り読み込ませようとしたが、辛うじて読み込めたのはNative Instruments KOMPLETE 10バージョンのSolid EQ, Solid Dynamicsくらい。なんならMinihost Modularと同じ開発元の作ったFLStudio付属のFruity Limiterも動かなかった。ほかに、Neutron(3) Compressorも動かず。RX9は持っていないが、おそらく動かない。というかRX9あるならそもそもRX9スタンドアロン版とVoicemeeter連携で何とかできる気もする。知らんけど。

仕方ないので今回はSolid EQ, Solid Dynamicsで我慢。大丈夫、EQとコンプとゲートさえあれば俺らは生きていける

Voicemeeterと外部ツールの連携にあたっては、Voicemeeter側でも設定をあらかじめする必要がある。Menu > System Setting/Option で出るオプションの、最下部PATCH INSERTで、エフェクタを通したいチャンネルのパッチインサートを有効化する必要がある。このとき、左から何番目のチャンネルをactiveにしたか、気に留めておくこと。画像の例では、3番目と4番目を有効化している。

Minihostでは、Voicemeeterと連携するための各種設定を行う。まず、Preferences > Audio/MIDI > Audio > device を、Voicemeeter Insert Virtual ASIOとする。Preferences画面を抜けてメイン画面に戻り、Audio InputとAudio Outputの設定を行う。Input/OutputそれぞれにHardware I/Oの設定項目があるのだが、その両方に有効化したチャンネル番号を入れる。今回は、3番目のチャンネルを有効化したので、3を入力。4番目のチャンネルは実質的に使っていないので(モノラル音声のため)、今回は使用しなかった。

あとは、適当にエフェクタを挿して終了。ほかのスタンドアロンアプリでも同じような考え方で動くと思われるので、より良いツールがあれば今後適宜乗り換えたい。

おわりに

以上のような試行錯誤を経て、ようやくOBS + Discord + Voicemeeter Banana + Minihost Modular での配信環境が整った。今回作成した環境は他のツール、例えばYoutubeLiveなどでも生かせると思われる。音楽系の配信をしたい皆様の助けになれば幸いだ

余談だが、音楽系の配信をする上ではどうしてもレイテンシ(遅延)が気になる。現状では、PCアプリとキーボードは別系統のチャンネルで、それぞれ独自のレイテンシがあるため、「PCアプリの音に合わせてキーボードを弾く」というようなことをしようとすると、キーボードの遅延分、キーボード側の音がPC音声に対し遅れて配信に乗ることになるはずである。これを回避するためには、キーボードチャンネルのモニター用の音声と配信用の音声を分離し、それぞれ個別にバッファを設ける必要がある。ちょっと自分でも何を言ってるか今一理解しきれていないが、この問題については今後じっくり腰を据えて取り組みたい。

おまけ

現在、細々とYoutubeに自作曲や演奏動画を上げている。現状、YoutubeLive配信まで手が回っていないのだが、今年中にはチャレンジしていきたいと考えている。興味があればぜひ、チャンネル登録と高評価をお願いします!(定期)

興味があればぜひ、チャンネル登録と高評価をお願いします!(定期)


クレジット

当記事内にて、以下サイトのアイコン素材を使用しております。感謝。
無料のアイコン、クリップアートイラスト、フォト、ミュージック (icons8.jp)


気に入っていただけたらぜひサポートをお願いします! もっと良い記事を書けるよう頑張りますね!