slackからRaspberry Piに喋らせてみた
D級アンプ
秋月でこんなものを見つけた。
D級アンプといって、アナログではなくPWMで増幅するらしい。
以前、Raspberry Piに100均で買ったスピーカーをつけて音声を再生させてみたが、あまりにも音が小さすぎて使い物にならなかった。
今回は、このD級アンプモジュールを使って、Raspberry Piの音声再生にリベンジしてみた。
材料
材料は下記の通り
- PAM8012使用2ワットD級アンプモジュール
- 100均のおにぎり用ケース
- 100均のUSB充電ケーブル
- 3.5mmステレオジャック
- 配線少々
今回はアンプモジュールとオーディオ入力ジャックとスピーカー出力ジャックを配線しただけのシンプルな回路になった。
本当は、可変抵抗を付けてボリューム調整出来るようにしたかったが、調達した抵抗の大きさ(?)を間違えてしまったので諦めた。
D級アンプモジュール自体が1cm四方程度のサイズしか無いため、ケースはなるべく小さめにしようと思った。
しかし、よくあるタッパーみたいなのはイケてないと思ったので、おにぎり用ケースにしてみた(結局100均だが)
これに部品を配線したもの
うわ、スカスカ…
電源は、常時稼働させるのでUSB(5V)から取っている。
また、音楽再生などに使うつもりはないので、ノイズ対策のコンデンサをつけなかったり、ステレオジャックだったけどモノラル化したりした。
アンプ完成
フタをしてスピーカーとRaspberry Piとを繋いでハードウェアは完成!
ちなみに空き缶スピーカーは、なんかのイベントで買った物。
slack + hubot + AquesTalk
ソフトウェア側の実装だが、以前、音声合成をしたことがあるので再生のための準備は整っている。
今回は、slack経由でhubotにAquesTalkを叩かせて喋らせるスクリプトを用意して完成。
# Description # AquesTalkで喋らせる # Commands: # hubot talk <message> child_process = require 'child_process' module.exports = (robot) -> robot.respond /talk (.*)/i, (msg) -> child_process.exec process.env.AQUESTALK_PATH + "/AquesTalkPi " + msg.match[1] + " | aplay -q", (error, stdout, stderr) -> if !error msg.reply 'OK' else msg.reply error
環境変数AQUESTALK_PATHにはAquesTalkのパスを指定すること。
使い方はシンプルで、hubotに対してtalk "メッセージ"で、スピーカーから音声合成(ゆっくりボイス)で喋ってくれる。
用途
現在、slackとhubotで、「毎時間部屋の温湿度を通知するシステム」と、「ゴミ捨ての日を通知するシステム」を運用しているが、温湿度の通知にゴミ捨ての通知が埋もれて気づかない事が稀によくあった。
そのため、今回slackの通知とは別の通知方法として音声合成で喋らせることにしてみた。
とりあえずしばらく運用してみる。