SpeechRecognizer.RequestRecognizerUpdate 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
請求共享識別器暫停並更新其狀態。
多載
| 名稱 | Description |
|---|---|
| RequestRecognizerUpdate(Object, TimeSpan) |
請求共享識別器暫停並更新狀態,並提供偏移量及使用者令牌以對應事件。 |
| RequestRecognizerUpdate(Object) |
請求共享識別器暫停並更新狀態,並提供相關事件的使用者令牌。 |
| RequestRecognizerUpdate() |
請求共享識別器暫停並更新其狀態。 |
範例
以下範例展示了一個主控台應用程式,用於載入與卸載 Grammar 物件。 應用程式會使用此 RequestRecognizerUpdate 方法請求語音辨識引擎暫停,以便接收更新。 應用程式接著載入或卸載物件 Grammar 。
每次更新時,事件處理 RecognizerUpdateReached 程序會將目前載 Grammar 入物件的名稱與狀態寫入主控台。 當文法被載入和卸載時,應用程式會先辨識農場動物的名稱,接著是農場動物的名稱和水果名稱,最後只辨識水果名稱。
using System;
using System.Speech.Recognition;
using System.Collections.Generic;
using System.Threading;
namespace SampleRecognition
{
class Program
{
private static SpeechRecognizer recognizer;
public static void Main(string[] args)
{
// Initialize an in-process speech recognition engine and configure its input.
recognizer = new SpeechRecognizer();
// Create the first grammar - Farm.
Choices animals = new Choices(new string[] { "cow", "pig", "goat" });
GrammarBuilder farm = new GrammarBuilder(animals);
Grammar farmAnimals = new Grammar(farm);
farmAnimals.Name = "Farm";
// Create the second grammar - Fruit.
Choices fruit = new Choices(new string[] { "apples", "peaches", "oranges" });
GrammarBuilder favorite = new GrammarBuilder(fruit);
Grammar favoriteFruit = new Grammar(favorite);
favoriteFruit.Name = "Fruit";
// Attach event handlers.
recognizer.SpeechRecognized +=
new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
recognizer.RecognizerUpdateReached +=
new EventHandler<RecognizerUpdateReachedEventArgs>(recognizer_RecognizerUpdateReached);
// Check to see if recognizer is loaded, wait if it is not loaded.
if (recognizer.State != RecognizerState.Listening)
{
Thread.Sleep(5000);
// Put recognizer in listening state.
recognizer.EmulateRecognizeAsync("Start listening");
}
// Load the Farm grammar.
recognizer.LoadGrammar(farmAnimals);
Console.WriteLine("Grammar Farm is loaded");
// Pause to recognize farm animals.
Thread.Sleep(7000);
Console.WriteLine();
// Request an update and load the Fruit grammar.
recognizer.RequestRecognizerUpdate();
recognizer.LoadGrammarAsync(favoriteFruit);
Thread.Sleep(5000);
// Request an update and unload the Farm grammar.
recognizer.RequestRecognizerUpdate();
recognizer.UnloadGrammar(farmAnimals);
Thread.Sleep(5000);
// Keep the console window open.
Console.WriteLine();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
public static void recognizer_RecognizerUpdateReached(object sender, RecognizerUpdateReachedEventArgs e)
{
// At the update, get the names and enabled status of the currently loaded grammars.
Console.WriteLine();
Console.WriteLine("Update reached:");
Thread.Sleep(1000);
string qualifier;
List<Grammar> grammars = new List<Grammar>(recognizer.Grammars);
foreach (Grammar g in grammars)
{
qualifier = (g.Enabled) ? "enabled" : "disabled";
Console.WriteLine(" Grammar {0} is loaded and is {1}.",
g.Name, qualifier);
}
}
// Write the text of the recognized phrase to the console.
static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
Console.WriteLine(" Speech recognized: " + e.Result.Text);
}
}
}
備註
使用此方法將變更同步到共享識別器。 例如,當你在讀取器處理輸入時載入或卸載語音辨識文法,使用此方法與 RecognizerUpdateReached 事件來同步你的應用程式行為與識別器的狀態。
當此方法被呼叫時,識別器會暫停或完成非同步操作並產生事件 RecognizerUpdateReached 。 RecognizerUpdateReached事件處理器可在辨識操作間修改識別器的狀態。
當此方法被呼叫時:
若識別器未處理輸入,識別器會立即產生事件 RecognizerUpdateReached 。
若識別器處理的是靜音或背景雜訊的輸入,識別器會暫停識別操作並產生事件 RecognizerUpdateReached 。
如果辨識器處理的輸入不包含靜默或背景雜訊,則會完成辨識操作,然後產生事件 RecognizerUpdateReached 。
當識別器處理 RecognizerUpdateReached 事件時:
識別器不處理輸入,屬性的值 RecognizerAudioPosition 保持不變。
識別器持續收集輸入,屬性的價值 AudioPosition 可能會改變。
若要改變共享識別器是否在應用程式處理 SpeechRecognized 事件時暫停識別操作,請使用該 PauseRecognizerOnRecognition 屬性。
RequestRecognizerUpdate(Object, TimeSpan)
請求共享識別器暫停並更新狀態,並提供偏移量及使用者令牌以對應事件。
public:
void RequestRecognizerUpdate(System::Object ^ userToken, TimeSpan audioPositionAheadToRaiseUpdate);
public void RequestRecognizerUpdate(object userToken, TimeSpan audioPositionAheadToRaiseUpdate);
member this.RequestRecognizerUpdate : obj * TimeSpan -> unit
Public Sub RequestRecognizerUpdate (userToken As Object, audioPositionAheadToRaiseUpdate As TimeSpan)
參數
- userToken
- Object
使用者定義的資訊,包含操作所需的資訊。
- audioPositionAheadToRaiseUpdate
- TimeSpan
延遲請求的電流偏移 AudioPosition 量。
備註
識別器不會 RecognizerAudioPosition 在識別器請求等於當前 AudioPosition 值加上參數值 audioPositionAheadToRaiseUpdate 時啟動識別器更新請求。
當識別器產生 RecognizerUpdateReached 事件時, UserToken 的 RecognizerUpdateReachedEventArgs 屬性包含參數 userToken 的值。
另請參閱
適用於
RequestRecognizerUpdate(Object)
請求共享識別器暫停並更新狀態,並提供相關事件的使用者令牌。
public:
void RequestRecognizerUpdate(System::Object ^ userToken);
public void RequestRecognizerUpdate(object userToken);
member this.RequestRecognizerUpdate : obj -> unit
Public Sub RequestRecognizerUpdate (userToken As Object)
參數
- userToken
- Object
使用者定義的資訊,包含操作所需的資訊。
備註
當識別器產生 RecognizerUpdateReached 事件時, UserToken 的 RecognizerUpdateReachedEventArgs 屬性包含參數 userToken 的值。
要指定音訊位置偏移,請使用以下 RequestRecognizerUpdate 方法。
另請參閱
適用於
RequestRecognizerUpdate()
請求共享識別器暫停並更新其狀態。
public:
void RequestRecognizerUpdate();
public void RequestRecognizerUpdate();
member this.RequestRecognizerUpdate : unit -> unit
Public Sub RequestRecognizerUpdate ()
備註
當識別器產生 RecognizerUpdateReached 事件時, UserToken 的 RecognizerUpdateReachedEventArgs 屬性為 null。
要提供使用者代幣,請使用 RequestRecognizerUpdate 或方法 RequestRecognizerUpdate 。 要指定音訊位置偏移,請使用以下 RequestRecognizerUpdate 方法。