WindowsPhone下语音操作包括:

1、程序内部的语音识别,用户可以通过语音识别进行输入或完成相关任务

2、控制程序的语音命令,控制程序启动、打开,并可对页面跳转等进行操作

这篇文章将构建一个简单的语音识别(一般的会将说的话全部识别出来,而利用SRGS语法可识别一句话里面的组成)

SRGS(语音识别语法规范),可以定义复杂的语音识别规则.如:识别用同义词替换了词语,漏说了非关键词等。

SRGS须先保存到StorgeFile,再添加到SpeechRecognizer类的属性上。

//按钮点击事件,开始进行语音识别
private async void Button_Click(object sender, RoutedEventArgs e)
{
  string message = "";
  try
  {
    SpeechRecognizer speechRecognizer = new SpeechRecognizer();
         
    //以下两个事件就不写了
    speechRecognizer.StateChanged += speechRecognizer_StateChanged;//状态改变
    speechRecognizer.RecognitionQualityDegrading += speechRecognizer_RecognitionQualityDegrading;//语音质量     //获取内置的SRGS语法文件,如只是简单的识别出将的话,不要这三行
    StorageFile file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("SRGSGrammar.xml");
  SpeechRecognitionGrammarFileConstraint grammarFile = new SpeechRecognitionGrammarFileConstraint(file);
    speechRecognizer.Constraints.Add(grammarFile);//添加SRGS语法约束     //speechRecognizer.UIOptions.ExampleText = "这里填的是有UI时候的示例";
    
    //分析语音
    SpeechRecognitionCompilationResult compilationResult = await speechRecognizer.CompileConstraintsAsync();
  if (compilationResult.Status == SpeechRecognitionResultStatus.Success)
    {
      var result = await speechRecognizer.RecognizeAsync();//无界面的语音识别 若为.RecognizeWithUIAsync(); 则是显示系统本身的识别界面
      if (result.Confidence == SpeechRecognitionConfidence.Rejected)
      {
        message = "识别不到";
      }
      else
      {
        resultMessage.Text = result.Text; //识别结果
      }
    }
  }
  catch (Exception err)
  {
    message = "异常信息:" + err.Message + err.HResult;
  }
}

SRGSGrammar.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<grammar version="1.0" xml:lang="zh-cn" root="mediaMenu" tag-format="semantics/1.0"
    xmlns=http://www.w3.org/2001/06/grammar
    xmlns:sapi="http://schemas.microsoft.com/Speech/2002/06/SRGSExtensions"><!- 这些都是必不可少的-->
<rule id="city" scope="public">
<one-of> <!-- 匹配其中一个短语-->
<item>北京</item>
<item>上海</item>
</one-of>
</rule>
<rule id="cross" scope="public">
<one-of>
<item>到</item>
<item>至</item>
<item>飞往</item>
</one-of>
</rule>
<rule id="Menu" scope="public">
<item>
<ruleref uri="#date"/> <!--指定关联的其他规则的节点-->
<tag>out.date = reles.latest();</tag>
</item>
<item repeat="0-1">从</item> <!--显示1次或0次-->
<item>
<ruleref uri="#city"/>
<tag>out.city = rulels.latest();</tag>
</item>
<item>
<ruleref uri="#cross"/>
<tag>out.cross = rulels.latest();</tag>
</item>
<item>
<ruleref uri="#city"/>
<tag>out.city = rulels.latest();</tag>
</item>
</rule>
</grammar>

以上可以实现识别"从(“从”可有可无) 北京/上海  到/至/飞往  北京/上海"
北京到上海、从北京到上海、北京飞往上海、从上海飞往北京、上海到北京等。

可惜的是,出发地和到达地是能够重复的。且只支持“ (从)出发地---到达地” 这样特定的规则

说多了其他的(废)话,就会识别出错。

PS:最近的项目上要添加语音识别功能,要求用的是百度语音识别的SDK/API,可惜前者只支持Android和Iphone

后者虽是各个平台通用,但工作量上大了一点,得先进行录音,之后再通过HttpWebRequest和API传输数据,解析。

