D7的mediaplayer如何指定播放一個資料夾內的mp3? |
尚未結案
|
samhu
一般會員 發表:5 回覆:9 積分:2 註冊:2004-04-24 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
samhu
一般會員 發表:5 回覆:9 積分:2 註冊:2004-04-24 發送簡訊給我 |
hahalin大大
謝謝你提供的網頁教學,不過我遇到問題如下:
............ FillID3TagInformation(mp3File, edTitle, edArtist, edAlbum, edYear, edGenre, edComment); Progress.Max:=0;//這行出現[Warning] Unit1.pas(215): Symbol 'IncludeTrailingBackslash' is specific to a platform mp3player.Close; mp3player.FileName:=mp3File; mp3player.Open; Progress.Max := mp3player.Length; end; procedure TForm1.FormCreate(Sender: TObject); begin txtFolder.Caption := ExtractFilePath(Application.ExeName); FillMP3FileList(txtFolder.Caption, mp3List.Items); Progress.Max:=0; end; procedure TForm1.ProgresTimerTimer(Sender: TObject); begin if Progress.Max<>0 then Progress.Position := mp3player.Position; end; end. { ******************************************** Zarko Gajic About.com Guide to Delphi Programming http://delphi.about.com email: delphi.guide@about.com free newsletter: http://delphi.about.com/library/blnewsletter.htm forum: http://forums.about.com/ab-delphi/start/ ******************************************** }作業環境:winxp pro delphi 7 |
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|
samhu
一般會員 發表:5 回覆:9 積分:2 註冊:2004-04-24 發送簡訊給我 |
還是無法run
[Error] Unit1.pas(251): Undeclared identifier: 'Progress' 另外hagar大大提供的:
參考 "關於MediaPlayer 連續播放" 這篇:
http://delphi.ktop.com.tw/topic.php?topic_Id=28749
type底下的
RandomTrack,PlayPause, FlatSystem1,RepeatAudio,FlatProgressBar1,
OPen,PlayListPanel,Stop,OpenDialog1,Playlist,PlayerPanel,Back, Audio,RepeatTimer,Next這些元件怎麼都找不到?是d7沒有嗎,還是必須另外安裝?
謝謝 sorry 初學者問題特別多
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: 還是無法run [Error] Unit1.pas(251): Undeclared identifier: 'Progress' 另外hagar大大提供的: 參考 "關於MediaPlayer 連續播放" 這篇: http://delphi.ktop.com.tw/topic.php?topic_Id=28749 type底下的 RandomTrack,PlayPause, FlatSystem1,RepeatAudio,FlatProgressBar1, OPen,PlayListPanel,Stop,OpenDialog1,Playlist,PlayerPanel,Back, Audio,RepeatTimer,Next這些元件怎麼都找不到?是d7沒有嗎,還是必須另外安裝? 謝謝 sorry 初學者問題特別多 FlatSystem1 -> 這個用不到 PlayerPanel: TFlatPanel; -> 這些改用 TPanel PlayListPanel: TFlatPanel; PlayPause: TFlatButton; -> 這些改用 TButton Stop: TFlatButton; Next: TFlatButton; Back: TFlatButton; OPen: TFlatButton; RepeatTimer: TTimer; -> RepeatTimer 其實就是 TTimer Audio: TMediaPlayer; -> Audio 是 TMediaPlayer 元件 Playlist: TListBox; -> PlayList 是 TListBox 元件 FlatProgressBar1: TFlatProgressBar; -> 這以 TProgressBar 代替 RepeatAudio: TFlatCheckBox; -> 這些改用 TCheckBox RandomTrack: TFlatCheckBox; OpenDialog1: TOpenDialog; Timer1: TTimer; |
samhu
一般會員 發表:5 回覆:9 積分:2 註冊:2004-04-24 發送簡訊給我 |
hagar大大
我已經照你說的部分改好了,code如下,沒有錯誤訊息,但是OPEN鈕按下卻沒反應?
麻煩再次指導了,謝謝 unit MP3PLAYER; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, ExtCtrls, MPlayer; type
TForm1 = class(TForm)
RepeatAudio: TCheckBox;
RandomTrack: TCheckBox;
Audio: TMediaPlayer;
PlayerPanel: TPanel;
PlayListPanel: TPanel;
PlayPause: TButton;
Stop: TButton;
Next: TButton;
Back: TButton;
OPen: TButton;
RepeatTimer: TTimer;
Timer1: TTimer;
Playlist: TListBox;
FlatProgressBar1: TProgressBar;
OpenDialog1: TOpenDialog;
procedure RepeatTimerTimer(Sender: TObject);
procedure PlayPauseClick(Sender: TObject);
procedure NextClick(Sender: TObject);
procedure OPenClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
procedure PlayAudio;
procedure RandomTracks;
procedure BackTrack;
procedure NextTrack;
procedure UpdateProgress; public
{ Public declarations }
end; var
Form1: TForm1;
ss: String;
implementation {$R *.dfm}
procedure TForm1.PlayAudio;
begin
try
ss := Playlist.Items.Strings[Form1.Playlist.ItemIndex];
Audio.FileName := ss;
Audio.Open;
Audio.Play;
except;
end;
end; function RandomInRange(intLow, intHi : integer): integer;
var itmp, iRS: integer;
begin
Randomize();
if intHi < intLow then
begin
itmp := intLow;
intLow := intHi;
intHi := itmp;
end;
iRS := intHi - intLow;
Result := Trunc(iRS * Random intLow);
end; procedure TForm1.RandomTracks;
Var
ItemCount:Integer;
begin
ItemCount := Playlist.Items.Count;
Playlist.itemindex := RandomInRange(0,ItemCount -1);
ss := Playlist.Items.Strings[Playlist.ItemIndex];
Audio.FileName := ss;
Audio.Open;
Audio.Play;
end; procedure TForm1.NextTrack;
begin
try
ss := Playlist.Items.Strings[Playlist.ItemIndex 1];
Playlist.itemindex := Playlist.itemindex 1;
Audio.FileName := ss;
Audio.Open;
if Audio.FileName = '' then
PlayAudio
else
Audio.Resume;
if Playlist.itemindex = Playlist.Items.Count-1 then
Playlist.itemindex := Playlist.ItemIndex 1
else
except;
end;
end; procedure TForm1.BackTrack;
begin
try
ss := Playlist.Items.Strings[Playlist.ItemIndex-1];
Playlist.ItemIndex := Playlist.ItemIndex - 1;
Audio.FileName := ss;
Audio.Open;
if Audio.FileName = '' then
PlayAudio
else
Audio.Resume;
if Playlist.ItemIndex = Playlist.Items.Count-1 then
Playlist.ItemIndex := Playlist.ItemIndex - 1
else
except;
end;
end; procedure TForm1.UpdateProgress;
begin
try
FlatProgressBar1.Max := Audio.Length;
FlatProgressBar1.Position := Audio.Position;
FlatProgressBar1.Update;
Audio.Update;
except;
end;
end;
procedure TForm1.RepeatTimerTimer(Sender: TObject);
begin
try
if RepeatAudio.State = cbchecked then
if RandomTrack.State = cbunchecked then
RandomTracks
else
Audio.Play;
except;
end;
RepeatTimer.Enabled := False;
end;
procedure TForm1.PlayPauseClick(Sender: TObject);
begin
try
if Audio.FileName = '' then
PlayAudio
else
Audio.resume;
except;
end;
end;
procedure TForm1.NextClick(Sender: TObject);
begin
try
if RandomTrack.State = cbchecked then
RandomTracks
else
NextTrack
except
end;
end;
procedure TForm1.OPenClick(Sender: TObject);
Var
I: Integer;
begin
if OpenDialog1.Execute then
for I := 0 to OpenDialog1.Files.Count-1 do
with Playlist do
Playlist.Items.Add(ExtractFileName(OpenDialog1.Files.Strings[i]));
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Audio.FileName <> '' then
UpdateProgress;
end; end.
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
samhu
一般會員 發表:5 回覆:9 積分:2 註冊:2004-04-24 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: hagar大大 謝謝你的範例,打開資料夾並指定mp3歌曲重複播放已經可以了 但我的這個專案是一個光碟自動播放mp3的程式 我希望這程式autorun時自動(或手動按play鈕)播放 ..\mp3\***\*.mp3 (***代表不同專輯)請問該如何修改?謝謝 winxp-pro delphi71.光碟可以 AutoRun, 要先製作 AutoRun.inf 檔, 放在光碟的根目錄 檔案內容如下(其中 xxx.Exe 指 AutoRun 時要執行的執行檔): [autorun] OPEN=xxx.EXE ICON=xxx.ICO2.AutoRun 後可以自動播放, 我想您要在 MainForm 的 OnCreate 事件中 把光碟中的 mp3 載入至 ListBox 中, 然後執行 Play 鈕的動作 3.要取得執行檔所在目錄可以用 ExtractFilePath(Application.ExeName) 或 ExtractFilePath(ParamStr(0)) |
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
用遞迴的方法把整個光碟片所有的mp3檔案列舉出來,放到ListBox.items中,這樣就可以交付MediaPlayer做全碟播放了,底下就是這個函數
function SearchFile(Dir,fnx:String;var inList:TStringList):boolean; var mySR : TSearchRec ; FileList , DirList : TStringList; i : integer ; begin result :=false ; DirList:=TStringList.create; if findfirst(CheckTailSlash(DIR) '*.*',faAnyFile,mySR)=0 then begin if ((MySR.Attr and $0000003F)<=$0000003F) and (MySR.name<>'..') and (MySR.Name<>'.') THEN if ((MySR.Attr and $00000010)=$00000010) then DirList.add(CheckTailSlash(Dir) MySR.name); while Findnext(mySR)=0 do begin if ((MySR.Attr and $0000003F)<=$0000003F) and (MySR.name<>'..') and (MySR.Name<>'.') THEN if ((MySR.Attr and $00000010)=$00000010) then DirList.add(CheckTailSlash(Dir) MySR.name); if ((MySR.Attr and $00000010)<>$00000010)AND((MySR.Attr and $00000002)<> $00000002) then if (pos(fnx,checktailslash(dir) MySR.Name)>0) then inList.add(CheckTailSlash(Dir) MySR.name); end ; end ; if (DirList.Count>0) then for i := 1 to DirList.count do begin SearchFile(DirList[i-1],fnx,inList); end; FindClose(mySR); DirList.free; result :=true ; end ;你的程式只要加一行 Searchfile('..\mp3\','.mp3',ListBox1.items); 就可以看到你的ListBox1已經把你所有光碟里的曲目全給列舉出來了,不管有多少層,不管有多複雜,全部ok 藏私の禁止 |
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
|
samhu
一般會員 發表:5 回覆:9 積分:2 註冊:2004-04-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |