5

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

关于如何使其正常工作的任何想法?

4

2 回答 2

1

我得到了一个似乎有效的答案。由于 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,并且可以毫无问题地播放它......

于 2013-05-18T23:27:30.603 回答
0

你为什么不使用WMPlayer1.Mediacollection

否则,您WMPlayer1.settings.autoStart := True;在提供新网址之前是否进行了测试?

于 2013-05-17T14:58:02.653 回答