语音控制程序操作
昨天晚上睡觉前在床上突然想到的,给豆瓣电台加一个语音控制的功能,这样没事躺床上就可以动动嘴巴来操作程序了,电脑放在床下也没有关系,安逸哇!!
今天起床就找了些资料,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);
}
关键字 语音控制程序操作
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架