【CentOS 7】 SlackのメッセージをOpen JTalkでHubotにしゃべらせる
概要
この記事を読んで前回CentOSにOpen JTalkをインストールしてみました。今回はSlackと連携させて書き込んだメッセージをHubotからOpen JTalkを使ってしゃべらせるとこまでやってみます。
といってもすべて参考サイトに書いてある(ソースコードまで!)通りにやるだけでできました!
Hubot
Hubotを作るのは以下のサイトがわかりやすかったです。
SlackのBot(hubot)を作ってみる - Qiita
Node.jsは久し振りだったのでまずはバージョンアップを。
# Node.jsのアップデート $ nodebrew install-binary stable $ nodebrew use v7.2.1 # npmのアップデート $ npm install -g npm $ node -v v7.2.1 $ npm -v 4.0.5
Hubotを作成していきます。
# hubot coffeescript yo generator-hubotの4つをインストール $ npm install -g hubot coffee-script yo generator-hubot # インストールパッケージ一覧 $ npm list -g --depth 0 /home/sh/.nodebrew/node/v7.2.1/lib ├── coffee-script@1.12.2 ├── generator-hubot@0.4.0 ├── hubot@2.19.0 ├── npm@4.0.5 └── yo@1.8.5
ジェネレータでHubotを作成。
いろいろ聞かれるけどいい感じに答えておけばいいらしいので適当に。
$ yo hubot
次にSlackにHubotを追加するために、[歯車]からジャンプ。
[Categories]から[Bots]へ。
[Hubot]を選択。
[Install]ボタンを押してみる。
名前を入力して[Add Hubot Integration]ターンッ!名前は「ろごん」になりました。
Hubot-Slackトークンを環境変数に設定。
.bash_profileにでも書いておけばいいでしょう。
export HUBOT_SLACK_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXX
スクリプトは以下二つを参考に使わせていただきました。ありがとうございますありがとうございます。
https://github.com/koike-moyashi/kaitei_raspi/tree/master/jtalk
https://github.com/koike-moyashi/kaitei_raspi/tree/master/slack_bot
あ、そういえばチャンネルの取得で躓きました。
チャンネル名が返ってくると思っていたのですが、9桁の英数字(大文字)ぽい?
child_process = require('child_process') module.exports = (robot) -> robot.hear /(.*)$/i,(msg) -> text = msg.message.text room = msg.envelope.room # どれも同じらしい。いったん表示させてroom値を取得する #msg.send(msg.message.room) #msg.send(msg.envelope.room) #msg.send(msg.envelope.user.room) # room値 val = "XXXXXXXXX" if (room == val) child_process.exec "sh /usr/local/bin/speaker '#{text}'",(error,stdout,stderr) -> msg.send(stdout)
あとはforeverをインストールして起動。
$ forever start -l /var/log/nodejs/rogon.log -a -c coffee ./node_modules/.bin/hubot -a slack
それから動かしてみて気づいたこととして、生成される.wavを再生すると音が小さい!
ので、音量を上げてみました。
# ... # 音声データ生成 echo "$1" | open_jtalk \ -x ${DIC} \ -m ${VOICE} \ -ow ${TMPFILE} \ -g 15 && \ # -gで音量の指定ができる # ...
デキタヨ!
【CentOS 7】 Open JTalkをインストールしてみた
概要
Slackに書き込んだメッセージをOpen JTalkでBotにしゃべらせたい!!
この記事を読んで完全に影響を受けましたね。
調べてみると多くの先人方がRaspberry Piで実装してますが、残念ながら持っていないので手元にあったCentOSにOpen JTalkをインストールしてみます。
入力された日本語テキストに基づいて自由な音声を生成するHMMテキスト音声合成システム
http://open-jtalk.sp.nitech.ac.jp
こちらのサイトを参考にさせていただき、バージョンを変えるだけで簡単にできました!*1
パッケージ管理にporg
porgというパッケージ管理ツールがあると良さそうなので、まずはこちらを参考にインストールしてみます。
ダウンロード
以下からporg-0.10.tar.gzをダウンロード。ちなみに以降のファイルのダウンロードはすべて/home/{user}/ダウンロードへ行い、ここを起点とします。
https://sourceforge.net/projects/porg/files/
インストール
/usr/local/src/へ解凍し、管理者権限でインストール。
# tar zxf ./porg-0.10.tar.gz -C /usr/local/src/ # cd /usr/local/src/porg-0.10/ # ./configure --prefix=/usr/local --disable-grop # make # make install
hts-engine api
次にOpen JTalkの実行環境としてhts_engine APIというものが必要らしいので用意。
ダウンロード
以下からhts_engine_API-1.10.tar.gzをダウンロード。
https://sourceforge.net/projects/hts-engine/files/hts_engine%20API/
インストール
解凍して、ビルド。
$ tar zxvf hts_engine_API-1.10.tar.gz -C ~/src/open_jtalk/ $ cd /home/{user}/src/open_jtalk/hts_engine_API-1.10 $ ./configure $ make
先ほど入れたパッケージ管理ツール『porg』でインストール。progと何度かタイプミスして実行しちゃったのでここ注意ね!
$ sudo /usr/local/bin/porg -lp hts_engine_api-1.10 "make install" $ sudo /usr/local/bin/porg -f hts_engine_api-1.10 hts_engine_api-1.10: /usr/local/bin/hts_engine /usr/local/include/HTS_engine.h /usr/local/lib/libHTSEngine.a
Open JTalk
ようやく本命です。ここまで時間はそれなりにかかってますがあと一息!
ダウンロード
以下からopen_jtalk-1.09.tar.gzをダウンロード。
https://sourceforge.net/projects/open-jtalk/files/Open%20JTalk/
インストール
解凍してビルド。
$ tar zxvf open_jtalk-1.09.tar.gz -C /home/{user}/src/open_jtalk/ $ cd /home/{user}/src/open_jtalk/open_jtalk-1.09 $ ./configure --with-charset=UTF-8 $ make
porgでインストール。
$ sudo /usr/local/bin/porg -lp open_jtalk-1.09 "make install" $ sudo /usr/local/bin/porg -f open_jtalk-1.09 open_jtalk-1.09: /usr/local/bin/open_jtalk /usr/local/dic/char.bin /usr/local/dic/matrix.bin /usr/local/dic/sys.dic /usr/local/dic/unk.dic
必要なファイル
あとは終わったも同然。辞書と音声ファイルが必要ということでそれぞれのディレクトリを用意。
# mkdir /usr/local/share/open_jtalk # mkdir /usr/local/share/hts_voice
辞書
以下よりopen_jtalk_dic_utf_8-1.09.tar.gzをダウンロード。
https://sourceforge.net/projects/open-jtalk/files/Dictionary/open_jtalk_dic-1.09/
用意した辞書用ディレクトリに解凍。
# tar zxvf open_jtalk_dic_utf_8-1.09.tar.gz -C /usr/local/share/open_jtalk/
音声ファイル
以下よりhts_voice_nitech_jp_atr503_m001-1.05.tar.gzをダウンロード。
https://sourceforge.net/projects/open-jtalk/files/HTS%20voice/hts_voice_nitech_jp_atr503_m001-1.05/
用意した音声ファイル用ディレクトリに解凍。
# tar zxvf hts_voice_nitech_jp_atr503_m001-1.05.tar.gz -C /usr/local/share/hts_voice/
しゃべらせる
すべての準備が整いました。
text.txtを作成しUTF-8で保存。
ワタシ日本語チョットデキル
open_jtalkに辞書、音声ファイルを指定して、テキストファイルをwav形式に変換します。カレントディレクトリにoutput.wavができてればOK♪
$ open_jtalk -m /usr/local/share/hts_voice/hts_voice_nitech_jp_atr503_m001-1.05/nitech_jp_atr503_m001.htsvoice -ow output.wav -x /usr/local/share/open_jtalk/open_jtalk_dic_utf_8-1.09/ text.txt
再生
$ aplay output.wav
できたーヾ(*´∀`*)ノ
次はSlackと連携させてみるぞい!
*1:詳細は参考サイト様をご覧ください!