2012-04-06 129 views
0

我的語音識別存在問題。 它在沒有問題的「英文」窗口上工作。 它也適用於一些「外國」窗口。但只有一些。C#語音識別錯誤 - 語法語言與語音識別器的語言不匹配

我收到例外: 的語法不匹配,語音識別

我說我自己的話字典的語言的語言。

我該如何解決?

+0

令人印象深刻的例外。你想讓你的中國用戶說英語嗎? – 2012-04-06 16:51:10

+0

@HansPassant波蘭人可以說英語,但他們使用波蘭語的窗戶。這是例子。 – Hooch 2012-04-06 17:30:09

+0

你能展示一些代碼(和語法片段)嗎?取決於你如何編寫語法,這可能是一個預期的錯誤。 – 2013-09-20 16:15:28

回答

-1

不確定您使用的是哪個版本的.net,但我會嘗試回答。

你的英語Windows版本,請瀏覽到C:\ Program Files文件\參考大會\微軟\框架[你的.NET版本]

你應該找到System.Speech.dll,

確保把這個.dll放到你的外國電腦上,一切都應該順利進行。

+1

這根本不會工作*。 System.Speech.dll是SAPI客戶端層的包裝器;不匹配將由SR引擎報告,該引擎獨立於SAPI客戶層。 – 2013-09-20 16:13:44

-1

我在我的朋友計算機上遇到了同樣的問題。所以我做了這個(它只是代碼的一部分,因爲所有的代碼都很長):

... 
RecognizerInfo recognizerInfo = null; 

foreach (RecognizerInfo ri in SpeechRecognitionEngine.InstalledRecognizers()) 
{ 
    if ((ri.Culture.TwoLetterISOLanguageName.Equals("en")) && (recognizerInfo == null)) 
    { 
     recognizerInfo = ri; 
     break; 
    } 

} 

SpeechRecognitionEngine SpeachRecognition = new SpeechRecognitionEngine(recognizerInfo); 

GrammarBuilder gb = new GrammarBuilder(startLiserninFraze); 
gb.Culture = recognizerInfo.Culture; 
grammar = new Grammar(gb); 
SpeachRecognition.RequestRecognizerUpdate(); 
SpeachRecognition.LoadGrammar(grammar); 
SpeachRecognition.SpeechRecognized += SpeachRecognition_SpeechRecognized; 
SpeachRecognition.SetInputToDefaultAudioDevice(); 
SpeachRecognition.RecognizeAsync(RecognizeMode.Multiple); 
... 

所以這應該工作。我的朋友PC支持2個「en」或「eng」的實例。不知道爲什麼。所以代碼選擇第一個。我在互聯網上發現了一些代碼,其中一些代碼是由我製作的。

SpeachRecognition.SpeechRecognized += SpeachRecognition_SpeechRecognized; 

當一切都被識別時,使得事件發生。只是類型:

SpeachRecognition.SpeechRecognized + =

和壓TAB按鈕(ATLEAST在VS 2013)幾次。然後在代碼的底部它會產生這樣的事情:

void SpeachRecognition_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
    { 
     //then will be some line that you need to replace with your code 
    } 

我希望這會有所幫助。 :)