السلام عليكم ورحمة الله وبركاته
هذه المقالة عبارة عن درس لكيفية جعل البرنامج يتعرف على صوتك وينفذ الاوامر
يعني لما تقول في المايك "open calculator" يقوم البرنامج بفتح الحاسبة
كيف ذلك ؟؟! اقرأ بقية المقالة.
--
المتتطلبات :-
1. اضافة مرجع System.Speech
<يتم ذلك بالذهاب لـProject في الـ Toolbar ثم Add reference اذهب للتاب .net وانزل تحت وسترى المرجع>
--
الخطوة الاولى (تصميم واجهة البرنامج) :-
1- نضيف زر ونجعل خاصية Text تساوي "Start recognizer" ، ونجعل خاصية name تساوي "StartButton"
2- نضيف زر ونجعل خاصية Text تساوي "Stop recognizer" ، ونجعل خاصية name تساوي "StopButton"
3- نضيف اداة label ونخليه في الزاوية اليسرى في الاسفل ونجعل خاصية Text تساوي ": Recognized Text"
4- نضيف اداة ونجعل خاصية Name تساوي "resultLabel"
يكون الشكل النهائي كالتالي :
[ATTACH=CONFIG]3435[/ATTACH]
---
الخطوة الثانية (تعريف الفئة الي منستعملها) :-
1- افتح محرر الكود
2- قم باستيراد مجال الاسماء System.Speech.Recognition
سي شارب
vb.net
3- تعريف Instance في الكلاس Form1
سي شارب
vb.net
-
الخطوة الثالثة (برمجة زر التشغيل والايقاف) :-
1- في حدث StartButton_click نضيف الكود التالي
سي شارب
vb.net
ونضيف الاجراء التالي :
c#
vb.net
2- برمجة زر الايقاف - ندخل على حدث StopButton_Click ونكتب :
سي شارب
vb.net
---
الخطوة الرابعة (قنص الكلمات وتنفيذ الاوامر):-
تتذكرون اجراء _Recognizer_SpeechRecognized الي سويناه سابقا
هذا الاجراء يتم استدعائه عندما يتعرف البرنامج على كلمة اضفتها الى قاموسه
احنا اضفنا كلمتين هما open calculator و close calculator
لذلك عندما تقول احدى هذه الكلمتين راح يتم استدعاء هذا الاجراء
وعندها يمكننا القيام بتنفيذ الاوامر بناءا على الكلمة الي قنصها البرنامج
اول شي ماذا نريد من البرنامج ان يفعل عندما يقنص الكلمات
لو قنص open calculator يقوم البرنامج بفتح الحاسبة
لو قنص close calculator يقوم البرنامج باغلاق الحاسبة
فأولا نقوم باضافة متغير عام
سي شارب
vb.net
ونقوم بكتابة هذا الكود في اي مكان
انا وضعته في حدث Form1_load
نضيف هذا المتغير العام فوق حدث Recognizer_SpeechRecognized او اي مكان في الكلاس
الان نتوجه الى الاجراء Recognizer_SpeechRecognized
ونكتب
سي شارب
vb.net
في النهاية يصبح الكود الكامل :
البرنامج المرفق مكتوب بالسي شارب
هذه المقالة عبارة عن درس لكيفية جعل البرنامج يتعرف على صوتك وينفذ الاوامر
يعني لما تقول في المايك "open calculator" يقوم البرنامج بفتح الحاسبة
كيف ذلك ؟؟! اقرأ بقية المقالة.
--
المتتطلبات :-
1. اضافة مرجع System.Speech
<يتم ذلك بالذهاب لـProject في الـ Toolbar ثم Add reference اذهب للتاب .net وانزل تحت وسترى المرجع>
--
الخطوة الاولى (تصميم واجهة البرنامج) :-
1- نضيف زر ونجعل خاصية Text تساوي "Start recognizer" ، ونجعل خاصية name تساوي "StartButton"
2- نضيف زر ونجعل خاصية Text تساوي "Stop recognizer" ، ونجعل خاصية name تساوي "StopButton"
3- نضيف اداة label ونخليه في الزاوية اليسرى في الاسفل ونجعل خاصية Text تساوي ": Recognized Text"
4- نضيف اداة ونجعل خاصية Name تساوي "resultLabel"
يكون الشكل النهائي كالتالي :
[ATTACH=CONFIG]3435[/ATTACH]
---
الخطوة الثانية (تعريف الفئة الي منستعملها) :-
1- افتح محرر الكود
2- قم باستيراد مجال الاسماء System.Speech.Recognition
سي شارب
PHP كود :
using System.Speech.Recognition;
vb.net
PHP كود :
Imports System.Speech.Recognition
3- تعريف Instance في الكلاس Form1
سي شارب
PHP كود :
private SpeechRecognitionEngine _Recognizer = new SpeechRecognitionEngine();
vb.net
PHP كود :
Private _Recognizer As New SpeechRecognitionEngine()
-
الخطوة الثالثة (برمجة زر التشغيل والايقاف) :-
1- في حدث StartButton_click نضيف الكود التالي
سي شارب
PHP كود :
_Recognizer.LoadGrammar(new Grammar(new GrammarBuilder("open calculator"))); //اضافة كلمة
_Recognizer.RequestRecognizerUpdate(); //كود مهم لتحديث الفئة بعد كل اضافة لكلمة
_Recognizer.LoadGrammar(new Grammar(new GrammarBuilder("close calculator")));
_Recognizer.RequestRecognizerUpdate();
_Recognizer.SetInputToDefaultAudioDevice(); //تحديد مصدر الصوت
_Recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(_Recognizer_SpeechRecognized);
//اضافة اجراء يتم استدعائه عندما يتم اطلاق الحدث
_Recognizer.RecognizeAsync(RecognizeMode.Multiple); //تشغيل قانص الاصوات في مسار اخر لايؤثر على البرنامج
vb.net
PHP كود :
_Recognizer.LoadGrammar(New Grammar(New GrammarBuilder("open calculator")))
'اضافة كلمة
_Recognizer.RequestRecognizerUpdate()
'كود مهم لتحديث الفئة بعد كل اضافة لكلمة
_Recognizer.LoadGrammar(New Grammar(New GrammarBuilder("close calculator")))
_Recognizer.RequestRecognizerUpdate()
_Recognizer.SetInputToDefaultAudioDevice()
'تحديد مصدر الصوت
_Recognizer.SpeechRecognized += New EventHandler(Of SpeechRecognizedEventArgs)(_Recognizer_SpeechRecognized)
'اضافة اجراء يتم استدعائه عندما يتم اطلاق الحدث
_Recognizer.RecognizeAsync(RecognizeMode.Multiple)
'تشغيل قانص الاصوات في مسار اخر لايؤثر على البرنامج
ونضيف الاجراء التالي :
c#
PHP كود :
void _Recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
//سنقوم بكتابة الاكواد لاحقا
}
vb.net
PHP كود :
Private Sub _Recognizer_SpeechRecognized(sender As Object, e As SpeechRecognizedEventArgs)
'سنقوم بكتابة الاكواد لاحقا
End Sub
2- برمجة زر الايقاف - ندخل على حدث StopButton_Click ونكتب :
سي شارب
PHP كود :
_Recognizer.RecognizeAsyncStop();
_Recognizer.SpeechRecognized -= new EventHandler<SpeechRecognizedEventArgs>(_Recognizer_SpeechRecognized);
resultLabel.Text = "-";
vb.net
PHP كود :
_Recognizer.RecognizeAsyncStop()
_Recognizer.SpeechRecognized -= New EventHandler(Of SpeechRecognizedEventArgs)(_Recognizer_SpeechRecognized)
resultLabel.Text = "-"
---
الخطوة الرابعة (قنص الكلمات وتنفيذ الاوامر):-
تتذكرون اجراء _Recognizer_SpeechRecognized الي سويناه سابقا
هذا الاجراء يتم استدعائه عندما يتعرف البرنامج على كلمة اضفتها الى قاموسه
احنا اضفنا كلمتين هما open calculator و close calculator
لذلك عندما تقول احدى هذه الكلمتين راح يتم استدعاء هذا الاجراء
وعندها يمكننا القيام بتنفيذ الاوامر بناءا على الكلمة الي قنصها البرنامج
اول شي ماذا نريد من البرنامج ان يفعل عندما يقنص الكلمات
لو قنص open calculator يقوم البرنامج بفتح الحاسبة
لو قنص close calculator يقوم البرنامج باغلاق الحاسبة
فأولا نقوم باضافة متغير عام
سي شارب
PHP كود :
private System.Diagnostics.Process calcProcess = new System.Diagnostics.Process();
vb.net
PHP كود :
Private calcProcess As New System.Diagnostics.Process()
ونقوم بكتابة هذا الكود في اي مكان
PHP كود :
calcProcess.StartInfo.FileName = "calc.exe";
انا وضعته في حدث Form1_load
نضيف هذا المتغير العام فوق حدث Recognizer_SpeechRecognized او اي مكان في الكلاس
PHP كود :
Dim openFlag As Boolean = False
PHP كود :
bool openFlag = false;
الان نتوجه الى الاجراء Recognizer_SpeechRecognized
ونكتب
سي شارب
PHP كود :
resultLabel.Text = e.Result.Text;
switch (e.Result.Text)
{
case "open calculator":
if (openFlag == false)
{
calcProcess.Start(); //تشغيل الحاسبة
openFlag = true;
}
break;
case "close calculator":
try
{
if (openFlag)
{
calcProcess.Kill(); //اغلاق الحاسبة
openFlag = false;
}
}
catch { }
break;
}
vb.net
PHP كود :
resultLabel.Text = e.Result.Text
Select Case e.Result.Text
Case "open calculator"
If openFlag = False Then
calcProcess.Start()
'تشغيل الحاسبة
openFlag = True
End If
Exit Select
Case "close calculator"
Try
If openFlag Then
'اغلاق الحاسبة
calcProcess.Kill()
openFlag = false
End If
Catch
End Try
Exit Select
End Select
في النهاية يصبح الكود الكامل :
PHP كود :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Recognition;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private SpeechRecognitionEngine _Recognizer = new SpeechRecognitionEngine();
private System.Diagnostics.Process calcProcess = new System.Diagnostics.Process();
public Form1()
{
InitializeComponent();
calcProcess.StartInfo.FileName = "calc.exe";
}
private void StartButton_Click(object sender, EventArgs e)
{
_Recognizer.LoadGrammar(new Grammar(new GrammarBuilder("open calculator"))); //اضافة كلمة
_Recognizer.RequestRecognizerUpdate(); //كود مهم لتحديث الفئة بعد كل اضافة لكلمة
_Recognizer.LoadGrammar(new Grammar(new GrammarBuilder("close calculator")));
_Recognizer.RequestRecognizerUpdate();
_Recognizer.SetInputToDefaultAudioDevice(); //تحديد مصدر الصوت
_Recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(_Recognizer_SpeechRecognized);
//اضافة اجراء يتم استدعائه عندما يتم اطلاق الحدث
_Recognizer.RecognizeAsync(RecognizeMode.Multiple); //تشغيل قانص الاصوات في مسار اخر لايؤثر على البرنامج
}
private void StopButton_Click(object sender, EventArgs e)
{
_Recognizer.RecognizeAsyncStop();
_Recognizer.SpeechRecognized -= new EventHandler<SpeechRecognizedEventArgs>(_Recognizer_SpeechRecognized);
resultLabel.Text = "-";
}
bool openFlag = false;
void _Recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
resultLabel.Text = e.Result.Text;
bool openFlag = false;
switch (e.Result.Text)
{
case "open calculator":
if (openFlag == false)
{
calcProcess.Start(); //تشغيل الحاسبة
openFlag = true;
}
break;
case "close calculator":
try
{
if (openFlag)
{
calcProcess.Kill(); //اغلاق الحاسبة
openFlag = false;
}
}
catch { }
break;
}
}
}
}
PHP كود :
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms
Imports System.Speech.Recognition
Namespace WindowsFormsApplication1
Public Partial Class Form1
Inherits Form
Private _Recognizer As New SpeechRecognitionEngine()
Private calcProcess As New System.Diagnostics.Process()
Public Sub New()
InitializeComponent()
calcProcess.StartInfo.FileName = "calc.exe"
End Sub
Private Sub StartButton_Click(sender As Object, e As EventArgs)
_Recognizer.LoadGrammar(New Grammar(New GrammarBuilder("open calculator")))
'اضافة كلمة
_Recognizer.RequestRecognizerUpdate()
'كود مهم لتحديث الفئة بعد كل اضافة لكلمة
_Recognizer.LoadGrammar(New Grammar(New GrammarBuilder("close calculator")))
_Recognizer.RequestRecognizerUpdate()
_Recognizer.SetInputToDefaultAudioDevice()
'تحديد مصدر الصوت
_Recognizer.SpeechRecognized += New EventHandler(Of SpeechRecognizedEventArgs)(AddressOf _Recognizer_SpeechRecognized)
'اضافة اجراء يتم استدعائه عندما يتم اطلاق الحدث
_Recognizer.RecognizeAsync(RecognizeMode.Multiple)
'تشغيل قانص الاصوات في مسار اخر لايؤثر على البرنامج
End Sub
Private Sub StopButton_Click(sender As Object, e As EventArgs)
_Recognizer.RecognizeAsyncStop()
_Recognizer.SpeechRecognized -= New EventHandler(Of SpeechRecognizedEventArgs)(AddressOf _Recognizer_SpeechRecognized)
resultLabel.Text = "-"
End Sub
Dim openFlag As Boolean = False
Private Sub _Recognizer_SpeechRecognized(sender As Object, e As SpeechRecognizedEventArgs)
resultLabel.Text = e.Result.Text
Select Case e.Result.Text
Case "open calculator"
If openFlag = False Then
calcProcess.Start()
'تشغيل الحاسبة
openFlag = True
End If
Exit Select
Case "close calculator"
Try
If openFlag Then
'اغلاق الحاسبة
calcProcess.Kill()
openFlag = false
End If
Catch
End Try
Exit Select
End Select
End Sub
End Class
End Namespace
البرنامج المرفق مكتوب بالسي شارب