2010-03-03 7 views
0

Je dois détecter la voix de l'utilisateur lorsqu'il capte le récepteur à l'autre extrémité."L'événement SpeechHypothesized n'est pas déclenché"

Parce que Modems commencent généralement la lecture des fichiers (terminaux de lecture) lorsque le premier anneau y va. Donc, j'ai prévu d'utiliser la reconnaissance vocale quand ils disent "bonjour", il peut commencer à jouer le fichier jusqu'à ce qu'il attende la lecture du fichier.

Ou même toute interférence sonore peut commencer à parler.

J'accompli cela avec quelques paramètres. J'ai trouvé peu de mots communs que mon moteur détecte quand nous parlons et les mots qui viennent quand il sonne. Cela fonctionne bien en tant qu'application autonome, mais si j'essaie de l'intégrer à mon application, cela ne déclenche pas l'événement "SpeechHypothesized".

Je ne comprends pas pourquoi cela arrive.

Si je vois à l'aide d'un point de rupture, le moteur est d'avoir le délégué et attribuer la propriété d'appel est également initialisé correctement, mais que d'est ne remet pas l'événement. Pour l'appel j'utilise C4F tapi manager et pour la reconnaissance vocale j'utilise la bibliothèque System.Speech de .Net 3.5.

Le code pour les événements est la suivante:

engine.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(engine_SpeechDetected); 
engine.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(engine_SpeechRecognized); 
engine.SpeechHypothesized+=new EventHandler<SpeechHypothesizedEventArgs> (engine_SpeechHypothesized);     
engine.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(engine_SpeechRecognitionRejected); 

de tous les événements sont élevés, sauf l'événement speechhypothesized.

Toute idée pourquoi cela se produit ????

EDIT:

erreur est pas jeté par le service il est Windows Form qui jette l'erreur !!!

Le code est le suivant pour la reconnaissance vocale:

System.Collections.ObjectModel.ReadOnlyCollection<RecognizerInfo> 

recognizedSpeeches = System.Speech.Recognition.SpeechRecognitionEngine.InstalledRecognizers(); if (recognizedSpeeches! = Null) {
Console.WriteLine ("Reconnu Discours:");
int recognizerNumber = 0;

    engine = new SpeechRecognitionEngine(recognizedSpeeches[recognizerNumber]); 

        engine.SetInputToDefaultAudioDevice(); 
        engine.SpeechDetected -= new 

EventHandler (engine_SpeechDetected); engine.SpeechRecognized - = nouveau EventHandler (engine_SpeechRecognized); engine.SpeechHypothesized - = nouveau EventHandler (engine_SpeechHypothesized); engine.SpeechRecognitionRejected - = nouveau gestionnaire d'événements (engine_SpeechRecognitionRejected); engine.SpeechDetected + = nouveau EventHandler (engine_SpeechDetected); engine.SpeechRecognized + = nouveau EventHandler (engine_SpeechRecognized); engine.SpeechHypothesized + = nouveau EventHandler (engine_SpeechHypothesized); engine.SpeechRecognitionRejected + = nouveau EventHandler (engine_SpeechRecognitionRejected); moteur.LoadGrammar (nouveau DictationGrammar());
RecognitionResult srResult = engine.Recognize (nouveau TimeSpan (0, 0, 30)); }

Tout indice ????

Répondre

0

J'ai résolu mon problème dans une certaine mesure en appelant l'application Console depuis mon formulaire. Cela fonctionne si je démarre une application de la console à partir de mon formulaire Windows et qu'il ne fonctionne pas avec le service Windows. Je ne sais pas pourquoi le service Windows ne répond pas ou ne fonctionne pas. C'est peut-être aussi parce que le service Windows par défaut ne fonctionne pas avec le bureau et que l'événement Hypothésized pourrait ne se poser qu'avec ça ou je ne comprends vraiment pas ou ne peux pas comprendre ce comportement étrange. Et un autre comportement étrange de System.Speech que j'ai trouvé est qu'il ne permettra pas de définir SpeechRecognitionEngine à "InputToDefaultAudioDevice". Chaque fois que j'essaie d'utiliser la fonction "engine.SetInputToDefaultAudioDevice()", elle renvoie juste une erreur (uniquement à partir du formulaire de Windows). Je ne sais pas pourquoi ??? Hmmmm System.Speech classe fonctionne différemment avec différentes applications C# et c'est mieux avec la console. Je ne sais pas si ces statistiques sont rites ou non, mais selon l'observation, cela semble être ainsi.

À l'heure actuelle, j'ai résolu le problème en démarrant l'application de la console à partir de mon formulaire pour reconnaître et cela fonctionne très bien aussi.

+0

Le compte de service ne dispose pas ** d'un périphérique audio par défaut; c'est pourquoi SAPI génère une erreur. Je suppose que vous utilisez SpeechRecognitionEngine, plutôt que SpeechRecognizer, car SpeechRecognizer essaiera de démarrer l'interface utilisateur de WSR, qui ne fonctionnera pas non plus à partir d'un service. Je ne sais pas pourquoi les événements ne se déclenchent pas; vous devez montrer plus de code. –

Questions connexes