最近のHTML5には音声認識とか音声合成とかあるのな

Web Speech API Specification (W3C)

 

たとえばチャットアプリケーションで音声を文字にして表示したり、逆に打ち込まれたテキストを読み上げたりできるようになるわけで、いろいろおもしろい。

というわけで、今何かと話題のFC2ライブで漫画の作業配信をやる際にマイクに喋った言葉を画面に表示する事に挑戦してみた。

f:id:juangotoh:20150427051501j:plain

漫画の内容にはふれないでほしい(笑)

音声認識は、JavaScript

SpeechRecognitionというオブジェクトを生成してわりと簡単にできる。現在のところChromeではwebkitSpeechRecognitionと、ベンダーサフィックスが必要だ。

 

var recognition = new webkitSpeechRecognition();

recognition.onresult = function(event){

 

}

recognition.start();

 みたいな感じで使う。strat()の前に、recognition.continuous = true; を設定しておけばずっと音声を聞いて次々認識してくれる。のだけど。

現在のChromeの仕様だと、10秒無音が続いたら終了してしまうなどの制限があり、放置して使い続けることができない。一応、音声認識終了時には onendというイベントが飛んでくるので、そこで再度 recognition.start();をすれば継続できるのだけど、認識開始時にはマイク使用の許可を求めるダイアログが出てしまうため、だまってると10秒毎に許可を求められてとても使っていられない。まあ、インターネット越しにユーザーの音声を盗聴される危険を抑えるために厳しいことになってるんだと思うけど、これじゃあ上記の配信中の音声文字化なんかには使えない。また、どうもこの音声認識機能はWebサーバー建てずにローカルで実行すると使えないみたいで。そのへんもめんどくさい。

 

認識開始時にマイクの許可を求められる問題は、https接続だと最初の一回だけに抑えられるようなので、ローカルPCにオレオレ証明書をインストールしてサーバー建てて使うことにする。いろいろめんどくさい。

 

ちなみに、自動翻訳はまた別で、Microsoft Translatorを使用している。これも使うの結構面倒なんだけど、とりあえず個人が使う分には、月間200万文字の翻訳まで無料というのがおいしい。