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

ソフトウェアの名前を間違って紹介していました。

×VOICEBOX
○VOICEVOX

申し訳ありませんでした。

※ VOX と聞くとアニメ輪廻のラグランジェの登場メカ VOX シリーズを連想します。あと天声人語


ちょっとものすごいのが来たので、取り急ぎリンクをば。

https://twitter.com/hiho_karuta

↑現在窓の森が一時的にダウンロードミラーを提供中。

Linux 環境で Wine から動かす試みを後程 Tips として本トピックのリプライに投稿します。 →投稿しました。

将来 ITA コーパス読唇データベースに基づいた優秀な OSS の日本語 Speach Speech To Text が登場すれば、こちらと組み合わせて様々な使い道が考えられるわけでして。情報の衝撃でただいま混乱しております。

他の OSS Japanese Text to Speech 及び Speech To Text(Speech Recognition)

OpenJTalk(TTS)
http://open-jtalk.sourceforge.net/

Common Voice(TTS/STT)

GitHub - julius-speech/julius: Open-Source Large Vocabulary Continuous Speech Recognition Engine(STT)

※自分が知っている中では最古参級の日本語 SpeechToText 。Julius と VOICEBOX VOICEVOX の連携も試したいところです。

余談

ARM 系でサーバ側のビルドが通れば、ソフトの要求スペック次第ですが、Raspberry PiOSHW な Banana Pi を使って色々な組み込み系機器をしゃべらせることが出来るようになるかもしれません。

例えば OSHW 版の日本語スマートスピーカー( AI スピーカー)というのも面白そうです。

個人的には、パワードスーツに使えるオープンソースな可愛らしい声音のAIアシスタントへの道が開けた点を嬉しく思います。


実験結果
なかなか Wine で上手く動きません。


wine-6.5(Staging)on Slackware x64 →×
※「エンジン起動中」から先に進まず。


wine-crossover(wine-5.0)on macOS Big Sur →×
※「エンジン起動中」から先に進もうとして OS ごとコケる(自分のテスト環境は旧式弁当箱 macMini なので、最新のハードなら運用まで行けるかもしれません)。←入れてあった BitDefender を OFF にしたらコケなくなりました。

配布ファイルの感じでは極端な Windows べったりにも見えなかった(Python 系のサーバ+ Chromium ベースの GUI だと思います、多分)ので、ソースが公開されれば環境に合わせたコンパイルだけで何とかなるかも?

※ Catalina 以降の macOS における Wine は以下が参考になりました。

「いいね!」 2

Tips:wine + Linux(or FreeBSD/macOS)で VOICEVOX を動作させるには

エンジン起動中のところで躓くので、エンジンを先に起動出来ていれば良いのでは?

run.exe がエンジン(サーバ)起動コマンドでした。

run.exe を先に起動し、その後 VOICEVOX.exe を立ち上げるとアプリのメイン画面まで行けました。

少し前にクライアントのソースコードが上がっていました。 ElectronVue.js 製でした。この感じだと少なくともクライアント側は ARM デバイス上で動きますね、たぶん。

001.wav

002.wav

クレジット:
Voice: ずんだもん(001.wav)
Voice: 四国めたん(002.wav)

x86_64 linux からは問題なく動きます。先に wine から Windows 版 VOICEVOX サーバを起動し、その後 README 通りに “.env"ファイルで VOICEVOX サーバの ip(デフォルトでは http://127.0.0.1:50021)を指定して npm run electron:serve でクライアントを起動。”.env"ファイルの run.exe 指定行はとりあえず削除して動かしてみました。

サーバーに使われているのは Uvicorn

サーバーのソースも来ました。pyopenjtalk のビルドが通るなら ARM でも行けそうな気配です。自分の x64 Linux 環境では「gcc-5 と g++-5 が見つからない」旨のエラーメッセージが出たので、PATH の通っているディレクトリに 5.x 系 gcc 及び g++ へのリンクをそれぞれ gcc-5 及び g++-5 の名前で張ることで無事コンパイル出来ました。

ARM+Wine or Windows
遠回りですが、Nuitka で ARM 向けに Windows バイナリをクロスコンパイル出来るようになれば ARM 上の Wine 、ラズパイや Android 上の Wine で VOICEVOX サーバが走るはず。もしくはARM 64 Windows 10 を直接走らせてそこでコンパイルするやり方も思いつきます。

x64 Linux 上の wine からの VOICEVOX で wavファイルの出力は可能でしたが、音声出力は OS 側に上手く繋がらないようです。wine で実用するにはもうひと工夫必要かもしれません。 →サーバーの問題ではなくクライアントの問題でした。ソース からインストールして OS ネイティブ版の VOICEVOX クライアントを用意することで、無事音声も出力されました。

※ UNIX 系 OS のサウンド関連は割と混沌。
サウンドサーバ - Wikipedia
Sound server - Wikipedia
Sound - WineHQ Wiki
MIDI - WineHQ Wiki
Core Audio (Apple) - Wikipedia

001.wav

002.wav

出力されたファイルは

  • 001.wavが「きのうよしのやいったんですよよしのや」
  • 002.wavが「ふーん」

に対応していました。セリフの順に連番が振られています。

クレジット:
Voice: 四国めたん(001.wav)
Voice: ずんだもん(002.wav)

トラブルシューティング

上手く起動しない場合、Visual C++ ランタイムを入れると動作するかもしれません。

最新のサポートされる Visual C++ のダウンロード

※ 再配布可能とされているMSVCのパッケージであっても、Wine で利用する場合は API と独禁法と利用規約の問題等、色々解釈が難しい部分があります。

※ Wine のネイティブ DLL と衝突するので問題なく動く場合は試さない方が良いです。

「いいね!」 1

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 デバイスのプロトタイピング環境としてスマホが使えるのは助かります。

「いいね!」 1