Windows Phone 8 VoiceCommandService

  • 1117
  • 0
  • 2012-11-06

WP8 VoiceCommandService

VoiceCommandService是靜態類別,這個類別可以從語音命令定義 (VCD) 檔案安裝命令組,以及取得已安裝的命令組。也就是說把我們想說的命令透過Voice Command Definition檔案格式為xml組成來控制應用程式。

1.在方案總管展開Properties目錄匣看到WMAppManifest.xml用滑鼠點二下就出現下面的設定畫面,接著在顯示名稱方塊打上你的應用程式名稱

image

2.接著在方案總管上加入新增項目選擇語音令定義

image

3.在新增語音命令定義檔案,開啟就會有一些簡單的命令及介紹,下面是我用範本預設修改的內容

   1:  <VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">
   2:    <CommandSet xml:lang="zh-tw">
   3:      <CommandPrefix>語音遊戲</CommandPrefix>
   4:      <Example> 玩一場單打遊戲 </Example>
   5:  
   6:      <Command Name="PlayGame">
   7:        <Example> 玩一場單打遊戲 </Example>
   8:        <ListenFor> 玩一場{number}遊戲 </ListenFor>
   9:        <ListenFor> {number}遊戲 </ListenFor>
  10:        <Feedback> 初始化新遊戲... </Feedback>
  11:        <Navigate Target="Page1.xaml" />
  12:      </Command>
  13:  
  14:      <PhraseList Label="number">
  15:        <Item> 單打 </Item>
  16:        <Item> 雙打</Item>
  17:        
  18:      </PhraseList>
  19:  
  20:    </CommandSet>
  21:  </VoiceCommands>

 

4.在來回到MainPage頁面插貼上下面程式碼,也是關鍵地方安裝命令組的字典

   1:          public MainPage()
   2:          {
   3:              InitializeComponent();
   4:              InitializeVoiceCommands();
   5:          }
   6:  
   7:          private async System.Threading.Tasks.Task InitializeVoiceCommands()
   8:          {
   9:              await VoiceCommandService.InstallCommandSetsFromFileAsync(new Uri("ms-appx:///VoiceCommandDefinition1.xml"));
  10:          }

還有要新增一個Page1頁面在插入下列程式碼,這段是用來接收語音的指令及參數

   1:   protected async override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
   2:          {
   3:              base.OnNavigatedTo(e); if (NavigationContext.QueryString.Any()) 
   4:              { 
   5:                  StringBuilder sb = new StringBuilder(); 
   6:                  foreach (var key in NavigationContext.QueryString.Keys)
   7:                  { sb.AppendLine(key + ": " + NavigationContext.QueryString[key]); } 
   8:                 StatusText .Text = sb.ToString();
   9:              } 
  10:          }

5.在來就可以來測程式了,首先把專案建置到模擬器上,接著按下模擬器上的Windows 鍵中間那顆一直按在不放就會出現第一個畫面,這時候放開對他說{我可以說什麼},接著會跳到第二個畫面顯示這時你可以用滑鼠向左滑動一下就會跑到第三個畫面,上面顯示的文字是語音命令指令,這個名字也就是在上面語音命令定義檔的

<CommandPrefix>語音遊戲</CommandPrefix>
    <Example> 玩一場單打遊戲 </Example>

012

6.接著按下開始說 {語音遊戲 玩一場雙打遊戲},若指令辦別沒問題就會出現如下圖不知道大舌頭的人怎麼辦?畫面所顯示的文字就是辦別到的指令所回應文字以及要進入應用程式的畫面

<Feedback> 初始化新遊戲... </Feedback>

<Navigate Target="Page1.xaml" />

4

7.最後跳到Page1在畫面也顯示語音命令的名稱及參數

6

8.其實在這個區段也可以多增加一些生活化口語指令,就如下面的指令啟動也可說{語音遊戲 雙打遊戲}就看你怎麼編輯<ListenFor>標籤

<ListenFor> 玩一場{number}遊戲 </ListenFor>
<ListenFor> {number}遊戲 </ListenFor>

 

9.在上面語音命令檔裡面有一個參數{number}這個是用來在語音命令的選擇參數,把他加到你的語音命令裡面在完成語音指令後,你可以在應用程式裡面透過NavigationContext.QueryString.Keys取得使用者所下的語音參數

 

   1:  <PhraseList Label="number">
   2:        <Item> 單打 </Item>
   3:        <Item> 雙打</Item>
   4:  </PhraseList>