2013-05-16 1 views
3

Я использую TWindowsMediaPlayer и сталкиваюсь с проблемой. После того, как текущая песня завершится, я не могу загрузить ее, чтобы загрузить новую песню, а затем воспроизвести ее.Как заставить TWindowsMediaPlayer играть новый трек после завершения старого?

procedure TMainWinForm.WMPlayer1PlayStateChange(Sender: TObject; 
      NewState: Integer); 
    begin 
    if (NewState = wmppsMediaEnded) then 
     begin 
     WMPlayer1.URL := FileScanner.SelectSong; 
     writeln('Play triggered on ', String(WMPlayer1.URL)); 
     WMPlayer1.controls.Play; // DOES NOT PLAY THE SONG! 
     end; 
    end; 

Это загружает песню, но для ее воспроизведения требуется дополнительное вмешательство пользователя. Единственный способ, котор я получаю его продолжать для того чтобы проверить для wmppsStopped, но это случаем происходит дважды поэтому я получаю каждую нечетную пронумерованную песню в списке.

Любые идеи о том, как заставить его работать правильно?

+0

@JerryDodge, если я не получаю лучший ответ я вероятно, попробуйте сделать внешнюю переменную и протестировать ее, чтобы она не срабатывала во второй раз с помощью wmppsStopped. Как ни странно, вот откуда берутся большинство моих SO-вопросов. Старые проекты я застрял и убрал, но хочу закончить сейчас. – Glenn1234

+0

Я не совсем уверен (и не могу проверить это сейчас), но, как указано в ссылке, ['MM_MCINOTIFY'] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd757358 (v = vs.85) .aspx) сообщение должно быть отправлено в элемент управления с флагом 'MCI_NOTIFY_SUCCESSFUL', когда действие для команды завершается. Там они заявили, что, например, для аудио CD это означает, что он заканчивает игру. Попробуйте спросить в событии 'OnNotify' значение' nvSuccessful' свойства MediaPlayer.NotifyValue. – TLama

+0

Попробуйте следующее: WMPlayer1.uiMode: = 'none'; – slotomo

ответ

0

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

procedure TMainWinForm.WMPlayer1OpenStateChange(Sender: TObject; 
    NewState: Integer); 
begin 
    if NewState = wmposMediaOpen then 
    begin 
     WMPlayer1.controls.play; 
    end; 
end; 

procedure TMainWinForm.WMPlayer1PlayStateChange(Sender: TObject; 
    NewState: Integer); 
begin 
    if (NewState = wmppsStopped) and (SpecialPlayListMode) then 
    begin 
     WMPlayer1.URL := FileScanner.SelectSong; 
    end; 
end; 

Хотя это не объясняет, почему я могу изменить URL, а что-то еще играет и играть в нее без каких-либо проблем ...

0

Почему вы не используете WMPlayer1.Mediacollection?

В противном случае вы проверили с WMPlayer1.settings.autoStart := True; перед тем, как дать новый URL-адрес?

+0

Да, и он не играет песню. – Glenn1234

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

  • Нет связанных вопросов^_^