OBS StudioとSYNCROOMによる仮想カメラ・仮想マイクを使ってオンライン会議に出席する

# はじまり
普段、私はOBS Studioを使ってZoomだとかGoogle Meetだとかの会議に出席しています
理由はカメラ画質を向上させるためです

* 稀に発生する電源周波数のカメラノイズが入ってしまう
* 逆光で真っ暗な画面になってしまった結果、表情どころか顔がどこにあるかもわからない
* 明かりをつけても部屋が暗くて全体的に見辛い
* ~~色調補正をかけてちょっと良く見せたい~~

まぁいろんな理由があって利用しています

# ふと思い立った
最近、弊社内はテレワーク真っ最中で事務所に出社する人数は少なく、
誰かの声をマイクが拾って音が聞こえにくくなる問題は減ってきました

それでも気になる時はとんでもなく気になるし、
何なら自分がそんなことをしていないのか不安になる時もあります
誰かが後ろで会話してる声が会議中に入ると大分ノイズになりますし
コード付きのイヤホンマイクであれば服にこすれる音が結構ノイズとして入ってきます

何か上手いこと解消する方法は無いのか・・・
仮想カメラみたいに余分なノイズを排除できたら・・・
と考えていたところ

・・・・・
・・・・・
んん？

**そうか、仮想マイクを使えばいいのか！！**

ということで、環境音とか同じ空間にいる人の声とか~~親フラとか~~
とにかくノイズが気になる人向けに今回のドキュメントが役に立つと幸いです

# 仮想カメラやら仮想マイクやら、それって何なの？
自分も上手いこと理解できているのかわかりませんが
ざっくり言うと
**「通常の入力から出力までの間に仮想的な入力、出力環境を作ってリアルタイムフィルタを適用させられる」**
というものです

図解するとこんな感じ
(自分も深く理解しているわけではないので間違っている可能性があります)
![キャプチャ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/458fcecf-86f4-13e2-6267-2187d57f8a7a.png)

