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サーバー - Qiita
Node.js - Termux Wiki
How to get Visual Studio Code to run on Android with Termux - DEV Community
→Termux 上では惜しくもビルド失敗でした。
わりと os:android , arch:arm64
非対応なパッケージがあるのかもしれません。yarn ならどうだろう?
Electron builds are not available on platform: android
……おのれディケイド。
yarn だとかなり惜しいところまで行きますが、最後に Electron の仕様にはばまれました。
※ issue 投げてきました。
VOICEVOX サーバ
ソースコード
※ 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
https://downloads.raspberrypi.org/
https://ftp.jaist.ac.jp/pub/raspberrypi/
参考文献
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を使おうとしたらエラーになった話 - Qiita
ImportError: libf77blas.so.3: cannot open shared object file: No such file or directory · Issue #262 · Kitt-AI/snowboy · GitHub
https://teratail.com/questions/293268
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とキーボードまとめ - Qiita
Termux - Google Play のアプリ
Package Management - Termux Wiki
Mirrors · termux/termux-packages Wiki · GitHub
Termux で配布されているパッケージと組み合わせれば色々面白いことが出来るかもしれません。手軽な日本語オープンソース TTS デバイスのプロトタイピング環境としてスマホが使えるのは助かります。