Windows Phone SDK 8.0 新特性-Speech

简介:

1. 引言

    随着Windows Phone SDK 8.0的发布,其包含的新特性也受到了广大开发者的关注,其中之一就是语音方面的提升。其实在Windows Phone SDK 8.0发布之前,Kinect for Windows也更新了其SDK,支持了其他新的语言,可惜没有看到支持中文的选项。而Windows Phone SDK 8.0的Speech中包含了中文的支持,这点令我们中文用户感受到了MS对中国市场的重视。这点大家可以在Windows Phone 8 模拟器中看到,将模拟器的语言设置为中文,进入设置-语音-语音语言,看到其支持的语言如下图1所示。除了普通话,Windows Phone 8还支持粤语和台湾语的语音识别。

12

图1:Windows Phone 8 Speech支持的语言种类

 

2. 与App交互的三个Speech组件

    在Windows Phone 8 中,用户可以通过三种方式与App进行语音的交互。

  • Voice Commands
  • Speech Recognition
  • Text-to-speech (TTS)

    其交互方式如下图2所示。

Speech features

图2:用户与应用程序进行语音交互的三种方式

 

2.1 Voice Commands

    该功能其实在Windows Phone 7.5中就已经包含了,但那只是简单的诸如“启动某个应用程序”、“打电话给某人”等语音指令。但是在Windows Phone 8 中,该语音指令又得到了进一步的提升。用户可以通过语音,在启动应用程序时,进行深层次的操作。比如,“打开某应用程序,显示某页面”,“打开某应用程序,查询今日天气”等等。

    另外,语音指令的提示对于用户来说也是很重要的一环,用户可以通过“我该说什么”页面来发掘应用程序的语音指令,如下图3所示。

43

图3:“我该说什么”页面的“应用程序”界面

   “我该说什么”页面是一个典型的Pivot页面,主要包含了“常用”、“应用程序”和“更多”这三个选项。在“应用程序”页面中,如果系统安装了语音指令的应用程序,那么,该页面就会显示一些语音指令的提示。例如,我在模拟器中安装了“智能语音”程序,在该页面中显示了“智能语音,请说:打开 智能语音”这条提示。通过后面的程序编写,开发者可以对该提示进行设置。

有关Windows Phone 8 中Voice Commands的进一步详细资料,可以参考MSDN上的文档:Voice commands for Windows Phone 8

 

2.2 Speech Recognition

    在应用程序中,通过Speech Recognition功能,用户可以使用语音来进行输入,或者是完成某个任务。Speech Recognition与Voice Commands的最大区别就在于使用场合:Speech Recognition用于应用程序内部,而Voice Commands是在应用程序外部。对于文本输入和网页搜索,Windows Phone 8包含了对预定义语法的支持;对于用户自定义的语法,必须遵循工业级的《Speech Recognition Grammar Specification (SRGS) Version 1.0》规范。有关语音识别的具体内容,可以参考MSDN的文档:Text-to-speech (TTS) for Windows Phone

 

2.3 Text-to-Speech(TTS)

    在应用程序内部,开发者可以使用Text-to-Speech(TTS),或者说是语音合成技术,将文本内容通过Microphone读给用户听。同样,文本的内容可以是字符串,也可以是一句话,其遵循的规范是《Speech Synthesis Markup Language (SSML) Version 1.0》。具体信息可以参考MSDN的文档:Text-to-speech (TTS) for Windows Phone

 

3. Voice Commands示例

    通过该示例,我们实现的功能包括打开应用程序和打开应用程序的某个页面。

    首先,我们打开Visual Studio,新建工程,命名为VoiceAppDemo。为了使应用程序具备语音识别的能力,我们在WMAppManifest.xml文件中,加入MicroPhone和Speech Recognition的Capability选项,如下图4所示。

image

图4:WMAppManifest.xml文件中加入语音识别的选项

    为了体现Windows Phone 8对中文语音的支持,我们在WMAppManifest.xml的Application UI中,将Display Name设置为“智能语音”,如下图5所示。

image

图5:WMAppManifest.xml文件中将应用程序设置为中文名称

    之后,在项目中,通过右键加入新文件,选择Voice Command Defination,命名为SupportedVoiceCommands.xml,如下图6所示。

image

