PythonとVOICEVOXで音声合成
VOICEVOXとPython
VOICEVOXは、公式いわく”無料で使える中品質なテキスト読み上げソフトウェア”とのことです。中品質と書いてありますが、過去に使っていたOpen JTalkよりかなり高品質な気がします。Open JTalkに関する記事は以下です。
とりあえず試してみる分には簡単です。以下サイトに行くと、Windows/Mac/Linuxそれぞれのバイナリがダウンロードできます。
起動すると、以下のような画面が出ます。
小さいアイコンをクリックするとキャラが変えられます。色々しゃべらせてみると、もうこれだけで楽しくて便利です。
このVOICEVOXですが、公式GitHubサイトによると、以下の図のようにコア部分は、MITライセンスでOSSとして提供されています。Pythonバインディングもあるので、手軽にPythonの音声合成ライブラリとして使えます。素晴らしいですね。
上の図は公式GitHubサイトから引用
ただ、VOICEVOX、多くのプラットフォームに対応しているため、結構インストールが複雑な上に、開発が活発過ぎて、ネットの過去記事軒並み古くなっているという状況なので、最新に近いセットアップ方法を簡単にまとめてみました。
VOICEVOXセットアップ
前提
Linux/Apple Silicon Macで試しました。Windowsはまだ試していませんが、同じ要領でWSL2を使えばできる気がします。
Linuxの場合は、Python環境をpyenv/pyenv-virtualenvで構築しています。以下記事参照ください。慣れている人は自分の好きな環境で試してください。
Apple Silicon Macの場合は、MiniForgeで環境構築しています。以下記事参照ください。
セットアップ方法
公式のREADMEや、ネットの記事を参考にしました(最後にまとめています)。
ただ、バージョンアップ多く、変更内容も激しいので、バージョンの違いには気をつける必要があります。
今の時点でのセットアップの流れは以下の通りです。
- VOCIVOXコアのPythonバインディングセットアップ
- ONNX Runtimeのダウンロード
- Open Jtalkの辞書ファイルダウンロード
- 動作確認用のサンプルソフトダウンロードと実行
順に説明していきます。
VOCIVOXコアのPythonバインディングセットアップ
Linux(X86)の場合は以下コマンド実行してください。
$ wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.3/voicevox_core-0.14.3+cpu-cp38-abi3-linux_x86_64.whl
$ pip install voicevox_core-0.14.3+cpu-cp38-abi3-linux_x86_64.whl
Mac(Apple Silicon)の場合は以下コマンド実行してください。
$ wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.2/voicevox_core-0.14.2+cpu-cp38-abi3-macosx_11_0_arm64.whl
$ pip install voicevox_core-0.14.2+cpu-cp38-abi3-macosx_11_0_arm64.whl
ONNX Runtimeのダウンロード
必要なライブラリとなるONNX Runtimeをダウンロードして、実行するフォルダに移動します。
Linux(X86)の場合は以下コマンド実行してください。
$ wget https://github.com/microsoft/onnxruntime/releases/download/v1.13.1/onnxruntime-linux-x64-1.13.1.tgz
$ tar xvzf onnxruntime-linux-x64-1.13.1.tgz
$ mv onnxruntime-linux-x64-1.13.1/lib/libonnxruntime.so.1.13.1 ./
Mac(Apple Silicon)の場合は以下コマンド実行してください。
$ wget https://github.com/microsoft/onnxruntime/releases/download/v1.13.1/onnxruntime-osx-arm64-1.13.1.tgz
$ tar xvzf onnxruntime-osx-arm64-1.13.1.tgz
$ cp onnxruntime-osx-arm64-1.13.1/lib/libonnxruntime.* ./
Open Jtalkの辞書ファイルダウンロード
音声合成に必要となる辞書ファイルをダウンロードします。
プラットフォームによらず操作は共通です。以下コマンドを実行してください。
$ wget http://downloads.sourceforge.net/open-jtalk/open_jtalk_dic_utf_8-1.11.tar.gz
$ tar xvzf open_jtalk_dic_utf_8-1.11.tar.gz
動作確認用のサンプルソフトダウンロードと実行
動作確認を実施します。プラットフォームによらず共通で、以下コマンドを実行してください。
$ wget https://raw.githubusercontent.com/VOICEVOX/voicevox_core/0.15.0-preview.3/example/python/run.py
$ python3 ./run.py --dict-dir ./open_jtalk_dic_utf_8-1.11 --text これはテストです --out ./audio.wav
audio.wav
ファイルが生成できたら成功です。再生すると「これはテストです」という声が再生されます。
VOICEVOXで音声合成して再生するスクリプト
上記でセットアップが終わったら、実行したら指定したテキストを再生する、最小限のスクリプトを書いてみます。
音声再生に必要なライブラリを以下コマンドでインストールします。
$ pip install playsound
サンプルスクリプトを参考に、最小限のスクリプトを作成しました。
from pathlib import Path
import voicevox_core
from voicevox_core import AccelerationMode, AudioQuery, VoicevoxCore
from playsound import playsound
SPEAKER_ID = 2
open_jtalk_dict_dir = './open_jtalk_dic_utf_8-1.11'
text = 'これはテストです'
out = Path('output.wav')
acceleration_mode = AccelerationMode.AUTO
def main() -> None:
core = VoicevoxCore(
acceleration_mode=acceleration_mode, open_jtalk_dict_dir=open_jtalk_dict_dir
)
core.load_model(SPEAKER_ID)
audio_query = core.audio_query(text, SPEAKER_ID)
wav = core.synthesis(audio_query, SPEAKER_ID)
out.write_bytes(wav)
playsound(out)
if __name__ == "__main__":
main()
text = 'これはテストです'
を変えると話す内容を変えられます。SPEAKER_ID = 2
で話者が変えられます。話者の一覧は以下のとおりです。
・四国めたん
・ノーマル : 2
・あまあま : 0
・ツンツン : 6
・セクシー : 4
・ずんだもん
・ノーマル : 3
・あまあま : 1
・ツンツン : 7
・セクシー : 5
・春日部つむぎ
・ノーマル : 8
・雨晴はう
・ノーマル : 10
・波音リツ
・ノーマル : 9
・玄野武宏
・ノーマル : 11
・白上虎太郎
・ノーマル : 12
・青山龍星
・ノーマル : 13
・冥鳴ひまり
・ノーマル : 14
・九州そら
・ノーマル : 16
・あまあま : 15
・ツンツン : 18
・セクシー : 17
・ささやき : 19
Google Colab ではじめる VOICEVOXより引用
エラーの対応
Apple Silicon Macで音声再生のときに以下エラーがでた場合の対応です。
FileNotFoundError: [Errno 2] No such file or directory: '/System/Library/Frameworks/Python.framework/Versions/2.7/bin/python'
以下実行すればOKです。
$ pip install -U PyObjC
まとめ
PythonとVOICEVOXで音声合成する方法をまとめました。Pythonで手軽に品質の高い音声合成をできるのは便利ですね。
VOICEVOXの他は、VALL-E Xもよさそうなのでまた機会あれば試してみたいと思います。
参考リンク
変更履歴
- 2024/06/21 ダウンロード先がなくなっていたのでバージョンの修正。エラー対応追記
Discussion