0
点赞
收藏
分享

微信扫一扫

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 versinotallow="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>
      <Navigate/>
    </Command>
    <PhraseList Label="pages">
      <Item>主页</Item>
      <Item>我的音乐</Item>
      <Item>我的视频</Item>
      <Item>我的照片</Item>
    </PhraseList>
  </CommandSet>
</VoiceCommands>

举报

相关推荐

0 条评论