none
Bug avec un timer et un media player RRS feed

  • Question

  • Bonjour,

    Je développe actuellement un lecteur de médias mais quand je veux lire une musique ou une vidéo, ça relance cette musique/vidéo en boucle, j'ai tenté de modifier l'interval du timer qui change la trackbar et indique le temps actuel où en est la musique/vidéo (toutes les 100 m/s) et j'ai remarqué que le lecteur fonctionnait. J'en ai conclus qu'il y a un bug avec le timer mais j'ai tout essayé (via mes connaissances) et je ne vois toujours pas où le bug se trouve exactement...

    Ex: le lecteur se relance au début toutes les 100 m/s quand le timer a une intervalle de 100 m/s

    Code du timer:

    Private Sub PlayingTimer_Tick(sender As Object, e As EventArgs) Handles PlayingTimer.Tick
            'BUG QUELQUE PART DANS LE TIMER
    
    
            If Not MediaPlayer1.URL = Nothing Then
                'Tmp total de la chanson
                TotalTimeLbl.Text = MediaPlayer1.currentMedia.durationString
                'Initialisation de la barre de temps
                MediaSlider1.Minimum = "0"
                MediaSlider1.Value = MediaSlider1.Minimum
                MediaSlider1.Maximum = MediaPlayer1.Ctlcontrols.currentItem.duration
                'Mise à jour de la barre de temps et du tmp actuel
                MediaSlider1.Value = CInt(MediaPlayer1.Ctlcontrols.currentPosition)
                CurrentTimeLbl.Text = MediaPlayer1.Ctlcontrols.currentPositionString
            End If
            If TrackLikeStatus = "Undeterminate" Then
                LikeBtn.Image = My.Resources.undefinied_like
            ElseIf TrackLikeStatus = "Liked" Then
                LikeBtn.Image = My.Resources.liked
            ElseIf TrackLikeStatus = "Unliked" Then
                LikeBtn.Image = My.Resources.unliked
            End If
            If LikedTracksList.Items.Contains(TrackTitleLbl.Text) Then
                'Chanson likée
                TrackLikeStatus = "Liked"
            ElseIf UnlikedTracksList.Items.Contains(TrackTitleLbl.Text) Then
                'Chanson non likée
                TrackLikeStatus = "Unliked"
            Else
                'Chanson sans like
                TrackLikeStatus = "Undeterminate"
            End If
        End Sub

    Voilà, si quelqu'un sait d'où vient le bug, ça m'aiderait vraiment beaucoup !

    Merci d'avance,

    Cordialement,

    Basilic Apps


    Basilic Apps, Anschaire Pérard

    mardi 1 juillet 2014 17:06

Réponses

  • J'ai finalement trouvé le bug, il ne s'agissait pas vraiment du timer, donc j'ai laissé ce morceau de code dans le timer pour le mediaslider

    MediaSlider1.Value = CInt(MediaPlayer1.Ctlcontrols.currentPosition)

    Mais le bug venait du MediaSlider, en fait, l'évènement dans le code que j'utilisais était MediaSlider1_ValueChanged, donc à chaque fois que la valeur change, il remet le média à tel minute et seconde d'où les bugs de lecture des médias.

    J'ai changé de place ce morceau de code qui était dans cet évènement pour le mettre ici:

    Private Sub MediaSlider1_Scrolled(sender As Object, e As EventArgs) Handles MediaSlider1.Scrolled
            MediaPlayer1.Ctlcontrols.currentPosition = CInt(MediaSlider1.Value)
        End Sub

    Le contrôle MediaSlider est un contrôle personnalisé, non une TrackBar, c'est pour cela que l'évènement ici est Scrolled.

    Merci de votre aide, elle m'a quand même été utile pour m'aider à résoudre ce problème, donc un grand merci à Aurel Bera.

    Cordialement,

    Basilic Apps


    Basilic Apps, Anschaire Pérard

    • Marqué comme réponse Basilic Apps jeudi 3 juillet 2014 09:48
    jeudi 3 juillet 2014 09:48

Toutes les réponses

  • Bonjour

    Vous êtes en WPF ou en VB Classique?
    Le media Player  c'est le contrôle  WPF ou l'ActiveX ?

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 2 juillet 2014 07:32
  • J'utilise le VB.NET classique, le Media Player est un contrôle ActiveX (AxWindowsMediaPlayer).

    Cordialement,

    Basilic Apps


    Basilic Apps, Anschaire Pérard

    mercredi 2 juillet 2014 09:21
  • Dans ce cas je dirais d'essayer de spécifier dans la config du votre MediaPLayer de ne pas louper :

    MediaPlayer1.settings.setMode("loop", false)

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 2 juillet 2014 10:03
  • J'ai modifié cette option mais rien ne change, toujours le même problème.

    Mais la seule modification qui change quelque chose pour l'instant c'est l'interval du timer (par défaut: 100) mais du coup je n'ai pas les informations sur où en est l'avancement de la musique et aussi l'emplacement sur la trackbar (ici: mediaslider).

    Avez-vous une autre proposition ?

    Cordialement,

    Basilic Apps


    Basilic Apps, Anschaire Pérard

    mercredi 2 juillet 2014 10:48
  • J'ai trouvé d'où vient le bug, je vais tenter de le résoudre en attendant votre réponse

    J'ai changé de place le code suivant (je l'ai mis dans la détection du changement de 'playstate' évènement du mediaplayer1:

    MediaSlider1.Value = 0

    Voici le morceau de code qui ne fonctionne pas et fais bugger tout le lecteur:

    MediaSlider1.Value = CInt(MediaPlayer1.Ctlcontrols.currentPosition)

    Avez-vous une solution à proposer ?

    Merci d'avance.

    Cordialement,

    Basilic Apps


    Basilic Apps, Anschaire Pérard

    mercredi 2 juillet 2014 11:07
  • Je n'arrête pas de répondre mais, j'ai encore une nouvelle constatation:

    En modifiant l'interval du timer sur 1000 (soit 1s), tout re-fonctionne à une exception, la musique est coupé rapidement toutes les secondes, ce qui marque le fonctionnement du timer...

    J'ai retiré ce bout de code et je l'ai inclus ailleurs pour donner moins d'actions au timer mais rien ne change:

    If TrackLikeStatus = "Undeterminate" Then
                LikeBtn.Image = My.Resources.undefinied_like
            ElseIf TrackLikeStatus = "Liked" Then
                LikeBtn.Image = My.Resources.liked
            ElseIf TrackLikeStatus = "Unliked" Then
                LikeBtn.Image = My.Resources.unliked
            End If
            If LikedTracksList.Items.Contains(TrackTitleLbl.Text) Then
                'Chanson likée
                TrackLikeStatus = "Liked"
            ElseIf UnlikedTracksList.Items.Contains(TrackTitleLbl.Text) Then
                'Chanson non likée
                TrackLikeStatus = "Unliked"
            Else
                'Chanson sans like
                TrackLikeStatus = "Undeterminate"
            End If

    Voilà encore en plus, si cela peut vous aider à trouver une solution...

    Merci d'avance

    Cordialement,

    Basilic Apps


    Basilic Apps, Anschaire Pérard

    mercredi 2 juillet 2014 11:46
  • Si vous essayez de faire

    MediaSlider1.Value +=  IntervalTimer?


    Je soupçonne qu’essayer d’interroger le currentPosition produit le problème.
    Pouvez-vous partager avec nous un petit projet de teste ?

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 2 juillet 2014 13:29
  • J'ai finalement trouvé le bug, il ne s'agissait pas vraiment du timer, donc j'ai laissé ce morceau de code dans le timer pour le mediaslider

    MediaSlider1.Value = CInt(MediaPlayer1.Ctlcontrols.currentPosition)

    Mais le bug venait du MediaSlider, en fait, l'évènement dans le code que j'utilisais était MediaSlider1_ValueChanged, donc à chaque fois que la valeur change, il remet le média à tel minute et seconde d'où les bugs de lecture des médias.

    J'ai changé de place ce morceau de code qui était dans cet évènement pour le mettre ici:

    Private Sub MediaSlider1_Scrolled(sender As Object, e As EventArgs) Handles MediaSlider1.Scrolled
            MediaPlayer1.Ctlcontrols.currentPosition = CInt(MediaSlider1.Value)
        End Sub

    Le contrôle MediaSlider est un contrôle personnalisé, non une TrackBar, c'est pour cela que l'évènement ici est Scrolled.

    Merci de votre aide, elle m'a quand même été utile pour m'aider à résoudre ce problème, donc un grand merci à Aurel Bera.

    Cordialement,

    Basilic Apps


    Basilic Apps, Anschaire Pérard

    • Marqué comme réponse Basilic Apps jeudi 3 juillet 2014 09:48
    jeudi 3 juillet 2014 09:48