Windows Phone自带的语音识别的更多相关文章

  1. 以太网客户端提示windows系统自带共享代理解决方法

    以太网客户端(Dr.COM)登陆出现windows系统自带共享代理,如下图: 系统win+R调出运行: 在服务中,找到Internet Connection Sharing (ICS): 右键属性,将 ...

  2. Windows 8 自带定时关机的4种实现方法

    问题描述:前几天发布了一篇文章[ Windows 7/8 自带定时关机命令 ],文章中的用到的命令我在Windows 7都运行成功,但没有在Windows 8 上进行测试,因为我认为Windows 8 ...

  3. 如何在windows系统自带命令查看硬件信息?

    如何在windows系统自带命令查看硬件信息? 对于在windows下查看系统信息大家一定不陌生了,我现在说几个最常用的方法,对命令感兴趣的朋友看看,(给菜鸟看的,老手就不要笑话我了,大家都是从那个时 ...

  4. [转]Windows 7自带很好用的磁盘检查与修复的环境

    大家可能都知道Windows 7自带很好用的检查与修复的环境.在启动系统前按F8(就是进入安全模式的方法),Windows 7会有一个修复计算机的选项.选择进入,装载一些必要的文件之后,选择语言.登陆 ...

  5. Windows 10 自带那么多图标,去哪里找呢?

    无意间发现我的 D 盘根目录中大部分的文件夹都是系统专用文件夹,有自己的独特图标,偶有一两个开发用的文件夹是默认图标.于是想把它们改成独特样式,而且是 Windows 10 那些新图标样式! 这是我的 ...

  6. Windows 10 自带 free 屏幕截图/录像软件 Game Bar! 不仅仅是game-游戏呦! 高清晰,高保真,perfect!不仅仅是游戏呦!

    good news! good news! good news! 重要的事情说三遍! Windows 10 自带  屏幕截图/录像软件 Game Bar! 以后再也不用第三方的 盗版软件了! 对于Wi ...

  7. 本文介绍使用windows系统自带的远程桌面mstsc连接Centos 7.x远程桌面的基本方法。

    本文介绍使用windows系统自带的远程桌面mstsc连接Centos 7.x远程桌面的基本方法. 一.前言 我希望用windows远程访问centos图形界面.xmanager连接centos远程桌 ...

  8. 励志:98岁老爷爷用Windows系统自带画图软件制作的神作

    哈尔拉斯科,是一位很出名的老爷爷,他70岁才接触MS Paint(就是我们熟知的Windows自带的画图软件).他曾经是一名图形艺术家,但是之前他都是手工创作.他熟知怎么用双手进行艺术创作.但是后来, ...

  9. Windows系统自带的ODBC Data Sources的配置及使用

    一直不明白ODBC是个什么东东,虽然一次次碰到,却从没用过,看Wikipedia上的描述,可以访问各种数据库.Excel.CSV等,可以剥离数据库和操作系统依赖,简直神乎其神.不过这样的描述太抽象概括 ...

随机推荐

  1. bzoj2765[JLOI2010]铁人双项比赛

    题意:铁人双项比赛由长跑和骑自行车组成,参赛选手必须先完成k公里的长跑,然后完成r公里的骑车,才能到达终点.参赛选手有的擅长长跑,有的擅长骑车. 如果总赛程s=k+r一定,那么K越大,对擅长长跑的选手 ...

  2. Unity赛车游戏之移动

    这个赛车游戏真是让我费劲脑汁啊.尤其是写这种系统化的东西. 目前漂移还没找到更好的算法,不过基本的移动还是可以做到的. 别看就光是个移动,其实也是很费事的. Unity给了个对于赛车系统很好的碰撞组件 ...

  3. (原)Java初始化过程

    先看一个demo,然后进行归纳. class X{ static M m=new M(); Y y=new Y(); public X(){ System.out.print("X" ...

  4. ConurrentHashMap和Hashtable的区别

    转自:http://www.importnew.com/7166.html 集合类是Java API的核心,但是我觉得要用好它们是一种艺术.我总结了一些个人的经验,譬如使用ArrayList能够提高性 ...

  5. C++ 第一次课堂作业

    GitHub链接: 传送门 题目描述 Create a program that asks for the radius of a circle and prints the area of that ...

  6. django admin中保存添加的数据提示need string or buffer, int found

    原因 def __unicode__(self): return unicode(self.pk) 此处如果没有unicode就会报这个错误,原因就是编码错误 以为是文件开始没有加utf-8导致的,然 ...

  7. 常见linux命令释义(第五天)——shell变量学习

    由于时间有限,我写这篇博客的时间上限为30分钟.仅作为学习笔记而用,内容会尽量的讲清楚.如果讲的不清楚,你来打我啊! 玩笑开过,正式开始今天的学习. linux系统的中一些命令是在/bin下,这个是一 ...

  8. centos搭建https协议的tomcat和apache服务器以及nginx服务器,mysql php

    Apache HTTP Server(简称 Apache)是 Apache 软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的 Web ...

  9. BPEL 实例教程

    http://www.oracle.com/technetwork/cn/articles/matjaz-bpel1-090722-zhs.html BPEL 实例教程 作者:Matjaz Juric ...

  10. nginx的在linux系统中的安装

    1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. n  gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果 ...