👧
DockerでVOICEVOX(音声合成)を動かす
はじめに
DockerでVOICEVOX(音声合成)環境を作成します。
以下のサイトを参考にしました。(voicevox/voicevox_engine)
Dockerでコンテナの作成、実行をする。
ターミナルから以下のコマンドを実行します。
[CPU版]
docker pull voicevox/voicevox_engine:cpu-ubuntu20.04-latest
docker run --rm -it -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-ubuntu20.04-latest
[GPU版] (nVIDIAのグラフィックボードドライバのインストールが事前に必要です。)
docker pull voicevox/voicevox_engine:nvidia-ubuntu20.04-latest
docker run --rm --gpus all -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:nvidia-ubuntu20.04-latest
使い方
コマンドを一つ一つ実行する場合
端末より以下のコマンドを入力します。
ここでは音声合成を行いたいテキストデータを text.txt
作成したjsonファイルを query.json としています。
curl -s \
-X POST \
"localhost:50021/audio_query?speaker=1"\
--get --data-urlencode text@text.txt \
> query.json
次に端末より以下のコマンドを入力し、音声データを作成します。
ここでは作成された音声データを audio.wav としています。
curl -s \
-H "Content-Type: application/json" \
-X POST \
-d @query.json \
"localhost:50021/synthesis?speaker=1" \
> audio.wav
音声データが作成されます。
シェルスクリプトを実行する場合
シェルスクリプトを作成します。
このシェルスクリプトの前提として、同じフォルダにある全ての.txtファイルを対象としています。
以下のシェルスクリプトを作成し、~/voicevox_workフォルダに格納します。
voicevox.sh
#!/bin/bash
for filename in $(ls *.txt)
do
#jsonファイルの作成
curl -s \
-X POST \
"localhost:50021/audio_query?speaker=1"\
--get --data-urlencode text@$filename \
> query.json
#wavファイルの作成
curl -s \
-H "Content-Type: application/json" \
-X POST \
-d @query.json \
"localhost:50021/synthesis?speaker=1" \
> audio.wav
#wavファイルのリネーム
mv audio.wav "${filename}.wav"
done
voicevox.sh の権限を変更(実行可能)にします。
chmod +x voicevox.sh
シェルスクリプトを実行します。
./voicevox.sh
音声データが作成されます。
補足
テキストデータが多いと、Dockerが落ちるようです。
上のコマンドのうち、「speaker=1」の部分は、値を変更することで声質が変わります。
idの値については、コンテナを立ち上げた状態で、以下にアクセスすると参考になるかもしれません。
Discussion