音声認識-基本

音声認識は、音声合成と違い、実装するには少々複雑になります。そこで、まずは一番簡単な方法をご紹介します。

実装の流れ bookmark

(1)System.Speechアセンブリを参照設定
(2)System.Speech.Recognitionインポート
(3)SpeechRecognizer?インスタンス生成
(4)Grammarインスタンス生成
(5)GrammarをLoadGrammar?メソッドでロード
(6)SpeechRecognized?イベントで適宜処理

このような流れで実装していきますが、(4)(5)のGrammarが音声認識では重要になってきます。Grammarとは直訳すると文法という意味で、入力(音声)内容を判断する為に利用されます。
Grammarは奥が深く、簡単に説明するのは難しいので、今回は、デフォルトで用意されているものを利用することにします。

話した内容をテキストボックスに表示する bookmark

一番簡単な例として、話した内容(ディクテーション)をフォーム上のテキストボックスに表示するサンプルをご紹介します。

画面レイアウト bookmark

画面レイアウトのXAMLは、以下のようになっています。

コード bookmark

10行目で文法をロードしています。その中で利用しているDictationGrammar?クラスは、ディクテーション用のデフォルトの文法(Grammar)を提供してくれるので、これを利用します。

実行してみると bookmark

上記のサンプルプログラムを実行してみると、起動と同時に、Vistaの音声認識が起動して、

スピーチツールバー

スピーチツールバーが起動すると思います。これにより、音声認識エンジンを利用できるようになるわけです。
この音声認識エンジンは、SAPISVR.EXE という別のプロセスでインスタンス化されており、この一つのエンジンを共有して利用する為、リソースの消費を節約できます。

「聞き取り開始」にして、文章を話すと、作成したテキストボックスに文字が表示されます。

認識はいつ開始するのか bookmark

今回のサンプルでは、認識を開始するメソッドなどはどこにも記述していません。認識の開始・終了などの制御は、プログラム上から行うのではなく、OSが提供してくれているスピーチツールバーを利用して行います。
ただし、「プログラムから認識の開始・終了を明示的に制御できない」ということではありません。これらの方法は、SpeechRecognitionEngine?クラスを利用することにより可能です。
現時点では、SpeechRecognizer?SpeechRecognitionEngine?という二つのクラスが提供されている事を知って頂ければと思います。