Salve, prendento spunto da questo articolo :
http://blogs.ugidotnet.org/marcom/archive/2008/04/22/92310.aspx
Mi aiutereste ad risolvere ad questo programma.
http://blogs.msdn.com/robertbrown/archive/2005/06/14/speech-sample-in-vb-net.aspx
Imports System.SpeechImports System.Speech.Recognition.SrgsGrammarPublic Class Form1 Dim WithEvents reco As New Recognition.SpeechRecognizer Private Sub SetColor(ByVal color As System.Drawing.Color) Dim synth As New Synthesis.SpeechSynthesizer synth.SpeakAsync("setting the back color to " + color.ToString) Me.BackColor = color End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim gram As New SrgsDocument Dim colorRule As New SrgsRule("color") Dim colorsList As New SrgsOneOf("red", "green") colorRule.Add(colorsList) gram.Rules.Add(colorRule) gram.Root = colorRule reco.LoadGrammar(New Recognition.Grammar(gram)) End Sub Private Sub reco_SpeechRecognized(ByVal sender As Object, ByVal e As System.Speech.Recognition.RecognitionEventArgs) Handles reco.SpeechRecognized Select Case e.Result.Text Case "red" SetColor(Color.Red) Case "green" SetColor(Color.Green) MessageBox.Show("Scelto Green") End Select End SubEnd Class
Grazie mille.
Ciao!
Il tuo problema è modificare l'esempio che hai riportato perché sia possibile impostare la lingua della grammatica? Qual è il punto che ti crea problemi?
Marco Minerva [MCPD], marco.minerva@dotnettoscana.orghttp://blogs.ugidotnet.org/marcom
Ciao, ora, con questo codice:
using System;using System.Speech;using System.Speech.Recognition;using System.Threading;using System.Diagnostics;using System.Globalization;namespace SpeechTest{ class Program { static void Main(string[] args) { EnumerateEngines(); args = CheckArguments(args); CommandListener listener = new CommandListener(); listener.SetCommands(args); listener.Run(); } private static string[] CheckArguments(string[] args) { if (args.Length == 0) { Console.WriteLine("Setting up default words. Enter your own words via command line arguments"); args = new string[] { "music", "word" }; } Console.Write("Now listening for..."); foreach (string word in args) { Console.Write(String.Format("'{0}', ", word)); } Console.WriteLine("\r\n(Press a key to stop listening)"); return args; } private static void EnumerateEngines() { Console.WriteLine("The following engines are available"); foreach (RecognizerInfo config in SpeechRecognitionEngine.InstalledRecognizers()) { Console.WriteLine(config.Name + " " + config.Description); } } } class CommandListener { SpeechRecognitionEngine _speechRecogniser; public CommandListener() { _speechRecogniser = new SpeechRecognitionEngine(); _speechRecogniser.SetInputToDefaultAudioDevice(); _speechRecogniser.SpeechDetected += new EventHandler<SpeechDetectedEventArgs>(_speechRecogniser_SpeechDetected); _speechRecogniser.SpeechHypothesized += new EventHandler<SpeechHypothesizedEventArgs>(_speechRecogniser_SpeechHypothesized); _speechRecogniser.SpeechRecognitionRejected += new EventHandler<SpeechRecognitionRejectedEventArgs>(_speechRecogniser_SpeechRecognitionRejected); _speechRecogniser.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(_speechRecogniser_SpeechRecognized); _speechRecogniser.AudioStateChanged += new EventHandler<AudioStateChangedEventArgs>(_speechRecogniser_AudioStateChanged); _speechRecogniser.AudioSignalProblemOccurred += new EventHandler<AudioSignalProblemOccurredEventArgs>(_speechRecogniser_AudioSignalProblemOccurred); NotifyEvent("Loaded default engine - {0}", _speechRecogniser.RecognizerInfo.Name); } #region Event Handlers void _speechRecogniser_AudioSignalProblemOccurred(object sender, AudioSignalProblemOccurredEventArgs e) { NotifyEvent("Audio problem {0}", e.AudioSignalProblem.ToString("G")); } void _speechRecogniser_AudioStateChanged(object sender, AudioStateChangedEventArgs e) { NotifyEvent("Audio state now {0}", e.AudioState.ToString("G")); } void _speechRecogniser_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) { NotifyEvent("Recognized '{0}' at {1} seconds", e.Result.Text, e.Result.Audio.AudioPosition); } void _speechRecogniser_SpeechRecognitionRejected(object sender, SpeechRecognitionRejectedEventArgs e) { NotifyEvent("RecognitionRejected '{0}' at {1} seconds", e.Result.Text, e.Result.Audio.AudioPosition); } void _speechRecogniser_SpeechHypothesized(object sender, SpeechHypothesizedEventArgs e) { NotifyEvent("Hypothesized '{0}' at seconds", e.Result.Text); } void _speechRecogniser_SpeechDetected(object sender, SpeechDetectedEventArgs e) { NotifyEvent("Detected speech at {0} seconds", e.AudioPosition.TotalSeconds); } #endregion public void SetCommands(string[] commands) { GrammarBuilder grammarBuilder = new GrammarBuilder(); grammarBuilder.Culture = _speechRecogniser.RecognizerInfo.Culture; grammarBuilder.Append(new Choices(commands)); Grammar grammar = new Grammar(grammarBuilder); _speechRecogniser.UnloadAllGrammars(); _speechRecogniser.LoadGrammar(grammar); _speechRecogniser.RecognizeAsync(RecognizeMode.Multiple); } public void Run() { while (!Console.KeyAvailable) { Thread.Sleep(100); } _speechRecogniser.Dispose(); } private static void NotifyEvent(string format, params object[] args) { Console.WriteLine(string.Format(format, args)); } }}
Ecco l'errore:
The following engines are availableSetting up default words. Enter your own words via command line argumentsNow listening for...'music', 'word',(Press a key to stop listening)Eccezione non gestita: System.PlatformNotSupportedException: Nessun riconoscimento installato. in System.Speech.Recognition.RecognizerBase.Initialize(SapiRecognizer recognizer, Boolean inproc) in System.Speech.Recognition.SpeechRecognitionEngine.get_RecoBase() in System.Speech.Recognition.SpeechRecognitionEngine.SetInputToDefaultAudioDevice() in SpeechTest.CommandListener..ctor() in C:\Users\luigi\AppData\Local\Temporary Projects\SpeechTest\Program.cs:riga 56 in SpeechTest.Program.Main(String[] args) in C:\Users\luigi\AppData\Local\Temporary Projects\SpeechTest\Program.cs:riga 18Premere un tasto per continuare . . .
---------------------
Sono su windows vista ita 32bit home premium.
Io credo che il problema sia legato alla lingua del sistema operativo in quanto la Speech Recognition di Windows funziona solo per la lingua inglese.
Di fatto non hai nessun SpeechRecognitionEngine installato, come dimostra la chiamata al metodo EnumerateEngines.
Un consiglio che ti posso dare è quello di installare l'ultima versione del Windows SDK il quale contiene numerosi esempi di utilizzo delle Speech API.
-- Matteo BagliniWeb: http://www.makesimple.net/Blog: http://blogs.ugidotnet.org/bmatte
Confermo: il riconoscimento vocale è incluso solo nelle inglese, francese, tedesco, spagnolo, cinese e giapponese di Windows Vista.