الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الأصوات في برنامجك

مغلق
بدأه محمد سامر أبو سلو في 17 مارس 2006 · 14 رد · 8,581 مشاهدة · في قسم الدروس والمواضيع المتميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

قبل فيجول ستوديو 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 في الفريموورك سنجد أن جميع ما تمت مناقشته حتى الآن موجود ضمن y.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 لدعم جميع أنواع صيغ الملفات

تم تعديل هذه المشاركة بواسطة محمد سامر أبو سلو في 23 أبريل 2007 في 01:22

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

موضوع ممتاز تشكر علية

Practice makes perfect 2007*

البرمجة بلا انطباعات

#4

يعطيك العافية وبارك الله فيك

#5

درس رائع

الله يعطيك 100000000 عافية

عقبال دروس برمجة الأصوات من خلال DirectX

والسلام

#7

موضوع رائع

شكراً جزيلاً

برمجة - قواعد بيانات
http://www.pmpsoft.com

#8

ملاحظة: الـ Windows Media Player SDK تعمل مع Vb2002 و VB2003 و VB2005 كون المكتبة التي تقدمها من نوع com كما يمكن استخدامها مع العديد من لغات البرمجة مثل vb6 أو Cpp ... الخ

تم تعديل هذه المشاركة بواسطة samerselo في 13 أكتوبر 2006 في 00:55

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#9

جزاك الله خير, يا مشرفنا.

في المثال يتضح المقال

#10

شرح ممتاز تشكر علية

Practice makes perfect 2007*

البرمجة بلا انطباعات

#12

شكرا لك أخى محمد

جزاك الله خيراً

{قل هل ننبئكم بالأخسرين أعمالاً الذين ضل سعيهم فى الحياة الدنيا وهم يحسبون أنهم يحسنون صنعا}

#13

ألله يعطيك ألف عافية على هذا الموضوع الرائع ,, و جزاك الله خيراً :)

#14

بسم الله الرحمن الرحيم

لوسمت يااخي اريد كود للفيجوال بيسك 2003 لاستدعاء صوة من قاعدة البيانات اكسس

#15

أشكرك عزيزي جزاك الله خير ...

get-4-2008-emk00cr6.png

للمراسلة : BG.W@hotmail.com

BG.WALEED@yahoo.com

هذا الموضوع مغلق.

مواضيع مشابهة