RaspberryPi

RaspberryPiで電車の運行情報を音声出力する(Open JTalk)

前回はTwitterのAPIを使ってJR東日本の東海道方面のツイッターアカウントのツイートを取得しました。今回は、取得したツイートを定期的にOpen JTalkを使って喋らせていこうと思います。

Open JTalkを準備する

Open JTalkのインストールは以下のサイトを参考にしました。

http://thr3a.hatenablog.com/entry/20180223/1519360909

まずはOpen_JTalkのパッケージをインストールします。

// Open_JTalkのパッケージをインストールします
$ apt install open-jtalk open-jtalk-mecab-naist-jdic

//音声モデルをインストールします
$ apt install hts-voice-nitech-jp-atr503-m001 

//適当なテキストファイルを用意します
//改行は認識できないので、改行はしないようにします
$ nano test.txt

~以下を記述~
おはようございます。
~~

// テキストファイル(test.txt)から音声ファイル(test.wav)を作成します
$ open_jtalk -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow test.wav /home/pi/test.txt

以上の作業が完了したら、RaspberryPiにスピーカーを接続します。自分はBluetoothスピーカーを接続します。Bluetoothスピーカーの接続方法については、このブログで書いているので見てみてください。Bluetoothスピーカーがない人は通常のスピーカーでも大丈夫です。接続したら音量を調整した後にtest.wavファイルを出力します。

//音量の調整
$ alsamixer

//スピーカーからtest.wavを鳴らします
$ aplay /home/pi/twitter/test.wav

成功したら、「おはようございます」とスピーカーから出力されます。

遅延情報をスピーカーから出力する

前回、TwitterのAPIで取得した遅延情報をスピーカから出力していきます。プログラムを実行すると、テキストファイルファイル(result.txt)が出力されていると思うので、Open JTalkのコマンドを実行して.wavファイルを作成します。後はその.wavファイルをaplayで実行するだけです。

//.wavファイルを置きたいディレクトリに移動します
$ cd /home/pi/twitter

//.wavファイルを作成します
$ open_jtalk -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow result.wav /home/pi/twitter/result/result.txt

//.wavファイルを実行します
$ aplay result.wav

cronで定期的に実行する

cronで定期的に実行するようので、バッチを作成します。バッチを置くためのディレクトリはhome/pi/twitter直下にscriptという名前で作成しました。

#!/bin/sh

#設定ファイルが置いてあるディレクトリに移動します。(pythonのconfigparserの為)
cd /home/pi/twitter/config

#プログラムを実行
python3 /home/pi/twitter/main/testapi2.py

#.wavファイルを置くためのディレクトリに移動
cd /home/pi/twitter

#open JTalkで.wavファイルを作成する
open_jtalk -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -x /var/lib/mecab/dic/open-jtalk/naist-jdic -ow test.wav /home/pi/twitter/result/result.txt
aplay /home/pi/twitter/result.wav

#.wavファイルを実行する
aplay result.wav

今回は15分に一回ずつバッチを実行するようにします。

*/15 * * * * sh /home/pi/twitter/script/getStationData.sh

15分毎にBluetoothスピーカーから音声が出力されていれば成功です。もし、cronでの実行に失敗した場合は以下のリンクにある手順を行ってみてください。自分はそれで成功しました。

https://qiita.com/haniokasai/items/672f08d956ad86897f3c

おまけ

Bluetoothが一定時間で切れてしまうという方!!

cronで無音の.wavファイルを定期的に実行するようにしましょう。自分の持っているBluetoothスピーカーは4分間何もしないと、切断されるようになっています。なので、3分ごとに.wavファイルを実行するように設定しました。

*/3 * * * * aplay /home/pi/twitter/nosound.wav

修正点

  1. ツイートのハッシュタグまで含まれてしまうので削除する処理を追加する
  2. 新規のツイートがない場合は古いツイートを延々とスピーカから出力してしまう
  3. 取得したいアカウントのツイートを変えたい場合、コードを書き換えないといけない。設定ファイルから取得できるようにする