khaledbelal
03-22-2010, 04:19 PM
الدرس الثالث عشر
التحكم بالصوت
هناك العديد من الطرق للوصول إلى إجهزة الصوت في نظام التشغيل
منها الطريقة المباشرة و التي تتعامل مباشرة مع محركات أجهزة الصور
وهذه الطريقة معقدة نسبياً وقد تؤدي إلى إعطاب أجهزة الصوت في الحاسوب إذا ما أخطأ المبرمج في تعليمة واحدة
وهناك طرق غير مباشرة تتعامل مع أدوات تشكل وسيط بين أجهزة الصوت ولغة البرمجة
بحيث يسهل التعامل مع الإجهزة , و تجنب أي ضرر في أجهزة الحاسوب إذا ما حدث خطأ ما
الإداة الوسيطة التي سنستخدمها هي أداة Homa_Audio
وهذه الأداة تستخدم إصدار حديث من مكتبة Microsoft.DirectX.dll
وتستخدم مكتبة جديدة Microsoft.DirectX.DirectSound.dll
وبالتالي يجب إستبدال أداة Microsoft.DirectX.dll من الدروس السابقة
بالإصدار الجديد الذي سيتم تنزيله مع الأداة الوسيطة
التطبيق:
أنسخ هذا الملف (http://www.7oma.com/csharp/Homa_Audio.zip)إلى مجلد Debug داخل مجلد bin داخل مجلد المشروع
الإن إفتح المشروع , ومن نافذة متصفح المشروع إختر Add Reference كما فعلنا في الدرس الرابع :
http://www.7oma.com/csharp/images/image4-3.jpg
ستظهر لك هذه النافذة:
http://www.7oma.com/csharp/images/image13-1.jpg
إختر Browse من تبويب .Net Assemply ثم أضف ملف
Homa_Audio.dll
الذي قمت بتنزيله
حتى يظهر الملف في قائمة الملفات المختارة رقم 3 , ثم إختر OK
سترى أن الملف تم إضافتها إلى قائمة الملفات الملحقة :
http://www.7oma.com/csharp/images/image13-2.jpg
الآن في أعلى كود النافذة الرئيسية للبرنامج
قم بإستدعاء الملف ليتعرف عليه المعالج وذلك بإضافة الكود:
using Homa_Audio;
يضاف هذا الكود أسفل تعليمات الإضافة السابقة كما في الصورة :
http://www.7oma.com/csharp/images/image13-3.jpg
الآن قم بتعريف كائن التحكم بالصوت :
private HVolume hv=new HVolume();
تحت المتغيرات من الدروس السابقة :
وإذهب إلى التصميم , وإسحب إلى الفورم إداة TrackBar
وغير ترتيب أدوات الفورم حتى يصبح شكلها هكذا :
http://www.7oma.com/csharp/images/image13-5.jpg
ثم إختر الأداة التي قمت بإضافتها وغير خاصية Name إلى vt
وغير أيضاً خاصية Value من 0 إلى 10 حيث ستكون هذه هي أداة التحكم بالصوت
من التصميم أنقر مزدوجاً على أداة التحكم بالصوت لتنتقل إلى الكود , ثم أكتب هناك الكود التالي :
hv.Volume=vt.Value;
كائن التحكم بالصوت hv يحتوي على خاصية Volume تستقبل رقم من 0 إلى 10 يمثل مستوى الصوت
فلو أسندنا لهذه الخاصية القيمة 0 فلن نسمع أي صوت
وبالتالي فهذه الخاصية ستأخذ أي قيمة من 0 إلى 10 من خلال كائن شريط التحكم بالصوت vt
الكود السابق يقوم بقراة قيمة شريط التحكم بالصوت vt و إسنادها إلى كائن التحكم بالصوت hv
الواجب :
أضف مربع إختيار Check Box يمثل خاصية كتم الصوت ليصبح التطبيق هكذا :
http://www.7oma.com/csharp/images/image13-6.jpg
مساعدة :
إسحب أداة مربع الإختيار إلى النافذة الرئيسية :
http://www.7oma.com/csharp/images/image13-7.jpg
ثم إختره وغير خاصية Name إلى mute وخاصية Text إلى "كتم"
ثم أنقر عليه مزدوجاً لتنتقل إلى الكود وأكتب هذا الكود هناك :
if(mute.Checked)
{
hv.Volume=...;
}
else
{
hv.Volume=vt.Value;
}
الكود السابق يفحص مربع الإختيار إذا كان مختاراً ينفذ من بين الحاصرتين الأولى
وإن لم يكن مختاراً ينفذ ما بين الحاصرتين الثانية وهي إسناد قيمة شريط التحكم بالصوت vt.Value
إلى خاصية Volume في كائن التحكم بالصوت hv
أكل الفراغ بقيمة محددة لكتم الصوت - تم شرحها سابقاً في الدرس -
ثم أرسل التطبيق
ملاحظة :
عند تشغيل التطبيق ثم تفعيل مربع "كتم" سينقطع الصوت
ولكن عند تحريك شريط التحكم بالصوت سيرجع الصوت مع أن مربع "كتم" مفعل
وبالتالي يجب وضح شرط في حدث تحريك كائن الصوت ليتم فحص مربع "كتم"
فإذا كان مربع "كتم" مفعلاً فلا يجب أن يتغير الصوت , ويصبح كود تحريك شريك التحكم بالصوت هكذا :
if(mute.Checked)
{
}
else
{
hv.Volume=vt.Value;
}
الكود السابق يفحص إذا كان مربع "كتم" مفعل فلن ينفذ شي
وإن لم يكن مفعلاً فسينفذ كود تغيير الصوت
يمكن كتابة الكود السابق بطريقة أخرى , بإستخدام معامل العكس !
حيث يتم إضافة رمز التعجب ! قبل الجملة المنطقية ليعكس الجملة كلها
مثلاً :
if(mute.Checked)
تعني إذا كان مربع الكتم مفعل , و :
if(!mute.Checked)
تعني إذا لم يكن مربع الكتم مفعلاً
وبالتالي فيمكن كتابة كود تحريك شريط التحكم بالصوت هكذا :
if(!mute.Checked)
{
hv.Volume=vt.Value;
}
. نهاية الدرس الثالث عشر
و ما زالت الدروس مستمرة
التحكم بالصوت
هناك العديد من الطرق للوصول إلى إجهزة الصوت في نظام التشغيل
منها الطريقة المباشرة و التي تتعامل مباشرة مع محركات أجهزة الصور
وهذه الطريقة معقدة نسبياً وقد تؤدي إلى إعطاب أجهزة الصوت في الحاسوب إذا ما أخطأ المبرمج في تعليمة واحدة
وهناك طرق غير مباشرة تتعامل مع أدوات تشكل وسيط بين أجهزة الصوت ولغة البرمجة
بحيث يسهل التعامل مع الإجهزة , و تجنب أي ضرر في أجهزة الحاسوب إذا ما حدث خطأ ما
الإداة الوسيطة التي سنستخدمها هي أداة Homa_Audio
وهذه الأداة تستخدم إصدار حديث من مكتبة Microsoft.DirectX.dll
وتستخدم مكتبة جديدة Microsoft.DirectX.DirectSound.dll
وبالتالي يجب إستبدال أداة Microsoft.DirectX.dll من الدروس السابقة
بالإصدار الجديد الذي سيتم تنزيله مع الأداة الوسيطة
التطبيق:
أنسخ هذا الملف (http://www.7oma.com/csharp/Homa_Audio.zip)إلى مجلد Debug داخل مجلد bin داخل مجلد المشروع
الإن إفتح المشروع , ومن نافذة متصفح المشروع إختر Add Reference كما فعلنا في الدرس الرابع :
http://www.7oma.com/csharp/images/image4-3.jpg
ستظهر لك هذه النافذة:
http://www.7oma.com/csharp/images/image13-1.jpg
إختر Browse من تبويب .Net Assemply ثم أضف ملف
Homa_Audio.dll
الذي قمت بتنزيله
حتى يظهر الملف في قائمة الملفات المختارة رقم 3 , ثم إختر OK
سترى أن الملف تم إضافتها إلى قائمة الملفات الملحقة :
http://www.7oma.com/csharp/images/image13-2.jpg
الآن في أعلى كود النافذة الرئيسية للبرنامج
قم بإستدعاء الملف ليتعرف عليه المعالج وذلك بإضافة الكود:
using Homa_Audio;
يضاف هذا الكود أسفل تعليمات الإضافة السابقة كما في الصورة :
http://www.7oma.com/csharp/images/image13-3.jpg
الآن قم بتعريف كائن التحكم بالصوت :
private HVolume hv=new HVolume();
تحت المتغيرات من الدروس السابقة :
وإذهب إلى التصميم , وإسحب إلى الفورم إداة TrackBar
وغير ترتيب أدوات الفورم حتى يصبح شكلها هكذا :
http://www.7oma.com/csharp/images/image13-5.jpg
ثم إختر الأداة التي قمت بإضافتها وغير خاصية Name إلى vt
وغير أيضاً خاصية Value من 0 إلى 10 حيث ستكون هذه هي أداة التحكم بالصوت
من التصميم أنقر مزدوجاً على أداة التحكم بالصوت لتنتقل إلى الكود , ثم أكتب هناك الكود التالي :
hv.Volume=vt.Value;
كائن التحكم بالصوت hv يحتوي على خاصية Volume تستقبل رقم من 0 إلى 10 يمثل مستوى الصوت
فلو أسندنا لهذه الخاصية القيمة 0 فلن نسمع أي صوت
وبالتالي فهذه الخاصية ستأخذ أي قيمة من 0 إلى 10 من خلال كائن شريط التحكم بالصوت vt
الكود السابق يقوم بقراة قيمة شريط التحكم بالصوت vt و إسنادها إلى كائن التحكم بالصوت hv
الواجب :
أضف مربع إختيار Check Box يمثل خاصية كتم الصوت ليصبح التطبيق هكذا :
http://www.7oma.com/csharp/images/image13-6.jpg
مساعدة :
إسحب أداة مربع الإختيار إلى النافذة الرئيسية :
http://www.7oma.com/csharp/images/image13-7.jpg
ثم إختره وغير خاصية Name إلى mute وخاصية Text إلى "كتم"
ثم أنقر عليه مزدوجاً لتنتقل إلى الكود وأكتب هذا الكود هناك :
if(mute.Checked)
{
hv.Volume=...;
}
else
{
hv.Volume=vt.Value;
}
الكود السابق يفحص مربع الإختيار إذا كان مختاراً ينفذ من بين الحاصرتين الأولى
وإن لم يكن مختاراً ينفذ ما بين الحاصرتين الثانية وهي إسناد قيمة شريط التحكم بالصوت vt.Value
إلى خاصية Volume في كائن التحكم بالصوت hv
أكل الفراغ بقيمة محددة لكتم الصوت - تم شرحها سابقاً في الدرس -
ثم أرسل التطبيق
ملاحظة :
عند تشغيل التطبيق ثم تفعيل مربع "كتم" سينقطع الصوت
ولكن عند تحريك شريط التحكم بالصوت سيرجع الصوت مع أن مربع "كتم" مفعل
وبالتالي يجب وضح شرط في حدث تحريك كائن الصوت ليتم فحص مربع "كتم"
فإذا كان مربع "كتم" مفعلاً فلا يجب أن يتغير الصوت , ويصبح كود تحريك شريك التحكم بالصوت هكذا :
if(mute.Checked)
{
}
else
{
hv.Volume=vt.Value;
}
الكود السابق يفحص إذا كان مربع "كتم" مفعل فلن ينفذ شي
وإن لم يكن مفعلاً فسينفذ كود تغيير الصوت
يمكن كتابة الكود السابق بطريقة أخرى , بإستخدام معامل العكس !
حيث يتم إضافة رمز التعجب ! قبل الجملة المنطقية ليعكس الجملة كلها
مثلاً :
if(mute.Checked)
تعني إذا كان مربع الكتم مفعل , و :
if(!mute.Checked)
تعني إذا لم يكن مربع الكتم مفعلاً
وبالتالي فيمكن كتابة كود تحريك شريط التحكم بالصوت هكذا :
if(!mute.Checked)
{
hv.Volume=vt.Value;
}
. نهاية الدرس الثالث عشر
و ما زالت الدروس مستمرة