Andriod上のTermuxでずんだもんにしゃべってもらう

機械学習
Amazonのアソシエイトとして、当メディアは適格販売により収入を得ています。

経緯

rakuten hand 5gを貰ってみたものの、特に使い道がなかったのでずんだもんにしゃべってもらうことにした

本文

termuxから音を出すまで

fdroidからインストール

F-Droid - Free and Open Source Android App Repository
F-Droidは、Android向けのFOSS(フリーオープンソースソフトウェア)をインストールできるカタログです。お使いの端末で簡単に閲覧、インストール、更新の確認ができます。

Fdroidをインストールしリポジトリの更新が終わった後、termuxを検索し、”termux Terminal emulator with packages”というものをインストールします。

インストールが終わった後termuxを起動すると文字とキーボードがある画面が表示されたら成功です。

termuxの下準備

pkg update

アップデートしているとき新しいものに置き替えるか、そのままにするか聞かれますが、どちらでもいいです

pkg install git proot wget vim pulseaudio -y

必要なパッケージをインストールします。

echo "pulseaudio --start --exit-idle-time=-1" >> .bashrc &&echo "pacmd load-module module-native-protocol-tcp auth-ip-acl=127.0.0.2 auth-anonymous=1">> .bashrc && echo "bash ./ubuntu-in-termux/startubuntu.sh" >> .bashrc

音声を出すのに必要な設定と、この後入れるubuntuを自動起動するための設定です。

ubuntuを入れる

termuxだけではvoicevoxを使うのに必要な機能が足りないのでubuntuというものを上に乗っけます。

git clone https://github.com/MFDGaming/ubuntu-in-termux.git
cd ./ubuntu-in-termux

ubuntuを入れるスクリプトをダウンロードし、ダウンロードしてきたフォルダーに移動します。

bash ./ubuntu.sh

必要なものをダウンロードするか聞かれるので、Yを押します。

ubuntuの設定

初期設定
bash ./startubuntu.sh

今回は手動でubuntuを起動しますが、次回からは自動でやってくれます。

apt update && apt install vim sox sudo pulseaudio wget git cmake curl python3-pip p7zip-full build-essential libbz2-dev libdb-dev libreadline-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libsqlite3-dev libssl-dev zlib1g-dev uuid-dev tk-dev vlc -y

必要なものをインストールします。

sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'
作業用ユーザーを追加

今までrootで作業をしてきましたが、rootだと音を出せないので、新たなユーザーを作りそのユーザーとして作業します。

今回は名前をnanasiにしますが、別の名前でも大丈夫です。

useradd -D -s /bin/bash

デフォルトシェルがshになっている(古い、使いづらい)のでbashにします。

useradd nanasi -m
passwd nanasi

ユーザーを作成します。-mオプションはホームフォルダを作るオプションです。

そのあとパスワードを設定します。簡単なものでいいです。

echo "nanasi ALL=(ALL) ALL">> /etc/sudoers

なぜかsudoグループにnanasiを追加できなかったので、怒りの直書きです。

理由を知っている人は教えてください

echo "cd /home/nanasi && su nanasi" >> .bashrc

こんどから起動時に自動的にnanasiになります。

作業ユーザーの設定

音が出るように設定します。

su nanasi
cd 

nanasiになり、ホームフォルダに移動します。

echo "export PULSE_SERVER=127.0.0.2 /nalias cvlc='cvlc --play-and-exit'" >> .bashrc

音を出すための設定を追加します。

ここまで来たらAndroidの通知欄からexitしてもう一度termuxを起動してください。

androidのホームに戻っても止まりません

音が出るかテスト

wget https://sound.jp/musicyou/s/Peak_test_A.wav

テスト音声を拾ってきます。

cvlc --play-and-exit Peak_test_A.wav

ここまで正しく設定していれば多少ノイズが乗りながら、音楽が流れるはずです。

pythonのインストール

wget https://www.python.org/ftp/python/3.11.1/Python-3.11.1.tar.xz
xz -dc Python-3.11.1.tar.xz | tar xfv -
cd Python-3.11.1
./configure
make -j8
sudo make altinstall

python3.11をダウンロードし,ビルドしインストールします。

スレッド数が8無い場合は減らしてください

非公式Pythonダウンロードリンク - Python downloads

voicevoxの設定

voicevoxエンジン

cd
git clone https://github.com/VOICEVOX/voicevox_engine

ホームディレクトリに戻りvoicevoxエンジンをダウンロードします

python3.11 -m pip install -r requirements.txt

必要なライブラリを入れます。

voicevoxコア

wget https://github.com/VOICEVOX/voicevox_core/releases/download/0.14.3/download-linux-arm64
chmod +x ./download-linux-arm64 && ./download-linux-arm64
VOICELIB_DIR=/home/nanasi/voicevox_engine/voicevox_core/
python3.11 ./run.py --voicelib_dir=$VOICELIB_DIR

合成する

前のコマンドを中断せずホーム画面に戻りtermuxのアイコンを長押しし、New sessionを選んでください

echo -e "#\\!/bin/bash\n\n# 引数が指定されているか確認\nif [ \$# -eq 0 ]; then\n    echo \"エラー: 引数が必要です。\"\n    exit 1\nfi\n\n# 引数を使ってcurlコマンドを実行\ncurl -s -X POST \"127.0.0.1:50021/audio_query?speaker=1\" --get --data-urlencode \"text=\$1\" > query.json\n\ncurl -s -H \"Content-Type: application/json\" -X POST -d @query.json \"127.0.0.1:50021/synthesis?speaker=1\" > audio.wav\nplay audio.wav" > gousei.sh

gousei.shを作ります。

bash ./gousei.sh "おめでとうございます!成功です"

ほかの文章に変えて合成ができることを確認してください

日本語入力をするにはキーボードの上のtemuxの追加のボタンがあるところを左にスワイプします。

まとめ

rakuten hand 5g君でやったところ(多分)メモリ不足でカックカクになったが、一応合成はできた

pixel6aを使ったところ快適に合成ができた。