本記事は、「Slackbotに音声つきで応答する方法」を紹介するものです。
今回実現できたこと
・ローカルでの音声再生
・音声ファイルをSlack上にアップロード
できなかったこと
・Slackにアップロードしたファイルの自動再生
最近はフリーで音声素材も配布されているので簡単なコードを書くだけで文章を読み上げさせることが可能です。
※Pythonで作るSlackbotについては「SlackbotをPythonで作成しよう」をお読みください。
◆関連記事
Pythonで音声を操作する
目次
SlackbotでOpen JTalkを操作する手順
Open JTalkは日本語の文章を読み上げることができるフリーのツールです。
コマンドラインで簡単に文章を読み上げさせることができます。
Open JTalkのインストールと使い方
◆インストール方法(Mac)
◆再生手順
テキストファイルを辞書ファイルで変換して再生用のファイルを作成します。
afplayで作成したファイルを再生します。
1 2 | open_jtalk -x [辞書ファイル] -m [音声ライブラリ] -ow [出力ファイル] [テキストファイル] afplay [出力ファイル] |
辞書ファイル:漢字やアルファベットの読み方を定義するファイルです。
音声ライブラリ:音声を出力する為のライブラリ、男性の声や女性の声などいろいろな種類があります。
出力ファイル:読み上げた音声を記録したファイル
テキストファイル:読み上げる文章を書いたファイル
◆参考記事
Qiita
macでコードから音声を喋らせる (eSpeak, OpenJTalk)
Open JTalkを使ってSlackbotに文章を読み上げさせる
自分のPCにSlackbotのソースコードがあれば読み上げさせることが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | import os import codecs from slackbot.bot import respond_to class JTalk: def __init__(self, talk_file, wav_file): self.talk_file = talk_file self.wav_file = wav_file self.enabled = 'off' # 音声ファイル作成メソッド def set_talk(self, text): target_file = codecs.open(self.talk_file, 'w', "utf_8") target_file.write(text) target_file.close() os.system('open_jtalk -x /usr/local/Cellar/open-jtalk/1.10_1/dic -m /usr/local/Cellar/open-jtalk/1.10_1/voice/mei/mei_normal.htsvoice -ow %s %s' % (self.wav_file, self.talk_file)) # 音声再生メソッド def exe_talk(self, text): self.set_talk(text) os.system('afplay out.wav') @respond_to('^音声テスト$') def jtalk_test(message): talk_file = 'talk.txt' wav_file = 'out.wav' text = 'ブルータスよ、お前もか' jtalk = JTalk(talk_file, wav_file) message.send(text) jtalk.exe_talk(text) def main(): talk_file = 'talk.txt' # 読み上げる文章を書き込むファイル wav_file = 'out.wav' # 音声の出力ファイル text = 'ブルータスよ、お前もか' # message.send(reply)→音声の順に処理すると同時再生っぽくなります jtalk = JTalk(talk_file, wav_file) jtalk.exe_talk(text) if __name__ == "__main__": main() |
以下の音声ファイルが読み上げられます。
関連記事>>Python+Open JTalkで音声を操作する方法
Slackbotで音声ファイルをSlackにアップロードする
上記の方法だとローカルPCにSlackbotがいない場合は当然再生できません。
ファイルをアップロードすることでどこからでも音声を再生可能となります。
slackerライブラリを使って作成したファイルをアップロードする
slackerライブラリのラッパーメソッドを使えば簡単な記述でアップロードできます
slackerライブラリはslackbotライブラリを使用している場合は同時にインストールされます。
1 2 3 4 5 6 7 8 9 10 11 12 | @respond_to('^音声テスト$') def jtalk_test(message): talk_file = 'talk.txt' wav_file = 'out.wav' text = 'ブルータスよ、お前もか' jtalk = JTalk(talk_file, wav_file) message.send(text) jtalk.exe_talk(text) # ファイルをアップロード slacker = Slacker('BOT APIトークン') slacker.files.upload(file_=wav_file, channels=message.channel._body['name']) |
手動ですが音声の再生が可能です。
アップロードしたファイルを自動再生する方法は見つかりませんでした。
まあ、無限再生とかしたら大変なことになるのでそもそもやらない方がいいのかもしれません。
以上、Slackbotに音声を読み上げさせる方法でした。
関連記事>>SlackbotでファイルをSlackにアップロードする〜PythonでのBot開発〜
終わりに
今回はSlackbotで音声を作成する方法と再生する方法について説明しました。Open-Jtalkを使えば比較的に簡単に実装することが可能です。
実行結果を文章でなく音声で読み上げさせることができれば作業しながら実行結果を聞くという使い方もできます。
うまく使えばいろいろな場面で活用できそうですね。
Slackbot+PythonまとめTOP>>Slackbotの作り方マニュアル〜Python編〜
◆おすすめ記事
Pythonでテキストを読み上げる方法