Info
#

2025/06/23 (Mon) 05:25:29 GMT+0000 (UTC)
Type: PC | System: Unknown | Browser: Unknown ... More

Menu
.
+
#
  • @ /note/bash/post-RunAquesTalkPiOnX64
Content
.
+
#

Post: Nekoformi
Date: 2024/04/23

Run AquesTalk Pi on x64

Linux上で「ゆっくり」にメッセージを喋らせたいと思ったのですが、どうも複雑な状況らしいです。

  • 所謂「ゆっくりボイス」と呼ばれる音声は、株式会社アクエストが提供するAquesTalkというエンジンによって生成できる。
  • エンジンは複数の種類があり、AquesTalk1AquesTalk2AquesTalk10といった製品が公開されている。
    • 解説動画に登場する「ゆっくり霊夢」や「ゆっくり魔理沙」はAquesTalk1の音声である。
  • エンジンはプログラムに組み込むもの(API)であり、基本的に関数を呼び出して使用する。
    • サンプルとして簡単なコードやアプリケーションも用意されている。
    • エンジン単体では動作しないため、ターミナル上で実行するには簡易的なプログラムの作成とビルドが必要になる。
  • AquesTalkを使用したアプリケーションとして公式からAquesTalkPlayer等が提供されている他、有志によって棒読みちゃんゆっくりMovieMaker等も開発されている。
  • 音声を生成するためにはテキスト情報(音声記号列)を入力する必要があり、日本語から音声を出力する場合は言語処理エンジンAqKanji2Koeという変換器が必要になる。
  • エンジンには複数のライセンスがあり、利用方法に応じて購入する必要がある。
    • 詳細は公式ウェブサイトの音声合成ライセンスの種類・購入を参照するように。
    • エンジンが組み込まれているアプリケーションを使用して個人利用に該当しない(例:収益化している)コンテンツを作成・公開する場合は使用ライセンスを購入する必要がある。
    • プログラムへ組み込むためのエンジンは開発ライセンスを購入して製品版パッケージ(SDK)を入手する必要がある。
    • 現状ではLinux向けのアプリケーションが存在しないため、評価版を使用するか製品版を購入する必要がある。
    • 評価版は「ナ行、マ行」の音韻が「ヌ」になる。
      • 「ゆっくりしていってヌッッッ!」
  • 公式が提供するアプリケーションの一つに、Raspberry Pi上で動作するAquesTalk Piが存在する。
    • 変換器が組み込まれているため、通常言語から音声を生成できる。
    • 非営利の個人利用であれば無償で使用できる。
    • ARMベースで作成されたプログラムであるため、一般的なパソコン(x64やx86等)では使用できない。
    • qemu-user-static等のエミュレーターを使用すれば、パソコンとプログラムのアーキテクチャーが異なる場合でも動作する。

ということなので、AquesTalk Piqemu-user-staticを使用すれば上手く実現できるかもしれません!

How to Setup

  1. AquesTalk Piをダウンロード・展開します。
  2. AArch64で実行するため、実行モジュール:AquesTalkPiを64ビット版に置換します。
Bash
+
#
1:
2:
3:
mkdir bin32 mv AquesTalkPi bin32/AquesTalkPi cp bin64/AquesTalkPi AquesTalkPi
  1. qemu-user-staticをインストールします。
Bash
+
#
1:
sudo apt -y install qemu-user-static
  1. 環境変数を設定します。
    • 定義された変数(シェル変数)はターミナル(シェル)を閉じると消えてしまうため、恒久的に変数を定義したい場合はコマンドを~/.bash_profile等に記述する必要があります。
Bash
+
#
1:
export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/

How to Use

  1. 引数に喋らせたい文字列を入力して、出力されたデータをaplayに渡して再生します。
Bash
+
#
1:
./AquesTalkPi "ゆっくりしていってね!" | aplay
  1. オプションを指定することでファイルを読み込んだりキャラクターを変えることができます。
Bash
+
#
1:
echo "ゆっくりしていってね!" | ./AquesTalkPi -v f2 -f > export.wav
  1. 他の機能については./AquesTalkPi -hブログ記事を参照してください。

How to Use (Advance 1)

せっかくなので、テキストファイルから行ごとに音声ファイルを生成するスクリプトを作成します。

/usr/local/bin/generateYukkuriVoice
+
#
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
#!/bin/bash export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ app="/home/user/Application/AquesTalk Pi/AquesTalkPi" target="$1" output="$2" option="-b -s 120" function generateAudioData() { local app="$1" local output="$2" local option="$3" local text="$4" if [[ "$text" =~ ^([0-9]{4}):([0-9]+):(.+)$ ]]; then local index="${BASH_REMATCH[1]}" local char="${BASH_REMATCH[2]}" local text="${BASH_REMATCH[3]}" echo "Generate Data ... ${index}.wav" "$app" -v f$char $option "$text" > "${output%/}/${index}.wav" fi } export -f generateAudioData nl -w4 -nrz -s":" -bp^[^\;] "$target" | xargs -i bash -c "generateAudioData \"${app}\" \"${output}\" \"${option}\" \"{}\""
  • Bashのコマンドをファイルに記述する際は、1行目にシバン・シェバング(#!/bin/bash)を書くことで機能を明示します。
  • 文字列に空白( )が含まれる場合は空白をエスケープ(\ )するか、引用符(")で囲む必要があります。また、引用符の内部で引用符を記述する場合も同様にエスケープ(\")する必要があります。
  • 変数展開とパターンマッチ(${変数名(#|##|%|%%)パターン})を用いることでディレクトリーの抽出やパスの正規化を行います。
  • 定義された関数(シェル関数)はxargsコマンドで呼び出せないため、exportコマンドと-fオプションで関数を環境変数に設定します。また、xargsコマンドではbashコマンドに-cオプションを付与することで文字列をコマンドとして実行します。
  • スクリプトは汎用性を考慮してPATHが通る場所に設置することが推奨されます。

スクリプトを実行すると、以下の結果となります。

Bash
+
#
1:
$ vi ~/script.txt
~/script.txt
+
#
1:
2:
3:
4:
5:
6:
7:
; コメントアウトされた行や空白の行は無視されます! 1:こんにちは、ゆっくり霊夢です。 2:こんにちは、ゆっくり魔理沙だぜ。 1:マイクテスト、アーアーアー。 2:マイクテスト、アーアーアー。
Bash
+
#
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
$ mkdir ~/export $ generateYukkuriVoice ~/script.txt ~/export Generate Data ... 0001.wav Generate Data ... 0002.wav Generate Data ... 0003.wav Generate Data ... 0004.wav $ ls ~/export 0001.wav 0002.wav 0003.wav 0004.wav

How to Use (Advance 2)

ついでに、リアルタイムで会話するためのスクリプトも作成します。

/usr/local/bin/speakYukkuriVoice
+
#
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
#!/bin/bash export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/ app="/home/user/Application/AquesTalk Pi/AquesTalkPi" text="" option="-b -s 120" while true; do read -p "" text [[ "$text" = "exit" ]] && exit 0 "$app" $option "$text" | aplay -q done

スクリプトを実行すると、以下の結果となります。

Bash
+
#
1:
2:
3:
4:
5:
$ speakYukkuriVoice こんにちは! ゆっくりしていってね! exit

Attention

正直なところ、グレーな使い方かもしれないので…必要があればライセンスを買いましょう!