続認識

こんなコード。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Speech.Recognition;
namespace SpeechTest
{
	class Program
	{
		static void Main(string[] args)
		{
			using (SpeechRecognitionEngine engine = new SpeechRecognitionEngine())
			{
				Grammar grammar = new DictationGrammar();
				engine.LoadGrammar(grammar);
				engine.SetInputToDefaultAudioDevice();
				Console.WriteLine("Initialized.");
				while (Process(engine))
				{
				}
			}
		}

		static bool Process(SpeechRecognitionEngine engine)
		{
			RecognitionResult result;
			Console.WriteLine("Please Speech Something...");
			result = engine.Recognize();
			if (result == null)
			{
				Console.WriteLine("No Input or Grammar Error.");
			}
			else
			{
				Console.WriteLine("Succeeded!");
				Console.WriteLine(result.Text);
				if (result.Text == "電卓")
				{
					System.Diagnostics.Process.Start("calc");
				}
				if (result.Text == "メモ帳")
				{
					System.Diagnostics.Process.Start("notepad");
				}
				if (result.Text == "終わり")
				{
					return false;
				}
			}
			return true;
		}
	}
}

これで参照設定に System.Speech を追加で動く。
昨日動かなかったのはPCのデバイス設定が間違っていたからのよう。PC内蔵のマイクだからか、認識率は結構低く10%程度。特に"終わり"が"をわり"と認識されて20回ぐらいはねられた。一文字だけで試してみたが、それでも安定しない。Vista音声認識には学習機能が備わっているらしいが、SpeechRecognitionEngineから扱えるかは不明。