图6:新加入语音指令定义文件

    修改其语音指令定义文件,内容如下:

  1: <?xml version="1.0" encoding="utf-8"?>
  2: <VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">
  3:     <CommandSet xml:lang="zh-cn">      
  4:       <CommandPrefix> 智能语音 </CommandPrefix>
  5:       <Example> 请说:打开 智能语音</Example>
  6:   </CommandSet>
  7: </VoiceCommands>

    该语音指令文件在程序第一次运行时,需要进行注册,我们可以在App.xaml.cs文件中,加入对该语音指令文件的注册,函数命名为InitializeVoiceCommands,其实现代码如下:

  1: async private static void InitializeVoiceCommands()
  2: {
  3:        var filename = "SupportedVoiceCommands.xml";
  4: 
  5:        try
  6:        {
  7:              var location = Windows.ApplicationModel.Package.Current.InstalledLocation.Path;
  8:              var fileUriString = String.Format("file://{0}/{1}", location, filename);
  9:              await Windows.Phone.Speech.VoiceCommands.VoiceCommandService.InstallCommandSetsFromFileAsync(new Uri(fileUriString));
 10:        }
 11:        catch (Exception ex)
 12:        {
 13:              System.Diagnostics.Debug.WriteLine(ex.Message);
 14:        }
 15: }

    同时,在App()构造函数中加入InitializeVoiceCommands()。其代码如下:

  1:         public App()
  2:         {
  3:             // Global handler for uncaught exceptions.
  4:             UnhandledException += Application_UnhandledException;
  5: 
  6:             // Standard XAML initialization
  7:             InitializeComponent();
  8: 
  9:             // Phone-specific initialization
 10:             InitializePhoneApplication();
 11: 
 12:             // Language display initialization
 13:             InitializeLanguage();
 14: 
 15:             InitializeVoiceCommands();
 16: 
 17:             // Show graphics profiling information while debugging.
 18:             if (Debugger.IsAttached)
 19:             {
 20:                 // Display the current frame rate counters.
 21:                 Application.Current.Host.Settings.EnableFrameRateCounter = true;
 22: 
 23:                 // Show the areas of the app that are being redrawn in each frame.
 24:                 //Application.Current.Host.Settings.EnableRedrawRegions = true;
 25: 
 26:                 // Enable non-production analysis visualization mode,
 27:                 // which shows areas of a page that are handed off to GPU with a colored overlay.
 28:                 //Application.Current.Host.Settings.EnableCacheVisualization = true;
 29: 
 30:                 // Prevent the screen from turning off while under the debugger by disabling
 31:                 // the application's idle detection.
 32:                 // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run
 33:                 // and consume battery power when the user is not using the phone.
 34:                 PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
 35:             }
 36: 
 37:         }

 

    此时,我们就可以进行语音指令的测试了。选择对应的模拟器类型,点击Degub,使得应用程序部署到模拟器,并且开始运行。在第一次运行的时候,应用程序通过InstallCommandSetsFromFileAsync进行了语音指令的注册。之后,我们可以点击退出,回到Start界面。长按Windows按钮,系统跳出语音界面,对着Microphone说:“打开智能语音”。系统会弹出提示信息,显示正在打开智能语音。

    进行到这里,我们只实现了通过语音指令打开应用程序,并且显示应用程序主页面的目的。但是,对于用户具体的需求,开发者可以在SupportedVoiceCommands.xml文件中进行更多更细致的定义。例如,我的应用程序包含了Panorama页面和Pivot页面,在应用程序启动的时候,我想显示其中的一个页面。那么,首先,我们可以在项目中添加两个新页面,命名为PanoramaPage.xaml和PivotPage.xaml。如下图7所示。

image

图7:添加新页面

    然后,在SupportedVoiceCommands.xml文件中,扩充对语音指令的定义,假设用户在应用程序启动的时候,新增了打开PanoramaPage和PivotPage的需求。那么我们可以将其语音指令的定义扩充如下:

  1: <?xml version="1.0" encoding="utf-8"?>
  2: <VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">
  3:     <CommandSet xml:lang="zh-cn">
  4:       
  5:       <CommandPrefix> 智能语音 </CommandPrefix>
  6:       <Example> 请说:打开 智能语音</Example>
  7: 
  8:       <Command Name="测试全景页面"> 
  9:         <Example>跳到全景页面</Example>
 10:         <ListenFor>跳到全景页面</ListenFor>
 11:         <Feedback>正在打开智能语音 显示全景页面</Feedback>
 12:         <Navigate Target="PanoramaPage.xaml"></Navigate>
 13:       </Command>
 14:       
 15:       <Command Name="测试枢轴页面">
 16:         <Example>跳到枢轴页面</Example>
 17:         <ListenFor>跳到枢轴页面</ListenFor>
 18:         <Feedback>正在打开智能语音 显示枢轴页面</Feedback>
 19:         <Navigate Target="PivotPage.xaml"></Navigate>
 20:       </Command>
 21:       
 22:   </CommandSet>
 23: </VoiceCommands>

 

    在以上的语英指令Command中,ListenFor代表应用程序监听的内容,Feedback代表信息提示显示的内容,Navigate代表页面导航的具体参数。在这里,我们直接将Target设置为对应的全景页面或者是对应的枢轴页面。

    重新编译,然后调试。在应用程序运行以后,点击退出,回到Start页面。接着长按Windows按钮,在弹出语音输入提示后,对着Microphone说:“打开智能语音,跳到全景页面”,或者“打开智能语音,跳到枢轴页面”,系统会弹出提示信息,显示正在打开智能语音,跳到对应的页面。如下图8所示。这样就实现了打开应用程序,并且直接进入应用程序的某个页面的目的。

