やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Raspbianでゆっくり音声合成(AquesTalkPi)

 テキストから話し声を再生する。いわゆるTextToSpeech。

情報源

手順

  1. インストール

1. インストール

 私はAquesTalk Piのサイトからダウンロードできなかった。昔はスクロールしたら同意してDownloadボタンが有効になったと思ったが……。以下コマンドもNotFound。公開やめたのかな?

wget http://www.a-quest.com/download/package/aquestalkpi-20130827.tgz
wget http://www.a-quest.com/download/package/aquestalkpi-20130827.tar.gz

 仕方ないので昔ダウンロードしたファイルを使う。

 解凍(展開)して環境変数パスを通す。

ヘルプ

 $ AquesTalkPi --help
ERR: invalid parameter
USAGE: AquesTalkPi [-h] [-s speed] [-g volume] [-b] [-v f1|f2] [-k] [-o out.wav] [-f file | text]
$ man AquesTalkPi
AquesTalkPi というマニュアルはありません
マニュアルページが利用できない場合のヘルプについては 'man 7 undocumented'を見てください。

使ってみる

パス指定必須……

$ AquesTalkPi "おはよう" | aplay
ERR: cannot find or initialize Dictionary(200)
aplay: playback:2787: リードエラー

 エラー。絶対パスで指定すると成功する。

~/root/sys/env/tool/aquestalkpi/AquesTalkPi こんにちは | aplay

 あるいは相対パス

cd ~/root/sys/env/tool/aquestalkpi
./AquesTalkPi こんにちは | aplay
AquesTalkPi こんにちは | aplay

 つまり選択肢は以下。

  • cdする。AquesTalkPiインストールパスに。
  • 絶対パス指定する

 環境パスを通して名前だけで実行するとエラー……。以下のようにすると良いか?

AqTk="${HOME}/root/sys/env/tool/aquestalkpi/AquesTalkPi"
$AqTk ".不便やな" | aplay

最初の一文字の音が小さい

 バグ? 最初に句点をつけてやると改善する。,, , .でも可。

AquesTalkPi 。こんにちは | aplay

 おそらく,, のほうが空白時間が短い。

AquesTalkPi ",こんにちは" | aplay

引数

引数 意味 default
-s 速さ 50300 100 AquesTalkPi -s 150 ",こんにちは" | aplay
-g 音量 0100 ※1 100 AquesTalkPi -g 50 ",霊夢だよ | aplay
-v 声種 f1,f2 ※2 f1 AquesTalkPi -v f2 ",魔理沙だよ。" | aplay
  • ※1 音量は100までらしいが、200まで対応しているように聞こえる。ただし音割れする
  • ※2 他に声種がないか試したが無さそう
引数 意味 default
-f ファイルから読む(先頭1行のみ) `` `` AquesTalkPi -f /tmp/a.txt | aplay
-o ファイルへ出力する `` `` AquesTalkPi ",こんにちは" -o /tmp/work/a.wav ※3
  • ※3 AquesTalkPi ",こんにちは" > /tmp/work/a.wavと同じ
引数 意味 default
-k 音声記号列を入力する ※4 `` `` AquesTalkPi -k "ユックリ_シテイッテネ?" | aplay
-t 音声記号列を出力する ※4 `` `` AquesTalkPi -t "頑張れ頑張れできるできる気持ちの問題だって!"

 微調整したいときに使えそう。

音声記号

 上記参照。細かいところは任せる。

文法

今日はお日柄も良く
こんにちわおひがらもよく
こんにちわ/おひがらもよく
こんにち/わ/おひがらもよく
こ'んにち/わ/おひがらもよく
こ'んにち/わ/おひがら/も/よく
こ'んにち/わ/おひがら/も/よ'く
  • アクセント区は/で区切る。
  • ひとつのアクセント区にはひとつのアクセントのみ。

 ざっくり概要は以下。

  • ひらがなで表記する
  • カタカナ
    • 無声化
      • _ス, _クとする
      • 逆にデフォルトで無声化されるなどをとすると有声音になる
    • ガ行鼻濁音
      • カ゜とすると鼻濁音になる
      • とすると破裂音になる
  • 数字
    • でんわば'んごーわ、<NUM VAL=01-2345-6789>です。
    • ぱ'いわ、<NUM VAL=3.1415926535897932>。
    • きの'ーわ、<NUMK VAL=321162567>+でした。
    • のこり+じ'かんわ、あ'と/<NUMK VAL=10 COUNTER=ふん>です。
  • アルファベット
    • こーどば'んごーわ、<ALPHA VAL=AT-3568P>です。
      • ERR:(106) invalid onsei-kigou-retsu. .こーどば'んごーわ、<ALPHA VAL=AT-3568P>です。
  • 拗音
    • び'ーるを、ぐい'っと;のみた'いな。
      • はエラーになるのでにする

AqTk="${HOME}/root/sys/env/tool/aquestalkpi/AquesTalkPi"
$AqTk ".今日はお日柄もよく" | aplay
$AqTk -k ".こんにちわおひがらもよく" | aplay
$AqTk -k ".こ'んにち/わ/おひがら/も/よ'く" | aplay

 アクセントの箇所を操作して正しいイントネーションで伝える。

$AqTk ",今日はお日柄もよく、" | aplay
$AqTk -t ",今日はお日柄もよく、"
、/キョ'ーワ/オヒガラモ+ヨ'_ク、

 「今日」が「きょう」になる。大体正しいが、この場合は「こんにち」と読ませたい。そんなときは-kを使う。

 アクセントの箇所を操作して正しいイントネーションで伝える。

$ $AqTk ",今日はお日柄もよく、" | aplay
$ $AqTk -t ",今日はお日柄もよく、"
、/キョ'ーワ/オヒガラモ+ヨ'_ク、

 「今日」が「きょう」になる。大体正しいが、この場合は「こんにち」と読ませたい。そんなときは-kを使う。

対象環境

  • Raspbierry pi 3 Model B+
  • Raspbian stretch 9.0 2018-11-13
$ uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux