ラズパイで音声を出力して、Siriのようなものを作りたい!ということでまずは音声を出力する方法を調べましたのでまとめていきます!
ラズパイでよく使われる音声合成ソフトはOpenJTalkもしくはAquesTalkです。
両方のソフトのインストール方法、使い方を説明していきます。
調べているときにかなりつまづいたところもあったので、これからOpenJTalkもしくはAquesTalkを使いたい!という方の役に立つかなと思います。
目次
OpenJTalkとは
オープンソース(修正BSDライセンス)の日本語テキストに基づいて自由な音声を生成するHMMテキスト音声合成システムです。(Open JTalk)
簡単に言うと文字列(テキスト)を音声へ変換してくれるソフトウェアです。
AquesTalkとは
AquesTalk(アクエストーク)は、アクエストが開発・販売している音声合成用ソフト。(wikipediaより引用)
AquesTalk Pi(アクエストークパイ)と言われる、ラズパイ用の音声合成アプリです。
ライセンスが必要なのですが、個人の非営利目的であれば無償で利用することが可能です。
事前準備
どちらも日本語を用いるのでまず、ラズパイを日本語入力対応にする必要があります。その設定を行っていきます。ターミナルで以下のコマンドを入力してください。
1 2 3 |
sudo apt-get update(パッケージをアップデート) sudo apt-get install fcitx-mozc(日本語入力を有効に) sudo reboot |
再起動をしたら設定は完了です。画面右側にキーボードのマークが表示されていると思います。これをクリックするとオレンジ色のマークに変わります。これで半角/全角で日本語入力に変換できます。


OpenJTalkインストールから出力まで
インストール
以下のコマンドをターミナルに入力します。
1 2 3 4 5 |
sudo apt-get update #アップデートする sudo apt-get install open-jtalk #インストール #推奨されているパッケージ #音声合成のエンジン、辞書、音声データ sudo apt-get install open-jtalk open-jtalk-mecab-naist-jdic hts-voice-nitech-jp-atr503-m001 |
テキストファイル・音声ファイル(.wav)の作成
下記のように操作し、テキストエディタを開きます。

次にテキストファイルに出力したい文字を入力して保存します。今回は「voice.txt」として保存しています。

テキストファイルの文字コードはUTF-8で作成してください
1 2 |
#音声ファイルの作成 sudo open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -ow voice.wav voice.txt |
音声ファイル作成のコマンドの内容は以下の通りです。
1 |
open_jtalk 辞書ファイルのパス 音響ファイルのパス 保存するwavファイルのパス しゃべらせたいテキストファイルのパス |
これで「voice.wav」という音声ファイルが作成されました。
【辞書と音声データのオプション】
-x (辞書の指定)
辞書そのものではなく辞書があるフォルダーを指定
-m (音声データの指定)
音声データ(ファイル)を指定
【出力するファイルに関するオプション】
-ow (WAVファイルの指定)
音声に変換したデータを保存するWAVファイルを指定
-ot (ログファイルの指定)
【音声データの生成に関するオプション】
-s (サンプリング周波数)
-p (フレーム周期)
-a (オールパス値)
-b (ポストフィルター係数)
-r (スピーチ速度係数)
-fm (追加ハーフトーン)
-u (有声/無声境界値)
-jm (スペクトラム系列内変動の重み)
-jf (F0系列内変動の重み)
-z (オーディオバッファサイズ)
音声出力
ターミナルに以下のコマンドを入力すると、音声ファイルが再生されます。
1 |
aplay -Dhw:1,0 voice.wav |
音声出力の設定について
音声がうまく出力されない方は設定を行います。
先ほどのコマンド「aplay -Dhw:1,0 voice.wav」の-Dhw:1,0でデバイスの指定をしています。
1 |
aplay -l |
このコマンドを入力すると、以下のようにハードウェアデバイスの情報が表示されます。
カードとデバイスに注目してください。下の例でいうと、
- HDMIで出力:-Dhw:0,0
- Headphoneで出力:-Dhw:1,0
と設定することにより、出力先を変更できます。

女性の声使用する場合
デフォルトは男性の声になっていますので、女性の声を利用したい方は以下の手順で設定します。
1 2 3 4 5 6 |
#MMDAgentのパッケージをダウンロード wget https://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.7/MMDAgent_Example-1.7.zip #zipファイルの解凍 unzip ./MMDAgent_Example-1.7.zip #meiというファイルをhts-voiceにコピー sudo cp -r ./MMDAgent_Example-1.7/Voice/mei/ /usr/share/hts-voice/ |
先ほどと少し参照先を変え、音声ファイルを作成、再生します。
1 2 |
sudo open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/mei/mei_normal.htsvoice -ow voice.wav voice.txt aplay -Dhw:1,0 voice.wav |
女性の声に変更されていると思います!
python3から音声出力(ソースコード)
ではpythonのスクリプトファイルから音声を出力させてみたいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import subprocess#subprocessは、Python内からコマンドを実行するためのモジュール from datetime import datetime def jtalk(t): open_jtalk=['open_jtalk'] mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic']#-x (辞書の指定) htsvoice=['-m','/usr/share/hts-voice/mei/mei_normal.htsvoice']#-m (音声データの指定) speed=['-r','1.0']#-r (スピーチ速度係数) outwav=['-ow','open_jtalk.wav']#-ow (WAVファイルの指定) cmd=open_jtalk+mech+htsvoice+speed+outwav#子プロセスの生成に使用されるコマンド本文。 c = subprocess.Popen(cmd,stdin=subprocess.PIPE)#新しいプロセスで子のプログラムを実行 c.stdin.write(t.encode('utf-8'))#テキストをutf-8にエンコード c.stdin.close() c.wait()#子プロセスが終了するまで待つ aplay = ['aplay','-q','-Dplughw:1,0','open_jtalk.wav'] wr = subprocess.Popen(aplay)#aplayコマンド実行 if __name__ == '__main__': jtalk("こんにちは") |
関数jtalkの引数を変更するだけで出力する音声を変更できます。
1 |
aplay = ['aplay','-q','-Dplughw:1,0','open_jtalk.wav'] |
'-Dplughw:1,0'の部分を変更すると出力先を変更できます!
AquesTalkダウンロードから出力まで
次にAquesTalkで音声を発信させます。
色々なサイトに載っているURLでは取得できませんでした。こちらのコマンドでダウンロード・解凍してください。
1 2 3 4 5 |
#ダウンロードできない wget http://www.a-quest.com/download/package/aquestalkpi-20130827.tgz #こちらを実行 wget https://www.a-quest.com/archive/package/aquestalkpi-20201010.tgz tar xzvf aquestalkpi-20201010.tgz |
次にディレクトリを移動し、以下のコマンドを入力するだけで音声を出力できます!
1 2 3 4 |
cd aquestalkpi #音声出力コマンド ./AquesTalkPi "漢字も読めます。" | aplay #出力変更はaplayの後ろに-Dplughw:1,0を入力 |
1 |
./AquesTalkPi [オプション] 入力文字列 [ > 出力ファイル ] |
まとめ
二つとも簡単に使用できて、使い方が簡単ですね。
是非使ってみてください!
AquesTalkの方がゆっくり発生してくれて、好みでした。
しかし、ネットにあまり情報がないですし、ライセンス問題などもありますので今後はOpenJTalkを使っていこうかなと思います!!
参考サイト
参考にさせて頂いたサイト一覧です。
【OpenJTalk】
Raspberry Piで音声合成:Open JTalkでしゃべるラズパイを作る
OpenJTalk + python で日本語テキストを発話
OpenJtalkを使って日本語をRaspberry Piに喋らせる
【AquesTalk】