La synthèse vocale fonctionne très bien. En revanche j’ai quelques soucis avec la reconnaissance vocale. La méthode « HandlerReco » est bien appelée à chaque fois que je prononce un mot. En revanche, il n’arrive pas à afficher la règle déclenchée (retour d’une chaîne vide dans la variable « regle »).
Et en ce qui la variable « entree », j'ai affiché ce qu'elle contenait avec une MessageBox et il me retourne pas le mot identifié mais à chaque fois le mot « blah ».
Alors je voudrais savoir si vous pourriez tester ce code et si vous obteniez la même chose ?
2° Ajouter une référence avec le fichier sapi.dll se trouvant dans ce répertoire : " C:\Program Files\Fichiers communs\Microsoft Shared\Speech "
3° Configurer Windows pour qu'il utilise le moteur du Speech SDK "SAPI Developer Sample Engine"
Panneau de configuration > Voix
Voici le code en VB.NET :
<!-- BEGIN TEMPLATE: bbcode_code -->
Code :
Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
test(TextBox1.Text)' TestBox1.Text contient le texte que l’utilisateur veut entendreEndSub
Sub test(ByVal phrase AsString)' Synthèse vocaleDim voix AsNew SpVoice
Dim flags As SpeechVoiceSpeakFlags
If ComboBox1.SelectedItem = ""Then
MsgBox("Veuillez sélectionner le type de voix !!!", MsgBoxStyle.OkOnly)ExitSubEndIf
voix.Voice voix.GetVoices("", "").Item(Convert.ToInt32(ComboBox1.SelectedIndex))If TextBox1.Text ""Then
MsgBox("Veuillez entrer une phrase !!!", MsgBoxStyle.OkOnly)ExitSubEndIf
voix.Speak(phrase, flags)
voix.Volume = 50EndSub
#Region"HandlerReco"PrivateSub HandlerReco(ByVal StreamNumber AsInteger, ByVal StreamPosition AsObject, ByVal RecognitionType As SpeechRecognitionType, ByVal result As ISpeechRecoResult)Dim entree AsString result.PhraseInfo.GetText(0, -1, True)Dim regle AsString result.PhraseInfo.Rule.Name
MsgBox(entree)Dim precision AsDouble CDbl(result.PhraseInfo.Elements.Item(0).ActualConfidence)Dim precision2 AsDouble CDbl(result.PhraseInfo.Elements.Item(0).ActualConfidence)
If precision <= -1ThenSelectCase regle
Case"message" : MessageBox.Show("Nouveau message")Case"exit" : MessageBox.Show("L'application va être fermée")EndSelectEndIfEndSub#End Region
Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
test(TextBox1.Text)' TestBox1.Text contient le texte que l’utilisateur veut entendre
EndSub
Sub test(ByVal phrase AsString)' Synthèse vocale
Dim voix AsNew SpVoice
Dim flags As SpeechVoiceSpeakFlags
If ComboBox1.SelectedItem = ""Then
MsgBox("Veuillez sélectionner le type de voix !!!", MsgBoxStyle.OkOnly)
ExitSub
EndIf
voix.Voice = voix.GetVoices("", "").Item(Convert.ToInt32(ComboBox1.SelectedIndex))
If TextBox1.Text = ""Then
MsgBox("Veuillez entrer une phrase !!!", MsgBoxStyle.OkOnly)
ExitSub
EndIf
voix.Speak(phrase, flags)
voix.Volume = 50
EndSub
Peut-être une remarque/question stupide : Est-ce que le fait que tu utilises la reconnaissance Anglaise au lieu du Français, jouerais un rôle dans ton problème ?
(fichier : Mcrosoft English Recognizer)
Je me suis trompé c'est pas Microsoft English Recognizer v5.1 mais SAPI Developer Sample Engine qui est utilisé comme moteuret lorsque je teste la synthèse vocale (pour cela, j'ai une TextBox où l'utilisateur
peut rentrer le texte en français qu'il désire entendre). La voix qui dit la phrase de l'utilisateur est française, ce n'est pas une voix anglaise à qui on demande de dire une phrase française. L'accent est correct.
Est ce que tu as reussi à tester mon code ou si tu as d'autres questions sur des points d'ombres sur mon code n'hésites pas à me les poser.
Désolé, je ne peux pas tester ton code car c'est du VB.NET si j'en crois les constantes... je ne faisais qu'une suggestion.
Je laisse une personne calée sur le sujet en VB.Net répondre...
Déjà "blah" cela me cause pas beaucoup, ni sur la base de connaissances de Microsoft ... c'est pas trés clair... IL me semble que cela est lié à un dépassement de capacité
ou quelque chose comme ça... (mauvais typage ?)... c'est vraiment tous que je peux faire... c'est pas grand chose... désolé.