تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الأصوات في VB .net
#1
كاتب الموضوع : samerselo



قبل فيجول ستوديو 2005 كانت عملية إضافة أبسط الأصوات إلى برنامجك تعتبر تحديا نوعا ما ولكن تمت إضافة مجموعة هائلة من الفئات ومجالات الأسماء في الفريم

وورك 2 وبعضها سياعدك في عمل ذلك وسوف أقوم بنظرة على المجال System.Media في هذا الموضوع

لاطلاق صوت الصافرة beep سنحتاج لاستخدام الفئة SystemSounds والتي لها خمس خصائص عامة Asterisk, Beep, Exclamation, Hand, Question كل

من هذه الخصائص يقوم بعرض شئ object يعود إلى SystemSounds ويعرض إجرائية Play لجعل الكمبيوتر يصدر ذلك الصوت ولتشغيل صوت beep الخاص

بالنظام نستخدم

كود :
System.Media.SystemSounds.Beep.Play
والشئ الجميل في SystemSounds هو أنه عندما يقوم مستخدم النظام بتغيير أصوات النظام فهذا سينعكس على برنامجك فورا فعلى سبيل المثال عندما تريد عرض

صندوق الرسائل MessageBox يمكنك تشغيل صوت النظام المناسب ليصاحبه وذلك حتى تلفت انتباه مستخدم تطبيقك لمحتويات الرسالة

كود :
System.Media.SystemSounds.Exclamation.Play()
MessageBox.Show("Visual Basic!", "Advanced Basics", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
تشغيل الأصوات يبدو مفيدا ولكن هناك المزيد عندما تريد عرض أصوات معقدة أكثر ففي System.Media ستجد الفئة SoundPlayer التي تقوم بتشغيل ملف WAV

وذلك من أماكن مختلفة كملف على القرص الصلب أو موقع إنترنت أو حتى مصادر مضمنة ضمن exe البرنامج. وأول خطوة تقوم بها هي تحميل الملف فإذا كنت تقوم

بتشغيله من ملف أو من موقع انترنت يجب عليك القيام بتحميله أولا أما عندما تريد تشغيله من مصادر مضمنة فإجرائية التشغيل ستقوم بتحميله بالنيابة عنك إن لم تقم

بالتحميل أولا وبهذا يكون لديك مجال من المرونة للتشغيل المتزامن أو غير المتزامن.
عندما تريد تشغيل ملف wav بوقت قريب لوقت التشغيل ولا تستطيع ضمان اكتمال التحميل بوقت تشغيل الاجراء play عندها يجب عليك اختيار التشغيل المتزامن

وسيئته هو أنك سوف تمنع استكمال تنفيذ التطبيق في ذلك المسار thread حتى انتهاء التحميل
والتشغيل غير المتزامن فعال خاصة عندما تقوم بالتحميل من مصدر بطئ مثل عنوان انترنت مثلا والملف كبير نوعا ما عندها يجب عليك استخدام التحميل الغير متزامن

الذي سيسمح لبرنامجك باستكمال التنفيذ بنفس الوقت الذي يقوم فيه بتحميل الملف وسوف يتم اعلامك بانتهاء التحميل بإطلاق الحدث LoadCompleted وذلك في حالة

رغبتك بإجراء معالجة إضافية أو إجراء أي عمل آخر بالإضافة إلى ذلك يمكنك استخدام الخاصية IsLoadCompleted في أي وقت للتحقق من حالة التحميل ويمكن أن

يبدو كودك في حالة التحميل الغير متزامن كالكود التالي

كود :
Dim Player As New SoundPlayer
Player.SoundLocation = "C:\Program Files\Messenger\newemail.Wav"
Player.LoadAsync()
الآن أنت جاهز لتشغيل ملف wav وهنا أيضا لديك الخيار بالتشغيل المتزامن أو الغير متزامن تماما كالتحميل. فالتشغيل المتزامن يجبر مستخدم تطبيقك على الاستماع

للملف كاملا قبل أن يكمل التطبيق مسار تنفيذه ولن تضطر للقلق عبر أي تدخل لكود أو مستخدم في ذلك الوقت فعندما يكون طول ملفك ثانية أو اثنتين لن يشكل ذلك مشكلة

ولكن أي زمن أطول من ذلك سيسبب اختناقا للتطبيق وسوف يشكك المستخدم في جدوى التطبيق وفي الواقع الاجراء SoundPlayer.Play سيقوم بتشغيل الملف بشكل

غير متزامن حتى لايعيق تنفيذ برنامجك

كود :
Dim Player As New SoundPlayer
Player.SoundLocation = "C:\Program Files\Messenger\newemail.Wav"
Player.LoadAsync()
If Player.IsLoadCompleted Then Player.Play()
وإذا رغبت في التشغيل المتزامن ستضطر لاستدعاء الاجراء SoundPlayer.PlaySync ولكن هذا سيبطئ تنفيذ برنامج بشكل كبير أثناء تشغيل الملف وإذا رغبت في

أن يستمر تشغيل الملف حتى يقوم المستخدم بضغط زر ما أو حتى تنتهي من عملية برمجية معينة عندها ستستدعي الاجرائية PlayLooping فستقوم الفريموورك بتشغيل

الملف بشكل مستمر بشكل غير متزامن حتى تقوم باستدعاء الاجرائية SoundPlayer.Stop
وإذا قمنا بإلقاء نظرة على المجال My في الفريموورك سنجد أن جميع ما تمت مناقشته حتى الآن موجود ضمن My.Computer.Audio فلتشغيل ملف يمكنك استخدام

كود :
My.Computer.Audio.Play("C:\Program Files\Messenger\newemail.Wav")
ولا حاجة للقلق حول إنشاء شئ object لـ SoundPlayer أو التحميل من مسار إنترنت أو ملف ... الخ
إذا لماذا قمنا بكتابة كود أكثر بهذا الشكل؟ بالإضافة إلى تعلم كيفية إجراء ذلك ضمن الفريموورك سوف تحتاج للعمل مع الفئة 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
و الحدث SoundLocationChanged سوف يتم إطلاقه عندما يتم ربط مصدر صوتي جديد لـ SoundPlayer عندها لتقوم بما ترغب كتحميل الملف الجديد بشكل غير

متزامن أو إيقاف تشغيل الملف الحالي أو القيام بأي عمل آخر يحتاجه تطبيقك والحدث الأخير الهام هو 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()
أصبح لديك الآن ثلاثة طرق لإضافة الأصوات إلى برنامجك الأولى باستخدام مجال الأسماء الجديد System.Media من أجل تشغيل ملفات wav أو استخدام المجال

MY الجديد الخاص بفيجول بايزيك أو استخدام Windows Media Player لدعم جميع أنواع صيغ الملفات
}}}}
تم الشكر بواسطة:


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم