我正在使用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,但是该事件发生了两次,所以我得到了列表中的所有奇数编号的歌曲。

关于如何使其正确运作的任何想法?

最佳答案

我得到一个似乎可行的答案。由于TWindowsMediaPlayer似乎是异步运行的,因此您不能在没有其他方法允许的情况下使用方法触发事件。为此,我的猜测是由于媒体未正确加载,它拒绝了play方法。

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并进行播放而不会遇到任何麻烦...

关于delphi - 完成旧轨道后,如何让TWindowsMediaPlayer播放新轨道?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16599148/

10-11 23:01
查看更多