微软推出小娜已经有一段时间了,最近恰好在研究其用法,就随便写点记录一下自己的心得。

在研究时参考了@王博_Nick的博客:http://www.cnblogs.com/sonic1abc/p/3868729.html,在此先表示感谢。

闲话不多说,让我们开始吧。

要将语音命令功能添加到应用中需要三个步骤:

  1. 创建语音命令定义 (VCD) 文件。这是一个 XML 文档,可以定义在激活应用时用户可说出以启动操作的所有语音命令。

首先向项目中添加一个新的VCD文件,

创建的新文件如下:

以下对各个标签稍作说明:

VoiceCommands是VCD文件的开头,不可缺少。新建的VCD文件默认为Windows Phone 8.0的模板,若要适用于Cortana,需把VoiceCommands后的1.0改为1.1。

<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">

改为1.1后将不能定义PhraseList标签,取而代之的是PhraseTopic。相比之下,PhraseTopic更为灵活,它可以表示用户所说的任何内容,而PhraseList只能表示Item中列举的内容。

  

CommandSet表示命令集,并定义了命令的语言。要支持中文命令,需修改xml:lang属性为zh-CN。

<CommandSet xml:lang="zh-CN">

CommandPrefix表示命令前缀,也就是对Cortana喊出命令之前要先喊这个词,除了喊前缀之外,也可以直接喊应用的名字。CommandPrefix在文件中是唯一的。如应用名叫Application,CommandPrefix的值为App,就可以对Cortana喊: Application(App) xxx命令。

Example里是写给用户的提示信息,也就是告诉用户应用接受哪些语音命令。Cortana中的提示会把CommandSet和Command下的Example进行组合显示。

以微信为例:

  

Command表示各个具体语音命令,ListenFor中指定命令的格式,如: [来] 玩等级 {level} [的游戏]。中括号中的内容是可选的命令,可喊可不喊,Cortana自动识别;大括号中的内容表示应用需进行处理的内容,且里面的变量名需要被定义为PhraseTopic。

Feedback表示Cortana打开应用前会播放的语音内容,如果不想听的话可以用符号来代替...Navigate表示导航到应用中的页面名称,也就是接收到该条命令后Cortana会直接打开应用的对应页面。

<Command Name="Search">
<Example>搜索xx</Example>
<ListenFor>搜[索] {keyword} </ListenFor>
<ListenFor>查找 {keyword} </ListenFor>
<ListenFor>查 {keyword} </ListenFor>
<Feedback>...</Feedback>
<Navigate Target="SearchPage.xaml"/>
</Command> <PhraseTopic Label="keyword" Scenario="Search">
</PhraseTopic>

  2. 将代码添加到你的应用以在带有电话语音功能的 VCD 文件中注册命令集。

可以在应用程序启动时向系统注册VCD文件,注册的方法也很简单。如果你的应用想同时支持8.0和8.1,就需要判断系统版本,来加载不同的VCD文件。

 private const string Wp81VcdPath = "ms-appx:///VoiceCommandDefinition81.xml";
private const string Wp80VcdPath = "ms-appx:///VoiceCommandDefinition80.xml"; public async void RegisterVcd()
{
var using81OrAbove = ((Environment.OSVersion.Version.Major >= )
&& (Environment.OSVersion.Version.Minor >= ));
var vcdPath = using81OrAbove ? Wp81VcdPath : Wp80VcdPath; try
{
//向系统注册VCD文件
await VoiceCommandService.InstallCommandSetsFromFileAsync(new Uri(vcdPath));
}
catch (Exception ex)
{
Debug.WriteLine(ex.HResult + ex.Message);
}
}

  3. 将代码添加到应用以处理语音命令激活、导航并执行该命令。

应用通过Cortana启动时,页面的NavigationContext属性中含有叫做“voiceCommandName”的参数,该参数的值对应VCD文件中定义的Command标签的Name属性。然后根据不同的命令做出不同的处理。

我自己的做法是封装一个语音处理的帮助类,然后通过发出不同的事件。

/// <summary>
/// 语音指令的处理方法,在监听语音命令事件后调用,若不是通过语音命令启动程序,则会向系统注册语音命令文件(VCD file)
/// </summary>
/// <param name="context">调用该方法时所在页面NavigationContext</param>
public static void CommandProcess(NavigationContext context)
{
_commandContext = context;
string commandName;
if (_commandContext.QueryString.TryGetValue("voiceCommandName", out commandName))
{
HandleCommand(commandName);
}
}   private static void HandleCommand(string commandName)
{
string content; if (_commandContext.QueryString.TryGetValue("keyword", out content)
&& !string.IsNullOrEmpty(content))
{
switch (commandName)
{
case "PageSwitch":
OnPageConvertCommandExecuted(content);
break; case "WordCopy":
OnLanguageCopyCommandExecuted(content);
break; case "Search":
OnSearchCommandExecuted(content);
break; case "OpenFunction":
OnOpenThingsCommandExecuted(content);
break;
}
}
}

然后在对应的页面中订阅事件

  protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (e.NavigationMode == NavigationMode.New)
{
VoiceCommandHelper.WordCopyCommandExecuted += VoiceCommandHelper_WordCopyCommandEventExecuted;
VoiceCommandHelper.OpenFunctionCommandExecuted += VoiceCommandHelper_OpenFunctionCommandEventExecuted; VoiceCommandHelper.CommandProcess(NavigationContext);
}
}

