التحكم بالصوت

هناك العديد من الطرق للوصول إلى إجهزة الصوت في نظام التشغيل

منها الطريقة المباشرة و التي تتعامل مباشرة مع محركات أجهزة الصور

وهذه الطريقة معقدة نسبياً وقد تؤدي إلى إعطاب أجهزة الصوت في الحاسوب إذا ما أخطأ المبرمج في تعليمة واحدة

وهناك طرق غير مباشرة تتعامل مع أدوات تشكل وسيط بين أجهزة الصوت ولغة البرمجة

بحيث يسهل التعامل مع الإجهزة , و تجنب أي ضرر في أجهزة الحاسوب إذا ما حدث خطأ ما

الإداة الوسيطة التي سنستخدمها هي أداة Homa_Audio

وهذه الأداة تستخدم إصدار حديث من مكتبة Microsoft.DirectX.dll

وتستخدم مكتبة جديدة Microsoft.DirectX.DirectSound.dll

وبالتالي يجب إستبدال أداة Microsoft.DirectX.dll من الدروس السابقة

بالإصدار الجديد الذي سيتم تنزيله مع الأداة الوسيطة

التطبيق:

أنسخ هذا الملف إلى مجلد Debug داخل مجلد bin داخل مجلد المشروع

الإن إفتح المشروع , ومن نافذة متصفح المشروع إختر Add Reference كما فعلنا في الدرس الرابع :



ستظهر لك هذه النافذة:



إختر Browse من تبويب .Net Assemply ثم أضف ملف

Homa_Audio.dll

الذي قمت بتنزيله

حتى يظهر الملف في قائمة الملفات المختارة رقم 3 , ثم إختر OK

سترى أن الملف تم إضافتها إلى قائمة الملفات الملحقة :



الآن في أعلى كود النافذة الرئيسية للبرنامج

قم بإستدعاء الملف ليتعرف عليه المعالج وذلك بإضافة الكود:


كود:
using Homa_Audio;

يضاف هذا الكود أسفل تعليمات الإضافة السابقة كما في الصورة :



الآن قم بتعريف كائن التحكم بالصوت :


كود:
private HVolume hv=new HVolume();

تحت المتغيرات من الدروس السابقة :



وإذهب إلى التصميم , وإسحب إلى الفورم إداة TrackBar



وغير ترتيب أدوات الفورم حتى يصبح شكلها هكذا :



ثم إختر الأداة التي قمت بإضافتها وغير خاصية Name إلى vt

وغير أيضاً خاصية Value من 0 إلى 10 حيث ستكون هذه هي أداة التحكم بالصوت

من التصميم أنقر مزدوجاً على أداة التحكم بالصوت لتنتقل إلى الكود , ثم أكتب هناك الكود التالي :


كود:
hv.Volume=vt.Value;

كائن التحكم بالصوت hv يحتوي على خاصية Volume تستقبل رقم من 0 إلى 10 يمثل مستوى الصوت

فلو أسندنا لهذه الخاصية القيمة 0 فلن نسمع أي صوت

وبالتالي فهذه الخاصية ستأخذ أي قيمة من 0 إلى 10 من خلال كائن شريط التحكم بالصوت vt

الكود السابق يقوم بقراة قيمة شريط التحكم بالصوت vt و إسنادها إلى كائن التحكم بالصوت hv

الواجب :

أضف مربع إختيار Check Box يمثل خاصية كتم الصوت ليصبح التطبيق هكذا :



مساعدة :

إسحب أداة مربع الإختيار إلى النافذة الرئيسية :



ثم إختره وغير خاصية 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; }

. نهاية الدرس الثالث عشر