VOICEVOXのサーバー（エンジン）をWindowsで立てる

# 経緯
Raspberry PiでVOICEVOXの音声を扱いたく、インストールしたが、"テスト"の3文字の音声合成に、1分程度かかってしまったため、ほかのＰＣに処理してもらう。

# したかったこと
Windows 10 にてVOICEVOXのサーバー（エンジン）を起動し、同一のローカルネットワークに存在するコンピュータ(Raspberry Piなど)から音声合成のコマンドを実行し、再生する。

サーバーのPCがハイスペックであれば、Raspberry Piなどから音声合成のリクエストを行うことで、低スペックコンピュータでも高速に音声ファイルを用意することができる。

![名称未設定ファイル.drawio (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558094/b8a2fdeb-b05f-9014-96d6-745def59b03b.png)


# 手順
### 事前準備
- サーバーのIPアドレスの固定
### 本編手順
- VOICEVOXのインストール
- VOICEVOXのエンジンの起動
- ブラウザからVOICEVOX エンジンが起動していることを確認
- 外部機器からの音声合成確認
- VOICEVOXのエンジンの自動起動の登録
- 

# 手順詳細
## サーバーのIPアドレスの固定
必要であれば、IPアドレスを固定しておく。(クライアントから、VOICEVOXのサーバーへアクセスする際、サーバーの再起動ごとにIPアドレスが毎回変わると困るため)


## VOICEVOXのインストール
Windowsにて、VOICEVOXをホームページからインストーラーでインストールする。

https://voicevox.hiroshiba.jp/


## VOICEVOXのエンジンを起動する。
VOICEVOXは「エディター」「エンジン」「コア」の3段になっているが、ここではエンジンを起動する。

[VOICEVOXの全体構成](https://github.com/VOICEVOX/voicevox/blob/main/docs/%E5%85%A8%E4%BD%93%E6%A7%8B%E6%88%90.md)

最終的には、PCとともに自動起動を設定したいが、確認のためターミナル（コマンドプロンプト）から起動する。

VOICEVOXは以下のようなディレクトリに保存されているはず
`C:\Users\ユーザー名\AppData\Local\Programs\VOICEVOX`

ここで、`--host`オプションにて、VOICEVOX を起動するPCのIPアドレスを指定する。
PCのIPアドレスは`ipconfig`で確認しておく。

例：起動するPCのIPアドレスが`192.168.0.2`の場合

```powershell
 ~\AppData\Local\programs\VOICEVOX\run.exe --host 192.168.0.2
```


実行結果:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558094/15d103be-eb30-6f28-e101-5aa7ac7c615b.png)
ちなみに↑のコマンドはユーザーフォルダにインストールされている前提であるため、管理者権限のコマンドプロンプトなどでは起動できない。

ここで、Windows Defender ファイアウォールの許可が求められると思うので、許可する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558094/6346f7e9-0d06-7874-5483-bb174647bb27.png)

標準ではTCPの50021ポートを利用します。変更したい場合は`--port`オプションにて変更できます。(普通は標準のポートでいいと思うけど)

例：起動するPCのIPアドレスが`192.168.0.2`でポートが50001の場合

```powershell
 ~\AppData\Local\programs\VOICEVOX\run.exe --host 192.168.0.2 --port 50001
```

## ブラウザからVOICEVOX エンジンが起動していることを確認
VOICEVOX エンジンはHTTPのサーバーとして起動しているので、ブラウザからアクセスできます。
IPアドレスとポートを指定してブラウザに入力します。

例：起動するPCのIPアドレスが`192.168.0.2`でポートが50021の場合

http://192.168.0.2:50021/docs


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558094/7ec37442-3c02-a73a-3397-51a6764e650d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558094/facc4fcb-89aa-1d39-d111-2b390987cd5c.png)


### この時点でアクセスできない場合、
VOICEVOX エンジンを起動した実行結果として、サーバーのIPアドレスとポートが表示されるはずなので、表示されているか、またブラウザに入力している価が正しいか確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558094/fbf1f1b0-d966-961e-a2e9-f30e5877850f.png)

## ほかの機器からアクセス可能であることを確認する。
同一のローカルネットワークに存在するほかの機器からブラウザにてアクセスできることを確認する。

例：起動するPCのIPアドレスが`192.168.0.2`でポートが50021の場合

http://192.168.0.2:50021/docs

## 外部機器からの音声合成確認
### クライアントがLinuxの場合 (外部機器からの音声合成確認)

curlコマンドにて、リクエストを送信することで、wavファイルが返却される。

例：
IPアドレス 192.168.0.2
ポート 50021
発話内容 "test"
話者　3番
保存ファイル名 audio.wav

以下のコマンドは応答をファイルに保存して次の処理を行うため、1行づつ実行する必要がある。
```shell
echo test > text.txt
curl -X 'POST' '192.168.0.2:50021/audio_query?speaker=3' --get --data-urlencode text@text.txt > query.json
curl -X 'POST' -H "Content-Type: application/json" '192.168.0.2:50021/synthesis?speaker=3' -d @query.json > audio.wav
```

または、パイプ処理を利用する。

```shell
 echo test | curl -X 'POST' '192.168.0.2:50021/audio_query?speaker=3' --get --data-urlencode text@- | curl -X  'POST'  -H "Content-Type: application/json" '192.168.0.2:50021/synthesis?speaker=3' -d @- > audio.wav
```

作成されたaudio.wavは合成音声により、”テスト”と発音された音声となっていることが確認できる。


詳細は以下の公式サイトに手順が記載されている。

https://github.com/VOICEVOX/voicevox_engine

### Windowsの場合 (外部機器からの音声合成確認)

コマンドプロンプトからcurlコマンドにて、リクエストを送る場合、jsonファイルを送信する手順が難しいので省きます。

wsl2のubuntuからcurlコマンドにて確認可能です。

## VOICEVOXのエンジンの自動起動の登録

` C:\Users\ユーザー名\AppData\Local\Programs\VOICEVOX\run.exe`のショートカットを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558094/2c61eab6-f063-afa7-5207-c792daca4477.png)

作成したショートカットファイルのプロパティから、リンク先に`--host`オプションを追記する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558094/5a6162ff-02f1-2c02-8df1-095149e96529.png)

Windowsのスタートアップフォルダ`C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup`などにショートカットファイルを移動する。

再起動すると自動でVOICEVOXのエンジンが起動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558094/bb09f9ed-41a1-ecc4-9b0a-de7474df62ad.png)

# 難しかったところ
Windows の curlコマンドでの jsonをpostすることが難しく、あきらめた。(@でファイルを指定できなかった)

VOICEVOXのエンジンの`--host`オプションを指定しないと、外部からアクセスできなかった。（ファイヤーウォールのポート開放設定を正しく行っていなかったからかもしれない）