SpeechRecognizer.RequestRecognizerUpdate 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
要求共用辨識器暫停並更新其狀態。
多載
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 起將要求延遲的位移。
備註
辨識器在辨識器等於目前的 AudioPosition 加上 參數的值 audioPositionAheadToRaiseUpdate
之前,不會起始辨識器 RecognizerAudioPosition 更新要求。
當辨識器產生事件時 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 方法。