2012-04-06 7 views
0

Ich habe ein Problem mit meiner Spracherkennung. Es funktioniert auf "englischen" Fenstern ohne Probleme. Es funktioniert auch auf einigen "fremden" Fenstern. Aber nur einige.C# Spracherkennungsfehler - Die Sprache für die Grammatik stimmt nicht mit der Sprache des Spracherkenners überein

Ich erhalte diese Ausnahme: die Sprache für die Grammatik nicht die Sprache des Spracherkennungs

I Wörterbuch meine eigenen Worte hinzugefügt überein.

Wie kann ich es beheben?

+0

Beeindruckende Ausnahme. Sie versuchen, Ihren chinesischen Benutzer Englisch sprechen zu lassen? –

+0

@HansPassant Polnische Leute können Englisch sprechen, aber sie benutzen polnische Fenster. Dies ist ein Beispiel. – Hooch

+0

Können Sie Code (und Grammatikfragmente) anzeigen? Abhängig davon, wie Sie Ihre Grammatik schreiben, kann dies ein erwarteter Fehler sein. –

Antwort

-1

Nicht sicher, welche Version .net Sie sind, aber ich werde versuchen zu beantworten.

Auf dem englischen Windows-Version, navigieren Sie zu C: \ Programme \ Reference Assemblies \ Microsoft \ Framework [.NET-VERSION]

Sie System.Speech.dll,

Stellen Sie sicher, finden sollte um diese .dll zu Ihrem fremden Computer zu bringen, und alles sollte reibungslos laufen.

+1

Dies funktioniert überhaupt nicht *. System.Speech.dll ist ein Wrapper um die SAPI-Clientschicht; Die Nichtübereinstimmung würde von der SR-Engine gemeldet, die unabhängig von der SAPI-Clientschicht ist. –

-1

Ich hatte das gleiche Problem auf meinem Computer Freunde. Also habe ich das gemacht (es ist nur ein Teil des Codes, weil der Code wirklich lang ist):

... 
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); 
... 

Das sollte also funktionieren. Mein Freund PC unterstützt 2 Instanzen von "en" oder in "eng". Nicht sicher warum. Also wählt der Code den ersten aus. Ich habe ein paar Code-Stücke im Internet gefunden und einiges davon wurde von mir gemacht.

SpeachRecognition.SpeechRecognized += SpeachRecognition_SpeechRecognized; 

wird gemacht, um ein Ereignis zu machen, wenn alles erkannt wird. nur Typ:

SpeachRecognition.SpeechRecognized + =

und die Presse TAB-Taste (atleast in VS 2013) einige Male. und dann in der Unterseite des Codes wird es so etwas wie folgt erzeugen:

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

Ich hoffe, das wird helfen. :)

Verwandte Themen