2013年4月7日日曜日

[Raspberry Pi]HUNCHENTOOT + Open JTalkでブラウザ経由で音声出力

Raspberry PiでHUNCHENTOOTが動くようになったので、ブラウザから入力したメッセージを音声出力するWebアプリを作ってみた。

たわいないアプリだけど、小さなRaspberry Piを使って、遠隔操作で音声出力できるのはなかなか楽しい。
デスクトップからRaspberry PiにSSH接続し、tmux + CCL + Emacs(Slime)で開発したが、この程度なら、特にレスポンスが遅いことはなく、ストレスはなかった。
やるなぁ。Raspberry Pi。

ソースはこちらから(https://github.com/takeisa/cl-webapp-talk.git)

動作に必要なLinuxパッケージ

  • open-jtalk
  • open-jtalk-mecab-naist-jdic
  • hts-voice-nitech-jp-atr503-m001

実行方法

  1. Clozure CL(CCL)で、(load "talk.lisp")する。
  2. ブラウザで http://〜:4242/talk を開く。
  3. メッセージを入力してsubmitする。
  4. Raspberry Piがしゃべる!

使用したCommon Lispライブラリ

全てQuicklispでロードできる。
HUNCHENTOOT
Webサーバ。
cl-who
HTMLの生成に使用。
trivial-shell
シェルコマンドの実行に使用。
OSに依存せずにシェルコマンドを実行できる。

ファイル

talk.lisp
HUNCHENTOOTを使ったWebアプリのコード
talk.sh
音声出力したいメッセージを書いたテキストファイルを読み込み、Open JTalkで音声合成後、音声出力するシェルコマンド

動作説明

やっていることは単純。
  1. ブラウザからメッセージを受けとる。
  2. メッセージが空だったら、音声出力しないで、入力画面だけ表示する。
  3. メッセージがある場合は、音声出力する。
  4. 音声出力したいメッセージを message.txt へ出力する。
  5. talk.shを実行する。
  6. talk.shはmessage.txtよりメッセージを読み込み、Open JTalkで音声合成する。
  7. 音声ファイル /tmp/message.wav を出力する。
  8. それを aplay で再生する。再生後は音声ファイルを消去する。

参考ページ