الدرس العاشر تشغيل ملفات wav
في هذا الدرس سوف نتعلم كيفية تشغيل ملفات wav والتي تعتبر هي لفات الصوت الأساسية الخاصة بنظام التشغيل ويندوز
ولتحميل ملف التنفيذ وملف الموسيقى للتجربة الرجاء الضغط على الرابط التالي
محتوى ملف التنفيذ
using System;
using System.Drawing;
using System.Windows.Forms;
/********************
إطار Constants
خاص بكتابة الثوابت
********************/
static class Constants
{
public const String ApplicationName = "تشغيل ملفات WAV"; // اسم البرنامج
public const String TextBoxFontName = "Times New Roman"; // نوع الحرف لمربع التحرير
public const int TextBoxFontSize = 10; // حجم حرف مربع التحرير
public const int TextBoxWidth = 300; // عرض مربع التحرير
public const int TextBoxHeight = 25; // ارتفاع مربع التحرير
public const String ButtonFontName = "Times New Roman"; // نوع الحرف للأزرار
public const int ButtonFontSize = 9; // حجم حرف الأزرار
public const int ButtonWidth = 150; // عرض الأزرار
public const int ButtonHeight = TextBoxHeight; // ارتفاع الأزرار
public const String FileName = "Test.wav"; // اسم ملف WAVE الذي يتم تشغيله وهو يتم إظهاره عند تشغيل البرنامج لأول مرة
}
/********************
إطار test
نقطة بداية تنفيذ البرنامج
********************/
class test
{
public static void Main()
{
Application.Run(new Form1());
}
}
/********************
إطار Form1
********************/
class Form1 : Form
{
private TextBox textbox;
private Button button;
private System.Media.SoundPlayer player = null;
/* إنشاء الويندوز */
public Form1()
{
FormDesign();
}
/* حزمة FormDesign */
/* تصميم الويندوز والعناصر المستخدمة */
public void FormDesign()
{
StartPosition = FormStartPosition.CenterScreen;
MaximizeBox = false; // تعطيل خاثية تكبير الشاشة
FormBorderStyle = FormBorderStyle.Fixed3D; // تعطيل خاصية تغيير حجم شاشة البرنامج
Text = Constants.ApplicationName;
BackColor = SystemColors.Window;
ClientSize = new Size(Constants.TextBoxWidth + Constants.ButtonWidth, Constants.ButtonHeight);
// إنشاء مربع التحرير
textbox = new TextBox();
textbox.Font = new Font(Constants.TextBoxFontName, Constants.TextBoxFontSize);
textbox.Width = Constants.TextBoxWidth;
textbox.Height = Constants.TextBoxHeight;
textbox.Text = Constants.FileName;
textbox.Multiline = false; // تعطيل خاثية تعدد الأسطر
textbox.TextAlign = HorizontalAlignment.Left; // جعلها على اليسار
textbox.Parent = this;
textbox.Location = new Point(0, 0);
textbox.TabIndex = 0;
textbox.TabStop = true;
// إنشاء الزر
button = new Button();
button.Font = new Font(Constants.ButtonFontName, Constants.ButtonFontSize);
button.TextAlign = ContentAlignment.MiddleCenter; // جعلها في مركز الوسط
button.Width = Constants.ButtonWidth;
button.Height = Constants.ButtonHeight;
button.Text = "تشغيل / إيقاف";
button.BackColor = SystemColors.Control;
button.Parent = this;
button.Location = new Point(Constants.TextBoxWidth, 0);
button.Click += new EventHandler(ButtonClick);
button.TabIndex = 1;
button.TabStop = true;
}
/* حزمة تنفيذ الزر */
/* يتم تنفيذها بعد الضغط على الزر */
public void ButtonClick(object sender, EventArgs e)
{
String filepath = "";
if (player == null)
{
filepath = textbox.Text;
PlaySound(filepath);
}
else
{
StopSound();
}
}
/* حزمة PlaySound */
/* حزة تشغيل ملف WAVE */
private void PlaySound(string wavefile)
{
player = new System.Media.SoundPlayer(wavefile); // فتح الملف
// التشغيل في خلفية البرنامج
// يتم تشغيل الملف من الخلفية لذا يمكن إجراء أي أوامر أخرى أثناء تشغيل الملف
// player.Play();// إذا حزفنا علامة التعليق واستخدمنا هذا السطر للتنفيذ يتم تشغيل الملف مرة واحدة فقط بدون تكرار
// لكننا سوف نستخدم خاثية تكرار التشغيل كما هو موضح في ما يلي
// بهذه الطريقة يتم تشغيل المف من الخلفية وعند الإنتهاء يتم إعادة تشغيل الملف مرة أخرى بصورة تلقائية
player.PlayLooping();
// وإذا كتبناها كما يلي يتم تشغيل الملف إلى الآخر لكن لا يمكن تنفيذ أي أوامر أثناء التشغغيل
// player.PlaySync();
}
/* حزمة StopSound */
/* يتم إيقاف تشغيل الملف */
private void StopSound()
{
if (player != null)
{
player.Stop();// إيقاف التشغيل
player.Dispose();// إغلاق الصوت
player = null; // جعل المتغير بدون أي قيمة
}
}
/* حزمة OnFormClosing */
/* يتم طلب هذه الحزمة تلقائيا عند الخروج من البرنامج */
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
StopSound();
e.Cancel = false;
}
}
شرح سطور البرمجة
أولا بالنسبة للحزم الإفتراضية فلا يوجد أي تغير أو إضافة جديدة
وللتعرف على معنى الحزم الإفتراضية الرجاء مراجعة الدروس السابقة
أما بالنسبة لإطار Constants وهو إطار قمنا بإنشاءه خصيصا لكتابة الثوابت المستخدمة في هذا البرنامج
أما تنفيذ البرنامج فيبدأ من إطار TEST
وكما تعلمنا في الدروس السابقة فيبدأ تنفيذه من حزمة Main
ومن خلال هذه الحزمة وباستخدام أمر Application.Run نقوم بتنفيذ إطار fORM1
وإطار fORM1 يعتبر الإطار الأساسي لتصميم وتنفيذ العناصر المستخدمة في هذا البرنامج
أولا نقوم بكتابة المتغيرات التي نرغب في استخدامها من أي مكان في هذا الإطار وتعتبر هي متغيرات عامة
والمتغيرات هي
private TextBox textbox;// المتغير الخاص بإنشاء مربع التحرير باسم TXT
private Button button; // المتغير الخاص بالزر باسم BUTTON
private System.Media.SoundPlayer player = null; // وهذا المتغير باسم PLAYER وذلك لإستدعاء الحزمة الإفتراضية MEDIA وهي خاصة بتشغيل الموسيقى وخاصة ملفات WAV
ومن خلال تنفيذ الحزمة الرئيسية لإطار Form1
نقوم بطلب حزمة FormDesign
وعند تنفيذ هذه الحزمة
نقوم بالإعدادات الرئيسية الخاصة بالويندوز مثل مكان إظهار الويندوز والخلفية واسم البرنامج
ومن ثم نقوم بإنشاء مربع تحرير خاص لإظهار اسم ملف التشغيل وإنشاء زر التشغيل والإيقاف
وقد قمنا بتعلمها في الدروس السابقة كما لا يوجد أي تغيير في هذا الدرس لذا لم نقم بكتابتها هنا
وبعد هذا ننتقل لحزمة تنفيذ الزر ButtonClick
ويتم طلب هذه الحزمة عند الضغط على الزر المعين
وعند الضغط على زر التشغيل والإيقاف
أولا نقوم بكتابة المتغير filepath وضلك لحفظ اسم الملف المراد تشغيله
String filepath = "";
ولمعرفة الوضع الحالي للتشغيل نقوم بالتعرف على محتوى أو قيمة المتغير player
وهو المتغير الذي عيناه لتشغيل الملفات
وذلك كما وضح في السطر التالي
if (player == null) // إذا كان محتوى أو قيمة المتغير player تساوي لا شيء أي null ففي هذه الحالة نقوم بتشغيل الملف المعين
{
filepath = textbox.Text; // نقوم بإضافة محتوى مربع التحرير إلى المتغير filepath ويجب أن يكون هو اسم الملف المراد تشغيله
PlaySound(filepath); // تشغيل الملف باستخدام أمر PlaySound
}
else // أما إذا كان المتغير غير فارغا نقوم بإيقاف التشغيل
{
StopSound(); // إيقاف التشغيل باستخدام الأمر StopSound بدون كتابة اسم الملف داخل القوسين
}
وأمر PlaySound يتم تشغيل ملفاتwav وذلك عن طريق كتابة اسم الملف المراد تشغيله بين القوسين كما هو موضح
وإذا قمنا باستبدالها بأمر player.PlayLooping()
يمكننا تشغيل الملف حتى النهاية ومن ثم يتم إعادة الملف إلى نقطة البداية وإعادة التشغيل حتى يتم إيقافه
وباستخدام أمر StopSound يمكننا إيقاف تشغيل الملف الحالي
if (player != null)
{
player.Stop();
player.Dispose();
player = null;
}
ومعنى null هو عدم تعيين أو تحديد أي شياء وبمعنى آخر جعل المتغير خالي ليس له قيمة
وأخيرا حزمة OnFormClosing
ويتم طلبها تلقائيا عند إغلاق البرنامج
وعند طلب هذه الحزمة وبصرف النظر عن وضع الملف أي إذا كان الملف في حالة التشغيل أو الإيقاف يتم طلب أمر StopSound وذلك لتقليل استهلاك الذاكرة
ومن ثم الخروج من هذه الحزمة وإغلاق البرنامج وذلك باستخدام سطر e.Cancel = false
الملخص
باستخدام حزمة system.media يمكننا تشغيل ملفات wav
وباستخدام هذه الحزمة لا يمكن تشغيل أي ملفات أخرى غير ملفات wav
وبالرغم من هذا تعتبر مهمة جدا وذلك لتشغيل الموسيقى أثناء تصميم البرامج
وبالطبع هذه الحزمة مهمة جدا لتصميم الألعاب
ولتشغيل صيغ الملفاتالأخرى يجب استخدام بعض الحزم الأخرى وسوف نتعرف عليها خلال الدروس التالية إنشاء الله
وبالله التوفيق