MediaPlayer Delphi
50-201:
2016.
MediaPlayer
Delphi ( Delphi 2) MediaPlayer - -. - System .
- , (Play, Pause, Stop, Next, Previous, Step, Back, StartRecording, Eject). TMediaPlayer . .. , , , TButton .
- . , .
( ):
Play | |
Pause | . - , |
Stop | |
Next | |
Prev | |
Step | |
Back | |
Record | |
Eject | , |
- , : Play, Pause, Stop, Next, Previous, Step, Back, StartRecording, Eject.
, -, DeviceType. , FileName. DeviceType dtAutoSelect. , - FileName.
MediaPlayer AutoOpen. true, - , DeviceType, .
, . , Display , . , , . DisplayRect TRect ( ) , . DisplayRect Rect. , TRect . , , . , .
|
|
, :
MediaPlayer1.DisplayRect:= Rect(10, 10, 200, 200); -
(10, 10), , 200.
:
AutoEnable - Mode;
AutoOpen - - ;
AutoRewind - . AutoRewind true , Play StartRecording . AutoRewind false, Prev Previous. StartPos EndPos, , AutoRewind ;
Display - , ;
DisplayRect - , Display;
EnabledButtons - ;
FileName - , Open Save;
Position - TimeFormat. ;
VisibleButtons - , - . . , VisibleButtons TButtonSet, .
, , MediaPlayer , MediaPlayer, CD:
Length | |
Tracks | |
TrackLength | |
Position | ( ) |
TimeFormat | Length, TrackLength Position. tfMilliseconds |
Mode | . mpPlaying ; mpStopped ; mpPaused ; mpNotReady ; mpOpen (CD-) . |
Display | , . , ( ) |
DisplayRect |
:
MediaPlayer .
Form1(Media WMV Player):
:
Media WMV Player:
DisplayPlayer: TPanel;
Panel1: Tpanel.
DisplayPlayer: TPanel :
MediaPlayer: TMediaPlayer;
OpenDialog: TOpenDialog;
Timer: TTimer;
TimerResize: TTimer;
Panel1: Tpanel :
Edit1: TEdit;
Label1: TLabel;
ProgressBar1: TProgressBar;
TrackBar1: TTrackBar;
PlayButton: TButton;
PauseButton: TButton;
StopButton: TButton;
|
|
OpenButton: TButton;
-:
1. .
, . OpenDialog;
2. . , , . PauseButton;
3. . PlayButton;
4. , . . StopButton;
Label1 () () ;
Edit1 ();
ProgressBar , , , . ( )
5. ProgressBar1
6. TrackBar1 .
TrackBar , . , - : , ..
:
- : wmv, mp4, avi;
- : wma, mp3.
avi mp4 DivX, Xvid, QuickTime, ( ).
, : mkv, m2ts, flac, Apple Lossless , Delphi.
:
unit MediaWMV;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, MPlayer, StdCtrls, ComCtrls, mmsystem;
const
WMVOpenDialogTypes = 'Windows Media Files (WMV WMA MP3 WAV MP4 AVI MKV FlAC) |*.wmv;*.wma;*.mp3;*.wav;*.avi;*.mkv;*.flac;*.mp4';
b_time_rz = ':';
audio = 'Audio File';
const
MCI_SETAUDIO = $0873;
MCI_DGV_SETAUDIO_VOLUME = $4002;
MCI_DGV_SETAUDIO_ITEM = $00800000;
MCI_DGV_SETAUDIO_VALUE = $01000000;
MCI_DGV_STATUS_VOLUME = $4019;
type
MCI_DGV_SETAUDIO_PARMS = record
dwCallback: DWORD;
dwItem: DWORD;
dwValue: DWORD;
dwOver: DWORD;
lpstrAlgorithm: PChar;
lpstrQuality: PChar;
end;
MCI_STATUS_PARMS = record
dwCallback: DWORD;
dwReturn: DWORD;
dwItem: DWORD;
dwTrack: DWORD;
end;
TPanel = class (ExtCtrls.TPanel)
public
property Canvas;
end;
TWMVPlayer = class(TForm)
MediaPlayer: TMediaPlayer;
Panel1: TPanel;
DisplayPanel: TPanel;
ProgressBar1: TProgressBar;
Label1: TLabel;
PlayButton: TButton;
PauseButton: TButton;
StopButton: TButton;
OpenButton: TButton;
OpenDialog: TOpenDialog;
Timer: TTimer;
TimerResize: TTimer;
Edit1: TEdit;
TrackBar1: TTrackBar;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TrackBar1Change(Sender: TObject);
procedure ProgressBar1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StopButtonClick(Sender: TObject);
procedure TimerResizeTimer(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure OpenButtonClick(Sender: TObject);
procedure PauseButtonClick(Sender: TObject);
|
|
procedure PlayButtonClick(Sender: TObject);
procedure TimerTimer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Loaded: boolean;
Played: boolean;
function Rvol: integer;
procedure Wvol(const Value: integer);
procedure Load(filename: string);
public
{ Public declarations }
procedure Play(filename:string = '');
procedure Pause;
function SecondsToTime(sec: double): String;
procedure Stop;
function GetAllPlayFiles(StartDir:string):TStringList;
// 0 - 1000;
property Volume: integer Read Rvol Write Wvol;
end;
var
WMVPlayer: TWMVPlayer;
function GetMPVolume(MP: TMediaPlayer): Integer;
procedure SetMPVolume(MP: TMediaPlayer; Volume: Integer);
implementation
{$R *.dfm}
procedure SetMPVolume(MP: TMediaPlayer; Volume: Integer);
var
p:MCI_DGV_SETAUDIO_PARMS;
begin
p.dwCallback:= 0;
p.dwItem:= MCI_DGV_SETAUDIO_VOLUME;
p.dwValue:= Volume;
p.dwOver:= 0;
p.lpstrAlgorithm:= nil;
p.lpstrQuality:= nil;
mciSendCommand(MP.DeviceID, MCI_SETAUDIO,
MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p));
end;
function GetMPVolume(MP: TMediaPlayer): Integer;
var
p: MCI_STATUS_PARMS;
begin
p.dwCallback:= 0;
p.dwItem:= MCI_DGV_STATUS_VOLUME;
mciSendCommand(MP.DeviceID, MCI_STATUS, MCI_STATUS_ITEM, Cardinal(@p));
Result:= p.dwReturn;
{ Volume: 0 - 1000 }
end;
procedure TWMVPlayer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Stop;
end;
procedure TWMVPlayer.FormCreate(Sender: TObject);
begin
Loaded:=false;
Played:=false;
OpenDialog.Filter:=WMVOpenDialogTypes;
DoubleBuffered:=true;
end;
procedure TWMVPlayer.FormResize(Sender: TObject);
begin
if Loaded then TimerResize.Enabled:=true;
end;
function TWMVPlayer.GetAllPlayFiles(StartDir: string): TStringList;
var
SearchRec: TSearchRec; ext: string;
begin
result:=TStringList.Create;
if StartDir[Length(StartDir)] <> '\' then
StartDir:= StartDir + '\';
if FindFirst(StartDir + '*.*', faAnyFile, SearchRec) = 0 then begin
repeat Application.ProcessMessages;
if ((SearchRec.Attr and faHidden) = faHidden) or ((SearchRec.Attr and faSysFile) = faSysFile) then Continue;
if (SearchRec.Attr and faDirectory) <> faDirectory then begin
// file
ext:=LowerCase(ExtractFileExt(SearchRec.Name));
if (pos('mp3',ext)>0) OR (pos('wav',ext)>0) OR (pos('wma',ext)>0) OR (pos('wmv',ext)>0) OR (pos('avi',ext)>0) OR (pos('mkv',ext)>0) then begin
// file ok
result.Add(SearchRec.Name)
end;
end;
until FindNext(SearchRec) <> 0;
end;
FindClose(SearchRec);
end;
procedure TWMVPlayer.Load(filename:string);
begin
Edit1.Text:='';
Played:=false;
if FileExists(FileName) then begin
MediaPlayer.FileName:=FileName;
MediaPlayer.Open;
Edit1.Text:=ExtractFileName(FileName);
if (LowerCase(ExtractFileExt(MediaPlayer.FileName)) = '.mp3') OR
(LowerCase(ExtractFileExt(MediaPlayer.FileName)) = '.wav') OR
(LowerCase(ExtractFileExt(MediaPlayer.FileName)) = '.wma')
then
DisplayPanel.Caption:=audio
else begin
DisplayPanel.Caption:='';
MediaPlayer.Display:=DisplayPanel;
end;
Loaded:=true;
TrackBar1.Position:=Round(Volume/100);
end else begin
ShowMessage('Media WMV Player - íåò ôàéëà äëÿ îòêðûòèÿ');
Loaded:=false;
Abort;
end;
end;
procedure TWMVPlayer.OpenButtonClick(Sender: TObject);
begin
if OpenDialog.Execute then begin
|
|
Play(OpenDialog.FileName);
end;
end;
procedure TWMVPlayer.Pause;
begin
Timer.Enabled:=false;
if (loaded) then begin
MediaPlayer.Pause;
Played:=not Played;
Timer.Enabled:=Played;
end;
end;
procedure TWMVPlayer.PauseButtonClick(Sender: TObject);
begin
//pause
Pause;
end;
procedure TWMVPlayer.Play(filename: string);
begin
if filename = '' then if loaded then begin
MediaPlayer.Play;
Played:=true;
Timer.Enabled:=true;
exit;
end;
if (loaded) AND (filename=MediaPlayer.FileName) then begin
MediaPlayer.Play;
Played:=true;
Timer.Enabled:=true;
exit;
end;
//MediaPlayer.FileName:=filename;
Load(filename);
MediaPlayer.Play;
Played:=true;
ProgressBar1.Max:=MediaPlayer.Length;
ProgressBar1.Position:=0;
Timer.Enabled:=true;
MediaPlayer.DisplayRect:=DisplayPanel.Canvas.ClipRect;
end;
procedure TWMVPlayer.PlayButtonClick(Sender: TObject);
begin
// play
Play;
end;
procedure TWMVPlayer.ProgressBar1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if not Loaded then exit;
if Button = mbLeft then begin
ProgressBar1.Position:=round(
(ProgressBar1.max/(ProgressBar1.Width-2))*X
);
MediaPlayer.Position:=ProgressBar1.Position;
if Played then MediaPlayer.Play;
end;
end;
function TWMVPlayer.Rvol: integer;
begin
result:=1000;
if Loaded then begin
result:=GetMPVolume(MediaPlayer);
end;
end;
function TWMVPlayer.SecondsToTime(sec: double): String;
var
M, S, H: INTEGER;
begin
S:= Round(Sec);
M:= Round(INT(S / 60));
S:= S - M * 60; //Seconds
H:= Round(INT(M / 60)); //Hours
M:= M - H * 60; //Minutes
if H=0 then result:='' else result:=inttostr(H)+b_time_rz;
if M<10 then result:=result+'0';
result:=result+inttostr(M)+b_time_rz;
if S<10 then result:=result+'0';
result:=result+inttostr(S);
end;
procedure TWMVPlayer.Stop;
begin
if loaded then begin
loaded:=false;
Played:=false;
MediaPlayer.Close;
Edit1.Text:='';
DisplayPanel.Caption:='';
end;
end;
procedure TWMVPlayer.StopButtonClick(Sender: TObject);
begin
Stop;
end;
procedure TWMVPlayer.TimerResizeTimer(Sender: TObject);
begin
MediaPlayer.DisplayRect:=Rect(0,0,DisplayPanel.Width-1,DisplayPanel.Height-1);
TimerResize.Enabled:=false;
end;
procedure TWMVPlayer.TimerTimer(Sender: TObject);
begin
if Loaded and Played then begin
ProgressBar1.Position:=MediaPlayer.Position;
Label1.Caption:=SecondsToTime(MediaPlayer.Position/1000) + ' / '+
SecondsToTime(ProgressBar1.max/1000);
if ProgressBar1.Position=ProgressBar1.Max then Played:=false;
end else begin
Timer.Enabled:=false;
ProgressBar1.Position:=0;
Label1.Caption:=SecondsToTime(0);
end;
end;
procedure TWMVPlayer.TrackBar1Change(Sender: TObject);
begin
Self.Volume:=TTrackBar(Sender).Position*100;
end;
procedure TWMVPlayer.Wvol(const Value: integer);
begin
if Loaded then SetMPVolume(MediaPlayer,value);
end;
end.