線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1485
推到 Plurk!
推到 Facebook!

請教mp3清單播放的迴圈問題

答題得分者是:geniustom
poemkevin
初階會員


發表:26
回覆:77
積分:30
註冊:2002-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-12 19:15:30 IP:210.202.xxx.xxx 未訂閱
請問各位前輩大哥一個問題, musiclist是音樂清單, 資料也載入好幾筆, 想要讓它循序播放, 每播完一首歌, 再換下一首歌, 可是這個迴圈一run下去, 就是只會跑最後一首歌 請問, 小弟的程式是那裏寫錯了, 前輩是否可以指導一下小弟, 謝謝!!    musiclists是TStringlist 讀入MList.txt歌曲清單檔    
       for i := 0 to (musiclists.Count-1) do
        begin
           Mediaplayer1.FileName:= musiclists.Strings[i];
          // Mediaplayer1.AutoRewind:=true;
          // Mediaplayer1.Notify := true;
           application.ProcessMessages;
          if FileExists(Mediaplayer1.FileName) then
            begin
             Mediaplayer1.Open;
             Mediaplayer1.Play;
            
            // Sleep(10000);
            end else
              exit;
=========================== 沉思, 再沉思! 學習, 再學習! 生活隨喜, 簡單自在^^ =========================== 發表人 - poemkevin 於 2004/11/12 19:27:58
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-12 19:42:08 IP:61.64.xxx.xxx 未訂閱
引言: 請問各位前輩大哥一個問題, musiclist是音樂清單, 資料也載入好幾筆, 想要讓它循序播放, 每播完一首歌, 再換下一首歌, 可是這個迴圈一run下去, 就是只會跑最後一首歌 請問, 小弟的程式是那裏寫錯了, 前輩是否可以指導一下小弟, 謝謝!! musiclists是TStringlist 讀入MList.txt歌曲清單檔
       for i := 0 to (musiclists.Count-1) do
        begin
           Mediaplayer1.FileName:= musiclists.Strings[i];
          // Mediaplayer1.AutoRewind:=true;
          // Mediaplayer1.Notify := true;
           application.ProcessMessages;
          if FileExists(Mediaplayer1.FileName) then
            begin
             Mediaplayer1.Open;
             Mediaplayer1.Play;
            
            // Sleep(10000);
            end else
              exit;
=========================== 沉思, 再沉思! 學習, 再學習! 生活隨喜, 簡單自在^^ =========================== 發表人 - poemkevin 於 2004/11/12 19:27:58
因為Mediaplayer1.Play會馬上return, 所以程式執行到Mediaplayer1.Play就會馬上執行下一行程式, 這就是為什麼你的loop會一次跑完. 你可以改用偵測目前是否已播放完, 若已播放完才換下一首.
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-12 19:49:08 IP:219.68.xxx.xxx 未訂閱
poemkevin您好...
您這樣的邏輯..一看就知道不對囉< >
因為您的
              >
您可以改成以下的< >    >    以上供您參考..GOOD LUCK    =程式是一種藝術 也是訓練自己的分析規劃=
=是段落分明 或是雜亂無章=
=是一言以敝 或是廢話連篇=
=是一目了然 或是艱深難懂=
體會這份藝術 您會了解另一份喜悅與成就
        
poemkevin
初階會員


發表:26
回覆:77
積分:30
註冊:2002-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-12 19:53:52 IP:210.202.xxx.xxx 未訂閱
謝謝Zard大大的回應, 只是這問題我有想過, 試了好幾種方式, 都試不出來解決的方式, 所以才會在這裏問前輩們這問題? 請問那該如何去做, 小弟有試過用boolean或是用Sleep(10000); 和 if MediaPlayer1.NotifyValue = nvSuccessful then begin MediaPlayer1.Play; end; 或在for的迴圈中再加上repeat的判斷函數 就是沒辦法解決問題, 這些只會造成程式死當或cpu效率變低 本想該它迴圈暫停, 等該首歌曲放完, 自動再致能迴圈跑下一首. 只是不知該如何做 是否有前輩可以幫小弟改一下程式碼, 或者有範例提供, 感激不盡!! =========================== 沉思, 再沉思! 學習, 再學習! 生活隨喜, 簡單自在^^ ===========================
poemkevin
初階會員


