VOICEVOXは無料で使える中品質なテキスト読み上げ・歌声合成ソフトウェアです。オープンソースのサーバを立ち上げ、API経由で音声ファイルを作成することも可能です。
今回は、Dockerでサーバを立ち上げ、テスト音声を出力するまでをまとめてみました。
Dockerでの立ち上げ
docker run -it -p 50021:50021 voicevox/voicevox_engine:cpu-latest
常駐させて API サーバとして使う場合は、それなら -it ではなく -d --restart unless-stopped にした方が安定します(後述)。
各オプションの意味
docker run
新しいコンテナを起動する基本コマンドです。イメージを指定すると、それを元にコンテナが作られます。
-i
(interactive):標準入力を有効化。
-t
(tty):仮想端末を割り当て。
→ 合わせて「対話モードで起動する」という意味。
ただし VOICEVOX のようにサーバ常駐させる用途では不要なので、通常は -d(デタッチ:バックグラウンド実行)がよく使われます。
例:
docker run -d -p 50021:50021 voicevox/voicevox_engine:cpu-latest
-p 50021:50021
ホストOS(Windows/WSL側)のポート 50021 を、コンテナ内のポート 50021 に公開(ポートフォワード)します。
→ これにより http://localhost:50021 で API にアクセス可能となります。
voicevox/voicevox_engine:cpu-latest
実行する Docker イメージの名前です。
voicevox/voicevox_engine
… VOICEVOX ENGINE の公式 Docker イメージ
:cpu-latest
… CPU 版の最新版を指定(GPU 版なら :gpu-latest)
補足(よく使うバリエーション)
バックグラウンドで動かしたい
docker run -d --name voicevox -p 50021:50021 voicevox/voicevox_engine:cpu-latest
自動再起動をつけたい(PC再起動後も起動)
docker run -d --name voicevox -p 50021:50021 --restart unless-stopped voicevox/voicevox_engine:cpu-latest
ログを確認したい
docker logs -f voicevox
音声出力テスト
ブラウザで「http://localhost:50021/docs」を起動。
(ブラウザは右上のプロフィールアイコン →「ゲストモードを開く」で開いています)
テストでwavを作成してみます。1行目でBody用JSONを作成して、2行目でそれを使って音声ファイルを出力しています。
$ curl -s -X POST "http://localhost:50021/audio_query?speaker=1&text=$(php -r 'echo urlencode("おはようございます");')" -H "Content-Type: application/x-www-form-urlencoded" -d "" -o query.json
$ curl -s -X POST "http://localhost:50021/synthesis?speaker=1" -H "Content-Type: application/json" -d @query.json -o out.wav
out.wavを再生すると「おはようございます」とwavができているはずです。
speakerを変えると、声が変わります。http://localhost:50021/speakers で表示されるJSONの、styles以下にあるidがspeakerのIDです。スピーカーごとのサンプルボイスは下記のURLにあります。
speakerを変えるときは、1行目、2行目両方のspeaker=Xを変更してください。どちらかのみ変更すると正しく声が変わりません。
メモ
Dockerコンテナの停止、削除方法
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e0168b5ae8fd voicevox/voicevox_engine:cpu-latest "/entrypoint.sh gosu…" 5 minutes ago Up 5 minutes 0.0.0.0:50021->50021/tcp laughing_goldstine
ogawa-ha@Vostro143420:~/docker$ docker stop laughing_goldstine
docker stop laughing_goldstine
1. コンテナを停止する(再利用する場合)
docker stop laughing_goldstine
→ 状態が停止(Exited)になります。
再度動かしたいときは:
docker start laughing_goldstine
2. コンテナを削除する(不要なら消す)
docker rm -f laughing_goldstine
→ 完全に削除されます。
もう一度起動する場合は新しく docker run ... してください。
確認
docker ps
で一覧に出なくなれば止められています。