Raspberry Pi で VOICEVOX を使う

これまで家庭内のリマインダーとして AquesTalk Pi を使っていた。これは Raspberry Pi で使える音声合成ツールであり、例えば「きょうは可燃ごみの日です」などと特定の曜日に喋らせたり、時報として時刻を喋らせたりしていた。

AquesTalk Pi - Raspberry Pi用の音声合成アプリ
https://www.a-quest.com/products/aquestalkpi.html

ちょうど最近、その Raspberry Pi が動かなくなった。5年間 24 時間稼働させていたから、Raspberry Pi としては長く運用できたほうである(大抵は数年、あるいは数ヶ月で micro SD カードが読めなくなったりする)。

となると新たにインストールし直しが必要だ。また AquesTalk Pi を使ってもいいが、せっかくなので新しいツールを試してみたい。調べてみたところ、VOICEVOX という萌え声での音声合成ツールが面白そうだ。

VOICEVOX | 無料のテキスト読み上げソフトウェア
https://voicevox.hiroshiba.jp/

ただし VOICEVOX は Raspberry Pi のスペックでは動かすのが厳しいようだ。VMware ESXi 上の Ubuntu に Docker 版の VOICEVOX エンジンをインストールし、API 経由で Raspberry Pi で音声出力することにした。

環境:
・VMware vSphere Hypervisor 7.0U3g(英語環境)
>Ubuntu Server 22.04
・Raspberry Pi Zero W(bullseye lite 32-bit)

(1)Ubuntu に Docker をインストールする。

Ubuntu に Docker をインストールする | SIDfm VM ユーザガイド
https://sid-fm.com/support/vm/guide/install-docker-ubuntu.html

(2)Docker イメージを pull する。

$ sudo docker pull voicevox/voicevox_engine:cpu-ubuntu20.04-latest

(3)Docker コンテナを起動する。

$ sudo docker run --detach -p '0.0.0.0:50021:50021' voicevox/voicevox_engine:cpu-ubuntu20.04-latest

これで以下の URL でドキュメントページにアクセスできるはずだ。

http://{Ubuntu の IP アドレス}:50021/docs

説明:
・公式ドキュメントでは docker run コマンドで -p '127.0.0.1:50021:50021' となっているが、これだと Ubuntu ローカルからしかアクセスできない。-p '0.0.0.0:50021:50021' とすることで、別マシンからもアクセスできるようになる。
・公式ドキュメントでは --rm オプションが付けられているが、これだとコンテナを終了すると毎回コンテナが消えてしまう。僕はコンテナを使いまわしたいので --rm オプションは消した。
・--detach オプションを使うことでバックグラウンドで起動させている。

(4)以下のサイトに紹介されている python スクリプトを作成する。ファイル名を voicevox.py として保存。

Windows/Macに入れたVOICEVOXをPython経由で使う方法
https://ponkichi.blog/voicevox-python-curl

(5)以下のコマンドで話者 ID 8 の「春日部つむぎ」が「きょうは可燃ごみの日です。」と喋る voicevox_000.wav というファイルが生成される。

$ python voicevox.py -id 8 -t きょうは可燃ごみの日です。

話者 ID 一覧は以下のページに載っている。

【C#】VOICEVOXのspeaker一覧を取得するサンプルとID一覧
https://puarts.com/?pid=1830

Raspberry Pi にスピーカーを繋げていれば、以下のコマンドで再生されるはずだ。

$ aplay voicevox_000.wav

音声ファイルの生成と発話も同時に行うには以下のコマンド。

$ python voicevox.py -id 8 -t きょうは可燃ごみの日です。 && aplay voicevox_000.wav

現在時刻を喋らせるには以下。

$ echo "ご主人さま、`date +%k`時`date +%-M`分です。" | xargs python voicevox.py -id 8 -t && aplay voicevox_000.wav

僕の環境では、コマンド実行から発声までタイムラグは5秒程度だった。

cron に登録すれば指定日時に喋らせることができる。

参考:
GitHub - VOICEVOX/voicevox_engine: 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXの音声合成エンジン
https://github.com/VOICEVOX/voicevox_engine/

Dockerコンテナに127.0.0.1でアクセスできない場合の解消方法 - Qiita
https://qiita.com/taichikanaya_1989/items/5f60b55e847a33f8db41

Dockerコンテナのアタッチとデタッチについて - Qiita
https://qiita.com/R_R/items/40d256389b59b66eaf6b

パイプ | について解説( | と | xargs の違いも理解できる!) | だえうホームページ
https://daeudaeu.com/pipe-xargs/


この記事が気に入ったらサポートをしてみませんか?