2010-03-19 4 views
1

У меня есть mp3-плеер, который отправляет команды MCI для воспроизведения пауз/ff/rw/остановки аудиофайлов и т. Д., И единственное, что я не могу понять, - это отправить команду MCI, чтобы сообщить ей сыграйте следующую песню, когда текущая закончилась.Песня закончила играть? (C# MCI)

Песни находятся в ListBox. У меня нет проблем с выбором следующей песни, мне нужно найти , когда сыграет следующую песню в плейлисте. Я был бы признателен за любую помощь на всех

Спасибо :)

ответ

5

Извините драги это после месяца или около того, но я думаю, что у меня может быть приятнее ответ ...

Вы можете сделать длину в секундах вещи, или вы можете иметь MCI уведомить вас себя ,

Когда вы отправляете команду «играть», нажмите «уведомлять» после псевдонима носителя, а затем передайте дескриптор окна (я использую System.Windows.Forms, следовательно, это «this.Handle»), например так:

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

Это указывает MCI направить вам уведомление, когда команда завершена или прервана. Тогда вы можете просто фильтровать сообщения ваше окно получает, чтобы увидеть, если что-то вас интересует проступает:

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

Это, кажется, работает очень хорошо для меня. Надеюсь, это поможет. ;)

+0

Спасибо кучи Гай! Это очень ценится, я искал решение на века. : D – 2010-04-07 09:35:38

+0

Что было бы эквивалентно этому для консольных приложений? В консольных программах «WndProc» не переопределяется. – lbrahim

1

Вы можете проверить длительность mp3 и поддерживать таймер вдоль стороны mp3 играть? Приостановите таймер при паузе в mp3 и т. Д. Когда игра продолжится, воспроизведите следующую песню.

+0

К сожалению, я понятия не имею, как проверить продолжительность трека. Можно ли это сделать с помощью MCI? Я ссылался на документы для MCI, но они кажутся довольно ограниченными. – 2010-03-19 02:53:09

+1

Просто googled и нашел этот класс, который даст вам длину в секундах: http://devhood.com/tutorials/tutorial_details.aspx?tutorial_id=79 – scottm

+0

Отлично! Спасибо Scottm: D – 2010-03-19 06:18:33

Смежные вопросы