Esempio n. 1
0
        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>");
        }
Esempio n. 2
0
        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;
 }