ウェブで資料を探している際、「How to」はあっても、概略が意外になかったので、自分用メモも兼ねて記録を残しておきます。
#WebSpeechAPIとは
W3Cコミュニティグループによって策定されている仕様の一つです。いずれは各ブラウザで実装されるかもしれません。が、現段階では完全に動作するのはChromeのみです。後述する音声合成は多くのブラウザで実装済みですが、音声認識がChromeでしか動かないようです。
音声合成機能と音声認識機能の二つを合わせて、WebSpeechAPIと定義されています。音声合成は文字列を喋らせる機能、音声認識はマイクの音声を認識させる機能です。
単純に「WebSpeechAPI」で検索すると音声合成機能と音声認識機能の両方が引っかかってきます。音声合成単独では「Web Speech Synthesis API」、音声認識単独では「Web Speech Recognition API」と定義されます。
音声合成や音声認識の資料をピンポイントで探したい場合は上記の単語で検索すると捗ります。ただ、現状では資料自体が少ないため、「WebSpeechAPI」で検索した後、自身で精査する方が精度が高いように思われます。
仕様についてはMDNのドキュメントが一次資料になります。が、日本語訳されたページが少ないです。僕のように英検準二級で止まってるような人間には辛いです。個人的には、「Web Speech API | JavaScript プログラミング解説 - so-zou.jp」が一番まとまっていて、分かりやすいと感じました。
#音声合成
音声合成は実装されているボイスがブラウザ依存になっています。男女日欧中などブラウザによって幅広い選択も可能です。逆に言うと、ブラウザ依存のため、ボイス関連は細かく作り込むとドツボにはまりそうな気がします。
自分が使ってみたもの、使うだろうものをコピペ用にピックアップしています。詳細やその他のパラメータはMDNを見てください。
種別 | 名称 | 説明 | 設定値 |
---|---|---|---|
パラメータ | lang | ボイスの種類 | |
volume | 再生音量 | 0~1 | |
rate | 再生速度 | 0.1~2 | |
pitch | 再生ピッチ | 0~2 | |
関数 | speak | 再生 | |
cancel | 停止 | ||
pause | 一時中断 | ||
resume | 再開 | ||
イベント | start | 再生開始時 | |
end | 終了時 | ||
pause | 一時中断時 | ||
resume | 再開時 | ||
error | エラー時 | ||
boundary | テキストの境目に来た場合 | ||
ステータス | pending | 再生待ちキューあり | |
speaking | 再生中 | ||
paused | 一時中断中 |
#音声認識
音声認識はGoogleの「Cloud Speech API」を内部で実装しているようです。「Cloud Speech API」は利用時間で料金を支払う仕様ですが、Chrome経由で使用する場合のみ時間制限や利用料金を発生させないことにしているようです。
Googleにデモページが用意されています。文字入力部分のみ実装されていますが、有用性を理解するのには十分かと思います。
注意事項として、実行にあたって「マイクの許可」が必要になります。加えて、セキュリティ上の問題から、httpsのサイトでしか動作しません。ローカルでコーディングしても、デバッグはどこかにアップしないといけません。私自身もここではまって、何時間か無駄にしました。
また、音声認識処理に受付時間が設定されており、一定時間で終了します。Googleのサーバを利用しており、本来は利用時間で料金が設定されているものなので、長時間の受付は想定外なのだと思われます。
終了時に実行関数を再度呼び出すことで、じゃっかんのラグを挟みつつ、疑似的に音声認識をループさせることは可能です。ただ、つなぎっぱなしにするということはその時間だけGoogleのサーバに負荷をかけることになるので、推奨はされていないように思われます。今後普及した際にブロックされるような気がするので、ループありきの設計はしない方が無難に思われます。
自分が使ってみたもの、使うだろうものをコピペ用にピックアップしています。詳細やその他のパラメータはMDNを見てください。
種別 | 名称 | 説明 | |
---|---|---|---|
パラメータ | maxAlternatives | 認識候補の数 | int |
interimResults | 認識途中の結果を返す | false/true | |
continuous | 認識単位毎の出力 | false/true | |
lang | 認識する言語 | 言語 | |
関数 | start | 音声認識開始 | |
stop | 停止 | ||
イベント | start | 再生開始時 | |
end | 終了時 | ||
audiostart | 音声キャプチャ開始時 | ||
audioend | 音声キャプチャ終了時 | ||
soundstart | 音声検出開始時 | ||
soundend | 音声検出終了時 | ||
speechstart | 音声認識開始時 | ||
speechend | 音声認識終了時 | ||
nomatch | 合致するものがない場合 | ||
result | 合致するものがある場合 | ||
error | エラー時 |
#デモページ
音声合成
Web Speech APIの実装 - Speech Synthesis API | CodeGrid
音声認識
Googleデモページ
#参考
MDNのドキュメント
「Web Speech API | JavaScript プログラミング解説 - so-zou.jp」
Web Speech APIの実装 - Speech Synthesis API | CodeGrid