2012-08-11 208 views
1

感謝您花時間檢查我的查詢。我正在使用Expression Blend 4和Visual Studio 2010在C#WPF .NET 4中編寫程序。我使用System.Speech.Recognition來偵聽來自用戶的命令並執行任務。我的問題是;C#語音識別 - 識別語音和執行任務

SpeechRecognized Event一旦提出並執行任務,如何暫停任務,請求用戶發出另一個命令並恢復或放棄以前的任務?

我目前的思路主要圍繞改變加載的語法並接受一個新的命令,並將其傳遞迴前面的操作(如果有意義的話)。

爲了讓您知道我正在嘗試做什麼,我正在偵聽諸如「計算機,系統狀態是什麼」之類的命令。我想向用戶發出一個可聽的響應,要求輸入另一個命令(如輸入授權碼),一旦用戶這樣做,它將在返回某個命令(代碼)時執行響應(例如, 「Gamma 47 Echo」),拒絕命令(代碼)或超時並重新加載以前的語法(我正在使用外部XML語法文件)。

我已經上傳了代碼,我必須將這一點指向PasteBin http://pastebin.com/X3vJJJrM。我是編程新手,有一些Java經驗。任何幫助將不勝感激。

回答

1

我相信你太過複雜了。我可能會過度簡化它,但是... :)

您可以將所有語法包含在單個文件中。當你聽你的初始命令時,在你的代碼中設置一個標誌,然後監聽跟蹤。

這裏是(簡化)語法集:

<grammar version="1.0" xml:lang="en-US" root="rootRule" tag-format="semantics/1.0" xmlns="http://www.w3.org/2001/06/grammar"> 
<rule id="rootRule"> 
    <one-of> 
    <item> 
     <tag>out.SysCommand = "STATUS";</tag> 
     Computer what is the system status 
    </item> 
    <item> 
     <tag>out.SysCommand = "PASSWORD";</tag> 
     Gamma 
     <one-of> 
     <item>Four</item> 
     <item>Forty</item> 
     </one-of> 
     Seven Echo 
    </item> 
    </one-of> 
</root> 
</grammar> 

你的回調可能類似於下面:

private void OnSpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
{ 
    if (e.Result.Confidence >= ConfidenceThreshold) 
    { 
    if (IsListening) 
    { 
     if (e.Result.Semantics["SysCommand"] != null) 
     { 
     switch (e.Result.Semantics["SysCommand"].Value.ToString()) 
     { 
      case "PASSWORD": 
      // The was waiting for this, now you can act on it 
      break; 
      default: 
      // something else was said, reset! 
      break; 
     } 
     } 
    } 
    else if (e.Result.Semantics["SysCommand"] != null) 
    { 
     if (e.Result.Semantics["SysCommand"].Value.ToString() == "STATUS") 
     { 
     // do stuff that prompts user for password 
     IsListening = true; 
     } 
    } 
    } 
} 

你的回調尋找一個 「IsListening」 標誌。如果沒有設置,它會檢查您是否詢問狀態。如果你這樣做,它設置標誌,現在等待密碼。

您可以簡化上述代碼。我複製了它,並用類似的方式做了一些快速編輯。就我而言,我做到以下幾點:

  1. 傾聽顯示系統的名稱(「弗洛伊德」)
  2. 集「IsListening」標誌
  3. 在屏幕上顯示一個提示(知名度勢必IsListening標誌)可能的後續命令
  4. 聽這些命令,並適當地對他們採取行動

你可以加載和卸載需要新的語法,但是,除非你的語法文件中獲取巨大的,這些加載/卸載的開銷將ST藝術可以快速趕上僅僅通過一套額外的語法規則。