Edited at

JavaScriptだけで言葉をしゃべらせてみた

More than 3 years have passed since last update.

※ JavaScript for Robotics or Hardware Advent Calendar 2015 12/2用 

http://qiita.com/advent-calendar/2015/jsrobotics

ロボットなどでコミュニケーションを取る場合には、人間との会話が必要になることが多いです。

そのため、これら会話するために機械的に合成音声を出す必要があります。

これらを実現するためには、高度なライブラリやWeb上のサービスでのAPI、はたまた専用の基板などが存在したりします。

ですが、実はこの合成音声のためのものがW3Cで仕様が策定されています。

Web Speech API Specification

https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html

ということは・・・ブラウザで実装されています。

なので、もちろんJavaScriptのみで利用可能です!

現段階ではブラウザのChromeとSafariなどが対応しています。

http://caniuse.com/#feat=speech-synthesis

この二つが対応してるということは・・スマホだとほぼ対応してるという事です。

使い方は簡単!以下のコードだけでOK


speach.js

var ssu = new SpeechSynthesisUtterance();

ssu.text = 'クリスマスにはサンタさん来てくれるかな?';
ssu.lang = 'ja-JP';
speechSynthesis.speak(ssu);

実際に動作してるのはこちら。

http://jsdo.it/wakasamasao/webspeachapi1

このように簡単にブラウザを経由することで合成音声を生成することができます。

そして、このWebSpeachAPIは発音するのにはネットワークが必要無いというのも魅力です。

Application CacheやService Workerなど使えば完全にOfflineでも利用が可能ということです。

実際合成音声のAPIサービスなどは多数あり、合成音声を音声データで送ってきてそれを再生するなどもあったりしますが、こちらはそういう通信さえも必要がありません。

そして、発音も悪くないレベルです。

声のピッチなども変更が可能なので、男性っぽい声と女性っぽい声などで状態を切り分けるなど、ある程度の細かい設定も可能です。

気持ちChromeの日本語は語尾がなまり気味な気はしますが・・・。

で、音声が読み上げられるということは

- Twitterから取得したツィートを音声で読み上げ

- ログなどの解析結果で何かイベントがあると注意のために読み上げる

- WebRTCなどで音声チャットしてるが、僕だけしゃべることができない環境にいるのでテキストをいれると相手には音声で伝えれる

などなどいろいろな事ができるようになります。

私は社内ツールではありますが、ブラウザを立ち上げっぱなしでサーバにポーリングし、何か気になる状態が確認されたらスピーカーから音声でみんなに警告を知らせるなどのものを使っていたりします。

このあたりはネットワークに強いブラウザならではですね。

Web MIDI APIを使えばブラウザ単体でArduino等のハードウェアも連携できますので、完全に独立してしゃべって動くようなロボットも作る事が可能です。

そう、ブラウザなら。