Jetson Orin NXでのVOICEVOXを使った音声合成

2024/11/06に公開

Jetson Orin NXでの音声合成

Jetsonで色々遊んでいます。
https://zenn.dev/karaage0703/articles/04ca258a89a50e

LLMを動かしたりしているのですが、テキスト生成したら一緒に試したいのが音声合成ですね。Pythonで手軽に使える比較的高品質な音声合成のOSSとしてVOICEVOXがあります(公式いわく”無料で使える中品質なテキスト読み上げソフトウェア”)。以前Mac/Linuxで試した記事は以下です。

https://zenn.dev/karaage0703/articles/0187d1d1f4d139

この記事では、Jetson Orin NXでVOICEVOXを動かします。

JetsonはArmなので少しやっかいなのですが、同じArmのラズパイでVOICEVOXを動かしているueponxさんの以下記事に助けられました(ほぼそのままという噂も)。

https://qiita.com/ueponx/items/186a7c859b49d996785f

ハードウェア

Jetson Orinにはオーディオ端子がありません。手軽な方法としてUSBスピーカーがあります。ラズパイ用に買っていた、以下のUSBスピーカーを接続してテストしました。

HM05-5010

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()

動作結果です。

https://x.com/karaage0703/status/1854156217377329643

動画は少しカットしていますが、実行してから「こんにちは」と発声するまで約5秒といったところです。GPUを使えれば、もっと速くなるかもしれませんが、そこまで試せてはいないです。

SPEAKER_IDの話者設定はGoogle Colab ではじめる VOICEVOXを参考に設定しましょう。

まとめ

Jetson Orin NXでの音声合成を試してみました。先人の偉大な知恵に助けられて、すんなりと動かすことができました(感謝)。

生成には多少時間がかかりますが、用途によっては使えるのではないかなと思います。GPU使ってどれだけ速くなるのかも気になるところですね。

関連記事

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

Discussion