02-10-12, 08:54 AM
كاتب الموضوع : samerselo
قبل فيجول ستوديو 2005 كانت عملية إضافة أبسط الأصوات إلى برنامجك تعتبر تحديا نوعا ما ولكن تمت إضافة مجموعة هائلة من الفئات ومجالات الأسماء في الفريم
وورك 2 وبعضها سياعدك في عمل ذلك وسوف أقوم بنظرة على المجال System.Media في هذا الموضوع
لاطلاق صوت الصافرة beep سنحتاج لاستخدام الفئة SystemSounds والتي لها خمس خصائص عامة Asterisk, Beep, Exclamation, Hand, Question كل
من هذه الخصائص يقوم بعرض شئ object يعود إلى SystemSounds ويعرض إجرائية Play لجعل الكمبيوتر يصدر ذلك الصوت ولتشغيل صوت beep الخاص
بالنظام نستخدم
كود :
System.Media.SystemSounds.Beep.Play
صندوق الرسائل MessageBox يمكنك تشغيل صوت النظام المناسب ليصاحبه وذلك حتى تلفت انتباه مستخدم تطبيقك لمحتويات الرسالة
كود :
System.Media.SystemSounds.Exclamation.Play()
MessageBox.Show("Visual Basic!", "Advanced Basics", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
وذلك من أماكن مختلفة كملف على القرص الصلب أو موقع إنترنت أو حتى مصادر مضمنة ضمن exe البرنامج. وأول خطوة تقوم بها هي تحميل الملف فإذا كنت تقوم
بتشغيله من ملف أو من موقع انترنت يجب عليك القيام بتحميله أولا أما عندما تريد تشغيله من مصادر مضمنة فإجرائية التشغيل ستقوم بتحميله بالنيابة عنك إن لم تقم
بالتحميل أولا وبهذا يكون لديك مجال من المرونة للتشغيل المتزامن أو غير المتزامن.
عندما تريد تشغيل ملف wav بوقت قريب لوقت التشغيل ولا تستطيع ضمان اكتمال التحميل بوقت تشغيل الاجراء play عندها يجب عليك اختيار التشغيل المتزامن
وسيئته هو أنك سوف تمنع استكمال تنفيذ التطبيق في ذلك المسار thread حتى انتهاء التحميل
والتشغيل غير المتزامن فعال خاصة عندما تقوم بالتحميل من مصدر بطئ مثل عنوان انترنت مثلا والملف كبير نوعا ما عندها يجب عليك استخدام التحميل الغير متزامن
الذي سيسمح لبرنامجك باستكمال التنفيذ بنفس الوقت الذي يقوم فيه بتحميل الملف وسوف يتم اعلامك بانتهاء التحميل بإطلاق الحدث LoadCompleted وذلك في حالة
رغبتك بإجراء معالجة إضافية أو إجراء أي عمل آخر بالإضافة إلى ذلك يمكنك استخدام الخاصية IsLoadCompleted في أي وقت للتحقق من حالة التحميل ويمكن أن
يبدو كودك في حالة التحميل الغير متزامن كالكود التالي
كود :
Dim Player As New SoundPlayer
Player.SoundLocation = "C:\Program Files\Messenger\newemail.Wav"
Player.LoadAsync()
للملف كاملا قبل أن يكمل التطبيق مسار تنفيذه ولن تضطر للقلق عبر أي تدخل لكود أو مستخدم في ذلك الوقت فعندما يكون طول ملفك ثانية أو اثنتين لن يشكل ذلك مشكلة
ولكن أي زمن أطول من ذلك سيسبب اختناقا للتطبيق وسوف يشكك المستخدم في جدوى التطبيق وفي الواقع الاجراء SoundPlayer.Play سيقوم بتشغيل الملف بشكل
غير متزامن حتى لايعيق تنفيذ برنامجك
كود :
Dim Player As New SoundPlayer
Player.SoundLocation = "C:\Program Files\Messenger\newemail.Wav"
Player.LoadAsync()
If Player.IsLoadCompleted Then Player.Play()
أن يستمر تشغيل الملف حتى يقوم المستخدم بضغط زر ما أو حتى تنتهي من عملية برمجية معينة عندها ستستدعي الاجرائية PlayLooping فستقوم الفريموورك بتشغيل
الملف بشكل مستمر بشكل غير متزامن حتى تقوم باستدعاء الاجرائية SoundPlayer.Stop
وإذا قمنا بإلقاء نظرة على المجال My في الفريموورك سنجد أن جميع ما تمت مناقشته حتى الآن موجود ضمن My.Computer.Audio فلتشغيل ملف يمكنك استخدام
كود :
My.Computer.Audio.Play("C:\Program Files\Messenger\newemail.Wav")
إذا لماذا قمنا بكتابة كود أكثر بهذا الشكل؟ بالإضافة إلى تعلم كيفية إجراء ذلك ضمن الفريموورك سوف تحتاج للعمل مع الفئة SoundPlayer إذا كنت ستحتاج للتعامل مع
أي من الأحداث الثلاثة التي تطلقها تلك الفئة
أولا الحدث LoadCompleted الذي ذكرناه سابقا سوف يطلق في نهاية التحميل الغير متزامن للملف فإذا كنت تحمل من عنوان انترنت أو ملف ستجد انه هذا الحدث
هام جدا لالتقاطه وسوف تتحقق من بارامترات الحدث للتحقق من اكتمال التحميل بنجاح
كود :
Private Sub Player_LoadCompleted(ByVal sender As Object, _
ByVal e As ComponentModel.AsyncCompletedEventArgs) _
Handles Player.LoadCompleted
If e.Error IsNot Nothing Then
' Handle error
isLoaded = False
Else
isLoaded = True
End If
End Sub
متزامن أو إيقاف تشغيل الملف الحالي أو القيام بأي عمل آخر يحتاجه تطبيقك والحدث الأخير الهام هو StreamChanged وهو مشابه للحدث السابق ولكنه مفيد بشكل
خاص عندما تقوم بتحميل الملف من الذاكرة أو ملف على القرص MemoryStream or FileStream
وإذا رغبت في القيام بأكثر من تشغيل ملف wav عندها ستضطر للخروج خارج الفريموورك وأحد الخيارات هو اللجوء إلى Windows Media Player وبتحميل Windows Media Player SDK يمكنك عندها تشغيل تقريبا أي صيغة ملف وببنية بيسطة مشابهة لـلمجال System.Media ستجد أن التعامل مع
Windows Media Player سهلا للغاية فمثلا
كود :
Dim WMP As New WMPLib.WindowsMediaPlayer
WMP.URL = "C:\My Music\Funky Cold Medina.wma"
WMP.controls.play()
MY الجديد الخاص بفيجول بايزيك أو استخدام Windows Media Player لدعم جميع أنواع صيغ الملفات