👧

DockerでVOICEVOX(音声合成)を動かす

2023/02/18に公開

はじめに

DockerでVOICEVOX(音声合成)環境を作成します。

以下のサイトを参考にしました。(voicevox/voicevox_engine)
https://hub.docker.com/r/voicevox/voicevox_engine
https://dev.classmethod.jp/articles/transform-whisper-txt-into-audio-file/

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の値については、コンテナを立ち上げた状態で、以下にアクセスすると参考になるかもしれません。
http://localhost:50021/speakers

Discussion