# 事前準備
* [OBS Studio](https://obsproject.com/ja/download)<br>
**これは必須です**

**Version 26(released: 2021/1/6)以降のOBS Studioは仮想カメラ機能が標準で搭載されているため**
**従来のVirtual Camプラグインの導入は不要です**
しかし、仮想オーディオデバイス(仮想マイクに利用するデバイス)は基本的に自分で準備しなければなりません

仮想オーディオデバイスはYAMAHAさんが出している[SYNCROOM](https://syncroom.yamaha.com)がおススメです
NETDUETTO β2の後継となるこのソフトは、インストールしてすぐに仮想オーディオデバイスを利用することができます
インストール時、`標準（Yamaha SYNCROOM Driverもインストールする）`という項目を選べば問題ありません

SYNCROOMの仮想オーディオデバイスは少し特殊で、上図の仮想入出力が合体したようなものに仕上がっています
そのため、VB-Cableなどとは異なり仮想オーディオデバイス1つのみで仮想マイクを完成させられます

## 注意
**SYNCROOMに付随する仮想オーディオデバイスはMACで使用することはできません**
MACで仮想オーディオデバイスを利用する場合には
VB-Audioさんが出している[VB-Cable](https://vb-audio.com/Cable/index.htm)、[Voicemeeter Banana](https://vb-audio.com/Voicemeeter/banana.htm)がおススメです

Voicemeeter Bananaに関しては仮想ミキサーと呼ばれるソフトで、**音の入出力制御やドライバレベルでの音調整が可能**なものです
ただし、こちらを今回の設定と併用しようとすると難易度が跳ね上がるので
初めはVB-CableかSYNCROOMのどちらかが良いと思われます

なお、VB-Cableで2個以上の仮想オーディオデバイスを利用するためには寄付金が必要です
無償で公開されているものなのでぜひ寄付しましょう

# 早速設定しよう！
## 仮想カメラの設定

### 1. OBSでシーンを作成する
画面左下に「シーン」という項目があるので、そこの＋ボタンからシーンを追加します
![qiita1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/dd647dfb-dfc5-9ce2-160a-9fc2e3b7e607.png)


### 2. ソースにカメラ入力デバイスを追加して好きなフィルタを適用する
シーンの右に「ソース」という項目があるので、そこの＋ボタンから追加します
ソース選択時、「プロパティ」と「フィルタ」という項目がすぐ上に表示されるので、そこからフィルタ設定を行います
ちなみに、同じ効果のフィルタは重複するので重ねまくるとすさまじい効果量になります
![qiita3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/7bba4bd3-6d51-920c-8744-f817350c5cb8.png)
![qiita4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/916f1862-e9aa-d233-a6a6-346ce0186dfb.png)


以下、用語の解説です
<pre>LUTを適用                ## 入力色に対応する出力色を参照しているテーブルを自主作成している時のみに利用可能．入力対象の映像色を変更させることができる

イメージマスク/ブレンド    ## 入力対象に対して画像を合成させる．別途作成した画像にそって表示領域をクロップすることなどの用途が多い

カラーキー・クロマキー     ## 指定した色に応じて入力対象の背景を透明化する．GBを使用していたり字幕等の黒背景を消したい時などに使用可能
クロップ/パッド           ## 入力対象をトリミングする．Alt+ドラッグで自由に幅変更はできるので細かく操作したい時向け

シャープ                 ## 入力対象に対して先鋭化を施す．0に近づくほどぼやけて遠のくほどきめ細かく表示される

スクロール               ## 指定速度で縦横に入力対象を動かす．テキストと併用するのが一般的

スケーリング/アスペクト比  ## 指定した画面サイズ、アスペクト比に沿って入力対象の表示領域を調整する

ルマキー                 ## 特定の明るさを透明化する．最大・最低輝度が適用範囲、グラデーションが透明化効果を上げる範囲を調整する

レンダリング遅延          ## 名称そのまま描画速度にラグを持たせることができる．エフェクトの表示時間調整やリアルタイム同期を嫌う場合に適用

色補正                   ## 一般的な画像加工に近いことができる．「ガンマ・コントラスト・輝度・彩度・色相シフト・色フィルタの不透明度・色フィルタ」を変更できるが、色フィルタは色ソースから設定する方が効率的
</pre>
### 3. コントロールの仮想カメラを開始を押下し、オンライン会議のビデオ入力をOBS-VirtualCameraにする
オンライン会議ソフトのオプションでビデオ入力を`OBS-VirtualCamera`にすると画面が確認できるはずです
![qiita5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/001769c9-73c1-97bf-b420-79a2fdbbc03d.png)
![qiita6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/3cf98074-d047-584f-cff3-8dcadb696327.png)


## SYNCROOMによる仮想マイク設定
### 1. Yamahaの公式サイトからSYNCROOMをインストール
この時、仮想オーディオデバイスも一緒にダウンロードするようにしてください
その後、サウンド設定でSYNCROOMのデバイスが存在することを確認します
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/30bc5a89-4ec4-1ef3-d3e7-6655da6a744f.png)

### 2. OBSでシーンを作成する
先ほど仮想カメラのところで作成したシーンで問題ありません
作っていない方は作りましょう

### 3. コントロールタブにある設定から、画面内にある詳細設定欄のモニタリングデバイスをSYNCROOMのラインにする
この部分を別の仮想オーディオデバイスに変えることができます
その際、I/O Interfaceが正しく存在することを確認しましょう
![qiita12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/4b4e9b82-b05f-1a07-eac0-54024b3d01bb.png)


### 4. 音声ミキサーに表示されている「マイク」の歯車アイコンを押下し、音声モニタリングをモニターと出力に変更する
この設定はOBSを起動する度に(あるいは使用しているデバイスが認識されなかった場合に)モニターオフになります
起動後、モニターと出力になっている確認しましょう
![qiita14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/89c953af-5b42-e52d-e626-112abba8e1d4.png)
![qiita15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/67d4a7ca-39fe-bb94-2174-1bfb1fce0190.png)


### 5. ソースに音声入力キャプチャを追加して好きなフィルタを適用する
デバイスは使用しているデバイスのマイクにします
![qiita17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/3462d474-e1fe-49ab-3e3f-a323e699f7e6.png)
![qiita16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/fbb060bc-3872-2be1-b7a2-5b28a6dce75b.png)

**出力マイク側の音声モニタリングをモニターと出力にした状態で詳細設定欄のモニタリングデバイスを使用しているデバイスに変更**すると
自分の音声がどのように聞こえているのか確認ができます

以下、音声フィルタの簡単な解説です

```
VST 2.x プラグイン   ## VST(Virtual Studio Technology)の略、DTMをやっている人なら知っている用語
					## DAWと外部のソフトウェアとの連携を行うためのもので、使用するDAW、オーディオデバイスが対応していれば使用可能

エキスパンダー		## 閾値以下の音量を指定した比率分減少させる、下記のノイズゲートのような役割を持つ
					## 閾値以下の場合、アタックタイムの時間が経過してから比率分減少させ、閾値以上になるとリリースタイムの時間が経過してから元に戻る
					## エキスパンダーと上手く組み合わせることで喋っている途中にも音を減衰させて環境音等のノイズを除去できる

ゲイン			　  ## 設定した数値分に音量を増減させる

コンプレッサー		## 閾値以上の音量を指定した比率分減少させる
					## 閾値の超過後、アタックタイムの時間が経過してから比率分減少させ、閾値以下になるとリリースタイムの時間が経過してから元に戻る

ノイズゲート		   ## 閉鎖閾値以下開放閾値以上の音量を完全にシャットアウトする
					## 動作開始時間は消音するまでの時間、保持時間は消音中の時間、解除時間は消音状態を解除するまでの時間
					## 閾値以内の音量で喋っている場合には環境音等のノイズは入ってしまうのが難点

ノイズ抑制		      ## マイクに入る砂嵐のようなノイズを除去する。いわゆる、ノイズキャンセリング機能
					## 百均のマイクでも使わない限り、基本的にノイズはほぼ入らないので付けなくても良い

リミッター		      ## 閾値以上の音量をコンプレッサー以上に減少させることで、急な叫び声などで音割れが発生するのを防ぐ

極性を反転する		## 音の位相を反転させて、疑似的なサラウンド機能を追加する
					## 使用するオーディオデバイスにこの機能が無い場合に適用させる
```

音声フィルタの翻訳途中でこんな素敵なサイトさんを見つけたので丸投げします
参考サイト欄にも記載していますが、今までに述べたフィルタ設定などを事細かに記載してくださっている有志の方のサイトです

[OBSに画質を求めるのは間違っているだろうか](https://nyanshiba.com/blog/obs-studio)

### 6. Zoom等の設定で、入力はSYNCROOMのライン、出力は使用しているデバイスにする
この設定できちんと音が通っているか確認しましょう
**これら仮想マイク設定はOBS Studioを起動しないと有効化されない点に注意してください**
仮想カメラと一緒に使うと起動時に仮想カメラ・仮想マイクを有効化できるので効率が良いです
![qiita19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1492288/3bdff20e-4e04-94fb-1014-dbedabe44948.png)


# 最後に
今回、仮想マイクの設定方法についていろいろ試行錯誤しながらこの記事を書きました
自分なりに納得のいく結果は出せたとは思います

ただ、記事の作成にあたって多くの記事を拝見しましたし、実際に自分で確かめて感じたのですが
**音質を改善する最も手っ取り早い方法は良い機材を揃えることです**

PC内蔵のマイクをそのまま使っていたり、イヤホンマイクを直挿ししている状態ではあまり効果的ではありません
例え安物のマイクでもオーディオミキサを適切に設定することで仮想マイク設定無しに大きく改善することができます
良質なマイクを使用すれば高いノイズフィルタ効果を標準で備えていることも多いです

それらとは別で、「**Bluetoothマイクを使っているからオーディオミキサに手を出せない！**」、「**仮想カメラついでに面白いことがしたい！**」、などといった時に本記事が参考になれば幸いです

**※社用PCに対してOBSやSYNCROOMの無断導入はセキュリティ的にアウトな可能性が極めて高いので私用のPCで行いましょう**

# 参考サイト

* [Wiki - Filters Guide | OBS](https://obsproject.com/wiki/Filters-Guide)
* [OBSに画質を求めるのは間違っているだろうか](https://nyanshiba.com/blog/obs-studio)
  * 色んなことがしたくなったらこれらを見ることをおススメします<br>
    上は公式Wiki、下は日本語ドキュメントとしては最高クラスの内容と量を誇るブログです
* [NETDUETTO β2の後継ソフト～SYNCROOMで仮想オーディオデバイスを使う方法](https://koyakelive.com/syncroomsvadhowtouse/)
* [無料で使える仮想オーディオデバイス集めてみた](http://kamipepa.blog.jp/archives/39365460.html)
* [Windowsユーザにオススメの万能仮想ミキサー「VoiceMeeter Banana」が凄い](https://av.watch.impress.co.jp/docs/series/dal/1255935.html)