春雨日記 about me tags

Raspberry Pi等のarm64 Linux環境でVOICEVOXを利用できないか検証してみました.

はじめに

VOICEVOXは高品質な音声合成を行えるソフトウェアで,コアエンジンエディタで構成されています.

現状,arm64 Linuxが正式に(?)サポートされているのはコアのみですが,3つとも動作可能です.

コア

コアは音声合成を行うソフトウェアであり,名前の通りVOICEVOXのコアとなっています.

製品版リリースビルドにはlinux-arm64-cpuが含まれていますが,検証したところ0.12から0.13系までarm64 Linux環境において正常に動作しないことがわかりました. 原因は,音声ライブラリを組み込むように変更した際に利用したソフトウェアがarm系において正しく動作していないからだと考えられます.

どうしたものかと思案しながら開発者のヒホ氏に報告したところ,

  • 「次期バージョンの0.14系はRustに置き換えられているため,影響を受けないと考えられる」
  • 「0.14系は現状arm64-linuxビルドを作らないため,追加するPRを送ってはどうか」

と提案を頂きました.

というわけで,Rust完全に未経験ながら各所を数行書き換えたPRを作成し,皆さんの協力の下無事に取り込まれました

当初よく分からずにク㊙みたいなPR送ってしまいましたが,皆さん優しくて有り難かったです.

言い訳すると,GitHub Actionを全く知らなかったのとヒホさんの返事からdeployを書き換えるだけで大丈夫と盲信してしまった事が原因です.

以後こういう事が無いように努めていきます…

そんなこんなで0.14.0-preview.3からlinux-arm64-cpu付きのビルドがリリースされるようになりました.

cmakeを使ったcppサンプルはUbuntu 20.04 aarch64やArchLinux ARM aarch64にて正常に動作する事を確認しています.

エンジン

エンジンはコアのAPIを提供するソフトウェアです.

arm64 Linux対応が行われていないためソースから起動する必要がありますが,中身はPythonプログラムですのでPythonがちゃんと使える環境において動作は難しくありません.

インストール方法

1.Python3.8.10をインストール

pyenv等を用いてこのバージョンをインストールします.Ubuntu20.04ではaptでこのバージョンが入りました.

(pyenvを使う方法@ArchLinux ARM)

1
2
3
pacman -S base-devel pyenv
pyenv install 3.8.10
pyenv global 3.8.10

2.環境変数をセット

1
export OPENBLAS_CORETYPE=ARMV8

これをしないとpyopenjtalkのcmakeに入る前にSIGILLで落ちます(びっくり).

.bashrcなどに入れておくと安心

3.voicevox_engineダウンロード&依存インストール

1
2
3
4
5
pacman -S cmake libsndfile

git clone https://github.com/VOICEVOX/voicevox_engine.git --depth 1
cd voicevox_engine
python -m pip install -r requirements.txt

結構時間かかるのでゆっくり待ちます.

4.voicevox_coreの用意

1
2
wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.0-preview.3/voicevox_core-linux-arm64-cpu-0.14.0-preview.3.zip
unzip voicevox_core-linux-arm64-cpu-0.14.0-preview.3.zip

5.エンジン起動

1
python run.py --voicelib_dir="./voicevox_core-linux-arm64-cpu-0.14.0-preview.3"

あとはREADMEのような感じで動きます.

エディタ

エディタはNodejsで動くelectronアプリなので,こちらもNodeがちゃんと動く環境なら動作可能です.

ただし,前2つと異なり製品版リソースを借用する必要があるためライセンスには注意が必要です.

インストール方法

1. Nodejsのインストール

16.17.0をインストールします. 私はnvsでやりました.

1
2
3
4
5
export NVS_HOME="$HOME/.nvs"
git clone https://github.com/jasongin/nvs "$NVS_HOME"
. "$NVS_HOME/nvs.sh" install
nvs add 16.17.0
nvs use 16.17.0

2.voicevoxのダウンロード&依存インストール

1
2
3
4
cd ..
git clone https://github.com/VOICEVOX/voicevox.git --depth 1
cd voicevox
npm ci

終わったら.env.productionを.envにリネームし,executionFilePath"run.exe"""にします.

3.リソースをコピー

エンジン側にコアと対応するリソースが含まれていないため,エディタの起動に失敗します.

そのため,適切なspeaker_infoをengine内に入れる必要があります.

!!注意!!

リソースは開発のために限って利用が許可されています.

製品として扱うのはNGです.あくまで検証用途に留めて下さい.

どうしても安全に使いたい場合,ダミーを作ればcoreのみプロプラライセンスでいけると思います(確証は無し).

1
2
3
4
5
6
cd ..
git clone https://github.com/VOICEVOX/voicevox_resource.git --depth 1
rm -r voicevox_engine/speaker_info
cp -r voicevox_resource/character_info voicevox_engine/speaker_info

cd voicevox

4.起動

エンジンを起動した状態で

1
npm run electron:serve

を実行するといつものウィンドウが開きます.

音声合成もバッチリ行えました.

おわりに

VOICEVOXが組み込み環境で利用できるようになれば,しゃべるガジェット等でさらに表現範囲が広がると思います.

特に,エンジンを利用してAPIでしゃべって貰うだけならpipでインストールするだけなのでかなりお手軽です. エディタと違い,LGPL+プロプラライセンスでコアを利用する事が認められていますので,こちらは堂々と利用する事ができるはずです.

Cortex-A53クアッドの環境で試したところ,PCとは比べものにならないですがそれなりの速度で出力してくれました.

できれば製品版エンジンとエディタを作るPR送りたい所なんですが,GitHub Actionでクロスコンパイルするのがめちゃめちゃ面倒そうなのでやり方がわからないです.

QEMUでビルドするのも相当時間掛かりそうだしなぁ…