منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
التعامل مع الملفات الصوتية ........دردشة برمجية - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184)
+--- الموضوع : التعامل مع الملفات الصوتية ........دردشة برمجية (/showthread.php?tid=4853)



التعامل مع الملفات الصوتية ........دردشة برمجية - RaggiTech - 02-10-12

كاتب الموضوع : supersmart2007

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

السلام عليكم ورحمة الله وبركاته

انا عضو جديد قديم بمعنى
انا كنت مشترك فى المنتدى منذ سنين ولكنى كنت سلبى لا اشارك بمعلومة ولا حتى سؤال
كنت اقرأ فقط

ولكن من الان قررت ان اشترك فى المنتدى حساب باسم جديد
ليكون ميلاد عضو جديد فهل من مرحب؟
وقررت بالا تكون اول مشاركة لى سؤاللا
ولكن تكون شرحا لكى اُثبت حسن نيتى واستعدادى لكى اكون ايجابيا

الدرس بمجهودى الخاص واتمنى ان يكون الموضوع مفيد



الشرح سيكون بواسطة فيجوال بيسك دوت نت 2005
ومع التعديل البسيط يمكن الاستفادة منه فى اللغات البرمجية الاخرى


سيتم مناقشة التالى

1- كيفية تشغيل الملفات الصوتية لنظام التشغيل
2- كيفية تشغيل الملفات الصوتية من نوع ويف
3- كيفية تشغيل انواع اكثر من الملفات الصوتية مثل:
wav,mp3,wma,......etc

4-تصميم مشغل صوتيات للتدريب على
  • فتح الملفات الصوتية وتشغيلها
  • معرفة اسم الاغنية ومدتها
  • كيفية الايقاف والتشغيل والتقديم والتأخير
  • كيفية تعلية الصوت وتوطيته
  • كيفية تشغيل السماعة اليمنى فقط او اليسرى فقط
  • عرض شريط تقدم الاغنية والانتقال الى اى وقت فى الاغنية

وهيكون صورة برنامجنا النهائى كالتالى:





نبتدى بسم الله

1-كيفية تشغيل الملفات الصوتية لنظام التشغيل:


ضع button واكتب سطر واحد من السطور التالية بداخله:

كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
System.Media.SystemSounds.Beep.Play()
System.Media.SystemSounds.Asterisk.Play()
System.Media.SystemSounds.Exclamation.Play()
System.Media.SystemSounds.Hand.Play()
System.Media.SystemSounds.Question.Play()
End Sub
كل سطر يستخدم لتشغيل صوت معين ويجب استخدام سطر واحد فقط منهم
=============================================

2- كيفية تشغيل الملفات الصوتية من نوع ويف

قم باضافة button واكتب به التالى:

كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sp As New System.Media.SoundPlayer
sp.SoundLocation = "c:\sample.wav"

'''''''''''''''''''''''''''''''''''''''''''
sp.Play()
sp.PlayLooping()
sp.PlaySync()
sp.Stop()
End Sub
قمنا بتعريف متغير من النوع soundplayer
وتم تحديد مكان الملف الصوتى المراد تشغيله
وبعد ذلك يتم استخدام سطر واحد فقط من الثلاث اسطر التالية لتشغيل الملف الصوتى والاختلافات بينهم كالتالى

sp.Play
لتشغيل الملف الصوتى وتنفيذ اى كود برمجى بعده بدون مشاكل

sp.PlayLooping
لتشغيل الملف الصوتى واعادة تشغيله بصفة متكررة كلما انتها يبدأ من جديد

sp.PlaySync
يتم تشغيل الملف الصوتى ولا يتم تنفيذ اى كود بعده الا بعد انتهاء تشغيل الملف الصوتى

كمثال لفهم ذلك:

كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sp As New System.Media.SoundPlayer
sp.SoundLocation = "c:\sample.wav"