發表:26
回覆:77
積分:30
註冊:2002-10-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-12 20:33:58 IP:210.202.xxx.xxx 未訂閱
geniustom 您好: 謝謝您的回應, 只是音樂還是會直接run最後一首歌!! 程式碼如下:    
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
   if MListCbx.Checked = true then
   begin
    if MUSICINDEX = (musiclists.count) then exit; //表示播放完畢了
       MUSICINDEX:=MUSICINDEX 1; //檔案指標加1
       Mediaplayer1.FileName:= musiclists.Strings[MUSICINDEX]; //播放第(MUSICINDEX)首
        if FileExists(Mediaplayer1.FileName) then
          begin
             Mediaplayer1.Open;
             Mediaplayer1.Play;
          end;
        if MUSICINDEX=(musiclists.count) then MUSICINDEX:=0; //加了這行..就可以重複播放
          //若不加..放完就停止了
     end;
end;    procedure TForm1.Button1Click(Sender: TObject);
var filename1:string;
    i:integer;
    aaa:boolean;
begin 
    loadstr.LoadFromFile('c:\list.txt');
    Mediaplayer1.AutoRewind:=false;  //連續播放
    Mediaplayer1.Notify := true;                    Mediaplayer1.FileName:= musiclists.Strings[MUSICINDEX];              if FileExists(Mediaplayer1.FileName) then
            begin
             Mediaplayer1.Open;
             Mediaplayer1.Play;
             end else
              exit;
        end;        end;    
=========================== 沉思, 再沉思! 學習, 再學習! 生活隨喜, 簡單自在^^ =========================== 發表人 - poemkevin 於 2004/11/12 20:38:21
poemkevin
初階會員


發表:26
回覆:77
積分:30
註冊:2002-10-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-12 21:08:21 IP:210.202.xxx.xxx 未訂閱
謝謝二位大大的指導, 小弟解決問題了^^    
    MUSICINDEX:integer;    //音樂連續播放
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
   if (MListCbx.Checked = true) and  (MediaPlayer1.NotifyValue = nvSuccessful) then
   begin
    if MUSICINDEX = (musiclists.count) then exit; //表示播放完畢了           Mediaplayer1.FileName:= musiclists.Strings[MUSICINDEX]; //播放第(MUSICINDEX)首
        if FileExists(Mediaplayer1.FileName) then
          begin
             Mediaplayer1.Open;
             Mediaplayer1.Play;
             
          end;
        MUSICINDEX:=MUSICINDEX 1; //檔案指標加1  
      
      if MUSICINDEX=(musiclists.count) then MUSICINDEX:=0; //加了這行..就可以重複播放
          //若不加..放完就停止了
     end;
      if (MListCbx.Checked = False) and  (MediaPlayer1.NotifyValue = nvSuccessful) then
       begin
            MediaPlayer1.Play;
       end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    Mediaplayer1.AutoRewind:=false;  
    Mediaplayer1.Notify := true;
    loadstr.LoadFromFile('c:\list.txt');
    MUSICINDEX:=0;
    Mediaplayer1.FileName:= musiclists.Strings[MUSICINDEX];
    if FileExists(Mediaplayer1.FileName) then
      begin
        Mediaplayer1.Open;
        Mediaplayer1.Play;
      end else
        exit;
end;    
=========================== 沉思, 再沉思! 學習, 再學習! 生活隨喜, 簡單自在^^ ===========================
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-12 22:04:00 IP:219.68.xxx.xxx 未訂閱
.. 發表人 - geniustom 於 2004/11/12 22:06:06
系統時間:2024-05-21 19:29:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!