アバターから マイク音声とBGMを同時に出力する（VoiceMeeter Banana でカラオケする）方法 

# ◆ はじめに

　みんなが少しでも気軽に VR 空間でのカラオケなどを楽しむことができたらと思い、なるべく簡単に環境を実現できるよう、今回の記事を書くことにしました。これだけあれば完璧...とまでは言いませんが、少なくともみんなでカラオケ楽しむには十分な基礎が作れます（ソフトウェアやハードウェアを追加することで使い方を発展させていくこともおそらく可能です）。

# ◆ 注意事項

　ここで説明している方法では、導入以降は VoceiMeeter Banana が PC の音声管理に大きく関わるようになるため、音声の入出力には VoceiMeeter Banana の起動が必要です。これはソーシャル VR アプリが起動していない場合にも同様です。

# ◆ 準備

　追加機材などは必要ありません。ここで紹介するのは無料で利用できるソフトウェアを導入するだけです。


## ■ ハードウェア
 
* PC（Windows 10。Pro/Home は問わず）
* 音声入力機器（マイク）
* 音声出力機器（ヘッドホンもしくはスピーカー）

音声入出力機器は Oculus Rift などの HMD で問題ありません。
デスクトップモード／ VR モードのいずれでも適用可能です。

## ■ ソフトウェア

* VB-Audio VoiceMeeter Banana（2019/10/22現在：v.2.0.5.0）
* ソーシャル VRアプリ（cluster, VRChatなど、要インストール済み）
* 音楽再生アプリ（今回は Webブラウザで YouTube を行う）

音楽再生アプリは PC 上で音楽再生ができれば何でも構いません。

# 設定手順

※ <font color="Green">緑色のテキストで記した内容は詳細説明なので、とにかく機能を実現してみたい、そこまでの情報は必要ないという方は、読み飛ばして問題ありません。</font> 

## ■ アプリのインストール
### ▼ VoiceMeeter Banana のインストール