'''''''''''''''''''''''''''''''''''''''''''
sp.Play()
MsgBox("ستظهر الرسالة رغم تشغيل الملف الصوتى")

End Sub

كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim sp As New System.Media.SoundPlayer
sp.SoundLocation = "c:\sample.wav"

'''''''''''''''''''''''''''''''''''''''''''
sp.PlaySync()
MsgBox("لن تظهر الرسالة الا بعد انتهاء الملف الصوتى")

End Sub
وفى اى وقت نريد ايقاف الصوت نستخدم
sp.Stop

=============================================


جارى اعداد الجزء المتبقى من الدرس


التعامل مع الملفات الصوتية ........دردشة برمجية - RaggiTech - 02-10-12


الجزء الثانى من الشرح


ابتسم فأنت مبرمج فيجوال بيسك دوت نت 2005

لكى تقوم بما سبق فى اسرع وقت وفقط على فيجوال بيسك دوت نت 2005
لتشغيل صوت من اصوات نظام التشغيل ضع سطر واحد من الكود التالى:


كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Asterisk)
My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Beep)
My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Exclamation)
My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Hand)
My.Computer.Audio.PlaySystemSound(Media.SystemSounds.Question)
End Sub
ولتشغيل ملف صوتى من النوع ويف ضع سطر واحد من الكود التالى


كود :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
My.Computer.Audio.Play("c:\sample.wave")
My.Computer.Audio.Play("c:\sample.wave", AudioPlayMode.Background)
My.Computer.Audio.Play("c:\sample.wave", AudioPlayMode.BackgroundLoop)
My.Computer.Audio.Play("c:\sample.wave", AudioPlayMode.WaitToComplete)
My.Computer.Audio.Stop()


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

وفى السطر الأخير تم ايقاف الصوت

=============================================

جارى إعداد الجزء المتبقى من الدرس


التعامل مع الملفات الصوتية ........دردشة برمجية - RaggiTech - 02-10-12

الجزء الثالث من الشرح

ملحوظه هامة:الشرح التالى يمكن تطبيقه فى فيجوال بيسك 6
مع التغيير الطفيف فى الكود

3-تشغيل الانواع الاخرى

لتشغيل انواع كثيرة من الملفات يوجد طرق كثيرة
وسيتم شرح اشهر طريقة وهى استخدام اداة ويندوز ميديا بلاير
Windows media player
وهى اداة غير موجودة فى الادوات القياسية فى فيجوال بيسك
ولإضافتها اتبع الصورة المتحركة التالية
انتظر حتى يتم تحميل الصورة وعرضها المرة الاولى ببطء بعد ذلك ستعمل بدون بطء

http://img164.imageshack.us/img164/3843/addwmp3xe4.gif

اضف اداة ويندوز ميديا بلاير وغير اسمها الى
Wmp1

ولتشغيل ملف صوتى نستخدم خاصية
url=c:\sample.mp3

او برمجيا

كود :
wmp1.URL = "c:\sample.mp3"
==================================
للتشغيل والتوقيف والتوقيف المؤقت والتقديم والتأخير استخدم
سطر واحد من التالى:

كود :
wmp1.Ctlcontrols.play()
wmp1.Ctlcontrols.pause()
wmp1.Ctlcontrols.stop()
wmp1.Ctlcontrols.fastForward()
wmp1.Ctlcontrols.fastReverse()
================================================== ==
ولمعرفة مكان تشغيل الاغنية الان بالثانية

كود :
MsgBox(wmp1.Ctlcontrols.currentPosition)
او التحكم فى مكان تشغيل الاغنية بالثانية

كود :
wmp1.Ctlcontrols.currentPosition=50
ولمعرفة ارتفاع الصوت او ضبط الصوت من 1 الى 100

كود :
MsgBox(wmp1.settings.volume)
wmp1.settings.volume=70
ولكتم الصوت

كود :
wmp1.settings.mute=True
ولتشغيل سماعة دون الاخرى من -100 الى 100
كمثال لتشغيل السماعة اليسرى:


كود :
wmp1.settings.balance = -100
ولمعرفة اسم الاغنية:


كود :
MsgBox(wmp1.currentMedia.name)
ولمعرفة مدة الاغنية بالثانية


كود :
MsgBox(wmp1.currentMedia.duration)



جارى إعداد باقى الشرح


التعامل مع الملفات الصوتية ........دردشة برمجية - RaggiTech - 02-10-12


الجزء الرابع من الشرح


4-تصميم مشغل صوتيات



سنقوم بعمل تطبيق الان للتدريب على ما سبق
قم بانشاء مشروع جديد اسمه
Mp3_player

وضيف اداة ويندوز ميديا بلاير كما تعلمت سابقا
وسميها
Wmp1
وغير خاصية visible لـ false
عشان احنا مش عايزين المستخدم يشوفها

وضيف خمسة button وسميهم-المقصود بسميهم يعنى الخاصية
Name

Bplay
Bstop
Bbause
Bforward
Bbackward

وفى الخاصية text حط اللى انت عايزه انا هنا استخدمت
>
[]
||
>>
<<

وحط الكود التالى فى الزراير بالترتيب:

فى زرار التشغيل

كود :
wmp1.Ctlcontrols.play()
كده المستخدم لو ضغط على الزرار هيشغل الاغنية
لكن لو هى شغالة اصلا مش هيعمل حاجه لانها شغالة اصلا
بس فى وين امب لو الاغنية شغالة وضغطت على الزرار هيبدأها من جديد
ولأننا ننشد الواقعية قدر الامكان
سنجرى التعديل التالى

كود :
If wmp1.playState = WMPLib.WMPPlayState.wmppsPlaying Then
wmp1.Ctlcontrols.stop()
wmp1.Ctlcontrols.play()
Else
wmp1.Ctlcontrols.play()
End If
هنا انا قولتله لو انت شغال اقف وشغل من جديد ولو مش شغال اشتغل
-----------------------
زرار التوقف

كود :
wmp1.Ctlcontrols.stop()
زرار التوقف المؤقت

كود :
wmp1.Ctlcontrols.pause()
لو ضغطت على الزرار هيوقف الصوت ولو ضغطت تانى هيوقف الصوت اللى
هو واقف اصلا
وليكون اكثر واقعية نجرى التعديل التالى

كود :
If wmp1.playState = WMPLib.WMPPlayState.wmppsPlaying Then
wmp1.Ctlcontrols.pause()
Else
wmp1.Ctlcontrols.play()
End If
يعنى لو شغال اقف ولو واقف اشتغل
--------------
تقديم الاغنية

كود :
wmp1.Ctlcontrols.fastForward()
ترجيع الاغنية

كود :
wmp1.Ctlcontrols.fastReverse()
وهى غير مدعومة فى بعض الاغانى
--------------------------
للتحكم فى علو الصوت
اضف اداة اسمها
Trackbar
دور عليها كويس هى موجودة فى الادوات

وغير خصائصها الى
Name=tvolume
Tickstyle=none
Minimum=0
Maximum=100
Value=50

الكلام ده معناه انى خليت اعلى حد للصوت 100
واقل حد صفر والقيمة المختارة 50

واضف اداة اخرى لتوازن صوت السماعات وغير الخصائص

Name=tbalance
Tickstyle=none
Minimum=-100
Maximum=100
Value=0

واخترنا صفر لأنه فى المنتصف بين 100 و-100

واضف اداة تالته للتحكم فى مكان تشغيل الاغنية وعرض تقدم الاغنية
وغير الخصائص الاتية
Name=tposition
Tickstyle=none
Minimum=0
Maximum=100
Value=0

وهنا مش مهم تحديد اعلى قيمة بدقة لاننا هنعدلها برمجيا

وضيف تلاته label
وغير اساميهم الى
Lname
Lposition
Lduration

