تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كود مشغل mp3 , wav , avi , asf , mdi ,wmv
#1
بسم الله الرحمن الرحيم

ملاحظة:
الموضوع منقول من المنتدى القديم
وهو للأخ عبدالله الدوسري



لتشغيل ملفات الصوت بشكل بسيط ، يمكن كتابة هذين السطرين
كود :
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

الرد }}}
تم الشكر بواسطة:
#2
أحب أن أذكر أن هذا الكود يستخدم مكتبات 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()



أترك الباقي لكم ,,
الرد }}}
تم الشكر بواسطة:
#3
شكرا على الكود المميز
الرد }}}
تم الشكر بواسطة:
#4
شكراً عزيزي على الموضوع

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



ضع لنا مثال لو سمحت

أو اقل شي طبق لنا عمل المثال هنا بالموضوع قول نضع زر كذا ثم نضع فيه الكود التالي ثم نغير الخصائص إلى كذا
مع وضع صور للشرح حتى اعرف كيف اطبق عمل المشروع بارك لله فيك :confused:
الرد }}}
تم الشكر بواسطة:
#5
شكرا على الكود المميز
وجزاك الله خيرا
الرد }}}
تم الشكر بواسطة:
#6
جزاك الله خيرا
الرد }}}
تم الشكر بواسطة:
#7
شكرا .............
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [درس فيديو] اضافة ملف مشغل لصفحة html و جافاسكريبت و سي اس اس بفيجوال بيسك.(قد لا اكون اصبت بالتع سعود 1 917 17-04-23, 08:31 AM
آخر رد: سعود
  شرح برمجة مشغل افلام flv على الجهاز سعود 2 3,215 11-10-12, 10:41 AM
آخر رد: m.sami.ak

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


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