#### 1. VoiceMeeter Banana のダウンロード
VoiceMeeter Banana の [公式ページ](https://www.vb-audio.com/Voicemeeter/banana.htm) から Voicemeeter 2.0.5.0 (EXE file) をダウンロードします。
リンク先で "Install" と書かれたオレンジ色のボタンを左クリックすると VoicemeeterProSetup.exe のダウンロードが開始されます（2019/10/22 現在）。

#### 2. VoiceMeeter Banana のインストール
インストーラの指示に従ってアプリをインストールします。version 2.0.5.0 では Install ボタンをクリックするだけなので、特に迷うところはないと思いますが、インストール後には必ず PC を再起動してください。

#### 3. VoiceMeeter の追加デバイスを確認
VoiceMeeter Banana をインストールすると、下記の仮想デバイスがインストールされます。仮想デバイスが無効になっている場合は有効にします。

　(1) [Windows の設定]-[システム]-[サウンド]の画面を開いて、関連設定の欄から "サウンドコントロールパネル" を選択します。
　(2) 表示されたサウンドコントロールパネルの再生タブと録音タブを切り替えて、下記のデバイスが追加されていることを確認してください。
　(3) 追加されたデバイスが無効になっている場合は、右クリックでポップアップメニューを呼び出して、"有効" を選択してください。

* 再生デバイス（仮想入力デバイス）
 * VoiceMeeter Aux Input（VB-Audio VoiceMeeter AUX VAIO）
 * VoiceMeeter Input（VB-Audio VoiceMeeter VAIO）
* 録音デバイス（仮想出力デバイス）
 * VoiceMeeter Aux Output（VB-Audio VoiceMeeter AUX VAIO）
 * VoiceMeeter Output（VB-Audio VoiceMeeter VAIO）

<img width=800 alt="サウンドコントロールパネル.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104932/0d8737ec-2265-8619-3aad-04d3c5f0199d.png">
<font color="Green ">
・VoiceMeeter Banana の仕組みは単純です。VoiceMeeter Banana の入力として仮想入力デバイスが、出力として仮想出力デバイスが機能します。仮想デバイスは各デバイスの入出力として自由に設定できるので、VoiceMeeter Banana は、その入出力を奪って入出力などを管理することができます。VoiceMeeter Banana は、仮想デバイスだけでなく、物理デバイスも監視することができるので、アプリのBGMに合わせてマイク音声を同時に出力するようなことも可能になります。
</font>

## ■ OSの設定
### ▼ 既定の音声デバイスの設定

OS が標準で使用する音声デバイス（既定のデバイス）として、前項で追加された仮想デバイスを指定します。

　(1) [Windows の設定]-[システム]-[サウンド] の画面を開いて、出力の欄から出力デバイスを、入力の欄から入力デバイスを、以下の通り選択してください。

* 出力デバイス
 * VoiceMeeter Input (VB-Audio VoiceMeeter VAIO)
* 入力デバイス
 * VoiceMeeter Output (VB-Audio VoiceMeeter VAIO)

<img width="800" alt="サウンド1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104932/3505afb6-7267-909d-5fe3-39b5a9c40cb8.png">
<font color="Green">・既定の出力デバイスに仮想入力デバイスである VoiceMeeter Input (VB-Audio VoiceMeeter VAIO) を指定することで、出力デバイスを既定としているアプリの音声はすべて仮想入力デバイスへの入力となり、VoiceMeeter Banana に渡されることになります。
・既定の入力デバイスに仮想録音デバイスである VoiceMeeter Output (VB-Audio VoiceMeeter VAIO) を指定することで、入力デバイスを既定としているアプリの音声はすべて VoiceMeeter Banana から渡された仮想出力デバイスの出力となります。</font>

### ▼ 音楽再生アプリの出力デバイス設定

音楽再生アプリの出力デバイスを既定ではない、もうひとつのインストールされた仮想入力デバイスに設定します。

　(1) [Windows の設定]-[システム]-[サウンド] の画面を開いて、サウンドの詳細オプションの欄から "アプリの音量とデバイスの設定" をクリックします。
　(2) 表示されたアプリの音量とデバイスの設定の音楽再生アプリ（今回の例では Mozilla Firefox）の出力デバイスを以下の通り変更します。

・出力（Mozilla Firefox：音楽再生アプリ）
　・VoiceMeeter Aux Input (VB-Audio VoiceMeeter AUX VAIO)

<img width="800" alt="アプリの音量とデバイスの設定.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104932/c3e0d1f1-94ad-e423-7090-7582050694e4.png">
<font color="Green">本記事の手法は、他の人に聴かせたい音声と、聴かせたくない音声の入出力デバイスを２系統に分けてしまい、必要に応じて聞かせたい音声のデバイスだけ出力を有効にしようとするものです。上記では、聴かせたい音声である音楽再生アプリの出力を、既定の出力デバイスではない VoiceMeeter Aux Input (VB-Audio VoiceMeeter AUX VAIO) に切り分けて出力させました。その他のアプリの出力はすべて既定のデバイスとして設定されているので、聞かせたくない音声として扱われます。</font>

## ■ Steam の設定

### ▼ SteamVR のデバイス設定
SteamVR は起動時に既定のデバイスを変更する機能を持っているので、これを無効化します。

　(1) SteamVR を起動します。
　(2) システムトレイの SteamVR ステータスのアイコンを左クリック、 ポップアップメニューから[設定]を選択します。
　(3) 表示された SteamVR の設定の、画面左のメニューからオーディオを選択します。
　(4) 設定を以下の通りに変更します。

 * オーディオ出力デバイス
  * Other : Default
 * オーディオ入力デバイス
  * Other : Default
 * デバイスにオーディオをミラーする
  * チェックを外す（ミラーしない）

<img width="640" alt="SteamVR1.8の設定.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104932/a8f3e431-9572-4ef0-1aa0-9d82b47a0007.png">

## ■ OSの再起動

この時点で設定が確実に反映されるよう、OSを再起動してください。
<font color="Green">
あくまでも経験則ですが、音声デバイスの変更は反映タイミングが不明確な部分があります。適切なデバイスを選択しているつもりが、直前まで選択していたデバイスとして動作したり、あるいはまったく意味不明に動作したり、明らかに提示された設定のデバイスとは異なる動作を起こす場合が多々あります。このため状況の把握が困難で音声周りの設定を難しいと感じさせる要因にもなっているように思われます。したがって、多少面倒でもOSレベルでの変更を行った後など、デバイスの変更を正しく反映させたい場合には、OSを再起動するのが無難と考えます。
</font>

## ■ VoiceMeeter Banana の設定

VoiceMeeter Banana アプリを起動して、設定を変更します。

### ▼ HARDWARE OUT の設定

ヘッドホンやスピーカーなど自分が音声を聴く（モニタリングする）ための音声出力機器を設定します。A1,A2,A3 と３台までのハードウェアを設定することが可能です。今回は例として "A1" に ヘッドホンを設定してください。

　(1) [HARDWARE OUT]の "A1" ボタンを右クリック、ポップアップメニューから出力デバイス（音声出力機器）を選択します。WDM, KS, MME の３種類がありますが、通常はWDMのデバイスを選択してください。
　(2) 複数の音声出力機器を使用したい場合は、"A2", "A3" にそれらを追加してください。

<img width=800 alt="banana1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104932/487e5600-1016-ed82-2ef8-9d472ebaef41.png">

HMD を "A1" に、デスクトップ利用時のスピーカーを "A2"もしくは "A3" に設定しておくと便利です。
<font color="Green">
・WDM は Windows の標準的なドライバ。VoiceMeeter では WASAPI として扱っているらしい。遅延が少ない。
・KS はWASAPI排他モードと原理的には同じらしい。一昔前には相性問題が酷かったようだが、現在どうなのかは不明。
・MME はWindows3.0 の頃からある古参のオーディオドライバ。
</font>
### ▼ MASTER SECTION の説明
最終的な出力先での音量などを示す情報です。A1, A2, A3, B1, B2 の５つがあり、内容は以下のとおりです。特に設定の必要はありません。

* A1：前述の [HARDWARE OUT] で "A1" に設定した音声出力機器に出力される音声の情報です。今回はヘッドホンが設定されている。
* A2：前述の [HARDWARE OUT] で "A2" に設定した音声出力機器に出力される音声の情報です。
* A3：前述の [HARDWARE OUT] で "A2" に設定した音声出力機器に出力される音声の情報です。
* B1：VoiceMeeter Output(VB-Audio VoiceMeeter VAIO)として出力される音声の情報です。ここに集約された音声が ソーシャルVR への入力音声となります。
* B2：VoiceMeeter Aux Output (VB-Audio VoiceMeeter AUX VAIO)として出力される音声の情報です。今回はどこにも設定されていません（どこの入力にもなっていません）。

<img width="800" alt="banana2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104932/ace434e4-5a01-d790-2d39-6ddb611b076e.png">
<font color="Green">
A1, A2, A3 は、あくまでもモニタリング用なので、どのように操作してもソーシャル VR への影響はありません。一方、B1 はソーシャル VR への出力そのものなので注意してください。
</font>

### ▼ HARDWARE INPUT

音声入力機器を設定します。[HARDWARE INPUT1], [HARDWARE INPUT 2], [HARDWARE INPUT 3] の3つのデバイスを登録することができます。今回は例として [HARDWARE INPUT 1] にマイクを設定してください。

　(1) [HARDWARE INPUT 1] の "Select Input Device" を右クリック、ポップアップメニューから入力デバイス（音声入力機器）を選択します。WDM, KS, MME の３種類がありますが、通常はWDMのデバイスを選択してください。
　(2) その他に音声入力機器を登録したい場合は、"A2", "A3" に "A1" 同様に登録をしてください。
<img width="800" alt="banana3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104932/366e988e-c5b0-0c51-b68f-13d66cfaeafd.png">
音声入力機器（マイク）を設定しただけでは、マイク入力の音声はまだVoiceMeeter Banana 内に入力されただけです。ソーシャル VR アプリに渡されるように、以下の操作で既定の入力デバイスへの入力を有効にします。

　(1) [HARADWARE INPUT 1] の "B1" ボタンを押下して有効にします。

マイクに向けて発話すると、[HARDWARE INPUT 1]の音量メーターと、[MASTER SECTION]の "B1" の音量メーターが同じように変動することを確認してください。この時点では音声そのものは聞こえません。

<font color="Green">
[MASTER SECTION] の項目で説明した通り、"B1" は VoiceMeeter Output(VB-Audio VoiceMeeter VAIO) であり、既定の入力デバイス として指定された仮想出力ドライバです。[HARDWARE INPUT 1]の "B1" を有効にした時点で、マイク音声は既定の入力デバイス、すなわちソーシャル VR に渡されることになります。
</font><font color="Green">
 [HARDWARE INPUT 1] の "A1" ボタンを有効にすると、マイク音声を "A1" に出力することになるので、"A1" の音声出力機器であるヘッドホンで聞くことができますが、通常は発話の邪魔になるだけなので無効にしておきます。もちろん、"A2","A3" にスピーカー等が設定されていれば、同様にスピーカーで音声を確認することができます。
</font>

### ▼ VIRTUAL INPUTS

* Voicemeeter VAIO の設定
VoiceMeeter Input(VB-Audio VoiceMeeter VAIO)への入力情報です。すなわちソーシャル VR の音声を含むこの音声は、モニタリングだけできれば良いはずなので、以下の操作で音声出力機器への出力を有効にします。

　(1) ソーシャル VR アプリを起動して、音声出力があるはずの状態にする。
　(2) [Voicemeeter AUX] の "A1" ボタンを押下して有効にします。誤って [Voicemeeter AUX] から音声が出力されていないかを確認します。
　(3) [Voicemeeter AUX] の "A1" ボタンを押下して無効にします。　
　(4) [Voicemeeter VAIO] の "A1" ボタンを押下して有効にします。

この操作により、"A1" に設定した音声出力機器（ヘッドホン）からソーシャル VR の音声が聞こえるようになります。ヘッドホンから聞こえてくる音声の内容、[Voicemeeter VAIO] の音量メーターとの同期を確認してください。
<font color="Green">
"B1" ボタンを押下して、この音声を既定の入力デバイスに出力してはいけません。ソーシャル VR の音声を含むこの音声を ソーシャル VR に流し込むとループバックが発生してしまいます。</font>
<img width="800" alt="banana4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104932/2f14563c-21e7-9f6e-4365-0cc1b3e3a98f.png">

* Voicemeeter AUX の設定
VoiceMeeter Aux Input(VB-Audio VoiceMeeter Aux VAIO)への入力情報です。すなわち音楽再生アプリの音声を含むこの音声は、少なくともモニタリングできる必要があるので、まずは以下の操作で音声出力機器への出力を有効にします。

　(1) 音楽再生アプリを起動して、音楽を再生します。
　(2) [Voicemeeter VAIO] の "A1" ボタンを押下して有効にします。誤って [Voicemeeter VAIO] から音声が出力されていないかを確認します。
　(3) [Voicemeeter VAIO] の "A1" ボタンを押下して有効にします。
　(4) [Voicemeeter AUX] の "A1" ボタンを押下して有効にします。

この操作により、"A1" に設定した音声出力機器（ヘッドホン）から音楽再生アプリの音声が聞こえるようになります。ヘッドホンから聞こえてくる音声の内容、[Voicemeeter AUX] の音量メーターとの同期を確認してください。

"A1" を有効にしただけでは、音楽アプリの音声はまだ、音声出力機器（ヘッドホン）に出力されるようになっただけです。ソーシャル VR アプリに渡されるように、以下の操作で既定の入力デバイスへの入力を有効にします。入

　(1) [Voicemeeter AUX] の "B1" ボタンを押下して有効にします。

音楽の再生に合わせて、[Voicemeeter AUX] の音量メーターと、[MASTER SECTION]の "B1" の音量メーターが同じように変動することを確認します。
また、マイクに向けて発話すると、[MASTER SECTION]の "B1" の音量メーターの変動にマイク音声の影響が表れることを確認してください。

# ◆ 操作

## ■ 運用例

基本的な運用は以下の通りになると思われます。

　(1) VoceiMeeter Banana は常時起動しておく。
　（[Voicemeeter VAIO] / [Voicemeeter AUX] の "A2" に予めスピーカーを設定しておき、デスクトップ利用時は "A1" を無効、"A2" を有効にしておく）
　(2) ソーシャル VR 使用時には "A2" を無効、"A1" を有効にする。
　(3) VoceiMeeter Banana の [Voicemeeter AUX] の "B1" は平常時は無効にしておく。
　(4) 音楽再生アプリの利用直前に [Voicemeeter AUX] の "B1" を有効にする。
　(5) 音楽再生アプリを利用する。
　(6) 音楽再生アプリで曲の終了したら、VoiceMeeter Banana の [Voicemeeter AUX] の "B1" を無効にする。

# ◆ その他

## ■ 動作が不安定でOSの設定を元に戻したいとき

設定しているうちに動きが怪しくなってきた場合には、まずは一度 OS の再起動を試してみてください。以下の通りに設定を戻してください。

　(1) "アプリの音量とデバイスの設定" にてすべてのアプリを既定に戻す。同画面内の "リセット"ボタンを押下してください。
　(2) OS を再起動する。

以上です。それでも動きがおかしく感じる場合には、一度 VoiceMeeter Banana をアンインストールして、OSを再起動してください。

# ◆ おわりに

きっかけはソーシャル VR 内で行われたカラオケイベントへのゲスト参加でした。ソーシャル VR あるあるですが、バーチャルの会場内で流れている曲は、みんなが同時に聴いているようで、実は通信の仕組みの影響でそれぞれに異なった遅延の下に聴いています。仮に歌い手がその遅延した曲に合わせたと思って歌を歌っても、その音声もまた通信の仕組みで遅延して聞き手に伝わるので、結果的には聞き手の耳には曲と歌がズレたものとして聴こえてしまいます。これを４分も５分も聞き続けるというのはなかなかの寛容さが要るものですし、それを判っていながら歌うのも相当の勇気がいるものです。こうなるともはやカラオケ大会なのか、我慢大会なのか・・・。

これを防ぐには、会場から曲を出力するのではなく、歌い手が曲と歌声を同時にアバターから出力させることが最も単純で効果的な対策だということは判っていました。仕組み自体もなんとなくは想像がついていたので、まあソフトウェアの使い方が判ればなんとかなるだろうと、今思えば高をくくっていたのです。ですが、実際にはイベント当日のほんの数時間前まで、曲と歌を合成するどころか、曲を会場に流すことすら出来ずにいました。しかも他の参加者はすでに音量の調節も済んで後は本番を待つだけといった状態でしたから、もう冷や汗ものです。それでも何とか開始までには問題を解消し、イベントは事無きを得るどころか、盛況の内に幕を下ろしました（ちょっと配信はバタバタしたけど）。苦労した分、楽しさもひとしおでした。

このイベントを通して感じたのは、楽しさはもちろんなのですが、反面、音声設定関連の準備には敷居の高さを感じずにはいられませんでした。判ってしまえば比較的単純な話なのですが、最初につまづいて諦めてしまう人も多いだろうと思います。「苦労した分、楽しさも倍増...」というのも良いのですが、言ってもカラオケですから、もっと気軽に誰もが楽しんでほしい。そう感じたのが、この記事を書いた