none
[VB.NET][WPF] Gérer l'audio avec 'MediaPlayer' RRS feed

  • Question

  • Bonjour,

    Pour pouvoir utiliser le mp3 dans mon application j'ai décidé d'utiliser 'MediaPlayer'
    Voici comment, basiquement, je l'utilise:

     

    Dim backMusic as New MediaPlayer
    backMusic.Open(New Uri("sbgm0005.mp3", UriKind.Relative))
    backMusic.Volume = 0.1
    backMusic.Play()
    

     

    Et voici ma question:

    Comment puis-je faire pour gérer l’arrêt de la chanson?
    J'ai vu qu'il existait un évènement: 'MediaEnded', censé gérer la fin de la chanson...mais je ne vois pas comment le mettre en oeuvre (je suis...débutant ;-))

    Commenr donc puis je utiliser un handler pour détecter la fin de la chanson?

    D'avance merci pour toute aide que vous pourriez m'apporter!!


    • Modifié jmdeb mardi 17 janvier 2012 12:54
    mardi 17 janvier 2012 12:52

Réponses

  • Bonjour,

    Voir l'instruction AddHandler : http://msdn.microsoft.com/fr-fr/library/7taxzxka(v=vs.80).aspx

    Ici cela pourrait donner qq chose comme :

    AddHandler mp.MediaEnded, AddressOf MediaEnded
    

    avec :

      Private Sub MediaEnded(sender As Object, e As System.EventArgs)
            Dim p As MediaPlayer = CType(sender, MediaPlayer)
            ' Faire qq chose...
        End Sub
    

    Sender est l'objet qui est la source de l'évènement. On peut donc l'exploiter pour récupérer l'objet concerné. Le deuxième paramètre fournit éventuellement des informations supplémentaires selon l'évènement dont il s'agit.

    Le contrôle peut aussi être présent dans le code XAML et le gestionnaire d'évènement peut être attaché au controle directement la cluse Handles :

     Private Sub mp_MediaEnded(sender As Object, e As System.EventArgs) Handles mp.MediaEnded
    
        End Sub
    

    cette procédure vide étant générée automatiquement quand on sélectionne le contrôle dans la liste de gauche et l'évènement dans la liste de droite (ces listes sont celles qui se trouvent au dessus de la fenêtre code behind, elle liste les contrôles d'un côté et les évènements du contrôle sélectionné de l'autre).

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse jmdeb mardi 17 janvier 2012 23:15
    mardi 17 janvier 2012 17:10
    Modérateur
  • Merci Patrice pour cette réponse très complète!

    Pour tous ceux qui auront besoin de l'information, voici donc un exemple de code pour utiliser 'MediaPlayer' et notamment pour gérer la fin de lecture (avec dans le cas repris ici une répétition en boucle du fichier audio):

    Class MainWindow 
        Dim backMusic As New MediaPlayer
        Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
            AddHandler backMusic.MediaEnded, AddressOf backMusic_MediaEnded
            backMusic.Open(New Uri("sbgm0005.wav", UriKind.Relative))
            backMusic.Volume = 1
            backMusic.Play()
        End Sub
        Private Sub backMusic_MediaEnded(ByVal sender As Object, ByVal e As EventArgs)
            sender.Stop()
            sender.Position = TimeSpan.FromSeconds(0)
            sender.Play()
        End Sub
    End Class
    • Modifié jmdeb mardi 17 janvier 2012 23:13
    • Marqué comme réponse jmdeb mardi 17 janvier 2012 23:14
    mardi 17 janvier 2012 23:10

Toutes les réponses

  • Bonjour,

    Voir l'instruction AddHandler : http://msdn.microsoft.com/fr-fr/library/7taxzxka(v=vs.80).aspx

    Ici cela pourrait donner qq chose comme :

    AddHandler mp.MediaEnded, AddressOf MediaEnded
    

    avec :

      Private Sub MediaEnded(sender As Object, e As System.EventArgs)
            Dim p As MediaPlayer = CType(sender, MediaPlayer)
            ' Faire qq chose...
        End Sub
    

    Sender est l'objet qui est la source de l'évènement. On peut donc l'exploiter pour récupérer l'objet concerné. Le deuxième paramètre fournit éventuellement des informations supplémentaires selon l'évènement dont il s'agit.

    Le contrôle peut aussi être présent dans le code XAML et le gestionnaire d'évènement peut être attaché au controle directement la cluse Handles :

     Private Sub mp_MediaEnded(sender As Object, e As System.EventArgs) Handles mp.MediaEnded
    
        End Sub
    

    cette procédure vide étant générée automatiquement quand on sélectionne le contrôle dans la liste de gauche et l'évènement dans la liste de droite (ces listes sont celles qui se trouvent au dessus de la fenêtre code behind, elle liste les contrôles d'un côté et les évènements du contrôle sélectionné de l'autre).

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse jmdeb mardi 17 janvier 2012 23:15
    mardi 17 janvier 2012 17:10
    Modérateur
  • Merci Patrice pour cette réponse très complète!

    Pour tous ceux qui auront besoin de l'information, voici donc un exemple de code pour utiliser 'MediaPlayer' et notamment pour gérer la fin de lecture (avec dans le cas repris ici une répétition en boucle du fichier audio):

    Class MainWindow 
        Dim backMusic As New MediaPlayer
        Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
            AddHandler backMusic.MediaEnded, AddressOf backMusic_MediaEnded
            backMusic.Open(New Uri("sbgm0005.wav", UriKind.Relative))
            backMusic.Volume = 1
            backMusic.Play()
        End Sub
        Private Sub backMusic_MediaEnded(ByVal sender As Object, ByVal e As EventArgs)
            sender.Stop()
            sender.Position = TimeSpan.FromSeconds(0)
            sender.Play()
        End Sub
    End Class
    • Modifié jmdeb mardi 17 janvier 2012 23:13
    • Marqué comme réponse jmdeb mardi 17 janvier 2012 23:14
    mardi 17 janvier 2012 23:10