Gle*_*234 5 delphi windows-media-player
我正在使用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;
Run Code Online (Sandbox Code Playgroud)
这会加载歌曲,但需要其他用户干预才能实际播放。我要让它继续下去的唯一方法是检查wmppsStopped,但是该事件发生了两次,所以我得到了列表中的所有奇数编号的歌曲。
关于如何使其正确运作的任何想法?
我得到了一个似乎有效的答案。由于 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;
Run Code Online (Sandbox Code Playgroud)
虽然这并不能解释为什么我可以在其他东西正在播放时更改 URL 并毫无问题地播放它......