فاضل زرار واحد ضيفه عشان نفتح بيه الاغنية اللى احنا عايزينها
وسميه
Bopen

وعشان ندور على اغنية ضيف اداة
Openfiledialog
دور عليها كويس هتلاقيها
وغير اسمها الى
Ofd1

ولكى نجعل المستخدم لا يختار كافة انواع الملفات كان يختار مثلا ملفات نصية
فسنجبره على اختيار انواع معينه وفى هذا التطبيق سنجبره على اختيار ملفات
Mp3
وذلك عن طريق جعل خاصية
Filter= mp3 files|*.mp3
==========================================
ونضيف اداة timer
لتتبع تقدم تشغيل الاغنية
ونغير الخصائص التالية
Enabled=true
Interval=1000
يعنى كل ثانية لان الثانية بالف
============================================
كده احنا اضفنا كل الادوات اللى احنا عايزينها
اعد ترتيب الادوات بالشكل الذى يحلو لك وغير فى خصائصهم
وخصائص البرنامج وشكله كما تريد
ونحن هنا سنتبع الشكل التالى:


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

كود :
If ofd1.ShowDialog = Windows.Forms.DialogResult.Cancel Then
Exit Sub
End If
wmp1.URL = ofd1.FileName
وهنا قولنا لو المستخدم ضغط
Cancel
ما تعملش حاجه ولو اختار اغنية شغلها

==============================
للتحكم فى درجة علو الصوت اضغط على الاداة مرتين وكتب الكود التالى



كود :
wmp1.settings.volume = Tvolume.Value
اظن الكود واضح ونفس الكلام عند التبديل بين السماعات اكتب


كود :
wmp1.settings.balance = Tbalance.Value
ونفس الكلام عند التحكم فى مكان تشغيل الاغنية


كود :
wmp1.Ctlcontrols.currentPosition = Tposition.Value
طيب احنا عايزين اول ما نفتح الاغنية
نعرض اسم الاغنية ومدتها
ونغير طول الاداة بتاعت التحكم فى تقدم الاغنية
بحيث تكون قد طول الاغنية

الكلام ده المفروض يتكتب فى كود زرار فتح الاغنية
لكن الافضل وعشان نتدرب على حاجه جديده

اضغط مرتين على اداة الميديا بلاير
واختار الحدث

wmp1_OpenStateChange

واكتب الكود التالى

كود :
Private Sub wmp1_OpenStateChange(ByVal sender As Object, ByVal

e As AxWMPLib._WMPOCXEvents_OpenStateChangeEvent) Handles

wmp1.OpenStateChange
If wmp1.openState = WMPLib.WMPOpenState.wmposMediaOpen

Then


lname.Text = wmp1.currentMedia.name
tposition.Maximum = wmp1.currentMedia.duration
''''''''''''''''''''''''''

lduration.Text = wmp1.currentMedia.duration





End If

End Sub
هنا احنا قولناله لو حالة فتح الملف هى ان الملف اتفتح خلاص
اعرضلى اسم الاغنية ومدتها
وخلى اعلى قيمة فى شريط التحكم بالاغنية تشاوى مدة الاغنية
عشان المستخدم ما يقدمش لاكتر من طول الاغنية

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

كود :
Private Sub wmp1_OpenStateChange(ByVal sender As Object, ByVal

e As AxWMPLib._WMPOCXEvents_OpenStateChangeEvent) Handles

wmp1.OpenStateChange
If wmp1.openState = WMPLib.WMPOpenState.wmposMediaOpen

Then


lname.Text = wmp1.currentMedia.name
tposition.Maximum = wmp1.currentMedia.duration
''''''''''''''''''''''''''
Dim iduration As Integer =

wmp1.currentMedia.duration
If iduration < 60 Then
lduration.Text = "00:" & iduration
Else
lduration.Text = iduration \ 60 & ":" &

