uwp 语音指令
Xml code
--------------------------------
<Page
x:Class="MyApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MyApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel>
<TextBlock Text="请说出你最喜欢的体育运动:" FontSize="18"/>
<Button Content="开始识别" Width="200" Click="OnClick"/>
<ListBox Name="lb">
<x:String>足球</x:String>
<x:String>排球</x:String>
<x:String>跑步</x:String>
<x:String>羽毛球</x:String>
<x:String>篮球</x:String>
</ListBox>
</StackPanel>
</Page>
C# code
------------------------
public sealed partial class MainPage : Page
{
SpeechRecognizer _recognizer = null;
public MainPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
this.Loaded += Page_Loaded;
this.Unloaded += Page_Unloaded;
}
private void Page_Unloaded(object sender, RoutedEventArgs e)
{
// 释放资源
_recognizer.Dispose();
}
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
_recognizer = new SpeechRecognizer();
// 创建自定义短语约束
string[] array = { "足球", "排球", "跑步", "羽毛球", "篮球" };
SpeechRecognitionListConstraint listConstraint = new SpeechRecognitionListConstraint(array);
// 添加约束实例到集合中
_recognizer.Constraints.Add(listConstraint);
// 编译约束
await _recognizer.CompileConstraintsAsync();
}
private async void OnClick(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
btn.IsEnabled = false;
try
{
SpeechRecognitionResult res = await _recognizer.RecognizeAsync();
if (res.Status == SpeechRecognitionResultStatus.Success)
{
// 处理识别结果
this.lb.SelectedItem = res.Text;
}
}
catch { /* 忽略异常 */ }
btn.IsEnabled = true;
}
}
xml 文件


