昨天晚上睡觉前在床上突然想到的,给豆瓣电台加一个语音控制的功能,这样没事躺床上就可以动动嘴巴来操作程序了,电脑放在床下也没有关系,安逸哇!!

今天起床就找了些资料,Windows平台上的必须就是Microsoft Speech Library,这是一个COM组件,从微软的网站可以下载到SDK。不过从.Net 3.0开始在.Net Framework里也加了相应的映射:System.Speech,不过一般项目是没有添加这个引用的,自己手动加一下。

下面是一个简单的Sample,演示了如何向语音识别对象注册语音命令。

using System.Speech.Recognition;

namespace Douban
{
public partial class MainWindow : Window
{
SpeechRecognizer speechRecognizer;
public MainWindow()
{
InitializeComponent();
// if (Properties.Settings.Default.EnableSpeech)
speechRecognizer = new SpeechRecognizer();
}

private void window_Loaded(object sender, RoutedEventArgs e)
{
// if(Properties.Settings.Default.EnableSpeech)
VoiceCommand();
}

private void VoiceCommand()
{
RegisterVoiceCommand(VoiceCommand_Close,
"退出");
RegisterVoiceCommand(VoiceCommand_Next,
"下一首");
RegisterVoiceCommand(VoiceCommand_Minimize,
"最小化");
RegisterVoiceCommand(VoiceCommand_Restore,
"恢复");

RegisterVoiceCommand(VoiceCommand_Pause,
"暂停");
RegisterVoiceCommand(VoiceCommand_Resume,
"播放");
}

private void VoiceCommand_Resume(object sender, EventArgs e)
{
if (mediaPlayer.MediaState != MediaState.Play)
{
if (mediaPlayer.MediaUri != null)
{
mediaPlayer.Play();
pnlPlayer.SetPlayerStatus(
true);
}
}
}

private void VoiceCommand_Pause(object sender, EventArgs e)
{
if (mediaPlayer.MediaState == MediaState.Play)
{
mediaPlayer.Pause();
pnlPlayer.SetPlayerStatus(
false);
}
}

private void VoiceCommand_Close(object sender, EventArgs e)
{
this.Close();
}

private void VoiceCommand_Next(object sender, EventArgs e)
{

}

private void VoiceCommand_Minimize(object sender, EventArgs e)
{
this.WindowState = WindowState.Minimized;
}

private void VoiceCommand_Restore(object sender, EventArgs e)
{
this.WindowState = WindowState.Normal;
}

private void RegisterVoiceCommand(EventHandler Callback, params string[] Args)
{
Choices choices
= new Choices();
foreach (string arg in Args)
{
choices.Add(arg);
}
Grammar grammar
= new Grammar(new GrammarBuilder(choices));

grammar.SpeechRecognized
+= delegate(object sender, SpeechRecognizedEventArgs e)
{
EventHandler eventHandler
= new EventHandler(Callback);
Dispatcher.BeginInvoke(eventHandler, sender, e);
};

speechRecognizer.LoadGrammarAsync(grammar);
}

作者: 博比123 发表于 2011-05-22 23:13 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架