WP8の音声認識を試してみた(実装編)
↓の手順通りに実装したら動きます^^;
クイックスタート: 音声認識 (XAML) - Windows デベロッパー センター
とりあえず気を付けることとしては、先述した音声認識言語の設定と、プロジェクトの package.appxmanifest ファイル の設定を忘れていなければ、特にはまったりはしないのではないかと。
コード自体は(たぶん)問題ないと思うので、ここでは3種類の音声認識の制約について簡単にまとめてみます。 ※ちなみに検証とかしてませんので参考までにということで
定義済みの文法 (SpeechRecognitionTopicConstraint)
- 特に指定しなかった場合に使われる
- ユーザが話す内容を限定しない場合に便利
- 音声認識はリモートサービスで実行され、結果が電話に返される
口述でのメモや、メッセージの入力なんかに使えそうです。反面、ネットワークを介して処理されてのでパフォーマンスに問題が出る場合もあるみたいです。
プログラムによる一覧の制約 (SpeechRecognitionListConstraint)
- 単純な文法や単語の場合に便利
- 文字列配列に指定した単語のどれかを認識したら成功
Yes/Noなどの選択や、複数の選択肢の中から一つを選んでもらうとかの、入力(話す内容)が想定でき簡潔である場合に使えそうです。
実装も簡易で、記事中には"軽量です"と書いているので処理?も負荷が少ないのではないかと。
SRGS 文法 (SpeechRecognitionGrammarFileConstraint)
- SRGS(Speech Recognition Grammar Specification)文法を使う
- (頑張れば)結構複雑な文法を定義することが可能
- 指定した文法に一致しない入力を除外できる
一覧の制約では、どれか一つを選んでもらう程度しか実現できませんが、SRGS文法を使うと複雑な音声操作を実装できます。完全な自由入力ではなくて、文法に沿った範囲での入力が可能になる、というのがポイントでしょうか。
試してみた感じでは、圧倒的に私の英語力が足りないせいで、完全フリーの入力では思うように入力できませんでした(T-T)。口述筆記は私にはムリだ...orz
一方、制約を課すことで、私の下手糞な英語でもかろうじて?聞き取ってくれました。それっぽく発音していれば拾ってくれるし、明らかに別の言葉を喋ると認識失敗になる感じ。
SRGS文法のドキュメントはW3C公式の英語版しかなくてすでに諦めモードなんですが、一応、簡単で短めの英文なら表現できそうなので、どっかでコードとともに公開しようと思います。