PhotonVoice2 で、Unity に超単純な通話機能を実装するだけ

# この文書について

この文書では、PhotonVoice2 を用いての、Unity の音声通話機能の実装の手順を説明します。Photon Voice のデモ「DemoVoiceMinimal」を基にした実装方法です。

PhotonVoice2 の実装方法を色々探したとき、PhotonVoiceClassic (旧バージョン) ばかり見つかったので、2 の実装をメモ。

Photon Realtime での、モデルの位置やモーション同期については、この記事では触れていません。

# Photon とは

Photon というのは、オンラインの通信を手軽にできるプラットフォーム。
通常、リアルタイムオンライン通信をするとなれば、サーバの用意を自力でする必要がありますが、Photon を利用すればその必要は無し。
(詳しい説明はここでは省略。)

# Photon の準備

Photon の利用を開始するにあたって、Photon アカウントを準備する必要があります。

<https://www.photonengine.com/>

![PunSet-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/e74cf8ac-38c7-b304-e476-7f0e30feed00.png)

アカウントを作成したら、アプリを作成。
「CREATE A NEW APP」をクリック。

![PunSet-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/519984a5-c0dd-9a22-45f3-329775e19499.png)

* 「Photon Type」は「Photon Voice」に変更。
* 「Name」は、適宜分かる名前を登録。
* 「Description」は、任意で。
* 「URL」は空のままでも問題無し。

以上を入力し、「CREATE」をクリック。

![PunSet-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/47ce0042-3469-09cd-d668-2e02442a9c2e.png)

「Your Photon Cloud Applications」というページに移ると、アプリ名とグラフが追加されます。
アプリを複数作っていると、この枠がアプリの数だけ表示されます。

ここの画面で、作成したアプリ ID が確認できます。
このアプリ ID を使うことになるので、コピーして控えておきましょう。
(ID をクリックすると、ID 全体が選択した状態になる。)

Photon アカウント、サーバの準備はこれでおしまい。

# Unity の Asset の準備

![PunSet-Unity-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/0a7a4c34-2fb2-5641-3abb-d211de45942f.png)

Asset Store から Photon Voice 2 をダウンロード、インポートしておきます。
Photon Voice Classic というのは旧バージョンのもの。ここでは 2 を使用します。

<https://assetstore.unity.com/packages/tools/audio/photon-voice-2-130518>

(Asset Store の説明によると、Photon Voice Classic は、Unity 2020以降はサポート外。)

![PunSet-Unity-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/c1b3a309-027c-b6a0-a513-44104554d7fa.png)

Photon Voice 2 をプロジェクトにインポートすると、「PUN Setup」というセットアップ画面が出ます。
ここで、先程取得した Photon のアプリ ID を、「AppId or Email」欄に入力し、「Setup Project」を押します。

ここで入力したアプリ ID を変更したい場合や、その他サーバ設定は、上のメニューバー` Window > Photon Unity Networking > Highlight Server Setting`から行うことができます。

![PunSet-Unity-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/93e2b365-cfbf-e53c-46f6-6472b681a82b.png)

画面右側に Inspector が表示されます。

![PunSet-Unity-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/676eae28-34ba-489d-a433-d1182a4fd496.png)

これで、Unity 側の Photon の準備はおしまい。

# GameObject の準備

![MakeGObj-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/2c1168bc-092c-22af-dc03-7724dc6cd404.png)

Hierarchy ボックスを右クリックし、「Create Empty」を選択。

![MakeGObj-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/af702772-9217-d9d6-1728-5adc59bf73a9.png)


適宜、分かりやすい名前に変更。ここでは、「PhotonVoiceSync」という名前にしておきます。

生成した GameObject を選択した状態にし、画面右側に Inspector を表示。

![MakeGObj-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/33f0d536-c875-9d43-5c41-8e0baaea5d6f.png)

GameObject に以下のスクリプトを追加します。

* ` Voice Connection `
* ` Recorder `
* ` Connect And Join `

![MakeGObj-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/6bc3b975-d3b6-8eb9-5ffd-93a434588786.png)


そして、` Voice Connection `に、次のような設定をします。

* ` App Id Voice `に、取得した Photon のアプリ ID を。
* ` Fixed Region `を、` jp `に。(これは設定しなくても動く。)

それから、` Recorder `をドラッグし、` Voice Connection `の` Primary Recorder `にドロップ。

![MakeGObj-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/7e58cbc1-6e1a-df04-395a-0c03c6bf864d.png)

`Recorder `の` Debug Echo `にチェックを入れると、自身のデバイスの声が聞けるようになります。
デバッグ、音声テストに利用できます。

![MakeGObj-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540894/71d41ed5-99ba-8832-1ac9-81d7924c6209.png)

以上、全ての準備が終わったら、あとは Scene を保存してビルド。
何とびっくり、スクリプトを 1行も書くことなく、シンプルな通話機能の実装ができてしまうのだ。

(ちなみに、画面上のアバターの位置に応じて、左右バランスや音量が変わり、あたかもモデルから声が発せられているような実装もできるらしい。)

# Linux での Photon Voice 2 について

この Photon Voice 2 ですが、記事執筆時点では Linux 非対応です。
Photon の更新ログによると、v2.20 で、Linux の opus (音声の圧縮フォーマット) ライブラリが削除されたようです。

```
   終
製作・著作
━━━━━
  ⓝⓗⓚ
```

Linux が見捨てられたことに気付かず、私は数時間溶かしました。(半ギレ)