Ejemplo n.º 1
0
        internal static ISpPhrase CreatePhraseFromWordUnits(RecognizedWordUnit[] words, CultureInfo culture, out GCHandle[] memHandles, out IntPtr coMem)
        {
            SPPHRASEELEMENT[] array = new SPPHRASEELEMENT[words.Length];
            int             num     = Marshal.SizeOf(typeof(SPPHRASEELEMENT));
            List <GCHandle> list    = new List <GCHandle>();

            coMem = Marshal.AllocCoTaskMem(num * array.Length);
            try
            {
                for (int i = 0; i < words.Length; i++)
                {
                    RecognizedWordUnit recognizedWordUnit = words[i];
                    array[i] = new SPPHRASEELEMENT();
                    array[i].bDisplayAttributes = RecognizedWordUnit.DisplayAttributesToSapiAttributes((recognizedWordUnit.DisplayAttributes == DisplayAttributes.None) ? DisplayAttributes.OneTrailingSpace : recognizedWordUnit.DisplayAttributes);
                    array[i].SREngineConfidence = recognizedWordUnit.Confidence;
                    array[i].ulAudioTimeOffset  = (uint)(recognizedWordUnit._audioPosition.Ticks * 10000 / 10000);
                    array[i].ulAudioSizeTime    = (uint)(recognizedWordUnit._audioDuration.Ticks * 10000 / 10000);
                    if (recognizedWordUnit.Text != null)
                    {
                        GCHandle item = GCHandle.Alloc(recognizedWordUnit.Text, GCHandleType.Pinned);
                        list.Add(item);
                        array[i].pszDisplayText = item.AddrOfPinnedObject();
                    }
                    if (recognizedWordUnit.Text == null || recognizedWordUnit.LexicalForm != recognizedWordUnit.Text)
                    {
                        GCHandle item2 = GCHandle.Alloc(recognizedWordUnit.LexicalForm, GCHandleType.Pinned);
                        list.Add(item2);
                        array[i].pszLexicalForm = item2.AddrOfPinnedObject();
                    }
                    else
                    {
                        array[i].pszLexicalForm = array[i].pszDisplayText;
                    }
                    if (!string.IsNullOrEmpty(recognizedWordUnit.Pronunciation))
                    {
                        GCHandle item3 = GCHandle.Alloc(recognizedWordUnit.Pronunciation, GCHandleType.Pinned);
                        list.Add(item3);
                        array[i].pszPronunciation = item3.AddrOfPinnedObject();
                    }
                    Marshal.StructureToPtr((object)array[i], new IntPtr((long)coMem + num * i), false);
                }
            }
            finally
            {
                memHandles = list.ToArray();
            }
            SPPHRASE sPPHRASE = new SPPHRASE();

            sPPHRASE.cbSize = (uint)Marshal.SizeOf(sPPHRASE.GetType());
            sPPHRASE.LangID = (ushort)culture.LCID;
            sPPHRASE.Rule   = new SPPHRASERULE();
            sPPHRASE.Rule.ulCountOfElements = (uint)words.Length;
            sPPHRASE.pElements = coMem;
            SpPhraseBuilder spPhraseBuilder = new SpPhraseBuilder();

            ((ISpPhraseBuilder)spPhraseBuilder).InitFromPhrase(sPPHRASE);
            return((ISpPhrase)spPhraseBuilder);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Helper function used to create a new phrase object from a
 /// test string. Each word in the string is converted to a phrase element.
 /// This is useful to create a phrase to pass to the EmulateRecognition method.
 /// </summary>
 internal static ISpPhrase CreatePhraseFromText(string phrase, CultureInfo culture, out GCHandle[] memHandles, out IntPtr coMem)
 {
     string[]             words     = phrase.Split(Array.Empty <char>(), StringSplitOptions.RemoveEmptyEntries);
     RecognizedWordUnit[] wordUnits = new RecognizedWordUnit[words.Length];
     for (int i = 0; i < wordUnits.Length; i++)
     {
         wordUnits[i] = new RecognizedWordUnit(null, 1.0f, null, words[i], DisplayAttributes.OneTrailingSpace, TimeSpan.Zero, TimeSpan.Zero);
     }
     return(CreatePhraseFromWordUnits(wordUnits, culture, out memHandles, out coMem));
 }
Ejemplo n.º 3
0
 internal static ISpPhrase CreatePhraseFromText(string phrase, CultureInfo culture, out GCHandle[] memHandles, out IntPtr coMem)
 {
     string[]             array  = phrase.Split(new char[0], StringSplitOptions.RemoveEmptyEntries);
     RecognizedWordUnit[] array2 = new RecognizedWordUnit[array.Length];
     for (int i = 0; i < array2.Length; i++)
     {
         array2[i] = new RecognizedWordUnit(null, 1f, null, array[i], DisplayAttributes.OneTrailingSpace, TimeSpan.Zero, TimeSpan.Zero);
     }
     return(CreatePhraseFromWordUnits(array2, culture, out memHandles, out coMem));
 }
Ejemplo n.º 4
0
        //-------------------------------------------------------------------

        private void rec_Recognized(object sender, SpeechRecognizedEventArgs e)
        {
            RecognizedWordUnit firstWord = e.Result.Words.First();

            Console.Write("CMD: " + firstWord.Text);

            switch (firstWord.Text)
            {
            // INCLUDE "file_name"
            case "include":
                RecognizedWordUnit tempWord = e.Result.Words.ElementAt(1);
                Console.WriteLine(tempWord.Text);
                sim.Keyboard.TextEntry("#include <" + tempWord.Text + ">");
                sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
                break;

            // FUNCTION "data_type" "Function_name"
            case "function":
                tempWord = e.Result.Words.ElementAt(1);
                Console.Write(" " + tempWord.Text);
                sim.Keyboard.TextEntry(tempWord.Text);
                tempWord = e.Result.Words.ElementAt(2);
                Console.WriteLine(" " + tempWord.Text);
                sim.Keyboard.TextEntry(" " + tempWord.Text + "()");
                sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
                sim.Keyboard.TextEntry("{}");
                sim.Keyboard.KeyPress(VirtualKeyCode.LEFT);
                sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
                sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
                sim.Keyboard.KeyPress(VirtualKeyCode.UP);
                sim.Keyboard.KeyPress(VirtualKeyCode.TAB);
                break;

            // PRINTF  STRING/VAR "data_to_be_printed"
            case "printf":
                tempWord = e.Result.Words.ElementAt(1);
                Console.Write(" " + tempWord.Text);
                sim.Keyboard.TextEntry("cout<<;");
                if (tempWord.Text == "string")
                {
                    Console.WriteLine(" " + tempWord.Text + " <INPUT STRING>");
                    sim.Keyboard.KeyPress(VirtualKeyCode.LEFT);
                    sim.Keyboard.TextEntry("\"\"");
                    sim.Keyboard.KeyPress(VirtualKeyCode.LEFT);
                    string inputData = e.Result.Text;
                    inputData = inputData.Replace("printf string ", "");
                    sim.Keyboard.TextEntry(inputData);
                    sim.Keyboard.KeyPress(VirtualKeyCode.RIGHT);
                    sim.Keyboard.KeyPress(VirtualKeyCode.RIGHT);
                    sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
                    sim.Keyboard.KeyPress(VirtualKeyCode.TAB);
                }
                else if (tempWord.Text == "variable")
                {
                    Console.Write(" " + tempWord.Text);
                    tempWord = e.Result.Words.ElementAt(2);
                    Console.WriteLine(" " + tempWord.Text);
                    sim.Keyboard.KeyPress(VirtualKeyCode.LEFT);
                    sim.Keyboard.TextEntry(tempWord.Text);
                    sim.Keyboard.KeyPress(VirtualKeyCode.RIGHT);
                    sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
                    sim.Keyboard.KeyPress(VirtualKeyCode.TAB);
                }
                break;

            // PRINTLINE  STRING/VAR "data_to_be_printed"
            case "printline":
                tempWord = e.Result.Words.ElementAt(1);
                Console.Write(" " + tempWord.Text);
                sim.Keyboard.TextEntry("cout<<<<endl;");
                for (int i = 0; i < 7; i++)
                {
                    sim.Keyboard.KeyPress(VirtualKeyCode.LEFT);
                }

                if (tempWord.Text == "string")
                {
                    Console.WriteLine(" string" + " <INPUT STRING>");
                    sim.Keyboard.TextEntry("\"\"");
                    sim.Keyboard.KeyPress(VirtualKeyCode.LEFT);
                    string inputData = e.Result.Text;
                    inputData = inputData.Replace("printline string ", "");
                    sim.Keyboard.TextEntry(inputData);
                    sim.Keyboard.KeyPress(VirtualKeyCode.END);
                    sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
                    sim.Keyboard.KeyPress(VirtualKeyCode.TAB);
                }

                else if (tempWord.Text == "variable")
                {
                    tempWord = e.Result.Words.ElementAt(2);
                    Console.Write("variable " + tempWord.Text);
                    sim.Keyboard.TextEntry(tempWord.Text);
                    sim.Keyboard.KeyPress(VirtualKeyCode.END);
                    sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
                    sim.Keyboard.KeyPress(VirtualKeyCode.TAB);
                }
                break;

            case "back":
                sim.Keyboard.KeyPress(VirtualKeyCode.BACK);
                Console.WriteLine("");
                break;

            case "erase":
                sim.Keyboard.KeyDown(VirtualKeyCode.CONTROL);
                sim.Keyboard.KeyPress(VirtualKeyCode.BACK);
                sim.Keyboard.KeyUp(VirtualKeyCode.CONTROL);
                Console.WriteLine("");
                break;

            case "clear":
                sim.Keyboard.KeyDown(VirtualKeyCode.CONTROL);
                sim.Keyboard.KeyPress(VirtualKeyCode.VK_A);
                sim.Keyboard.KeyUp(VirtualKeyCode.CONTROL);
                sim.Keyboard.KeyPress(VirtualKeyCode.BACK);
                Console.WriteLine("");
                break;

            case "left":
                sim.Keyboard.KeyPress(VirtualKeyCode.LEFT);
                Console.WriteLine("");
                break;

            case "right":
                sim.Keyboard.KeyPress(VirtualKeyCode.RIGHT);
                Console.WriteLine("");
                break;

            case "up":
                sim.Keyboard.KeyPress(VirtualKeyCode.UP);
                Console.WriteLine("");
                break;

            case "down":
                sim.Keyboard.KeyPress(VirtualKeyCode.DOWN);
                Console.WriteLine("");
                break;

            case "newline":
                sim.Keyboard.KeyPress(VirtualKeyCode.RETURN);
                Console.WriteLine("");
                break;

            case "tab":
                sim.Keyboard.KeyPress(VirtualKeyCode.TAB);
                Console.WriteLine("");
                break;

            case "stop":
                rec.RecognizeAsyncCancel();
                recognizing = false;
                Console.WriteLine("");
                break;

            case "exit":
                //System.Windows.Application.Current.Shutdown();
                sim.Keyboard.TextEntry("You said exit");
                notifyIcon.Dispose();
                this.Close();
                break;

            default:
                sim.Keyboard.TextEntry(e.Result.Text);
                Console.WriteLine("");
                break;
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Helper function used to create a new phrase object from a
        /// test string. Each word in the string is converted to a phrase element.
        /// This is useful to create a phrase to pass to the EmulateRecognition method.
        /// </summary>
        internal static ISpPhrase CreatePhraseFromWordUnits(RecognizedWordUnit[] words, CultureInfo culture, out GCHandle[] memHandles, out IntPtr coMem)
        {
            SPPHRASEELEMENT[] elements = new SPPHRASEELEMENT[words.Length];

            // build the unmanaged interop layer
            int             size    = Marshal.SizeOf(typeof(SPPHRASEELEMENT));
            List <GCHandle> handles = new();

            coMem = Marshal.AllocCoTaskMem(size * elements.Length);
            try
            {
                for (int i = 0; i < words.Length; i++)
                {
                    RecognizedWordUnit word = words[i];
                    elements[i] = new SPPHRASEELEMENT
                    {
                        // display + confidence
                        bDisplayAttributes = RecognizedWordUnit.DisplayAttributesToSapiAttributes(word.DisplayAttributes == DisplayAttributes.None ? DisplayAttributes.OneTrailingSpace : word.DisplayAttributes),
                        SREngineConfidence = word.Confidence,

                        // Timing information
                        ulAudioTimeOffset = unchecked ((uint)(word._audioPosition.Ticks * 10000 / TimeSpan.TicksPerMillisecond)),
                        ulAudioSizeTime   = unchecked ((uint)(word._audioDuration.Ticks * 10000 / TimeSpan.TicksPerMillisecond))
                    };

                    // DLP information
                    if (word.Text != null)
                    {
                        GCHandle handle = GCHandle.Alloc(word.Text, GCHandleType.Pinned);
                        handles.Add(handle);
                        elements[i].pszDisplayText = handle.AddrOfPinnedObject();
                    }

                    if (word.Text == null || word.LexicalForm != word.Text)
                    {
                        GCHandle handle = GCHandle.Alloc(word.LexicalForm, GCHandleType.Pinned);
                        handles.Add(handle);
                        elements[i].pszLexicalForm = handle.AddrOfPinnedObject();
                    }
                    else
                    {
                        elements[i].pszLexicalForm = elements[i].pszDisplayText;
                    }

                    if (!string.IsNullOrEmpty(word.Pronunciation))
                    {
                        GCHandle handle = GCHandle.Alloc(word.Pronunciation, GCHandleType.Pinned);
                        handles.Add(handle);
                        elements[i].pszPronunciation = handle.AddrOfPinnedObject();
                    }

                    Marshal.StructureToPtr(elements[i], new IntPtr((long)coMem + size * i), false);
                }
            }
            finally
            {
                memHandles = handles.ToArray();
            }

            SPPHRASE spPhrase = new();

            spPhrase.cbSize = (uint)Marshal.SizeOf(spPhrase.GetType());
            spPhrase.LangID = (ushort)culture.LCID;
            spPhrase.Rule   = new SPPHRASERULE
            {
                ulCountOfElements = (uint)words.Length
            };

            spPhrase.pElements = coMem;

            // Initialized the phrase
            SpPhraseBuilder phraseBuilder = new();

            ((ISpPhraseBuilder)phraseBuilder).InitFromPhrase(spPhrase);

            return((ISpPhrase)phraseBuilder);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// recognized word unit to byte array
 /// </summary>
 /// <param name="word">recognized word</param>
 /// <param name="len">length of output byte array</param>
 /// <returns></returns>
 private byte[] ParseWord(RecognizedWordUnit word, int len = 12)
 {
     byte[] retval = new byte[len];
     byte[] str = word.Text.GetBytes();
     Array.Copy(str, 0, retval, 1, Math.Min(str.Length, len - 2));   // yes, if the word has more than 10 letters, it will be truncated!
     retval[0] = (byte)(0.5 + word.Confidence * 100);    // confidence
     return retval;
 }