אנו נעבוד על הממשק הגרפי Windows Forms App.
ראשית יש להוסיף את ההפניה System.Speech
C#:
באמצעות System.Speech.Recognition;
באמצעות System.Speech.Synthesis;
וכן נוסיף את ההפניה ל DLL
C#:
 [DllImport("user32.dll")]
        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
למעשה, אנחנו הולכים לשלוט במוזיקה במחשב שלנו,
ווליום, עצור, המשך, הקודם הבא,
אז בוא נתחיל
באירוע Form1_Shown של הפורום
נכתוב את הקוד הבא
יש לציין שלאורך כול התוכנית לא תהיה יציאה מהאירוע From1_Shown חוץ מעלאת אירוע Recognizer_SpeechRecognized.
C#:
 Hide();
            באמצעות (
           SpeechRecognitionEngine מזהה = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("he-US")))
            {
                // צור וטען דקדוק הכתבה.
                identifier.LoadGrammar(new DictationGrammar());
                // הוסף מטפל לאירוע מזוהה דיבור
                recognizer.SpeechRecognized += Recognizer_SpeechRecognized;
                // הגדר קלט לזיהוי הדיבור.
                identifier.SetInputToDefaultAudioDevice();

                // התחל זיהוי דיבור אסינכרוני ומתמשך.
                identifier.RecognizeAsync(RecognizeMode.Multiple);

                // השאר את חלון המסוף פתוח.
                בעוד (נכון)
                    Console.ReadLine();
            }
באירוע Recognizer_SpeechRecognized
אשר מתרחש בזיהוי דיבור,
נכריז תחילה על משתנה מסוג SpeechSynthesizer אשר נותן הודעה למשתמש בקול (פלט קולי)

C#:
            SpeechSynthesizer synth = new SpeechSynthesizer();
אחריו נבדוק את טקסט הדיבור
ואם הטקסט שווה ממש נעצור,נמשיך,נגביר,נלמיך,נעבור שיר
C#:
 switch (e.Result.Text)
            {
                case "Start":
                    synth.Speak("Start music");
                    keybd_event((byte)Keys.MediaPlayPause, 0, 0, 0);
                    break;
                case "stop":
                    synth.Speak("Stop music");
                    keybd_event((byte)Keys.MediaPlayPause, 0, 0, 0);
                    break;
                case "next song":
                    synth.Speak("next song");
                    keybd_event((byte)Keys.MediaNextTrack, 0, 0, 0);
                    break;
                case "First song":
                    synth.Speak("First song");
                    keybd_event((byte)Keys.MediaPreviousTrack, 0, 0, 0);
                    break;
                case "up":
                    synth.Speak("volume up");
                    keybd_event((byte)Keys.VolumeUp, 0, 0, 0);
                    break;
                case "down":
                    synth.Speak("Volume down");
                    keybd_event((byte)Keys.VolumeDown, 0, 0, 0);
                    break;
            }
        }
במקרה זה רק אם טקסט הדיבור שווה ממש לטקסט קורה הפקודה
אך אם רוצים משהו יותר גמיש אפשר להשתמש בפונקציה Contains שבודקת אם טקסט הדיבור של המשתמש מכיל את הטקסט
בהצלחה
כמובן שאפשר להוסיף כול מה שרוצים ב case
אז נשאר רק לאחל קידוד נעים!!!
  • תודה
Reactions: משה פפירוב