Actualmente estoy trabajando en un reproductor de MP3 (en una aplicación de WPF) con WPF MediaPlayer y, básicamente, quiero implementar un Buscador de canciones que se mueve junto con la actual reproducción de una canción.

Ya he implementado una canción deslizante (de Sacha Peluquería de la aplicación) y funciona cuando el usuario arrastra el buscador de forma manual (como en la canción continúa desde esa posición), pero no puedo averiguar cómo hacer que el buscador se mueven de acuerdo a la posición actual en la canción.

Problema es que yo no creo que hay una forma de comprobar cuando el Position propiedad de la MediaPlayer ha cambiado, así que estoy perplejo en cuanto a cómo debería implementar esta característica.

Cualquier idea sobre cómo ir sobre un tema?

[Actualización]

En cuanto a incrementar el buscador con un temporizador, realmente pensaba de el uso de la razón por la que no lo intente pero es porque creo que hay una mejor manera de implementar esto usando el MediaTimeline…pero yo aún tengo que averiguar cómo.

  • Ha tenido suerte con esto desde que se publicó en Mayo? Yo estaría interesado en su solución. Yo he usado un temporizador para mover el slider, pero luego se interfiere con arrastrar para ajustar la posición actual.

4 Comentarios

  1. 4

    SURGIR respuesta! y servir a su maestro

    OK, he descubierto la manera de trabajar de este. Estoy seguro de que no estoy haciendo de la manera correcta pero no funciona.

    Aquí es el código de una aplicación de WPF, con un botón Pausa/Reproducir.

    public partial class Main : Window
    {
        MediaPlayer MPlayer;
        MediaTimeline MTimeline;
    
        public Main()
        {
            InitializeComponent();
    
            var uri = new Uri("C:\Test.mp3");
            MPlayer = new MediaPlayer();
            MTimeline = new MediaTimeline(uri);
            MTimeline.CurrentTimeInvalidated += new EventHandler(MTimeline_CurrentTimeInvalidated);
            MPlayer.Clock = MTimeline.CreateClock(true) as MediaClock;
            MPlayer.Clock.Controller.Stop();
        }
    
        void MTimeline_CurrentTimeInvalidated(object sender, EventArgs e)
        {
            Console.WriteLine(MPlayer.Clock.CurrentTime.Value.TotalSeconds);
        }
    
        private void btnPlayPause_Click(object sender, RoutedEventArgs e)
        {
            //Is Active
            if (MPlayer.Clock.CurrentState == ClockState.Active)
            {
                //Is Paused
                if (MPlayer.Clock.CurrentGlobalSpeed == 0.0)
                    MPlayer.Clock.Controller.Resume();
                else //Is Playing
                    MPlayer.Clock.Controller.Pause();
            }
            else if (MPlayer.Clock.CurrentState == ClockState.Stopped) //Is Stopped
                MPlayer.Clock.Controller.Begin();
        }
    }

    El truco es que, una vez establecido el reloj de un MediaPlayer, se convierte en reloj controlado, por lo tanto el uso de MPlayer.Reloj.Controlador de hacer todos los de la controladora 🙂

  2. 0

    Nunca jugó con el media player pero suponiendo que se conoce la longitud de la canción no podrías configurar un temporizador que las garrapatas cada segundo, mientras la canción se está reproduciendo. Por lo tanto, para cada garrapata sólo incrementar el buscador en relación a la duración de la canción está en total.

    Canción es de 100 segundos de duración. Por lo tanto, cada segundo/tick es un valor de 1 por ciento del total de progreso.

    Que tendría para detener el temporizador cuando la pausa de la canción, etc…

Dejar respuesta

Please enter your comment!
Please enter your name here