パソコンに流れる音声を通話に流す方法（Mac）

### 概要
パソコンの音声を通話に流したいことがあります。
オーディオの仮想配線を行うと可能なので、その方法を紹介します。

### 目次
1. やり方紹介
  1. パソコンの音声を通話に流す
  2. 自分の声とパソコンの音声を通話に流す
  3. 自分の声とパソコンの音声を通話に流し、パソコンの音声を自分で聞く
2. 仕組み紹介

### やり方紹介
#### 1. パソコンの音声を通話に流す
　まず、Soundflowerをインストールします（インストール方法については他の記事を参考してください🙇）。インストールできたら、Mac画面左上のリンゴをクリック→『システム環境設定』→『サウンド』を開き、その画面の『出力』を、『Soundflower(2ch)』にします。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/708bf32e-147c-a69d-27c2-74da0f3f671b.png">
　続いて、通話ソフトウェアの入力を『Soundflower(2ch)』にします（ここではGoogle Hangout Meetを例にしています）。大抵の通話サービスで、設定のマイク項目にてこの設定ができると思います。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/1dbc8ed8-f207-46ea-50b4-3a7891767ca8.png">
　あとは、通話ソフトウェアの出力を、通話相手の声を再生したいスピーカーやヘッドホンに設定すれば完了です。

　この方法だと、パソコンに流れる音声は相手に流れますが、自分の声は相手に聞こえません。

#### 2. 自分の声とパソコンの音声を通話に流す
　「パソコンの音声を通話に流す」の設定を更に変更していきます。

　まず、『Finder』の『アプリケーション』→『ユーティリティ』から『Audio MIDI設定.app』を開きます。続いて、画面左下の『＋』→『機器セットを作成』をクリックします。こんな感じの画面が表示されているはずです。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/b3e3a744-fa65-1bfa-2b53-dfddd1312f68.png">
 ここで、普段使っているマイクと、『Soundflower(2ch)』に、『使用』チェックを入れます。こんな感じの画面になるはずです。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/4b756f58-92c8-b216-0be9-e6f3d4dbc794.png">
　あとは、通話ソフトウェアの入力を『機器セット』にすれば完了です。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/0939ba90-907e-b4d8-23fb-8da1da222cf7.png">
　この方法だと、パソコンに流れる音声と自分の声は相手に流れますが、自分でパソコンの音声を聞くことはできません。

#### 3. 自分の声とパソコンの音声を通話に流し、パソコンの音声を自分で聞く
　「自分の声とパソコンの音声を通話に流す」の設定を更に変更していきます。

　まず、先程の『Audio MIDI設定.app』を開きます。続いて、画面左下の『＋』→『複数出力装置を作成』をクリックします。こんな感じの画面が表示されているはずです。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/53986397-c15b-1887-ca0b-8079fafdd883.png">
　ここで、普段使っているスピーカーやヘッドホンと、『Soundflower(2ch)』に、『使用』チェックを入れます。こんな感じの画面になるはずです。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/85342c7d-7854-4670-afbe-a75ec4077940.png">
　あとは、先程の『システム環境設定』→『サウンド』を開き、その画面の『出力』を、『複数出力装置』にします。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/f8bd1771-d129-6427-3f93-b57a695e9790.png">

　これで設定は完了です。

### 仕組み紹介
　先ほどの行程で、オーディオの仮想配線がどうなっているのかを紹介します。

　まず、相手と会話しているときは、自分のマイクが通話ソフトウェアに接続され、通話ソフトウェアの出力が自分のヘッドホンに接続されています。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/2f3fa02f-42f8-024e-2e68-f5228fe5a32e.png">

　ここで、パソコンの音声を通話ソフトに流したいとします。しかし、パソコンの音声出力を通話ソフトに流すことはできないので、問題が生じます。これは、パソコン音声は音声出力デバイスにしか出力できず、通話ソフトは音声入力デバイスからしか入力できないためです。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/d7ec8d89-969b-3220-d999-c557292bb0f7.png">

 そこで、仮想ループバックという概念を使って、パソコン音声の出力を、仮想的な入力デバイスに受け渡すことを考えます。今回はSoundflowerを使って仮想ループバックを実現しました。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/d686f789-0f50-c45f-8832-55e4ae6eaa60.png">

　続いて、マイクも通話ソフトに入力することを考えます。しかし、通話ソフトは２つの入力を同時に受け取れないので、問題が生じます。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/0f679f57-c6df-bf19-6603-b0f563c44d2b.png">

　そこで、２つの入力音声を１つにすることを考えます。今回は『機器セット』を用いて実現しました。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/70195b3c-8a57-1500-9207-be970412ac75.png">

  最後に、パソコンの音声をヘッドホンに再生することを考えます。しかし、パソコン音声の出力先を２つに分けることはできないため、問題が生じます。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/45b29845-f1d6-a22e-61e4-f19284b5a688.png">

　そこで、１つの出力音声を２つにすることを考えます。今回は『複数出力装置』を用いて実現しました。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103491/b0672d70-d016-a063-6ae7-4e72ac403904.png">

以上です。正直とてもつらいです。もっと良い方法があれば教えて頂けると嬉しいです。