语音识别
public sealed partial class App : Application
{
/// <summary>
/// Initializes the singleton application object. This is the first line of authored code
/// executed, and as such is the logical equivalent of main() or WinMain().
/// </summary>
public App()
{
this.InitializeComponent();
this.Suspending += this.OnSuspending;
}
/// <summary>
/// Invoked when the application is launched normally by the end user. Other entry points
/// will be used when the application is launched to open a specific file, to display
/// search results, and so forth.
/// </summary>
/// <param name="e">Details about the launch request and process.</param>
protected async override void OnLaunched(LaunchActivatedEventArgs e)
{
StorageFile vcdFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///vcd.xml"));
// 安装VCD文件
await VoiceCommandDefinitionManager.InstallCommandDefinitionsFromStorageFileAsync(vcdFile);
Frame rootFrame = Window.Current.Content as Frame;
// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (rootFrame == null)
{
// Create a Frame to act as the navigation context and navigate to the first page
rootFrame = new Frame();
// TODO: change this value to a cache size that is appropriate for your application
rootFrame.CacheSize = 1;
// Set the default language
rootFrame.Language = "zh-CN";
if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
// TODO: Load state from previously suspended application
}
// Place the frame in the current Window
Window.Current.Content = rootFrame;
}
if (rootFrame.Content == null)
{
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
if (!rootFrame.Navigate(typeof(MainPage), e.Arguments))
{
throw new Exception("Failed to create initial page");
}
}
// Ensure the current window is active
Window.Current.Activate();
}
/// <summary>
/// Invoked when application execution is being suspended. Application state is saved
/// without knowing whether the application will be terminated or resumed with the contents
/// of memory still intact.
/// </summary>
/// <param name="sender">The source of the suspend request.</param>
/// <param name="e">Details about the suspend request.</param>
private void OnSuspending(object sender, SuspendingEventArgs e)
{
var deferral = e.SuspendingOperation.GetDeferral();
// TODO: Save application state and stop any background activity
deferral.Complete();
}
protected override void OnActivated(IActivatedEventArgs args)
{
if (args.Kind == ActivationKind.VoiceCommand)
{
VoiceCommandActivatedEventArgs varg = (VoiceCommandActivatedEventArgs)args;
// 处理识别结果
SpeechRecognitionResult res = varg.Result;
// 获取已识别的指令名字
string cmdName = res.RulePath[0];
if (cmdName == "open")
{
// 获取PhraseList中被识别出来的项
var interpretation = res.SemanticInterpretation;
if (interpretation != null)
{
// 通过PhraseList的Label属性可以查询出被识别的Item
string item = interpretation.Properties["pages"].FirstOrDefault();
if (!string.IsNullOrEmpty(item))
{
// 导航到对应页面
Frame root = Window.Current.Content as Frame;
if (root == null)
{
root = new Frame();
Window.Current.Content = root;
}
switch (item)
{
case "我的音乐":
root.Navigate(typeof(MyMusicPage));
break;
case "我的视频":
root.Navigate(typeof(MyVedioPage));
break;
case "我的照片":
root.Navigate(typeof(MyPhotoPage));
break;
case "主页":
root.Navigate(typeof(MainPage));
break;
default:
root.Navigate(typeof(MainPage));
break;
}
}
}
}
}
Window.Current.Activate();
}
}
识别的xml 文件
<?xml version="1.0" encoding="utf-8"?>
<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">
<CommandSet xml:lang="zh-cn">
<CommandPrefix>测试应用</CommandPrefix>
<Example>“打开 主页”或“打开 我的音乐”或“我的音乐”或“打开我的视频”或“我的视频”……</Example>
<Command Name="open">
<Example>“打开 我的音乐”或“我的音乐”</Example>
<ListenFor>[打开]{pages}</ListenFor>
<Feedback>好的,正在努力打开中……</Feedback>
<Navigate/>
</Command>
<PhraseList Label="pages">
<Item>主页</Item>
<Item>我的音乐</Item>
<Item>我的视频</Item>
<Item>我的照片</Item>
</PhraseList>
</CommandSet>
</VoiceCommands>
uwp 语音指令的更多相关文章
- Win10/UWP开发—使用Cortana语音指令与App的前台交互
Win10开发中最具有系统特色的功能点绝对少不了集成Cortana语音指令,其实Cortana语音指令在以前的wp8/8.1时就已经存在了,发展到了Win10,Cortana最明显的进步就是开始支持调 ...
- Win10/UWP开发—使用Cortana语音指令启动前台App
这两天进群(53078485)找大咖的童鞋比较多,只是大咖比较忙,目前Demo还没有要到,这里先给大家转载一篇Aran大咖的博客学习下,以下是原文: Win10开发中最具有系统特色的功能点绝对少不了集 ...
- WP中的语音识别(下):语音指令
除了系统集成的可以用于搜索.启动应用程序等语音命令外,在我们的应用程序内部还能自己定义语音指令,使得我们的APP能与语音操控结合得更加完全. 语音指令是通过一个XML文件来定义的.比如,咱小舅子开了家 ...
- anki vector robot入门语音指令大全
vector机器人功能不断完善. 一:刚开始支持一些基础指令,你跟他说话他能在本机识别,然后做出相应的响应.在说这部分指令之前,需要加上Hey Vector.(嘿,维课的),然后他会准备听取你的指令, ...
- Win10/UWP开发—使用Cortana语音与App后台Service交互
上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...
- 在UWP应用中加入Cortana语音指令集
本文介绍小娜语音指令集的使用场景,如何将UWP应用接入小娜的语音指令集,使用户直接通过小娜启动应用并使用应用中 一些轻量级的功能.文中以必应词典作为实例讲解必应词典UWP版本是如何接入小娜语音功能的. ...
- HoloLens开发手记 - 语音输入 Voice input
语音是HoloLens三大重要输入形式之一.它允许你直接通过语言控制全息图像,而不用借助手势.你只要凝视全息图像然后说出语音命令即可.语音输入是自然的交互方式,它能够很好的改善复杂的交互,因为通过一条 ...
- 3D语音天气球(源码分享)——完结篇
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 由于这篇文章是本系列最后一篇,有必要进行简单的回顾和思路整理. 这个程序是由两 ...
- 微软Hololens学院教程-Hologram 212-Voice(语音)【微软教程已经更新,本文是老版本】
这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...
随机推荐
- shell 正则表达式一
正则表达式用于处理文本,精通运用正则表达式可以有效的解决工作的效率 正则表达式有基础正则表达式和扩展正则表达式区别 grep支持基础的正则表达式,grep -E (egrep)支持扩展正则表达式 1. ...
- Linux上生产环境源码方式安装配置postgresql12
1.Linux上源码方式安装postgresql12 01.准备操作系统环境 echo "192.168.1.61 tsepg61" >> /etc/hosts mou ...
- 解决 Github 打不开或打开很慢的问题
解决 Github 打不开或打开很慢的问题 方法一 一.确定 github 网站的 ip 打开网址:http://github.com.ipaddress.com/ 192.30.253.112 gi ...
- [NOIp2017]宝藏 题解
非常巧妙的 \(O(n^23^n)\) 做法. 题目的本质是要求一棵生成树,使得其每条边的长度与这条边的起点深度乘积的和最小. 我们使用状压 DP,考虑到当前状态与已经打通的点和深度有关,不妨设 \( ...
- 7.27考试总结(NOIP模拟25)[random·string·queue]
死亡的尽头,没有神 T1 random 解题思路 这波是找规律完胜了.. lby dalao根据样例找出了正确的式子:\(\dfrac{n^2-1}{9}\) 然而,我这个菜鸡却推出了这样一个错误的式 ...
- odoo里面批量上传图片
import os import base64 def base_data_product_image(self): """ odoo里批量创建产品,并上传图片 图片为b ...
- Python自动化测试面试题-Redis篇
目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...
- 深入刨析tomcat 之---第11篇 how tomcat works( 第15章 ) 如何解析web.xml 文件
writedby 张艳涛 记得当年是学习jsp的时候,写过web.xml中的标签.在之后的springmvc中也是有关于配置mvc 过滤器 和dispatchServlet的标签,之前是看不懂呢!看到 ...
- Jmeter二次开发 java取样器示例
public SampleResult runTest(JavaSamplerContext javaSamplerContext) { //生成sampleResult对象,用于请求的命名.标记状态 ...
- Centos8 Nginx 开机自启配
第一步:创建 service文件 vim /lib/systemd/system/nginx.service /lib 与 /usr/lib 我这里配置时是一样的,在那个文件夹配置都可以 第二步:编写 ...