كود مشغل mp3 , wav , avi , asf , mdi ,wmv - m.sami.ak - 15-09-12
بسم الله الرحمن الرحيم
ملاحظة: الموضوع منقول من المنتدى القديم
وهو للأخ عبدالله الدوسري
لتشغيل ملفات الصوت بشكل بسيط ، يمكن كتابة هذين السطرين
كود :
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button11.Click
mciSendString("open C:\Hadeia.mp3 type mpegvideo alias thissong", 0, 0, 0)
mciSendString("play thissong", 0, 0, 0)
End Sub
لتشغيل ملفات الصوت بشكل اكثر تحكم اضف هذا الكلاس BasicMciPlayer الى مشروعك
واكتب هذا الكود لشغيل الصوت
كود :
Static Mp3Player As New BasicMciPlayer
Mp3Player.Play("C:\Hadeia.mp3", False)
كلاس BasicMciPlayer
كود :
Public Class BasicMciPlayer
' لتشغيل ملفات MP3 , WAV , MID , WMA , ASF , AVI ,
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
Private Declare Function mciGetErrorString Lib "winmm.dll" Alias "mciGetErrorStringA" (ByVal dwError As Integer, ByVal lpstrBuffer As String, ByVal uLength As Integer) As Integer
Public Event MediaOpened(ByVal sender As System.Object, ByVal e As System.EventArgs)
Public Event MediaClosed(ByVal sender As System.Object, ByVal e As System.EventArgs)
Private Shared ObjectCount As Integer = 0
Private retVal As Integer = 0
Private returnData As String = Space(128)
Private errorString As String = Space(128)
Private errorSuccess As Boolean
'
Sub New()
ObjectCount = ObjectCount + 1
mFileAlias = "SND" & Hex(Now.Ticks) & Hex(ObjectCount)
End Sub
Sub New(ByVal pFileName As String)
Me.New()
Me.FileName = pFileName
End Sub
Private mFileAlias As String
ReadOnly Property FileAlias() As String
Get
Return mFileAlias
End Get
End Property
Private mFileName As String
Property FileName() As String
Get
Return mFileName
End Get
Set(ByVal value As String)
Me.Stop()
Me.close()
mFileName = value
End Set
End Property
Private mLength As Long = 0
Public ReadOnly Property Length() As Long
Get
Return mLength
End Get
End Property
Public Property Position() As Long
Get
retVal = mciSendString("status " & Me.FileAlias & " position", returnData, 128, 0)
Return Val(returnData)
End Get
Set(ByVal value As Long)
If Me.IsPlaying() Then
retVal = mciSendString("play " & Me.FileAlias & " from " & value.ToString, 0, 0, 0)
Else
retVal = mciSendString("seek " & Me.FileAlias & " to " & value.ToString, 0, 0, 0)
End If
End Set
End Property
Public ReadOnly Property IsPlaying() As Boolean
Get
retVal = mciSendString("status " & Me.FileAlias & " mode", returnData, 128, 0)
Return returnData.StartsWith("playing")
End Get
End Property
Private mVolume As Byte = 100
Public Property volume() As Byte
Get
Return mVolume
End Get
Set(ByVal value As Byte)
If value > 100 Then
value = 100
End If
mVolume = value
Dim vol As Integer = (Me.volume * 10)
retVal = mciSendString("setaudio " & Me.FileAlias & " volume to " & vol.ToString, 0, 0, 0)
End Set
End Property
Private mIsOpen As Boolean = False
Sub open(ByVal sFileName As String)
Me.FileName = sFileName
Me.open()
End Sub
Public ScreenHandel As Int32 = 0
Sub open()
Me.close()
If ScreenHandel <= 0 Then
retVal = mciSendString("open """ & Me.FileName & """ type mpegvideo alias " & Me.FileAlias, 0, 0, 0)
Else
retVal = mciSendString("open """ & Me.FileName & """ type mpegvideo alias " & Me.FileAlias & " parent " & ScreenHandel.ToString & " style " & "child" & " ", 0, 0, 0)
End If
retVal = mciSendString("set " & Me.FileAlias & " time format ms", 0, 0, 0)
'Get the length of the currently opened song in milli-seconds.
retVal = mciSendString("status " & Me.FileAlias & " length", returnData, 128, 0)
mLength = Val(returnData)
mIsOpen = True
Me.volume = Me.volume
RaiseEvent MediaOpened(Me, New System.EventArgs)
End Sub
Sub Play(Optional ByVal repate As Boolean = False)
If repate = True Then
Me.Play("repeat")
Else
Play("")
End If
End Sub
Sub Play(ByVal pFileName As String, ByVal pRepate As Boolean)
Me.FileName = pFileName
Me.Play(pRepate)
End Sub
Sub Play(ByVal pCommand As String)
Dim Cmd As String = "play " & Me.FileAlias & " " & pCommand
If mIsOpen = False Then
Me.close()
Me.open()
End If
retVal = mciSendString(Cmd, 0, 0, 0)
End Sub
Sub Pause()
retVal = mciSendString("pause " & Me.FileAlias, 0, 0, 0)
End Sub
Sub [resume]()
retVal = mciSendString("resume " & Me.FileAlias, 0, 0, 0)
End Sub
Sub [Stop]()
retVal = mciSendString("stop " & Me.FileAlias, 0, 0, 0)
End Sub
Sub close()
Me.Stop()
retVal = mciSendString("close " & Me.FileAlias, 0, 0, 0)
'----------------------------------
If mIsOpen = True Then
RaiseEvent MediaClosed(Me, New System.EventArgs)
End If
'----------------------------------
mIsOpen = False
mLength = 0
'--------------------------------------
End Sub
Protected Overrides Sub Finalize()
Me.close()
MyBase.Finalize()
End Sub
End Class
كود مشغل mp3 , wav , avi , asf , mdi ,wmv - m.sami.ak - 15-09-12
أحب أن أذكر أن هذا الكود يستخدم مكتبات winmm.dll موجودة في جميع إصدارات الويندوز
إبتدائاً من ويندوز 95 حتى فيستا
على حسب ما قرأة من الإنترنت
بعض الملاحظات البسيطة لتتعرف على الكود
سأتكلم عن الكلاس BasicMciPlayer
هذا الكلاس يستخدم مكتبات winmm.dll
وهي بدورها تقوم بتشغيل ملفات MP3 , WAV , MID , WMA , ASF , AVI
بالإضافة إلى إمكانيتها لتشغيل ملفات الفيديو المعروفة
قمت بعمل هذا الكلاس طبعاً بعد البحث في الإنترنت عن كيفية تشغيل ملفات الصوت بدون الحاجة لعمل رفرنس أو إضافة ملفات Dll بشكل مباشر بالمشروع
طريقة التعامل مع هذة المكتبة هي بالمراسلة النصية
يعني لو أردت تشغيل ملف صوتي الرسالة ستكون عبارة عن نص من نوع String
سيتم إرسالة إلى المكتبة winmm.dll وهي بدورها تحلل النص وتتعامل معة بطريقتها الخاصة
وبإمكانها أيضاً الرد عليك برسالة نصية
حيث بإمكانك إرسال متغير من نوع String والرد الذي سيأتي سيتم تعبأته في هذا المتغير
يعني بإمكانك السؤال عن الكائن الصوتي الموجود في الذاكرة طبعاً يتم التعرف علية بالإسم المستعار الذي أخذة الكائن عند إنشائة ,, يمكنك السؤال عن حالتة هل هو يعمل الآن ,, كم طول المدة الصوتية ,, (ما هو الموقع الحالي للقرائة الصوتية - تنفع لعمل شريط يبين التقدم )
كلمة الكائن وهي تعني الكلاس BasicMciPlayer الذي وضعتة في هذا الموضوع
في الشرح إذا قراءة Player فهو يعني الكلاس BasicMciPlayer
بعظ التلميحات على الأكواد
1 - الخاصية FileAlias()
وهي لإعطاء إسم مستعار سيتم تخزينة في الذاكرة للملف الصوتي المراد تشغيلة
بحيث لا يمكنك تغيرة لذلك تم وضعة للقراءة فقط
المكتبة winmm.dll لا يمكنها التعرف على هذا الكائن إلى عن طريقة إسمه المستعار
ويتم إعطاء الإسم المستعار في الحدث New الخاص بالكلاس
كود :
ReadOnly Property FileAlias() As String
Get
Return mFileAlias
End Get
End Property
إذا أردت إنشاء كائن واحد فقط لتقوم بتشغيل الأصوات عن طريقة
فيجب أن تعلم أن هذا الكائن لا يشغل إلى ملف صوتي واحد فقط في نفس الوقت
**(لتشغيل أكثر من ملف صوتي في نفس الوقت تابع الشرح)**
مثال :
كود :
'- إنشاء الكائن لمرة واحدة
Dim MyPlayer As New BasicMciPlayer
'- إستخدام الكائن لتشغيل ملف صوتي
MyPlayer.FileName = "C:\Music.mp3"
MyPlayer.Play()
'- إستخدام نفس الكائن لتشغيل ملف صوتي آخر
MyPlayer.FileName = "C:\Music.mid"
MyPlayer.Play()
'- إستخدام نفس الكائن لتشغيل ملف صوتي آخر
MyPlayer.FileName = "C:\Music.wav"
MyPlayer.Play()
لاحظ هنا عند تعديل إسم الملف MyPlayer.FileName
يتم إستدعاء الأمر Stop() ثم close()
أي فقط بمجرد تغييرك لأسم الملف يتم إيقاف تشغيل الصوت
close لاتعني إغلاق الكائن بل هي فقط لإرسالة رسالة للمكتبة winmm.dll لتقوم بإغلاق أي شيئ يخص الإسم المستعار
لاحظ الخاصية FileName
كود :
Property FileName() As String
Get
Return mFileName
End Get
Set(ByVal value As String)
Me.Stop()
Me.close()
mFileName = value
End Set
End Property
إذا أردت أت تشغل أكثر من صوت في نفس الوقت فيجب إنشاء كائن جديد لكل صوت تريد تشغيلة لأن كل كائن سيأخذ إسم مستعار يختلف عن أي كائن آخر
مثال :
هنا تم إنشاء كائن جديد لكل ملف صوتي نريد أن نشغلة
هنا ستسمع ثلاث ملفات صوتية في نفس الوقت
كود :
'- إنشاء كائن لتشغيل ملف صوتي
Dim MyPlayer00 As New BasicMciPlayer
MyPlayer00.FileName = "C:\Music.mp3"
MyPlayer00.Play()
'- إنشاء كائن جديد لتشغيل ملف صوتي آخر في نفس الوقت
Dim MyPlayer11 As New BasicMciPlayer
MyPlayer11.FileName = "C:\Music.mid"
MyPlayer11.Play()
'- إنشاء كائن جديد لتشغيل ملف صوتي آخر في نفس الوقت
Dim MyPlayer22 As New BasicMciPlayer
MyPlayer22.FileName = "C:\Music.wav"
MyPlayer22.Play()
الآن ثلاث ملفات صوتية تعمل في نفس الوقت
لإيقاف الصوت يجب إستدعاء أمر التوقف من الكائن نفسه الذي يشغل الصوت
كود :
MyPlayer00.Stop()
MyPlayer11.Stop()
MyPlayer22.Stop()
بإمكانك تحديد مستوى الصوت لكل كائن
طبعاً زي ما أنتوا عارفين مستوى الصوت من 0 إلى 100
كود :
MyPlayer00.volume = 10
MyPlayer11.volume = 50
MyPlayer22.volume = 100
بإمكانك معرفة حالة التشغيل الخاصة بالملف الصوتي إذا كان قيد التشغيل أم لا
عن طريق الخاصية
MyPlayer.IsPlaying
القية التي سترجع هي True أو False
كود :
If MyPlayer.IsPlaying Then
إذا تحقق الشرط
افعل أي شيئ هنا
End If
بإمكانك معرفة طول مدة الصوت من الخاصية Player.Length
وهي ترجع قيمة عددية تعبر عن طول مدة الصوت
وهي تحسب بالــ milli-seconds ملي ثانية
والـثانية الواحدة = 1000 milli-seconds
والحسبة عليك
أيضاً بإمكانك توقيف الملف الموسيقي مؤقتاً ثم المتابعة
عن طريق الأوامر
كود :
للتوقف مؤقتاً
Player.Pause()
للمتابعة
Player.resume()
أترك الباقي لكم ,,
كود مشغل mp3 , wav , avi , asf , mdi ,wmv - abdala - 24-10-12
شكرا على الكود المميز
كود مشغل mp3 , wav , avi , asf , mdi ,wmv - محترف البرمجة اوي - 25-10-12
شكراً عزيزي على الموضوع
بس اعتقد نحتاج تضع لنا مثال حتى يكون الموضوع شامل
ويكون الموضوع لجميع المستويات للمبتدئين مثلي والمتوسطين والمحترفين
انا اشاهد نوع avi وهذا النوع لعرض ملف الفيديو ما الاداة التي نضعها لعرض ملف الفيديو لو حبينا عرض الفيديو
ضع لنا مثال لو سمحت
أو اقل شي طبق لنا عمل المثال هنا بالموضوع قول نضع زر كذا ثم نضع فيه الكود التالي ثم نغير الخصائص إلى كذا
مع وضع صور للشرح حتى اعرف كيف اطبق عمل المشروع بارك لله فيك :confused:
كود مشغل mp3 , wav , avi , asf , mdi ,wmv - 3amo - 15-02-13
شكرا على الكود المميز
وجزاك الله خيرا
كود مشغل mp3 , wav , avi , asf , mdi ,wmv - سامى ابوسريع - 01-04-13
جزاك الله خيرا
كود مشغل mp3 , wav , avi , asf , mdi ,wmv - shaker.soft - 25-05-13
شكرا .............
|