Jetson Orin NXでのVOICEVOXを使った音声合成
Jetson Orin NXでの音声合成
Jetsonで色々遊んでいます。
LLMを動かしたりしているのですが、テキスト生成したら一緒に試したいのが音声合成ですね。Pythonで手軽に使える比較的高品質な音声合成のOSSとしてVOICEVOXがあります(公式いわく”無料で使える中品質なテキスト読み上げソフトウェア”)。以前Mac/Linuxで試した記事は以下です。
この記事では、Jetson Orin NXでVOICEVOXを動かします。
JetsonはArmなので少しやっかいなのですが、同じArmのラズパイでVOICEVOXを動かしているueponxさんの以下記事に助けられました(ほぼそのままという噂も)。
ハードウェア
Jetson Orinにはオーディオ端子がありません。手軽な方法としてUSBスピーカーがあります。ラズパイ用に買っていた、以下のUSBスピーカーを接続してテストしました。
Python仮想環境構築
仮想環境を使う場合は、以下コマンドを実行してください。仮想環境が不要な場合は、ここはスキップして次に進んでOKです。
venvをインストールします。
$ sudo apt install python3.10-venv
仮想環境を構築します。
$ mkdir voicevox
$ cd voicevox/
$ python -m venv voicevox
$ source voicevox/bin/activate
テストなどを終えて、最後に仮想環境から抜けるときは以下コマンドを実行してください(仮想環境から抜ける必要なければ実行は不要です)。
$ deactivate
VOICEVOXセットアップ
VOICEVOXのセットアップです。仮想環境が不要な場合はここから実行してください。コマンドの詳細と実行結果のは、冒頭で紹介した記事で確認ください。ここではコマンドのみを記載します。Mac/Linuxでハマったので分かるのですが、実はバージョンがポイントだったりします。
VOICEVOXのインストール
$ wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.0/voicevox_core-0.14.0+cpu-cp38-abi3-linux_aarch64.whl
$ pip install voicevox_core-0.14.0+cpu-cp38-abi3-linux_aarch64.whl
ONNX Runtimeのインストール
$ wget https://github.com/microsoft/onnxruntime/releases/download/v1.13.1/onnxruntime-linux-aarch64-1.13.1.tgz
$ tar zxvf onnxruntime-linux-aarch64-1.13.1.tgz
$ ln -s onnxruntime-linux-aarch64-1.13.1/lib/libonnxruntime.so.1.13.1
open_jtalkの辞書のインストール
$ wget https://jaist.dl.sourceforge.net/project/open-jtalk/Dictionary/open_jtalk_dic-1.11/open_jtalk_dic_utf_8-1.11.tar.gz
$ tar xzvf open_jtalk_dic_utf_8-1.11.tar.gz
動作確認
セットアップが終わったら、テストしてみます。playsoundライブラリをインストールします。
$ pip install playsound
続けて、以下のプログラムを実行すると音声合成してくれます。
from pathlib import Path
from playsound import playsound
from voicevox_core import AccelerationMode, VoicevoxCore
SPEAKER_ID = 2
open_jtalk_dict_dir = "./open_jtalk_dic_utf_8-1.11"
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)
text = "こんにちは"
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()
動作結果です。
動画は少しカットしていますが、実行してから「こんにちは」と発声するまで約5秒といったところです。GPUを使えれば、もっと速くなるかもしれませんが、そこまで試せてはいないです。
SPEAKER_ID
の話者設定はGoogle Colab ではじめる VOICEVOXを参考に設定しましょう。
まとめ
Jetson Orin NXでの音声合成を試してみました。先人の偉大な知恵に助けられて、すんなりと動かすことができました(感謝)。
生成には多少時間がかかりますが、用途によっては使えるのではないかなと思います。GPU使ってどれだけ速くなるのかも気になるところですね。
関連記事
Discussion