掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
TWindowsMediaPlayerで個々のファイルを連続再生させるには (ID:33646)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>音楽CDの.cdaファイルのリストの場合 >連続演奏できませんでした。 あらら、これは失礼いたしました。 確かに止まりますね。 OnPlayStateChangeイベントだけでなくOnOpenStateChangeイベントも調べてみたら、*.cdaの場合wmposPlaylistOpenNoMediaで止まりますね。 ということでNewStateがwmposPlaylistOpenNoMediaのときにcontrols.playを呼んでみたら次のwmposMediaOpenで止まりました。 ならばとwmposMediaOpenでもcontrols.playを呼んでみたら連続再生できました。 が、*.wmaの次に*.cdaや*.cdaの次に*.wmaが続くと止まってしまいます。 あれこれと値を確かめたりタイミングや処理の流れを追ってみた結果、OnPlayStateChangeイベントのwmppsMediaEndedでMoviePlayを呼んだ後にも色々とイベントが起きていました。 MoviePlay中でURLに値をセットし終わる前にOnOpenStateChangeのNewStateがwmposPlaylistOpenNoMediaのイベントが起きてしまうことで、おかしなことになり止まってしまっていたようです。 ということで、MoviePlay中でURLに値をセットし終わるまでイベントを無視するF_bStopというフラグを使うようにしてみました。 private { Private 宣言 } F_bStop: Boolean; PlayListNo: Integer; procedure MoviePlay; public { Public 宣言 } end; procedure TForm1.MoviePlay; begin if (PlayListNo < ListBox1.Count) then begin WindowsMediaPlayer1.controls.stop; WindowsMediaPlayer1.currentPlaylist.clear; WindowsMediaPlayer1.URL := ListBox1.Items[PlayListNo]; F_bStop := False; WindowsMediaPlayer1.controls.play; Inc(PlayListNo); end; end; procedure TForm1.PlayerOpenStateChange(Sender: TObject; NewState: Integer); begin case NewState of wmposPlaylistOpenNoMedia, wmposMediaOpen: begin if not(F_bStop) and (Assigned(WindowsMediaPlayer1.currentMedia)) then begin WindowsMediaPlayer1.controls.play; end; end; end; end; procedure TForm1.PlayerPlayStateChange(Sender: TObject; NewState: Integer); begin case NewState of wmppsMediaEnded: begin F_bStop := True; MoviePlay; end; wmppsReady: begin if not(F_bStop) and (Assigned(WindowsMediaPlayer1.currentMedia)) then begin WindowsMediaPlayer1.controls.play; end; end; end; end; これでどうでしょうか。 ざっと再生させてみ他結果、連続再生できているようなのですが。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.