Windows phone 8.1應用整合cortana語音命令

來源:互聯網
上載者:User

標籤:style   blog   http   io   color   ar   os   sp   for   

微軟推出小娜已經有一段時間了,最近恰好在研究其用法,就隨便寫點記錄一下自己的心得。

在研究時參考了@王博_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檔案。

 1 private const string Wp81VcdPath = "ms-appx:///VoiceCommandDefinition81.xml"; 2 private const string Wp80VcdPath = "ms-appx:///VoiceCommandDefinition80.xml"; 3  4 public async void RegisterVcd() 5         { 6             var using81OrAbove = ((Environment.OSVersion.Version.Major >= 8) 7                                    && (Environment.OSVersion.Version.Minor >= 10)); 8             var vcdPath = using81OrAbove ? Wp81VcdPath : Wp80VcdPath; 9 10             try11             {12                 //向系統註冊VCD檔案13                 await VoiceCommandService.InstallCommandSetsFromFileAsync(new Uri(vcdPath));14             }15             catch (Exception ex)16             {17                 Debug.WriteLine(ex.HResult + ex.Message);18             }19         }

 

  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語音命令

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.