オープンソース日本語 TextToSpeech ソフトウェア VOICEVOX の紹介と Tips

Tips:ARM(Raspberry Pi / Windows10 for ARM64 / Android)で VOICEVOX サーバを動作させるには

Tips に入れてありますが、OSHW 的には多分こちらが本編。

ARM / ARM64 エミュレータ(開発/実行/実験環境)

QEMU(汎用エミュレータ)

$ qemu-system- # タブキーで候補を表示
qemu-system-aarch64       qemu-system-microblaze    qemu-system-or1k          qemu-system-sparc
qemu-system-alpha         qemu-system-microblazeel  qemu-system-ppc           qemu-system-sparc64
qemu-system-arm           qemu-system-mips          qemu-system-ppc64         qemu-system-tricore
qemu-system-cris          qemu-system-mips64        qemu-system-riscv32       qemu-system-unicore32
qemu-system-hppa          qemu-system-mips64el      qemu-system-riscv64       qemu-system-x86_64
qemu-system-i386          qemu-system-mipsel        qemu-system-s390x         qemu-system-xtensa
qemu-system-lm32          qemu-system-moxie         qemu-system-sh4           qemu-system-xtensaeb
qemu-system-m68k          qemu-system-nios2         qemu-system-sh4eb 

対応ハードがたくさんあります。また、QEMU は Windows と macOS では Intel HAXM によって、Linux では KVM によって仮想化支援を受けられます。

QEMU

参考文献

GitHub - tobimensch/aqemu: Official AQEMU repository - a GUI for virtual machines using QEMU as the backend

QEMU - ArchWiki

ARM CPU のQEMUによるエミュレーションの高速化 - Qiita

Accelerating QEMU on Windows with HAXM - QEMU

GitHub - intel/haxm: Intel® Hardware Accelerated Execution Manager (Intel® HAXM)

Android Emulator のハードウェア アクセラレーションを設定する | Android デベロッパー

コマンドラインからのエミュレータの起動 | Android デベロッパー

VOICEVOX クライアント

ソースコード

インストールから起動まで

$ git clone https://github.com/Hiroshiba/voicevox.git # ソースをダウンロード
$ cd voicevox # カレントディレクトリを移動
$ cp .env.production .env # 環境設定ファイルの用意
$ nano .env # 環境設定ファイルの編集
$ npm install # 依存解決
$ npm run electron:serve # 起動

色々な環境で動きそうです。

Termux 上で Node.js が動くそうです。よって、もしかしたら Android 上で VOICEVOX のクライアントが動くかもしれません。

参考文献

Androidでtermuxを使ってnode.js+WEBサーバー #Node.js - Qiita
Node.js - Termux Wiki
How to get Visual Studio Code to run on Android with Termux -- Mar 2023 Update - DEV Community

→Termux 上では惜しくもビルド失敗でした。

わりと os:android , arch:arm64 非対応なパッケージがあるのかもしれません。yarn ならどうだろう?

Electron builds are not available on platform: android ……おのれディケイド。

yarn だとかなり惜しいところまで行きますが、最後に Electron の仕様にはばまれました。

issue 投げてきました。

VOICEVOX サーバ

ソースコード

https://twitter.com/hiho_karuta/status/1421889859094941697

※ engine(サーバ)は現在調整中とのこと。

依存パッケージのインストール例
$ python3 -m venv voicevoxenv # 環境構築
$ source ./voicevoxenv/bin/activate # 有効化
(voicevoxenv) $ git clone https://github.com/Hiroshiba/voicevox_engine.git # ソースのダウンロード
(voicevoxenv) $ cd ./voicevox_engine # カレントディレクトリを移動
(voicevoxenv) $ pip install -r requirements.txt -r requirements-dev.txt # 依存と構築依存を解決
起動例
(voicevoxenv) $ python3 run.py

※ 「2021/08/02 2:28現在エラーが出ます」とのこと。本格的に試せるのはエラー解消後から。

Raspberry Pi OS

Raspberry Pi OS – Raspberry Pi

参考文献

GitHub - dhruvvyas90/qemu-rpi-kernel: Qemu kernel for emulating Rpi on QEMU

フリーのエミュレータQEMUを使おう@謎の処理系 SunOS 4.1.4 with Linux/FreeBSD

QEMU for windowsでRaspbian Jessieを動作させる - Qiita

Raspberry Pi 3/4 (RaspberryPi OS 64bit) 一括セットアップ手順: node-redでスマートホーム用 - Qiita

QEMU4.0.0 + Raspbian Buster による RaspberryPi のエミュレーション環境構築(超シンプル手順バージョン) - Qiita

Mac上にRaspberry Pi OS(RaspbianBuster)をQEMUエミュレーターで動かす(Raspi2、Raspi3マシン) - Qiita

Linux上にRaspberry Pi OS(RaspbianBuster)をQEMUエミュレーターで動かす(Raspi2、Raspi3マシン) - Qiita

Windows10上にRaspberry Pi OS(RaspbianBuster)をQEMUエミュレーターで動かす(Raspi2、Raspi3マシン) - Qiita

1.11. FUSE Mounting of Virtual Disk Images

5.11. vboximg-mount: A Utility for FUSE Mounting a Virtual Disk Image

