はじめに
先の記事で、Whisper / Faster Whisper による音声認識 AI の使い方、及びその WebUI である Whisper WebUI の使い方について記載しました。
手元での検証には Youtube 動画や青空朗読の音声データを使用しましたが、ブログで記事にする場合には、著作権の問題もあり、そのまま使用する事は出来ません。
自分の声を録音して使用する方法もありますが、以前から合成音声の生成にも興味がありました。調べてみると、VOICEVOX というソフトウェアがクレジット表示を記載する事で商用利用 (このブログも記事により収入を頂いています) が可能という事が分かりました。
これまでの生成 AI と同様に、Windows11 の WSL2 上に VOICEVOX core の環境を構築し、合成音声の生成を試してみました。
始めに記載しますが、WSL2 で動作させる事に拘らなければ、Windows / Linux / Mac に対応するアプリケーション版を使用するのが最も簡単です。2024年1月時点の最新版は Ver.0.14.10 です。GUI で操作でき、GPU を使用する事もできますので、簡単に操作できます。
どうしても VOICEBOX core を単体で動作させたい、という奇特な方のみ以下の記事をご覧ください。
VOICEBOX core のインストール方法
VOICEVOX core の2024年1月時点での最新版は 0.14.5 です。
上記の github のページに記載されていますが、main branch は工事中で正しく動かない可能性があるとの事です。確かに github に記載の手順では、合成音声の生成まで辿り着く事が出来ませんでした。Python のサンプルが example/python/run.py にあるのですが、エラーメッセージが表示されて実行できませんでした。
そこで別の2種類の方法を試してみました。
- github とは別の Python script で試す
- preview 版を使用してみる
それぞれについて説明します。
github とは別の Python script で試す
qiita に VOICEVOX core についての投稿がありました。この中に、github とは異なる Python script がありました。
リンク先では Ver.0.14.1 で試していましたが、現時点の最新の Ver.0.14.5 で進めてみます。
作業ディレクトリと Python 仮想環境を作成
最初に、作業ディレクトリと Python 仮想環境を作成します。
$ mkdir Voicevox_0.14.5 && cd Voicevox_0.14.5
$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv) $ pip install --upgrade pip setuptools
VOICEVOX core Ver.0.14.5 の clone
VOICEVOX core の github から clone します。Ver.0.14.5 を指定します。リンク先の手順にはありませんが、python script 等の取得の為に clone しておきます。voicevox_core ディレクトリ以下に clone されます。
(.venv) $ git clone https://github.com/VOICEVOX/voicevox_core -b 0.14.5
(.venv) $ ls
voicevox_core
Ver.0.14.5 用の Python ライブラリのインストール
次に該当するバージョンの Python ライブラリをインストールします。今回は Linux 用の Ver.0.14.5 で CUDA 版を選択しました。
(.venv) $ wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.5/voicevox_core-0.14.5+cuda-cp38-abi3-linux_x86_64.whl
(.venv) $ pip install voicevox_core-0.14.5+cuda-cp38-abi3-linux_x86_64.whl
...(snip)...
Successfully installed numpy-1.26.3 pydantic-1.10.13 typing-extensions-4.9.0 voicevox-core-0.14.5+cuda
(.venv) $ pip list
Package Version
----------------- -----------
numpy 1.26.3
pip 23.3.2
pydantic 1.10.13
setuptools 69.0.3
typing_extensions 4.9.0
voicevox_core 0.14.5+cuda
CUDA 版の voicevox-core 以外に、numpy と pydantic、typing-extensions も依存関係でインストールされました。
ONNX Runtime のインストール (v1.13.1)
次に、ONNX Runtime をインストールします。VOICEVOX core Ver.0.14.5 には ONNX Runtime v1.13.1 が必要です。
無印 (CPU版) と GPU 版がありますが、今回は GPU 版をダウンロード、展開しました。
(.venv) $ wget https://github.com/microsoft/onnxruntime/releases/download/v1.13.1/onnxruntime-linux-x64-gpu-1.13.1.tgz
(.venv) $ tar xf onnxruntime-linux-x64-gpu-1.13.1.tgz
(.venv) $ tree onnxruntime-linux-x64-gpu-1.13.1
onnxruntime-linux-x64-gpu-1.13.1
...(snip)...
└── lib
├── libonnxruntime.so -> libonnxruntime.so.1.13.1
├── libonnxruntime.so.1.13.1
├── libonnxruntime_providers_cuda.so
├── libonnxruntime_providers_shared.so
└── libonnxruntime_providers_tensorrt.so
この中で必要なファイルは、libonnx* のみです。これらを voicevox_core 以下にコピーします。
(.venv) $ cp -pr onnxruntime-linux-x64-gpu-1.13.1/lib/* voicevox_core/
辞書ファイルのダウンロード
リンク先では 404 になっていますが、open_jtalk は sourceforge にあります。ダウンロードしたら展開して、ディレクトリごと voicevox_core に移動します。
(.venv) $ wget http://downloads.sourceforge.net/open-jtalk/open_jtalk_dic_utf_8-1.11.tar.gz
(.venv) $ tar xf open_jtalk_dic_utf_8-1.11.tar.gz
(.venv) $ mv open_jtalk_dic_utf_8-1.11 voicevox_core/
動作確認
これで準備ができましたので、Python script を実行してみます。まずは github から clone した Python script を実行してみます。
(.venv) $ cd voicevox_core/
(.venv) $ python example/python/run.py -h
Traceback (most recent call last):
File "/home/hiro/Voicevox_0.14.5/voicevox_core/example/python/run.py", line 3, in <module>
import core
File "/home/hiro/Voicevox_0.14.5/voicevox_core/example/python/core.py", line 28, in <module>
raise Exception(f"coreライブラリファイルが{core_dll_path}に存在しません")
Exception: coreライブラリファイルが/home/hiro/Voicevox_0.14.5/voicevox_core/example/python/voicevox_core/libcore.soに存在しません
core ライブラリ (libcore.so) が存在していませんので、エラーを表示して停止してしまいます。
次に、リンク先の Python script を実行してみます。先ずは METAS 情報を表示する script です。
# metas.py
from pathlib import Path
import sys
from voicevox_core import VoicevoxCore, METAS
core = VoicevoxCore(open_jtalk_dict_dir=Path("open_jtalk_dic_utf_8-1.11"))
from pprint import pprint
pprint(METAS)
sys.exit(0)
実行結果です。
(.venv) $ python metas.py
[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.5'),
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.5'),
...(snip)...
この一覧から、VOICEVOX のキャラクターとスタイルに対応する id が入手できます。
文字から合成音声を生成する Python script です。
# speak.py
from pathlib import Path
from voicevox_core import VoicevoxCore, METAS
core = VoicevoxCore(open_jtalk_dict_dir=Path("open_jtalk_dic_utf_8-1.11"))
speaker_id = 2 # VOICEVOX:四国めたん ノーマル
text = "謹賀新年!2024年、あけましておめでとうございます。今年も宜しくお願いします。"
if not core.is_model_loaded(speaker_id):
core.load_model(speaker_id)
wave_bytes = core.tts(text, speaker_id)
with open("output.wav", "wb") as f:
f.write(wave_bytes)
実行結果です。出力は何もありませんが、output.wav に生成された合成音声が記録されています。
(.venv) $ python speak.py
(.venv) $ ls *wav
output.wav
生成された合成音声です。
短い文章では分かりませんが、長めの文章を処理すると GPU の負荷と VRAM 使用量が増加しますので、おそらく GPU を使用して生成していると考えられます。
github とは別の Python script で試した結果
Ver.0.14.5 の github の Python script はエラーで動作しませんでしたが「工事中で正しく動かない可能性がある」との事でしたのでしょうがありません。
リンク先のスクリプトを使用する事で、VOICEVOX core Ver.0.14.5 でも合成音声を生成する事が出来ました。長めの文章を処理すると GPU の負荷や VRAM 使用量が増加しますので、GPU を使用して合成音声が生成されていると考えられます。
ただし、次項で試しますが Ver.0.15.0 が preview となっていますので、上で示した Python script は使用できなくなるかもしれません。
preview 版を使用してみる
github の Python script が動作しない原因ははっきりしませんが、VOICEVOX core のバージョン毎に Python script が異なっています。恐らく、VOICEVOX core のバージョンアップに Python script が追従できていない、又は新しい機能を使用するように Python script が変更になっている可能性があります。
そこで、preview 版である事は理解した上で、Ver.0.15.0-preview.16 を使ってみる事にしました。インストール方法は github の手順に従って行います。
作業ディレクトリと Python 仮想環境を作成
始めに作業ディレクトリと Python 仮想環境を作成します。
$ mkdir Voicevox_0.15.0-pre16 && cd Voicevox_0.15.0-pre16
$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv) $ pip install --upgrade pip setuptools
VOICEVOX core Ver.0.15.0-preview.16 の clone
VOICEVOX core の github から clone します。Ver.0.15.0-preview.16 を指定します。Ver.0.14.5 の時と同様に voicevox_core ディレクトリ以下に clone されます。
(.venv) $ git clone https://github.com/VOICEVOX/voicevox_core -b 0.15.0-preview.16
(.venv) $ ls
voicevox_core
Downloader のダウンロード
上記の Ver.0.15.0-preview.16 のページには Downloader がありませんので、Ver.0.14.5 用の物を代用します。実行権限を付与します。
(.venv) $ wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.5/download-linux-x64
(.venv) $ chmod +x ./download-linux-x64
この download-linux-x64 は Linux ELF Binary です。
(.venv) $ file ./download-linux-x64
./download-linux-x64: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=2b1dba2ca2d8496c9f2de5e88246ed9a539215e3,
for GNU/Linux 3.2.0, stripped
(.venv) $ ldd ./download-linux-x64
linux-vdso.so.1 (0x00007ffe1e898000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb111ef2000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb111eed000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb111e02000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb111dfd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb111bf0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb112406000)
download-linux-x64 の option は以下の通りです。
(.venv) $ ./download-linux-x64 --help
Usage: download-linux-x64 [OPTIONS]
Options:
--min
ダウンロードするライブラリを最小限にするように指定
-o, --output <OUTPUT>
出力先の指定 [default: ./voicevox_core]
-v, --version <VERSION>
ダウンロードするvoicevox_coreのバージョンの指定 [default: latest]
--additional-libraries-version <ADDITIONAL_LIBRARIES_VERSION>
追加でダウンロードするライブラリのバージョン [default: latest]
--device <DEVICE>
ダウンロードするデバイスを指定する(cudaはlinuxのみ) [default: cpu] [possible values: cpu, cuda, directml]
--cpu-arch <CPU_ARCH>
ダウンロードするcpuのアーキテクチャを指定する [default: x64] [possible values: x86, x64, arm64]
--os <OS>
ダウンロードする対象のOSを指定する [default: linux] [possible values: windows, linux, osx]
-h, --help
Print help information
適切な option を指定して各種ライブラリをインストールします。
各種ライブラリのダウンロード
Ver.0.15.0-preview.16 と CUDA を指定して各種ライブラリをダウンロードします。
(.venv) $ ./download-linux-x64 --version 0.15.0-preview.16 --device cuda
...(snip)...
INFO 全ての必要なファイルダウンロードが完了しました
model がダウンロードされなかったので追加で落とします。
(.venv) $ wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.15.0-preview.16/model-0.15.0-preview.16.zip
(.venv) $ unzip model-0.15.0-preview.16.zip
(.venv) $ mv model-0.15.0-preview.16 voicevox_core/
Ver.0.15.0-preview.16 用の Python ライブラリのインストール
該当するバージョンの Python ライブラリをインストールします。
(.venv) $ wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.15.0-preview.16/voicevox_core-0.15.0rc16+cuda-cp38-abi3-linux_x86_64.whl
(.venv) $ pip install voicevox_core-0.15.0rc16+cuda-cp38-abi3-linux_x86_64.whl
...(snip)...
Successfully installed annotated-types-0.6.0 pydantic-2.5.3 pydantic-core-2.14.6 typing-extensions-4.9.0 voicevox-core-0.15.0rc16+cuda
(.venv) $ $ pip list
Package Version
----------------- ---------------
annotated-types 0.6.0
pip 23.3.2
pydantic 2.5.3
pydantic_core 2.14.6
setuptools 69.0.3
typing_extensions 4.9.0
voicevox_core 0.15.0rc16+cuda
CUDA 版の voicevox-core 以外に、annotated-types と pydantic、pydantic_core, typing_extensions も依存関係でインストールされました。
動作確認
github に含まれる Python script を実行してみます。既に cuda & cudnn の環境を構築している場合には VOICEVOX core でインストールされる library と重なり誤作動しますので、cuda 関連の library を移動しておきます。
(.venv) $ cd voicevox_core
(.venv) $ mkdir libs_backup
(.venv) $ mv libcu* libs_backup
(.venv) $ cp example/python/run.py .
(.venv) $ python run.py --help
usage: run.py [-h] [--mode MODE] [--dict-dir DICT_DIR] [--text TEXT] [--out OUT] [--style-id STYLE_ID] vvm
positional arguments:
vvm vvmファイルへのパス
options:
-h, --help show this help message and exit
--mode MODE モード ("AUTO", "CPU", "GPU")
--dict-dir DICT_DIR Open JTalkの辞書ディレクトリ
--text TEXT 読み上げさせたい文章
--out OUT 出力wavファイルのパス
--style-id STYLE_ID 話者IDを指定
vvm ファイルには、model-0.15.0-preview.16 ディレクトリ以下の vmm ファイルを指定します。「VOICEVOX:白上虎太郎」の場合は style-id が 12 で 9.vvm の model に含まれています。
(.venv) $ python run.py --mode GPU --dict-dir ./open_jtalk_dic_utf_8-1.11 --text "謹賀新年!2024年、あけましておめでとうございます。今年も宜しくお願いします。" --out ./out.wav --style-id 12 ./model-0.15.0-preview.16/9.vvm
生成された合成音声です。
style-id と vvm ファイルの対応を探すのが少々面倒ですが、見つけてしまえば合成音声は問題なく生成できました。
Ver.0.15.0-preview.16 を使用した結果
Downloader が未だ無かったり、model が download されなかったり、と preview 版ならではの事象は色々とありましたが、Ver.0.15.0-preview.16 の github にある Python script は正常に動作しました。
他の生成 AI 向けに既にインストールしている cuda & cudnn のライブラリを使用するように、VOICEVOX core でインストールされる cuda 周りのライブラリを除外する事で、合成音声を生成する事が出来ました。
まとめ
今回の記事では、2種類の方法で合成音声生成 AI の VOICEVOX core を使用してみました。
- Ver.0.14.5 を Downloader を使用せずにインストールし、Qiita の記事を参考に Python script を作成して使用
- Ver.0.15.0-preview.16 を Downloader を使用してインストールし、github 内の Python script を使用
Qiita の記事を参考に作成した Python script は、Ver.0.15.0-preview.16 では動作しませんでした。Ver.0.14 と Ver.0.15 で Python 周りの使い方が変更になっているようです。
VOICEVOX は、合成音声モデルのライセンスを含めて使いやすいソフトウェアだと思います。
最後に改めて言及しますが「VOICEVOX のアプリケーション版」を使用した方が簡単に合成音声を生成できます。
今回のアイキャッチ画像
雲の切れ間から差し込む太陽光を SDXL で生成しました。逆光となっている木も綺麗に生成されています。
昨年2023年の Amazon アソシエイトで、私のリンクから購入して頂いた中で最も多かったのは、SUS304 のステンレス平ワッシャ φ14 × φ10.5 × 0.8t でした。
この用途は、自転車の V ブレーキを交換した際に生じる隙間を埋める為です。外形も内径も丁度よいサイズで、私も使用しています。以下の記事で説明していますので、ご興味のある方はご覧ください。
コメント