76

图8: 通过语音指令直接打开应用程序的枢轴页面和全景页面

 

4.结语

    本文介绍了Windows Phone 8 SDK中的Speech特性,并且针对Voice Commands,给出了示例。

 

参考文档

MSDN:Speech for Windows Phone 8


本文转自灵动生活博客园博客,原文链接:http://www.cnblogs.com/dearsj001/archive/2012/11/18/WindowsPhone8Speech.html,如需转载请自行联系原作者

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
26天前
|
API 开发工具 C#
神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
本文将介绍,ClkLog针对神策不支持全埋点的客户端实现用户访问基础统计分析 1。
神策SDK不支持Windows客户端全埋点,怎么实现用户统计分析?
|
1月前
|
API 开发工具 UED
在 UWP 中使用 Windows App SDK
【10月更文挑战第17天】在UWP中使用Windows App SDK可增强应用功能和性能。首先了解SDK特性,接着安装Visual Studio 2022及以上版本,并从微软官网下载安装SDK。配置项目时,确保目标版本支持SDK,添加SDK引用后即可使用新API提升应用体验。开发过程中应充分利用调试工具进行测试,确保应用的兼容性和稳定性。
|
3月前
|
编解码 开发工具 C#
[大牛直播SDK]Windows平台RTMP直播推送模块功能设计
大牛直播SDK采用全自研框架,具备高度可扩展性与自适应算法,显著降低延迟并提高采集编码效率。SDK以模块化设计,支持RTMP推流及多种音视频编码格式(如AAC、SPEEX、H.264、H.265),并能与播放器SDK组合实现丰富功能,包括流媒体转发、内置RTSP服务等。提供了详尽的参数配置选项,支持多摄像头、屏幕采集与水印叠加,并兼容Windows 7及以上操作系统。该SDK以C++/C#双接口形式提供,集成简便,同时包含调试与发布版本库,便于开发者快速上手。此外,支持断网重连、实时预览及多种编码前后的数据对接需求。
|
3月前
|
移动开发 JavaScript Java
windows7下安装配置phonegap3.0 (cordavo)开发环境 (涉及android sdk配置)
windows7下安装配置phonegap3.0 (cordavo)开发环境 (涉及android sdk配置)
|
6月前
|
Dart Shell 开发工具
解决windows安装Flutter时出现Unknown operating system. Cannot install Dart SDK.问题
解决windows安装Flutter时出现Unknown operating system. Cannot install Dart SDK.问题
209 0
|
JavaScript Java 开发工具
在Windows系统对接良田高拍仪驱动SDK (EloamView java)
良田高拍仪驱动是能较好的与Java平台交互的,但不知为何官方的SDK驱动中已没有java的samples,但我在2021年使用时是有java的包的,特意记录一下我在IDEA开发工具中测试运行这个demo的过程
903 0
在Windows系统对接良田高拍仪驱动SDK (EloamView java)
|
编解码 Ubuntu IDE
基于Ubuntu交叉编译X264, FFmpeg Windows SDK详细教程
基于Ubuntu交叉编译X264, FFmpeg Windows SDK详细教程
237 0
|
开发工具
Dex Loader] Failed to load D:\adt-bundle-windows-x86_64-20190307\sdk\build-tools\28.0.3\lib\dx.jar
Dex Loader] Failed to load D:\adt-bundle-windows-x86_64-20190307\sdk\build-tools\28.0.3\lib\dx.jar
105 0
|
开发工具 C++ Windows
彻底解决VS中找不到 Windows SDK 版本 8.1的错误
彻底解决VS中找不到 Windows SDK 版本 8.1的错误
1580 0
彻底解决VS中找不到 Windows SDK 版本 8.1的错误
|
Android开发 iOS开发 Windows
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
不久前,随着最后一家WP手机厂商惠普宣布取消今后Windows Phone的研发计划,以及微软官方声明对WP8.1系统今后所有升级维护的终止,WP手机,作为曾经和安卓手机、苹果手机并驾齐驱的三大智能手机之一,正式寿终正寝。
1487 0
Windows Phone 寿终正寝了,这些经典机型你还记得吗?
下一篇
无影云桌面