VOICEVOX Core 0.5.1をUbuntu + GPU + Pythonで使う(exampleを動かすまで)
※ VOICEVOX Coreにより生成した音声の利用にあたっては、VOICEVOX Coreの添付文書・利用規約を必ず確認し、従ってください。
Ubuntu 20.04.3 LTS (Focal Fossa)Python 3.9.6 (pyenv)NVIDIA-SMI 470.57.02Driver Version: 470.57.02CUDA Version: 11.4cuDNN 8.2.4
VOICEVOXを使った音声合成について
VOICEVOXの音声合成の仕組みについては、以下の記事が参考になるかもしれません。
VOICEVOX Coreを効果的に使うには、ある程度音声合成の専門知識が必要になると思います。
簡易にTTSを利用したい場合には、VOICEVOX EngineのHTTP APIを使うことをおすすめします。
VOICEVOX Engineは、公式Dockerイメージが公開されています。
VOICEVOX Coreのインタフェースについて
わたしは音声合成については素人ですが、参考のため現在の理解を書いておきます。
VOICEVOX Coreでは、
「音素ごとの長さの推定 replace_phoneme_length / yukarin_s_forward
」、
「モーラごとの音高の推定 replace_mora_pitch / yukarin_sa_forward
」、
「音声波形の推定 synthesis / decode_forward
」の3つの深層学習モデルを使って音声合成します。
OpenJTalkには、辞書に基づいてテキストを解析し、アクセント句・モーラ・アクセント位置・疑問文フラグなどの情報で構成された フルコンテキストラベルというデータに変換する機能があります。
フルコンテキストラベルの仕様は、以下のURLを開き、
HTS-2.3 > Speaker dependent training demo > Japanese > tar.bz2
からHTS-demo_NIT-ATR503-M001.tar.bz2
をダウンロード・展開し、
data/lab_format.pdf
を見ると英語で記述されています。
- https://hts.sp.nitech.ac.jp/?Download#u879c944
- https://twitter.com/hiho_karuta/status/1059845813143138304
VOICEVOX Engineでは、フルコンテキストラベルやVOICEVOX Coreを使って、 テキストを調声用のデータ構造(AudioQuery)に変換し、 また調声用のデータ構造を音声(Wav)に変換します。
VOICEVOXエディタでは、調声用のデータ構造を操作して、アクセント位置、音高(日本語ではイントネーションと同じらしい)、音素長を調声するUIなどが実装されています。
LibTorch版とONNX版について
VOICEVOXは、0.10から深層学習モデル推論時のバックエンドをLibTorchからONNX Runtimeに移行しました。
この記事では、VOICEVOX 0.9までのLibTorch版コアを前提にしています(最初に記事を書いたときは0.5.1でした)。
PythonでONNX版のVOICEVOX Coreを使う手順はリポジトリにドキュメントがあるので参照してください(時間があればそのうち記事を書くかもです)。
LibTorchのダウンロード
Stable > Linux > LibTorch > C++/Java > CUDA 11.1 > Download here (cxx11 ABI)
libtorch-cxx11-abi-shared-with-deps-1.9.0+cu111.zip
を使用した。
圧縮時で2.1GB、展開時で5.1GB。
~/local/libtorch
以下に、~/local/libtorch/build-version
のように全ファイルを展開する。
VOICEVOX Coreのダウンロード
圧縮時・展開時ともに430MB。
~/local/voicevox_core
以下に、~/local/voicevox_core/libcore.so
のように全ファイルを展開する。
.bashrc
export LIBRARY_PATH="$HOME/local/voicevox_core:$LIBRARY_PATH"export LIBRARY_PATH="$HOME/local/libtorch/lib:$LIBRARY_PATH"export LD_LIBRARY_PATH="$HOME/local/voicevox_core:$LD_LIBRARY_PATH"export LD_LIBRARY_PATH="$HOME/local/libtorch/lib:$LD_LIBRARY_PATH"
source ~/.bashrc
サンプルリポジトリをクローン
git clone https://github.com/Hiroshiba/voicevox_core.gitcd voicevox_core# 再現性のためにバージョンを固定、実際は最新版の使用を推奨git checkout 89d0962ab54269023fe0ec3170c7075744f38702
core.hをコピー
cp core.h example/python/cd example/python
パッケージのインストール
# 依存パッケージのインストールpip3 install -r requirements.txt
pipを使ったインストール
# coreモジュール(VOICEVOX Core Pythonライブラリ)のインストールpip3 install .
distutilsを使ったインストール
# coreモジュール(VOICEVOX Core Pythonライブラリ)のインストールpython3 setup.py install --record files.txt# 失敗時python3 setup.py cleanrm -rf build/ core.cpp
files.txt
にインストールされたファイル一覧が出力される。
アンインストール時は、files.txt
に列挙されたファイルを手動で削除する。
files.txt
***/lib/python3.9/site-packages/core.cpython-39-x86_64-linux-gnu.so***/lib/python3.9/site-packages/core-0.0.0-py3.9.egg-info
サンプルプログラム(run.py)の改変
core.initialize
の第1引数をlibcore.so
のあるディレクトリのパスに変更する。(末尾のスラッシュは必須)。
core.initialize("/home/user/local/voicevox_core/", use_gpu)
改変したサンプルプログラム(run.py)の実行
四国めたん
python3 run.py --use_gpu --text "こんにちは" --speaker_id 0paplay "./こんにちは-0.wav"
ずんだもん
python3 run.py --use_gpu --text "こんにちはなのだ" --speaker_id 1paplay "./こんにちはなのだ-0.wav"
使用するGPUの変更(複数台のGPUが接続された環境)
CUDAを使うアプリケーション一般に適用できる方法。数値はnvidia-smi
で確認できるGPU番号とは異なることがあるので注意。
CUDA_VISIBLE_DEVICES=0 python3 run.py --use_gpu --text "こんにちは" --speaker_id 0CUDA_VISIBLE_DEVICES=1 python3 run.py --use_gpu --text "こんにちは" --speaker_id 0
その他参考
LD_LIBRARY_PATH
について調べていたが、コンパイル(python3 setup.py install
)時に必要(g++
が見に行くパス)なのはLIBRARY_PATH
、実行時(core
モジュールロード時)に必要なのはLD_LIBRARY_PATH
ということらしかった。