protected void ProcessSpeechRecognizedResult(SpeechEngine engine, RecognitionResult rr) { StringBuilder builder = new StringBuilder(); builder.Append("<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 + "\"}"; builder.Append(json); } builder.Append("</JSON>"); Console.Write(builder.ToString()); }
public void SpeechRecognized(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(); // 2. Handle confidence if (!Confidence(engine.Name, rr, xnav, engine.Confidence)) { return; } // 3. Set an engagement for valid audio AddOnManager.GetInstance().HandleProfile(engine.Name, "engaged", (Object)DateTime.Now); // 4. Forward to all addons var text = rr.Text; var grammar = rr.Grammar.Name; var options = new Dictionary <string, string>(); using (var stream = new MemoryStream()) { rr.Audio.WriteToWaveStream(stream); AddOnManager.GetInstance().BeforeSpeechRecognition(engine.Name, text, rr.Confidence, xnav, grammar, stream, options); AddOnManager.GetInstance().AfterSpeechRecognition(engine.Name, text, rr.Confidence, xnav, grammar, stream, options); } }
protected String HandleWildcard(RecognitionResult rr, String url) { if (rr.Audio == null) { return(url); } XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); XPathNavigator wildcard = xnav.SelectSingleNode("/SML/action/@dictation"); if (wildcard == null) { return(url); } // Retrieve language String language = cfg.language; if (wildcard.Value != "true") { language = wildcard.Value; } // Google var speech2text = ProcessAudioStream(rr, language); if (url != null) { url += "dictation=" + HttpUtility.UrlEncode(speech2text); } return(url); }
public void SpeechRejected(SpeechEngine engine, RecognitionResult rr) { // 1. Handle the Listening global state if (!IsListening) { Log("REJECTED not listening"); return; } // 2. Check DYN Grammar if (ContextManager.GetInstance().Dynamic() == null) { return; } XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); // 3. Forward to all addons var text = rr.Text; var options = new Dictionary <string, string>(); using (var stream = new MemoryStream()) { rr.Audio.WriteToWaveStream(stream); AddOnManager.GetInstance().BeforeSpeechRejected(engine.Name, text, rr.Confidence, xnav, stream, options); AddOnManager.GetInstance().AfterSpeechRejected(engine.Name, text, rr.Confidence, xnav, stream, options); } }
public bool DumpAudio(RecognitionResult rr, String path) { // Build Path if (path == null) { path = "dump/dump_"; path += DateTime.Now.ToString("yyyy.M.d_hh.mm.ss"); path += ".wav"; } // Clean Path if (File.Exists(path)) { File.Delete(path); } // Dump to File using (FileStream fileStream = new FileStream(path, FileMode.CreateNew)) { rr.Audio.WriteToWaveStream(fileStream); } // Clean XML data path += ".xml"; if (File.Exists(path)) { File.Delete(path); } // Build XML XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); if (rr.Words.Count <= 0) { return(true); } String xml = ""; xml += "<match=\"" + rr.Confidence + "\" text\"" + rr.Text + "\">\r\n"; xml += "<trigger=\"" + rr.Words[0].Confidence + "\" text\"" + rr.Words[0].Text + "\">\r\n"; xml += xnav.OuterXml; // Dump to XML System.IO.File.WriteAllText(path, xml); return(true); }
protected XPathNavigator HandleSpeech(RecognitionResult rr) { XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); double confidence = GetConfidence(xnav); // Normal check if (rr.Grammar.Name != "Dyn") { if (rr.Confidence < confidence) { cfg.logWarning("ENGINE - " + Name, "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + " Text: " + rr.Text); return(null); } if (rr.Words[0].Confidence < cfg.trigger) { cfg.logWarning("ENGINE - " + Name, "REJECTED Trigger: " + rr.Words[0].Confidence + " Text: " + rr.Words[0].Text); return(null); } } // Dynamic check else { confidence = confidence - 0.2; cfg.logInfo("ENGINE - " + Name + " - DYN", "Dynamic Grammar"); if (rr.Confidence < (confidence)) { cfg.logWarning("ENGINE - " + Name + " - DYN", "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + " Text: " + rr.Text); return(null); } } cfg.logWarning("ENGINE - " + Name, "RECOGNIZED Speech: " + rr.Confidence + " (" + confidence + ") / " + rr.Words[0].Confidence + " (" + rr.Words[0].Text + ")" + " Device: " + " Text: " + rr.Text); cfg.logDebug("ENGINE - " + Name, xnav.OuterXml); if (cfg.DEBUG) { WSRSpeechManager.GetInstance().DumpAudio(rr); } return(xnav); }
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>"); }
protected String HandleWildcard(RecognitionResult rr, String url) { if (rr.Audio == null) { return url; } XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); XPathNavigator wildcard = xnav.SelectSingleNode("/SML/action/@dictation"); if (wildcard == null) { return url; } // Retrieve language String language = cfg.language; if (wildcard.Value != "true") { language = wildcard.Value; } // Google using (MemoryStream audioStream = new MemoryStream()) { rr.Audio.WriteToWaveStream(audioStream); // rr.GetAudioForWordRange(rr.Words[word], rr.Words[word]).WriteToWaveStream(audioStream); audioStream.Position = 0; var speech2text = WSRSpeechManager.GetInstance().ProcessAudioStream(audioStream, language); if (url != null) { url += "dictation=" + HttpUtility.UrlEncode(speech2text); } } return url; }
protected XPathNavigator HandleSpeech(RecognitionResult rr) { XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); double confidence = GetConfidence(xnav); if (rr.Confidence < confidence) { cfg.logWarning("ENGINE - "+Name, "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + " Text: " + rr.Text); return null; } if (rr.Words[0].Confidence < cfg.trigger) { cfg.logWarning("ENGINE - "+Name, "REJECTED Trigger: " + rr.Words[0].Confidence + " Text: " + rr.Words[0].Text); return null; } cfg.logWarning("ENGINE - "+Name, "RECOGNIZED Speech: " + rr.Confidence + " / " + rr.Words[0].Confidence + " (" + rr.Words[0].Text + ")" + " Device: " + " Text: " + rr.Text); cfg.logDebug("ENGINE - "+Name, xnav.OuterXml); if (cfg.DEBUG) { WSRSpeechManager.GetInstance().DumpAudio(rr); } return xnav; }
public void SpeechRejected(SpeechEngine engine, RecognitionResult rr) { // 1. Handle the Listening global state if (!IsListening) { Log("REJECTED not listening"); return; } // 2. Check DYN Grammar if (ContextManager.GetInstance().Dynamic() == null) { return; } XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); // 3. Forward to all addons var text = rr.Text; var options = new Dictionary<string, string>(); using (var stream = new MemoryStream()) { rr.Audio.WriteToWaveStream(stream); AddOnManager.GetInstance().BeforeSpeechRejected(engine.Name, text, rr.Confidence, xnav, stream, options); AddOnManager.GetInstance().AfterSpeechRejected(engine.Name, text, rr.Confidence, xnav, stream, options); } }
public void SpeechRecognized(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(); // 2. Handle confidence if (!Confidence(engine.Name, rr, xnav, engine.Confidence)) { return; } // 3. Set an engagement for valid audio AddOnManager.GetInstance().HandleProfile(engine.Name, "engaged", (Object) DateTime.Now); // 4. Forward to all addons var text = rr.Text; var grammar = rr.Grammar.Name; var options = new Dictionary<string, string>(); using (var stream = new MemoryStream()) { rr.Audio.WriteToWaveStream(stream); AddOnManager.GetInstance().BeforeSpeechRecognition(engine.Name, text, rr.Confidence, xnav, grammar, stream, options); AddOnManager.GetInstance().AfterSpeechRecognition(engine.Name, text, rr.Confidence, xnav, grammar, stream, options); } }
// ========================================== // WSRMacro DICTATION // Only for Windows.Speech not Microsoft.Speech // ========================================== protected String HandleWildcard(RecognitionResult rr, String url) { XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); XPathNavigator wildcard = xnav.SelectSingleNode("/SML/action/@dictation"); if (wildcard == null) { return url; } // Store URL this.dictationUrl = url; // Google using (MemoryStream audioStream = new MemoryStream()) { rr.Audio.WriteToWaveStream(audioStream); // rr.GetAudioForWordRange(rr.Words[word], rr.Words[word]).WriteToWaveStream(audioStream); audioStream.Position = 0; var speech2text = ProcessAudioStream(audioStream); if (url != null) { url += "&dictation=" + HttpUtility.UrlEncode(speech2text); } } return url; }
protected XPathNavigator HandleSpeech(RecognitionResult rr) { XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); double confidence = GetConfidence(xnav); if (rr.Confidence < confidence) { logInfo("ENGINE", "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + GetDeviceConfidence() + " Text: " + rr.Text); return null; } if (rr.Words[0].Confidence < WSRConfig.GetInstance().trigger) { logInfo("ENGINE", "REJECTED Trigger: " + rr.Words[0].Confidence + " Text: " + rr.Words[0].Text); return null; } logInfo("ENGINE", "RECOGNIZED Speech: " + rr.Confidence + "/" + rr.Words[0].Confidence + " Device: " + GetDeviceConfidence() + " Text: " + rr.Text); WSRConfig.GetInstance().logDebug("ENGINE", xnav.OuterXml); if (WSRConfig.GetInstance().DEBUG) { DumpAudio(rr); } return xnav; }
public bool DumpAudio(RecognitionResult rr, String path) { // Build Path if (path == null){ path = "dump/dump_"; path += DateTime.Now.ToString("yyyy.M.d_hh.mm.ss"); path += ".wav"; } // Clean Path if (File.Exists(path)){ File.Delete(path); } // Dump to File using (FileStream fileStream = new FileStream(path, FileMode.CreateNew)) { rr.Audio.WriteToWaveStream(fileStream); } // Clean XML data path += ".xml"; if (File.Exists(path)){ File.Delete(path); } // Build XML XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); String xml = ""; xml += "<match=\"" + rr.Confidence + "\" text\"" + rr.Text+"\">\r\n"; xml += "<trigger=\"" + rr.Words[0].Confidence + "\" text\"" + rr.Words[0].Text + "\">\r\n"; xml += xnav.OuterXml; // Dump to XML System.IO.File.WriteAllText(path, xml); return true; }
protected String HandleWildcard(RecognitionResult rr, String url) { if (rr.Audio == null) { return url; } XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); XPathNavigator wildcard = xnav.SelectSingleNode("/SML/action/@dictation"); if (wildcard == null) { return url; } // Retrieve language String language = cfg.language; if (wildcard.Value != "true") { language = wildcard.Value; } // Google var speech2text = ProcessAudioStream(rr, language); if (url != null) { url += "dictation=" + HttpUtility.UrlEncode(speech2text); } return url; }
protected XPathNavigator HandleSpeech(RecognitionResult rr) { XPathNavigator xnav = rr.ConstructSmlFromSemantics().CreateNavigator(); double confidence = GetConfidence(xnav); // Normal check if (rr.Grammar.Name != "Dyn") { if (rr.Confidence < confidence) { cfg.logWarning("ENGINE - " + Name, "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + " Text: " + rr.Text); return null; } if (rr.Words[0].Confidence < cfg.trigger) { cfg.logWarning("ENGINE - " + Name, "REJECTED Trigger: " + rr.Words[0].Confidence + " Text: " + rr.Words[0].Text); return null; } } // Dynamic check else { confidence = confidence - 0.2; cfg.logInfo("ENGINE - " + Name + " - DYN","Dynamic Grammar"); if (rr.Confidence < (confidence)) { cfg.logWarning("ENGINE - " + Name + " - DYN", "REJECTED Speech: " + rr.Confidence + " < " + confidence + " Device: " + " Text: " + rr.Text); return null; } } cfg.logWarning("ENGINE - " + Name, "RECOGNIZED Speech: " + rr.Confidence + " (" + confidence + ") / " + rr.Words[0].Confidence + " (" + rr.Words[0].Text + ")" + " Device: " + " Text: " + rr.Text); cfg.logDebug("ENGINE - "+Name, xnav.OuterXml); if (cfg.DEBUG) { WSRSpeechManager.GetInstance().DumpAudio(rr); } return xnav; }