command line - Mounting Disk Image in Raw format - Ask Ubuntu

How to mount a raw disk image in Linux - Jeffels.net

qemu-rpi-kernel を使い、ネットワーク設定は QEMU のデフォルトを利用、そして OS Image にraspios-buster-armhf-full.img を指定する起動スクリプトの記述例

#!/bin/sh
qemu-system-arm \
  -M versatilepb \
  -cpu arm1176 \
  -m 256 \
  -drive "file=2021-05-07-raspios-buster-armhf-full.img,if=none,index=0,media=disk,format=raw,id=disk0" \
  -device "virtio-blk-pci,drive=disk0,disable-modern=on,disable-legacy=off" \
  -dtb versatile-pb-buster-5.4.51.dtb \
  -kernel kernel-qemu-5.4.51-buster \
  -append 'root=/dev/vda2 panic=1' \
  -no-reboot

このときのディレクトリの中身

$ ls
2021-05-07-raspios-buster-armhf-full.img  kernel-qemu-5.4.51-buster  run.sh  versatile-pb-buster-5.4.51.dtb

qemu-rpi-kernel のダウンロード

$ git clone https://github.com/dhruvvyas90/qemu-rpi-kernel.git

ビルドの際、Raspberry Pi OS with desktop and recommended software(2021-05-07-raspios-buster-armhf-full.img)に追加インストールした debian パッケージ

$ sudo apt install libatlas-base-dev cmake ninja-build

※ 「libf77blas.so.3 と cmake が無いよ」とエラーを吐いたので上記 3 パッケージを追加。Lite やスタンダード Desktop の場合、もしかしたら追加すべきパッケージが増えるかもしれません。

参考文献

Raspberry PiでBokehを使おうとしたらエラーになった話 #Python - Qiita
ImportError: libf77blas.so.3: cannot open shared object file: No such file or directory · Issue #262 · Kitt-AI/snowboy · GitHub
ラズパイでnumpyをインストールしたのにインポートできない
python 3.x - ImportError: libf77blas.so.3: cannot open shared object file: No such file or directory Raspberry Pi3 - Stack Overflow

スクリーンショット

※ QEMU からの脱出は Ctrl+Alt+g で。

Raspberry Pi Raspberry Pi OS 上で VOICEVOX サーバ(voicevox_engine)の構築に成功!!

※ ↑嬉しさの余り表記を誤りました。失礼いたしました。

※ ソースコードは現在工事中であり、「each_cpp_forwarder が見つかりません」で止まるのは今の時点では正常な反応と思われます。

※ 今回パッケージ romkan の setup.py build がコケて、その後 setup.py install が通っていました。確か romkan はピュアパイソンだったような……それで build がコケたのかな?よくわかりません。

Windows10 on ARM64

ARM 版 Windows のドキュメント | Microsoft Docs

参考文献

ラズパイ4にWindows 10 on ARM64をインストールする - Qiita

ラズパイで「Windows 10 on ARM64」を動かす(インストール編):名刺サイズの超小型PC「ラズパイ」で遊ぶ(第38回)(1/2 ページ) - ITmedia NEWS

Booting ARM64 builds of Windows 10 in QEMU | Rafael Rivera

How to run Windows 10 on ARM or Ubuntu for ARM64 in QEMU on Apple Silicon Mac · GitHub

Running Windows 10 for ARM64 in a QEMU virtual machine | Technical Blog

How to Install Windows 10 for ARM in QEMU

How to run Windows 10 on ARM or Ubuntu for ARM64 in QEMU on Apple Silicon Mac - Bpackingapp - Bpacking in Viet Nam

Windows 10 ARM64 on QEMU | Fun with virtualization

qemu-system-aarch64 crash on qemu 6.0 - Windows 10 (#367) · Issues · QEMU / QEMU · GitLab

pyopenjtalk がビルド出来るかどうかが勝負の分かれ目。

Android

Android - WineHQ Wiki

Index of /wine-builds/android

Android 上では恐らく pyopenjtalk がビルド出来無い為、Windows10 on ARM64 上で作成した、もしくはクロスコンパイルで生成した VOICEVOX サーバの ARM64 向け exe を Wine for Android で動かす形になると思います。

なお、もし Termux 等でビルドが通るなら苦労なく voicevox_engine を動かせるかもしれません。Termux で通りました。

ビルド通った!

驚きです。Termux 上で voicevox_engine のビルドが通りました。依存関係でインストールされる numpy のビルドが通るので、同じく numpy に依存する OpenCV-Python も行けるかもしれません。

追加でインストールしたもの
git python cmake ninja

パッケージ導入コマンド

pkg install git python cmake ninja

※ 実験時、パッケージリポジトリのサーバが落ちていたので配布元ミラーを切り換える必要がありました。

Termux の最新版が F-Droid 版のみとなった為でした。

参考文献

UserLAnd/Termuxとキーボードまとめ #Linux - Qiita

Termux - Google Play のアプリ

Package Management - Termux Wiki

Mirrors · termux/termux-packages Wiki · GitHub

Termux で配布されているパッケージと組み合わせれば色々面白いことが出来るかもしれません。手軽な日本語オープンソース TTS デバイスのプロトタイピング環境としてスマホが使えるのは助かります。

「いいね!」 1