protected void SpeechRecognizedCallback(SpeechEngine engine, RecognitionResult rr) { // 1. Handle the Listening global state if (!IsListening) { Log("REJECTED not listening"); return; } // Compute XPath Navigator // XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); var text = rr.Text; Console.Write("<JSON>"); using (var stream = new MemoryStream()) { XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); var nav = xnav.Select("/SML/action/*"); string opts = ""; if (nav.Count > 0) { opts = "\"options\": {" + Options(nav) + "}, "; } string txt = "\"text\": \"" + rr.Text.Replace("\"", "\\\"").ToString(culture) + "\", "; string conf = "\"confidence\": " + rr.Confidence.ToString(culture).Replace(",", ".") + ", "; rr.Audio.WriteToWaveStream(stream); stream.Position = 0; var base64 = Convert.ToBase64String(stream.GetBuffer()); string json = "{" + txt + conf + opts + " \"base64\": \"" + base64 + "\"}"; Console.Write(json); // stream.Position = 0; // using (FileStream fileStream = new FileStream("F:/temp2.wav", FileMode.CreateNew)) { // stream.CopyTo(fileStream); // } } Console.Write("</JSON>"); }
static void Main(string[] args) { CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); Console.OutputEncoding = System.Text.Encoding.UTF8; string device = ""; string recognizer = ""; string language = "fr-FR"; string hotword = "SARAH"; double confidence = 0.5; int deviceId = -1; var grammar = ""; bool help = false; var p = new OptionSet() { { "device=", "the device id", v => device = v }, { "recognizer=", "the recognizer id", v => recognizer = v }, { "language=", "the recognizer language", v => language = v }, { "grammar=", "the grammar directory", v => grammar = v }, { "hotword=", "the hotword (default is SARAH)", v => hotword = v }, { "confidence=", "the reconizer confidence", v => confidence = Double.Parse(v, culture) }, { "h|help", "show this message and exit", v => help = v != null }, }; List <string> extra; try { extra = p.Parse(args); } catch (OptionException e) { Console.Write("Listen: "); Console.WriteLine(e.Message); Console.WriteLine("Try `Listen --help' for more information."); return; } if (help) { ShowHelp(p); return; } // Create Speech Engine & Grammar Manager SpeechEngine engine = new SpeechEngine(device, recognizer, language, confidence); GrammarManager.GetInstance().SetEngine(engine, language, hotword); if (!String.IsNullOrEmpty(grammar)) { grammar = Path.GetFullPath(grammar); GrammarManager.GetInstance().Load(grammar, 2); GrammarManager.GetInstance().Watch(grammar); } else { GrammarManager.GetInstance().LoadFile("default_" + language + ".xml"); } engine.Load(GrammarManager.GetInstance().Cache, false); engine.Init(); // Create Stream var buffer = new StreamBuffer(); var waveIn = new WaveInEvent(); waveIn.DeviceNumber = deviceId; waveIn.WaveFormat = new WaveFormat(16000, 2); waveIn.DataAvailable += (object sender, WaveInEventArgs e) => { lock (buffer) { var pos = buffer.Position; buffer.Write(e.Buffer, 0, e.BytesRecorded); buffer.Position = pos; } }; waveIn.StartRecording(); // Pipe Stream and start #if KINECT var info = new Microsoft.Speech.AudioFormat.SpeechAudioFormatInfo(Microsoft.Speech.AudioFormat.EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null); #else var info = new System.Speech.AudioFormat.SpeechAudioFormatInfo(16000, AudioBitsPerSample.Sixteen, AudioChannel.Stereo); #endif engine.SetInputToAudioStream(buffer, info); engine.Start(); // Prevent console from closing Console.WriteLine("Waiting for key pressed..."); Console.ReadLine(); }
public void SetEngine(SpeechEngine engine, string language, string hotword) { this.engine = engine; this.language = language; this.hotword = hotword; }