2010-03-19 4 views
1

J'ai un lecteur mp3 qui envoie des commandes MCI pour lire pause/ff/rw/arrêter les fichiers audio etc et la seule chose que je ne peux pas comprendre comment faire est d'envoyer une commande MCI pour le dire à joue la chanson suivante quand l'actuel a fini de jouer.Est-ce que la chanson a fini de jouer? (C# MCI)

Les chansons sont dans un ListBox. Je n'ai aucun problème en sélectionnant la chanson suivante, j'ai juste besoin de savoir quand pour jouer la chanson suivante sur la liste de lecture. Je vous remercie de toute aide à tous

Merci :)

Répondre

5

Désolé pour draguer ce après un mois, mais je pense je peux avoir une plus belle réponse ...

Vous pouvez faire la longueur en seconde chose, ou vous pouvez MCI vous informer lui-même . Lorsque vous envoyez votre commande "play", cliquez sur "notify" après l'alias du média, puis passez le handle de votre fenêtre (j'utilise System.Windows.Forms, d'où le 'this.Handle'), comme donc:

uint playOk = mciSendString("play MediaFile notify", null, 0, this.Handle); 

Ceci indique à MCI de vous envoyer une notification lorsque la commande est terminée ou est interrompue. Ensuite, vous pouvez simplement filtrer les messages de votre fenêtre reçoit pour voir si tout ce que vous êtes intéressé vient par:

private const int MM_MCINOTIFY = 0x03b9; 
private const int MCI_NOTIFY_SUCCESS = 0x01;  
private const int MCI_NOTIFY_SUPERSEDED = 0x02; 
private const int MCI_NOTIFY_ABORTED = 0x04; 
private const int MCI_NOTIFY_FAILURE = 0x08; 

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == MM_MCINOTIFY) 
    { 
    switch (m.WParam.ToInt32()) 
    { 
     case MCI_NOTIFY_SUCCESS: 
     // success handling 
     break; 
     case MCI_NOTIFY_SUPERSEDED: 
     // superseded handling 
     break; 
     case MCI_NOTIFY_ABORTED: 
     // abort handling 
     break; 
     case MCI_NOTIFY_FAILURE: 
     // failure! handling 
     break; 
     default: 
     // haha 
     break; 
    } 
    } 
    base.WndProc(ref m); 
} 

Cela semble fonctionner très bien pour moi. J'espère que ça aide. ;)

+0

Merci tas Guy! C'est très apprécié, je cherchais une solution depuis des lustres. : D –

+0

Quel serait l'équivalent pour les applications console? Il n'y a pas de 'WndProc' à remplacer dans les programmes de la console. – lbrahim

1

Pouvez-vous vérifier la durée du mp3 et maintenir une minuterie le long du côté du jeu mp3? Mettez la minuterie en pause lorsque le mp3 est en pause, etc. Lorsque la durée de la chanson a été jouée, jouez la chanson suivante.

+0

Malheureusement, je ne sais pas comment vérifier la durée de la piste. Cela peut-il être fait en utilisant MCI? J'ai référencé les documents pour MCI, mais ils semblent plutôt limités. –

+1

Juste googlé et trouvé cette classe qui vous donnera la longueur en secondes: http://devhood.com/tutorials/tutorial_details.aspx?tutorial_id=79 – scottm

+0

Parfait! Merci Scottm: D –

Questions connexes