1.前言
---- mp3因其較高的壓縮率,較好的音質,成為越來越多的使用者的喜愛,用自己編制的mp3播放器聽mp3音樂一定很有樂趣.我以下介紹一個用delphi編制的簡單mp3播放器,因為mp3音樂的解碼比較復雜,普通的程序員很難編制其解碼程序,但不要緊,我們可以用別人寫好的解碼程序來完成我們的程序.
---- 2.設計構思
---- 我們使用mpegdll.dll來解碼(很多國產的mp3播放器都用它),mpegdll.dll的作者提供了它的delphi的控件,在各大delphi網站都有下載,或在作者的主頁http://www.ig.com.ua/wabbit/programs/workshop.html下載之后,我們安裝控件(必須delphi3.0以上),在component中選擇install component,安裝控件包中的mpegplayer.dcu,安裝完成后在控件欄里多出一個add-ons來,控件就在里面.
---- 介紹一下用到的參數
mpeg.streamname 所要播放的文件名 mpeg.length 文件程度 mpeg.bitrate 壓縮位率 mpeg.frequency 壓縮頻率 mpeg.layer 壓縮層次 mpeg.mode 壓縮模式 mpeg.pathtodll dll文件的路徑
---- 新建一個from,放入6個label,5個button,1個checkbox,1個mpeg,1個time,1個trackbar,1個opendialog控件調整為適當的布局,點擊opendialog1使*.mp3成為打開文件的后綴名.調整5個button,把其屬性name改為 openbutton,pausebutton,stopbutton,playbutton和exitbutton,并把caption改為播放,暫停,停止,打開,和退出. 使3個label的caption成為,壓縮位率,壓縮頻率,壓縮層次,調整其他3個label使label4對應label1,label5對應label2,label6對應label3 caption為空,autosize為true,trackbar的tickstyle設為tsNone,chickbox的caption設為循環播放,timer的ontimer設為timer1timer ---- 3.程序清單如下
unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, MPEGPlayer,Gauges, ComCtrls,Mask, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; openButton: TButton; playButton: TButton; pauseButton: TButton; stopButton: TButton; exitButton: TButton; CheckBox1: TCheckBox; TrackBar1: TTrackBar; MPEG: TMPEGPlayer; Timer1: TTimer; OpenDialog1: TOpenDialog; Label6: TLabel; procedure exitButtonClick(Sender: TObject); procedure openButtonClick(Sender: TObject); procedure playButtonClick(Sender: TObject); procedure pauseButtonClick(Sender: TObject); procedure stopButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure TrackBar1Change(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } dontseek:boolean; public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.exitButtonClick(Sender: TObject); begin close; end;
procedure TForm1.openButtonClick(Sender: TObject); var s:string; begin if not opendialog1.execute then exit; mpeg.autoplay:=false; mpeg.streamname:=opendialog1.filename; mpeg.open; trackbar1.Max:=mpeg.length; trackbar1.position:=0; str(trackbar1.max,s); playbutton.Enabled:=true; stopbutton.enabled:=true; pausebutton.Enabled:=true; end;
procedure TForm1.playButtonClick(Sender: TObject); var a,b,c:string; begin playbutton.Enabled:=false; openbutton.Enabled:=false; mpeg.Play; str(mpeg.Bitrate,a); label4.Caption:=a; str(mpeg.Frequency,b); label5.caption:=b; str(mpeg.layer,c); label6.caption:=c; end; procedure TForm1.pauseButtonClick(Sender: TObject); begin mpeg.paused:=not (mpeg.Paused); end;
procedure TForm1.stopButtonClick(Sender: TObject); begin if mpeg.mode>2 then begin mpeg.stop; mpeg.close; end; trackbar1.Position:=0; openbutton.Enabled:=true; playbutton.enabled:=false; stopbutton.enabled:=false; pausebutton.enabled:=false; label4.Caption:=''; label5.Caption:=''; label6.Caption:=''; end;
procedure TForm1.FormCreate(Sender: TObject); begin mpeg.pathtodll:=''; //存放dll聞家的路徑本例程序和dll在同一路徑下 //dll一定要放在程序同一目錄,否則不能編譯 mpeg.init; playbutton.Enabled :=false; pausebutton.enabled:=false; stopbutton.enabled:=false; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin mpeg.deinit; end; procedure TForm1.TrackBar1Change(Sender: TObject); begin if not(dontseek) then if (mpeg.mode=3)or((mpeg.mode=4)) then mpeg.CurrentPosition:=trackbar1.Position; end; procedure TForm1.Timer1Timer(Sender: TObject); var a,b,c:string; begin if (mpeg.mode=3) then begin dontseek:=true; trackbar1.Position:=mpeg.CurrentPosition; dontseek:=false;
end; if mpeg.PlayStopped then begin if checkbox1.Checked then begin mpeg.Play; playbutton.Enabled:=false; openbutton.Enabled:=false; str(mpeg.Bitrate,a); label4.Caption:=a; str(mpeg.Frequency,b); label5.caption:=b; str(mpeg.layer,c); label6.caption:=c; end else begin mpeg.close; trackbar1.Position:=0; openbutton.Enabled:=true; playbutton.Enabled :=false; pausebutton.enabled:=false; stopbutton.enabled:=false; label4.Caption:=''; label5.Caption:=''; label6.Caption:=''; end; end; end; end. ---- 以上是一個簡單的mp3播放器的例程,mpegplayer是一個強大的控件可以實現很多功能,如多曲播放,請大家自己研究把,愿大家都能做出很好的mp3播放器
|