Bash
+
#
1: 2: 3:
mkdir bin32
mv AquesTalkPi bin32/AquesTalkPi
cp bin64/AquesTalkPi AquesTalkPi
Post: Nekoformi
Date: 2024/04/23
Linux上で「ゆっくり」にメッセージを喋らせたいと思ったのですが、どうも複雑な状況らしいです。
ということなので、AquesTalk Piとqemu-user-staticを使用すれば上手く実現できるかもしれません!
AquesTalkPi
を64ビット版に置換します。1: 2: 3:
mkdir bin32
mv AquesTalkPi bin32/AquesTalkPi
cp bin64/AquesTalkPi AquesTalkPi
1:
sudo apt -y install qemu-user-static
~/.bash_profile
等に記述する必要があります。1:
export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/
aplay
に渡して再生します。1:
./AquesTalkPi "ゆっくりしていってね!" | aplay
1:
echo "ゆっくりしていってね!" | ./AquesTalkPi -v f2 -f > export.wav
./AquesTalkPi -h
やブログ記事を参照してください。せっかくなので、テキストファイルから行ごとに音声ファイルを生成するスクリプトを作成します。
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}\" \"{}\""
#!/bin/bash
)を書くことで機能を明示します。
)が含まれる場合は空白をエスケープ(\
)するか、引用符("
)で囲む必要があります。また、引用符の内部で引用符を記述する場合も同様にエスケープ(\"
)する必要があります。${変数名(#|##|%|%%)パターン}
)を用いることでディレクトリーの抽出やパスの正規化を行います。xargs
コマンドで呼び出せないため、export
コマンドと-f
オプションで関数を環境変数に設定します。また、xargs
コマンドではbash
コマンドに-c
オプションを付与することで文字列をコマンドとして実行します。スクリプトを実行すると、以下の結果となります。
1:
$ vi ~/script.txt
1: 2: 3: 4: 5: 6: 7:
; コメントアウトされた行や空白の行は無視されます!
1:こんにちは、ゆっくり霊夢です。
2:こんにちは、ゆっくり魔理沙だぜ。
1:マイクテスト、アーアーアー。
2:マイクテスト、アーアーアー。
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
ついでに、リアルタイムで会話するためのスクリプトも作成します。
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
スクリプトを実行すると、以下の結果となります。
1: 2: 3: 4: 5:
$ speakYukkuriVoice
こんにちは!
ゆっくりしていってね!
exit
正直なところ、グレーな使い方かもしれないので…必要があればライセンスを買いましょう!