iduration Mod 60
End If
'''''''''''''''''



End If

End Sub
وهنا قولتله لو المدة اقل من 60 ثانيه اعرضها على طول
ولو اكتر اقسم على 60 واعرض ناتج القسم بجانب باقى القسمة
واستخدمت متغير من النوع انتيجر للتخلص من الملليثانية
لان بعض الاغانى تكون 5دقائق مثلا و 2 مللى ثانية


وفى التايمر اكتب الكود التالى

كود :
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles Timer1.Tick
positionbar.Value = wmp1.Ctlcontrols.currentPosition
Dim iposition As Integer =

wmp1.Ctlcontrols.currentPosition
If iposition < 60 Then
lposition.Text = "00:" & iposition
Else
lposition.Text = iposition \ 60 & ":" & iposition

Mod 60
End If
End Sub
وهنا عرفناه ان كل ثانية مكان الاغنية بيتغير على شريط تقدم الاغنية

وفى النص الذى يعرض تقدم الاغنية لو اقل من 60 ثانية
الخ الخ الخ
كما فعلنا بالسابق مع مدة الاغنية

==========================================

فى النهاية يجب ان انوه انك اذا اردت توزيع برنامجك
على اصدقائك يجب ان تضمن الملفات الاتية لتضمن عمله
بدون مشاكل

wmp.dll
AxInterop.WMPLib.dll
Interop.WMPLib.dll

واذا كنت تعرف عمل تسطيب لبرنامجك فلا تقلق لانك يمكنك
تضمين الملفات مع برنامجك بكل بساطة

===============================
ملحوظه
تم ارفاق المشروع لسهولة الفهم
وتم ارفاقه مرة اخرى بالشكل التالى





ومعلش الزراير كان المفروض تتظبط احسن من كده
بس انا عملته على السريع


====================================

كلمة أخيرة


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

هناك طرق اخرى مثل
استخدام دوال الـ API
استخدام مكتبات الدايركت اكس
وغيرها وغيرها

فمن يريد تكملة الدرس وكتابة طرق جديده
فأهلا وسهلا به


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

هذا اول موضوع لى فى المنتدى
اتمنى ان تقبلونى عضوا بينكم

اتمنى ان يكون الموضوع مفيد
واتمنى ان اكون وفقت فى الشرح
وتكون بداية خير ان شاء الله

وانتظر ارائكم البناءة
وملاحظاتكم واستفساراتكم واقتراحاتكم

لتنزيل الكود اضغط الرابط التالى
http://www.4shared.com/file/29463167...P3_PLAYER.html

والى اللقاء فى موضوع جديد ان شاء الله

هشام حسن


التعامل مع الملفات الصوتية ........دردشة برمجية - مبرمج بلا حدود - 12-07-13

الله يجعله في موازين حسناتك
اللهم امين

للاسف الملف محذوف ممكن احد من الي قامو بتنزيلة يرفعونه وياريت على سيرفر المنتدى
رعاكم الله


RE: التعامل مع الملفات الصوتية ........دردشة برمجية - spordo - 16-11-14

شكرا جزيلا
ساعدتني كثير بمشروعي حتى فهمت منك طرق استخدام الادوات


RE: التعامل مع الملفات الصوتية ........دردشة برمجية - sniperjawadino - 19-12-14

عمل متعوب عليه كثيير
جزاك الله خير


RE: التعامل مع الملفات الصوتية ........دردشة برمجية - sayed fox - 26-12-16

من فضلك جدد رابط الملف
وشكراً


RE: التعامل مع الملفات الصوتية ........دردشة برمجية - ahmed4240 - 28-11-17

بسم الله الرحمن الرحيم
الحمد لله والصلاة والسلام على رسول الله صلى الله عليه وسلم
وبعد
جزاك الله كل غير ، حفظت الصفحة عندي ، ثم فقدتها ، وبحثت في النت ، فكانت صفحتك اشمل في لم الموضوع كله ، والحمد لله ان عثرت عليها مرة اخرى ، فجزاك الله خيرا