🗣️

PythonとVOICEVOXで音声合成

2023/04/09に公開

VOICEVOXとPython

VOICEVOXは、公式いわく”無料で使える中品質なテキスト読み上げソフトウェア”とのことです。中品質と書いてありますが、過去に使っていたOpen JTalkよりかなり高品質な気がします。Open JTalkに関する記事は以下です。

https://karaage.hatenadiary.jp/entry/2016/07/22/073000

とりあえず試してみる分には簡単です。以下サイトに行くと、Windows/Mac/Linuxそれぞれのバイナリがダウンロードできます。
https://voicevox.hiroshiba.jp/

起動すると、以下のような画面が出ます。

小さいアイコンをクリックするとキャラが変えられます。色々しゃべらせてみると、もうこれだけで楽しくて便利です。

このVOICEVOXですが、公式GitHubサイトによると、以下の図のようにコア部分は、MITライセンスでOSSとして提供されています。Pythonバインディングもあるので、手軽にPythonの音声合成ライブラリとして使えます。素晴らしいですね。


上の図は公式GitHubサイトから引用

ただ、VOICEVOX、多くのプラットフォームに対応しているため、結構インストールが複雑な上に、開発が活発過ぎて、ネットの過去記事軒並み古くなっているという状況なので、最新に近いセットアップ方法を簡単にまとめてみました。

VOICEVOXセットアップ

前提

Linux/Apple Silicon Macで試しました。Windowsはまだ試していませんが、同じ要領でWSL2を使えばできる気がします。

Linuxの場合は、Python環境をpyenv/pyenv-virtualenvで構築しています。以下記事参照ください。慣れている人は自分の好きな環境で試してください。
https://zenn.dev/karaage0703/articles/5af7ce4b8b1a8a

Apple Silicon Macの場合は、MiniForgeで環境構築しています。以下記事参照ください。
https://zenn.dev/karaage0703/articles/f3254b14898b4d

セットアップ方法

公式のREADMEや、ネットの記事を参考にしました(最後にまとめています)。

https://github.com/VOICEVOX/voicevox_core

ただ、バージョンアップ多く、変更内容も激しいので、バージョンの違いには気をつける必要があります。

今の時点でのセットアップの流れは以下の通りです。

  • 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.0/example/python/run.py
$ python ./run.py ./open_jtalk_dic_utf_8-1.11 これはテストです ./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より引用

まとめ

PythonとVOICEVOXで音声合成する方法をまとめました。Pythonで手軽に品質の高い音声合成をできるのは便利ですね。

参考リンク

https://qiita.com/taka7n/items/1dc61e507274b93ee868

https://qiita.com/kunishou/items/814e837cf504ce287a13

https://tt-tsukumochi.com/archives/5845

https://note.com/npaka/n/n30de0c820b1a

https://tech.isid.co.jp/entry/chatgpt_text_to_speech

https://uepon.hatenadiary.com/entry/2024/01/30/005612

https://uepon.hatenadiary.com/entry/2024/02/02/002823

https://uepon.hatenadiary.com/entry/2024/02/19/010446

Discussion