参考资料:

Quickstart: Voice commands (XAML)

快速入门:语音命令 (XAML)

MSDN的源码下载:

MSDN Voice Search for Windows Phone 8.1

我自己的源码:http://pan.baidu.com/s/1ntjyR37

望各位看官多拍砖

Windows phone 8.1应用集成cortana语音命令的更多相关文章

  1. WP8.1下 Cortana语音命令 VCD文件 设计

    Windows Phone8.1下的Cortana,可以通过语音的方式,打开.设置应用,进行页面跳转.执行任务. 我们先要创建VCD(VoiceCommand.xml)文件 <?xml vers ...

  2. Win10/UWP开发—使用Cortana语音指令与App的前台交互

    Win10开发中最具有系统特色的功能点绝对少不了集成Cortana语音指令,其实Cortana语音指令在以前的wp8/8.1时就已经存在了,发展到了Win10,Cortana最明显的进步就是开始支持调 ...

  3. Win10/UWP开发—使用Cortana语音指令启动前台App

    这两天进群(53078485)找大咖的童鞋比较多,只是大咖比较忙,目前Demo还没有要到,这里先给大家转载一篇Aran大咖的博客学习下,以下是原文: Win10开发中最具有系统特色的功能点绝对少不了集 ...

  4. Win10/UWP开发—使用Cortana语音与App后台Service交互

    上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...

  5. WP8微信5.3开始内测 支持Cortana语音 两微破冰了?

    WP版微信v5.3内测版昨发布了,进行了一些小幅升级,最意外的是原生支持WP8.1版Cortana语音命令操作.要知道微软的聊天机器人“小冰”在微信上存在不到4天,就被微信全面封杀退出,现在微信又内测 ...

  6. 与众不同 windows phone (45) - 8.0 语音: TTS, 语音识别, 语音命令

    [源码下载] 与众不同 windows phone (45) - 8.0 语音: TTS, 语音识别, 语音命令 作者:webabcd 介绍与众不同 windows phone 8.0 之 语音 TT ...

  7. 如何将 Cortana 与 Windows Phone 8.1 应用集成 ( Voice command - Natural language recognition )

    随着 Windows Phone 8.1 GDR1 + Cortana 中文版的发布,相信有很多用户或开发者都在调戏 Windows Phone 的语音私人助理 Cortana 吧,在世界杯的时候我亲 ...

  8. Windows 10 IoT Serials 4 - 如何在树莓派上使用Cortana语音助手

    从Windows 10 IoT Core 14986版本开始,微软已经加入Cortana语音助手功能.之前,我们只能使用本地语音识别,需要编写应用程序,下载到设备中才能实现.从现在开始,微软已经从系统 ...

  9. 【Win10 应用开发】语音命令与App Service集成

    昨天,老周演示了语音命令集成这一高大上功能,今天咱们来点更高级的语音命令. 在昨天的例子中,响应语音命令是需要启动应用程序的,那么如果可以不启动应用程序,就直接在小娜面板上进行交互,是不是会更高大小呢 ...

随机推荐

  1. 借助百度云API进行人脸识别

    前言:本篇博客是笔者第一次使用百度云api进行人脸检测,主要内容包括两部分,一是获取接口,二是借助接口进行人脸检测.笔者也是初步了解这方面的内容,也是参考了杂七杂八的博文,内容可能存在错误及其他毛病, ...

  2. 数据结构之BF算法,kmp算法,三元组,十字链表总结

    在这一章中,老师教了我们四种数据结构:BF算法,kmp算法,三元组和十字链表:还给我们讲了2019年团体天体赛中T1-8的AI题 1.对于BF和kmp算法,老师除了在课堂上讲解算法的主要核心思想外,还 ...

  3. 虚拟机网络配置,桥接模式和NAT模式

    虚拟机网络设置方式的研究: 主要就是桥接网络,和NAT模式: 桥接网络:桥接网络中,相当于虚拟机的网卡和主机的物理网卡均连接到虚拟机软件提供的VMnet0虚拟交换机上,因此虚拟机和主机是平等的,相当于 ...

  4. 大型php网站性能和并发访问优化方案(转载自php中文网)

               网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎 ...

  5. linux 下PATH环境变量

    环境变量简介 什么是环境变量呢?简要的说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件. 在linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现&quo ...

  6. Tomcat 配置文件的解析

    转载:https://www.cnblogs.com/sunshine-1/p/8990044.html https://www.cnblogs.com/kismetv/p/7228274.html ...

  7. request.getRequestDispatcher()跳转+中文乱码

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...

  8. C#多线程函数如何传参数和返回值

          详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统.   C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...

  9. URL 地址传中文,转码

    地址传中文,转码 http://community.csdn.net/Expert/topic/4541/4541877.xml?temp=.57688541.设置web.config文件.<s ...

  10. APP开发的三种模式

    Hybrid APP混合开发的一些经验和总结 APP开发的三种模式:Native App .web App.hybrid App 1.原生app 使用原生app (android或iOS)开发APP. ...