前言:
微軟Window 10 的語音助理Cortana, 實現了用語音去驅動我們應用程式的情境, 開發人員可以在UWP的專案裡, 定義Voice Command, 當使用者的語音輸入符合相對應的指令,(如 Add new Movie on My Library), 程式就會被觸發, 簡單的說, 我們可以用語音把程式叫起來 , 然後讓它去做一些事情
如果想要建立一支能夠被Voice Command觸發的程式, 基本上有幾個步驟
- 建立一個專案
- 定義應用程式的Voice Command
- 修改App.xaml.cs 處理程式被觸發時的動作, 複寫OnLaunched和OnActivated
(比如說做一個顯示使用者的電影資料的程式 )
建立一個新專案
在專案中建立Data Model "Movie" 表示電影資訊定義Voice Command
- 這邊定義兩個command
- showMovies, 這個動作會把程式的MainPage叫起來, 然後我們會在頁面上顯示所有電影資訊
- addNewMovie, 這個動作會把語句中的電影名稱抓出來然後加到主頁面上
- 基本上要做到這件事, 必須要在VoiceCommand中定義PhraseList, 並且在ListFor的語句中標示出來, 列如 add {MovieName}
- Cortana就會根據原先定義在PhraseList中的MovieName item去解析出句子中的電影名稱, 然後傳遞給我們程式
修改App.xaml.cs
- 在OnLaunched 最後面呼叫InstallCommandDefinitionsFromStorageFileAsync去安裝VoiceCommand
- 複寫OnActivated, 我們可以從SpeechRecognitionResult這個類別中知道語意識別的結果, 或是擷取語句中的{MovieName}, 如speechRecognitionResult.SemanticInterpretation.Properties["MovieName"].FirstOrDefault();
MainPage.xaml
- 在MainPage.xaml 裡定義一個ListBox 然後綁定 MainPage.xaml.cs裡的 mylist
MainPage.xaml.cs
- 宣告ObservableCollection<string> mylist 當作ListBox的資料來源
- 初始化mylist
- 設定DataContext 為 this
- 複寫OnNavigatedTo, 讀取傳過來的參數NavigationEventArgs e然後更新mylist
補充
- 如果要支援多國語言的話, 其實只要在CommandSet中去指定xml:lang的語系, Cortana就會知道要取讀哪個語言的指令
REF:
https://docs.microsoft.com/en-us/uwp/schemas/voicecommands/voice-command-elements-and-attributes-1-2
留言
張貼留言