経緯
Raspberry PiでVOICEVOXの音声を扱いたく、インストールしたが、"テスト"の3文字の音声合成に、1分程度かかってしまったため、ほかのPCに処理してもらう。
したかったこと
Windows 10 にてVOICEVOXのサーバー(エンジン)を起動し、同一のローカルネットワークに存在するコンピュータ(Raspberry Piなど)から音声合成のコマンドを実行し、再生する。
サーバーのPCがハイスペックであれば、Raspberry Piなどから音声合成のリクエストを行うことで、低スペックコンピュータでも高速に音声ファイルを用意することができる。
手順
事前準備
- サーバーのIPアドレスの固定
本編手順
- VOICEVOXのインストール
- VOICEVOXのエンジンの起動
- ブラウザからVOICEVOX エンジンが起動していることを確認
- 外部機器からの音声合成確認
- VOICEVOXのエンジンの自動起動の登録
手順詳細
サーバーのIPアドレスの固定
必要であれば、IPアドレスを固定しておく。(クライアントから、VOICEVOXのサーバーへアクセスする際、サーバーの再起動ごとにIPアドレスが毎回変わると困るため)
VOICEVOXのインストール
Windowsにて、VOICEVOXをホームページからインストーラーでインストールする。
VOICEVOXのエンジンを起動する。
VOICEVOXは「エディター」「エンジン」「コア」の3段になっているが、ここではエンジンを起動する。
最終的には、PCとともに自動起動を設定したいが、確認のためターミナル(コマンドプロンプト)から起動する。
VOICEVOXは以下のようなディレクトリに保存されているはず
C:\Users\ユーザー名\AppData\Local\Programs\VOICEVOX
ここで、--host
オプションにて、VOICEVOX を起動するPCのIPアドレスを指定する。
PCのIPアドレスはipconfig
で確認しておく。
例:起動するPCのIPアドレスが192.168.0.2
の場合
~\AppData\Local\programs\VOICEVOX\run.exe --host 192.168.0.2
実行結果:
ちなみに↑のコマンドはユーザーフォルダにインストールされている前提であるため、管理者権限のコマンドプロンプトなどでは起動できない。
ここで、Windows Defender ファイアウォールの許可が求められると思うので、許可する。
標準ではTCPの50021ポートを利用します。変更したい場合は--port
オプションにて変更できます。(普通は標準のポートでいいと思うけど)
例:起動するPCのIPアドレスが192.168.0.2
でポートが50001の場合
~\AppData\Local\programs\VOICEVOX\run.exe --host 192.168.0.2 --port 50001
ブラウザからVOICEVOX エンジンが起動していることを確認
VOICEVOX エンジンはHTTPのサーバーとして起動しているので、ブラウザからアクセスできます。
IPアドレスとポートを指定してブラウザに入力します。
例:起動するPCのIPアドレスが192.168.0.2
でポートが50021の場合
この時点でアクセスできない場合、
VOICEVOX エンジンを起動した実行結果として、サーバーのIPアドレスとポートが表示されるはずなので、表示されているか、またブラウザに入力している価が正しいか確認する。
ほかの機器からアクセス可能であることを確認する。
同一のローカルネットワークに存在するほかの機器からブラウザにてアクセスできることを確認する。
例:起動するPCのIPアドレスが192.168.0.2
でポートが50021の場合
外部機器からの音声合成確認
クライアントがLinuxの場合 (外部機器からの音声合成確認)
curlコマンドにて、リクエストを送信することで、wavファイルが返却される。
例:
IPアドレス 192.168.0.2
ポート 50021
発話内容 "test"
話者 3番
保存ファイル名 audio.wav
以下のコマンドは応答をファイルに保存して次の処理を行うため、1行づつ実行する必要がある。
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
または、パイプ処理を利用する。
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は合成音声により、”テスト”と発音された音声となっていることが確認できる。
詳細は以下の公式サイトに手順が記載されている。
Windowsの場合 (外部機器からの音声合成確認)
コマンドプロンプトからcurlコマンドにて、リクエストを送る場合、jsonファイルを送信する手順が難しいので省きます。
wsl2のubuntuからcurlコマンドにて確認可能です。
VOICEVOXのエンジンの自動起動の登録
C:\Users\ユーザー名\AppData\Local\Programs\VOICEVOX\run.exe
のショートカットを作成する。
作成したショートカットファイルのプロパティから、リンク先に--host
オプションを追記する。
WindowsのスタートアップフォルダC:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
などにショートカットファイルを移動する。
難しかったところ
Windows の curlコマンドでの jsonをpostすることが難しく、あきらめた。(@でファイルを指定できなかった)
VOICEVOXのエンジンの--host
オプションを指定しないと、外部からアクセスできなかった。(ファイヤーウォールのポート開放設定を正しく行っていなかったからかもしれない)