VOICEVOX 0.14がリリースされました🎉
このリリースから、コアがRust言語に移行しています。
これに伴って、コアの便利なバインディングがPython向けに提供されるようになったので、この記事で紹介したいと思います。
この記事はバージョン0.14.1時点の情報です。
バージョンアップに伴い、セットアップ方法や関数等に変更が入る可能性があります。
最新の情報はGithubをご確認ください。
事前準備
ライブラリのインストール
リリースのページから、OS/アーキテクチャ/GPUの有無に合ったwhlファイルをダウンロードします。
今回は、voicevox_core-0.14.1+cpu-cp38-abi3-win_amd64.whl
をダウンロードしました。
ダウンロードしたディレクトリに移動後、以下のコマンドでインストールできます。
(pip install
の後ろのファイル名は、ダウンロードしたファイル名に合わせてください)
pip install voicevox_core-0.14.1+cpu-cp38-abi3-win_amd64.whl
ONNX Runtimeのダウンロード
リリースのページから、OS/アーキテクチャ/GPUの有無に合ったファイルをダウンロードします。
(VOICEVOX Core v0.14の場合はONNX Runtime v1.13.1が必要です)
展開した先のlibフォルダ内にdllが入っているので、カレントディレクトリの直下にコピーしておきます。
(OSによって拡張子は異なります)
今回は、onnxruntime.dll
及び onnxruntime_providers_shared.dll
をコピーしました。
dllの場所について
カレントディレクトリの直下に置いておけば、コアライブラリの読み込み時に自動で読み込んでくれます。
もし別の場所に置きたい場合は、import voicevox_core
の前に以下のコードを実行する必要があります。
from ctypes import CDLL
from pathlib import Path
CDLL(str(Path("DLLの場所").resolve(strict=True)))
辞書ファイルのダウンロード
文章をアクセント情報付きの読みに変換するための辞書ファイルをダウンロードし、展開しておきます。
open_jtalk_dic_utf_8-1.11
フォルダごと任意の場所にコピーしておきます。
(open_jtalk_dic_utf_8-1.11
フォルダの中に .bin
や.def
、.dic
ファイルが入っているような状態にしてください)
今回は、カレントディレクトリ直下に配置します。
実行
importとcoreインスタンス生成
open_jtalk_dict_dir
は、先ほどダウンロードした辞書フォルダの場所を指定してください。
from pathlib import Path
from voicevox_core import VoicevoxCore, METAS
core = VoicevoxCore(open_jtalk_dict_dir=Path("open_jtalk_dic_utf_8-1.11"))
metas情報を閲覧
見やすいようにpprintを使用しています。
from pprint import pprint
pprint(METAS)
[Meta(name='四国めたん',
styles=[Style(name='ノーマル', id=2),
Style(name='あまあま', id=0),
Style(name='ツンツン', id=6),
Style(name='セクシー', id=4),
Style(name='ささやき', id=36),
Style(name='ヒソヒソ', id=37)],
speaker_uuid='7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff',
version='0.14.1'),
Meta(name='ずんだもん',
styles=[Style(name='ノーマル', id=3),
Style(name='あまあま', id=1),
Style(name='ツンツン', id=7),
Style(name='セクシー', id=5),
Style(name='ささやき', id=22),
Style(name='ヒソヒソ', id=38)],
speaker_uuid='388f246b-8c41-4ac1-8e2d-5d79f3ff56d9',
version='0.14.1'),
...
Meta(name='ナースロボ_タイプT',
styles=[Style(name='ノーマル', id=47),
Style(name='楽々', id=48),
Style(name='恐怖', id=49),
Style(name='内緒話', id=50)],
speaker_uuid='882a636f-3bac-431a-966d-c5e6bba9f949',
version='0.14.1')]
ここでのid
を後で使用します。
今回は、四国めたんのノーマルスタイルを使用するので、id
は2になります。
分かりやすいように変数で定義しておきます。
speaker_id = 2
TTS実行&ファイル保存
text = "こんにちは、これはテストです。"
if not core.is_model_loaded(speaker_id): # モデルが読み込まれていない場合
core.load_model(speaker_id) # 指定したidのモデルを読み込む
wave_bytes = core.tts(text, speaker_id) # 音声合成を行う
with open("output.wav", "wb") as f:
f.write(wave_bytes) # ファイルに書き出す
成功したらカレントディレクトリ直下に、output.wav
が生成されているはずです。
AquesTalkライク記法でのTTS
バージョン0.14.0では、kanaオプションは動作していません。
0.14.1以降を使用してください。
(自分の報告に対して検証してくださった sevenc-nanashiさん、qryxipさん、迅速に修正PRを出してくださったSuitCaseさん、ありがとうございます。)
記法に関しては、Engineの方のREADMEに詳しく書いてあります。
text = "コ'ンニチワ、コレワ'/テ'_ストデ_ス"
if not core.is_model_loaded(speaker_id):
core.load_model(speaker_id)
wave_bytes = core.tts(text, speaker_id, kana=True)
with open("output.wav", "wb") as f:
f.write(wave_bytes)
デフォルトの音声合成結果と違い、こんにちは、の「こ」の位置にアクセントが来ていることが分かるかと思います。