Domanda

Attualmente sto lavorando su un lettore MP3 (in un'applicazione WPF) con un WPF MediaPlayer e in fondo, voglio realizzare un Cercatore canzone che si muove lungo con il brano in riproduzione.

Ho già implementato un cursore brano (da applicazione Sacha Barber) e funziona quando l'utente trascina il cercatore manualmente (come in, la canzone continua da quella posizione) ma non riesco a capire come far muovere richiedente secondo alla posizione corrente nella canzone.

Il problema è che non credo che ci sia un modo per verificare se il Position proprietà della MediaTimeline è cambiato, quindi sono perplesso su come avrei dovuto implementare questa funzione.

Tutte le idee su come andare su un tale problema?

[Aggiornamento]

Per quanto riguarda l'incremento del ricercatore con un timer, in realtà ho pensato di usare la ragione per cui non ho provato ancora è perché penso che ci sia un modo migliore per implementare questo utilizzando il <=> ... ma sono ancora da capire come.

È stato utile?

Soluzione

ARISE risposta! e servire il vostro padrone

OK, ho capito come funziona in questo. Sono sicuro che non sto facendo nel modo del tutto corretto, ma funziona.

Ecco il code-behind di un'applicazione WPF, con un pulsante Pausa / Play.

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();
    }
}

Il trucco è che una volta impostato l'orologio di un MediaPlayer, diventa controllato l'orologio, così l'uso di MPlayer.Clock.Controller a fare tutto il controllo:)

Altri suggerimenti

non ha mai giocato con i media player, ma a patto di saper la lunghezza del brano si fa a non impostare un timer che zecche ogni secondo mentre il brano è in riproduzione. Quindi per ogni tick solo incrementare il ricercatore in relazione a quanto tempo la canzone è in totale.

Song è lunga 100 secondi. Pertanto ogni secondo / tick vale 1 per cento del progresso totale.

Dovreste fermare il timer quando la pausa canzone ecc ...

MediaElement ha una proprietà posizione che si potrebbe usare per questo: http://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.position.aspx

Hai controllato la WPF MediaKit ancora?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top