1.21 jigowatts

Great Scott!

2017

New Year

f:id:sh_yoshida:20170110233930j:plain

今日から仕事開始!

仕事面では2015年に続き2016年もサーバ移行やSharePoint移行など、プログラマとしてコードを書く時間はほとんどありませんでしたが、de:codeに行ってみたり、Azure始めたり、ブログの毎月更新ができたので前年に比べて大幅にアウトプットすることが出来ました。

今年は、C#周りの動向も気になりますし、実用レベルのRubyも学びたいです。あとは英語とAWSかな。

本年も宜しくお願いします。

【CentOS 7】 SlackのメッセージをOpen JTalkでHubotにしゃべらせる

概要

www.moyashi-koubou.com

この記事を読んで前回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を追加するために、[歯車]からジャンプ。

f:id:sh_yoshida:20161228004645p:plain

[Categories]から[Bots]へ。

f:id:sh_yoshida:20161228004703p:plain

[Hubot]を選択。

f:id:sh_yoshida:20161228004721p:plain

[Install]ボタンを押してみる。

f:id:sh_yoshida:20161228004826p:plain

名前を入力して[Add Hubot Integration]ターンッ!名前は「ろごん」になりました。

f:id:sh_yoshida:20161228004845p:plain

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で音量の指定ができる

# ...

デキタヨ!

f:id:sh_yoshida:20161228011618p:plain

sh-yoshida.hatenablog.com

【CentOS 7】 Open JTalkをインストールしてみた

概要

Slackに書き込んだメッセージをOpen JTalkでBotにしゃべらせたい!!

www.moyashi-koubou.com

この記事を読んで完全に影響を受けましたね。
調べてみると多くの先人方がRaspberry Piで実装してますが、残念ながら持っていないので手元にあったCentOSにOpen JTalkをインストールしてみます。

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:詳細は参考サイト様をご覧ください!