sábado, 18 de febrero de 2012
0 Como crear un Media Player
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, MPlayer, StdCtrls, Buttons, ComCtrls, ExtCtrls, WinSkinData,
XPMan, ExtDlgs;
type
TForm1 = class(TForm)
Timer1: TTimer;
GroupBox1: TGroupBox;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
SkinData1: TSkinData;
StatusBar1: TStatusBar;
TrackBar2: TTrackBar;
Label8: TLabel;
XPManifest1: TXPManifest;
Panel1: TPanel;
ListBox1: TListBox;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Button1: TButton;
Image1: TImage;
Label17: TLabel;
Label18: TLabel;
Image3: TImage;
PDdialogo: TOpenPictureDialog;
Panel2: TPanel;
StaticText1: TStaticText;
Panel3: TPanel;
TrackBar1: TTrackBar;
MediaPlayer1: TMediaPlayer;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Image2: TImage;
procedure ListBox1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure ListBox1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
MCI_DGV_SETAUDIO_PARMS = record
dwCallback : DWORD;
dwItem : DWORd;
dwValue : DWORD;
dwOver : DWORD;
lpstrAlgorithm : PChar;
lpstrQuality : PChar;
end;
Type
MCI_STATUS_PARMS = record
dwCallback : DWORD;
dwReturn : DWORD;
dwItem : DWORD;
dwTrack : DWORD;
end;
var
Form1: TForm1;
h,m,s:integer;
CronoMSeg, CronoSeg,cronomin: Integer;
CronoAct: Boolean;
CarAct: Integer;
FinCansion: Boolean;
mp3File:string;
type
TID3Rec = packed record
Tag : array[0..2] of Char;
Title,
Artist,
Comment,
Album : array[0..29] of Char;
Year : array[0..3] of Char;
Genre : Byte;
end;
const
MCI_SETAUDIO = $0873;
MCI_DGV_SETAUDIO_VOLUME = $4002;
MCI_DGV_SETAUDIO_ITEM = $00800000;
MCI_DGV_SETAUDIO_VALUE = $01000000;
MCI_DGV_STATUS_VOLUME = $4019;
const
AncNum= 13;
AltNum= 23;
PosXNumEnImag= 20;
No= False;
Si= True;
MaxID3Genre=147;
ID3Genre: array[0..MaxID3Genre] of string = (
'Blues', 'Classic Rock', 'Country', 'Dance', 'Disco', 'Funk', 'Grunge',
'Hip-Hop', 'Jazz', 'Metal', 'New Age', 'Oldies', 'Other', 'Pop', 'R&B',
'Rap', 'Reggae', 'Rock', 'Techno', 'Industrial', 'Alternative', 'Ska',
'Death Metal', 'Pranks', 'Soundtrack', 'Euro-Techno', 'Ambient',
'Trip-Hop', 'Vocal', 'Jazz+Funk', 'Fusion', 'Trance', 'Classical',
'Instrumental', 'Acid', 'House', 'Game', 'Sound Clip', 'Gospel',
'Noise', 'AlternRock', 'Bass', 'Soul', 'Punk', 'Space', 'Meditative',
'Instrumental Pop', 'Instrumental Rock', 'Ethnic', 'Gothic',
'Darkwave', 'Techno-Industrial', 'Electronic', 'Pop-Folk',
'Eurodance', 'Dream', 'Southern Rock', 'Comedy', 'Cult', 'Gangsta',
'Top 40', 'Christian Rap', 'Pop/Funk', 'Jungle', 'Native American',
'Cabaret', 'New Wave', 'Psychadelic', 'Rave', 'Showtunes', 'Trailer',
'Lo-Fi', 'Tribal', 'Acid Punk', 'Acid Jazz', 'Polka', 'Retro',
'Musical', 'Rock & Roll', 'Hard Rock', 'Folk', 'Folk-Rock',
'National Folk', 'Swing', 'Fast Fusion', 'Bebob', 'Latin', 'Revival',
'Celtic', 'Bluegrass', 'Avantgarde', 'Gothic Rock', 'Progressive Rock',
'Psychedelic Rock', 'Symphonic Rock', 'Slow Rock', 'Big Band',
'Chorus', 'Easy Listening', 'Acoustic', 'Humour', 'Speech', 'Chanson',
'Opera', 'Chamber Music', 'Sonata', 'Symphony', 'Booty Bass', 'Primus',
'Porn Groove', 'Satire', 'Slow Jam', 'Club', 'Tango', 'Samba',
'Folklore', 'Ballad', 'Power Ballad', 'Rhythmic Soul', 'Freestyle',
'Duet', 'Punk Rock', 'Drum Solo', 'Acapella', 'Euro-House', 'Dance Hall',
'Goa', 'Drum & Bass', 'Club-House', 'Hardcore', 'Terror', 'Indie',
'BritPop', 'Negerpunk', 'Polsk Punk', 'Beat', 'Christian Gangsta Rap',
'Heavy Metal', 'Black Metal', 'Crossover', 'Contemporary Christian',
'Christian Rock', 'Merengue', 'Salsa', 'Trash Metal', 'Anime', 'Jpop',
'Synthpop' {and probably more to come}
);
implementation
uses ShellAPI, ShlObj,MMSystem;
//***** rutina de sonido
function GetMPVolume(MP : TMediaPlayer) : Integer;
var p: MCI_STATUS_PARMS;
begin
p.dwCallback :=100;
p.dwItem := MCI_DGV_STATUS_VOLUME;
mciSendCommand(MP.DeviceID, MCI_STATUS, MCI_STATUS_ITEM, Cardinal(@p));
Result:=p.dwReturn;
end;
procedure SetMPVolume(MP : TMediaPlayer; Volume : Integer);
var p: MCI_DGV_SETAUDIO_PARMS;
begin
p.dwCallback :=100;
p.dwItem := MCI_DGV_SETAUDIO_VOLUME;
p.dwValue := Volume;
p.dwOver :=100;
p.lpstrAlgorithm := nil;
p.lpstrQuality := nil;
mciSendCommand(MP.DeviceID, MCI_SETAUDIO,
MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p));
end;
procedure FillID3TagInformation(mp3File:string; Title,Artist,Album,Year,Genre,Comment:TLabel);
var //fMP3: file of Byte;
ID3 : TID3Rec;
fmp3: TFileStream;
begin
fmp3:=TFileStream.Create(mp3File, fmOpenRead);
try
fmp3.position:=fmp3.size-128;
fmp3.Read(ID3,SizeOf(ID3));
finally
fmp3.free;
end;
if ID3.Tag <> 'TAG' then begin
Title.Caption:='Wrong or no ID3 tag information';
Artist.Caption:='Wrong or no ID3 tag information';
Album.Caption:='Wrong or no ID3 tag information';
Year.Caption:='Wrong or no ID3 tag information';
Genre.Caption:='Wrong or no ID3 tag information';
Comment.Caption:='Wrong or no ID3 tag information';
end
else
begin
Title.Caption:=ID3.Title;
Artist.Caption:=ID3.Artist;
Album.Caption:=ID3.Album;
Year.Caption:=ID3.Year;
if ID3.Genre in [0..MaxID3Genre] then
Genre.Caption:=ID3Genre[ID3.Genre]
else
Genre.caption:=IntToStr(ID3.Genre);
Comment.Caption:=ID3.Comment
end;
end;
{$R *.dfm}
procedure ChangeID3Tag(NewID3: TID3Rec; mp3FileName: string);
var
fMP3: file of Byte;
OldID3 : TID3Rec;
begin
try
AssignFile(fMP3, mp3FileName);
Reset(fMP3);
try
Seek(fMP3, FileSize(fMP3) - 128);
BlockRead(fMP3, OldID3, SizeOf(OldID3));
if OldID3.Tag = 'TAG' then
{ Replace old tag }
Seek(fMP3, FileSize(fMP3) - 128)
else
{ Append tag to file because it doesn't exist }
Seek(fMP3, FileSize(fMP3));
BlockWrite(fMP3, NewID3, SizeOf(NewID3));
finally
end;
finally
CloseFile(fMP3);
end;
end;
procedure Dibujar_(F, D: TCanvas; XF, YF, XD, YD, Anc, Alt: Integer);
var
Fuente, Destino: TRect;
begin
Fuente.Left:= XF;
Fuente.Top:= YF;
Fuente.Right:= Fuente.Left + Anc;
Fuente.Bottom:= Fuente.Top + Alt;
Destino.Left:= XD;
Destino.Top:= YD;
Destino.Right:= Destino.Left + Anc;
Destino.Bottom:= Destino.Top + Alt;
D.CopyRect(Destino, F, Fuente);
end;
procedure DibujarNum(X,y, Num: Integer; D: Tcanvas);
begin
Dibujar_(Form1.Image1.Canvas, D, PosXNumEnImag, Num * AltNum, X,y, AncNum, AltNum);
end;
procedure DibujarNum3Dig(X,y, Num: Integer; Destino: tcanvas);
var
D: Integer;
begin
if Num >= 0 then begin
Num:= Num mod 1000;
D:= Num div 100;
DibujarNum(X, Y, 11 - D, Destino);
Num:= Num - D * 100;
end else begin
DibujarNum(X, Y, 0, Destino);
Num:= - Num;
Num:= Num mod 100;
end;
Inc(X, AncNum);
D:= Num div 10;
DibujarNum(X, Y, 11 - D, Destino);
Num:= Num - D * 10;
Inc(X, AncNum);
D:= Num;
DibujarNum(X, Y, 11 - D, Destino);
end;
procedure DibujarCrono;
begin
DibujarNum3Dig(0, 0, CronoSeg, Form1.Image2.Canvas);
end;
procedure IniciarCrono;
begin
CronoAct:= No;
CronoMSeg:= 0;
CarAct:=4;
CronoSeg:= 0;
end;
procedure Iniciarcansion;
begin
CronoAct:=true;
Fincansion:= No;
IniciarCrono;
DibujarCrono;
end;
procedure FillMP3FileList(Folder: string; sl: TStrings);
var Rec : TSearchRec;
begin
sl.Clear;
if (SysUtils.FindFirst(Folder +'*.mp3', faAnyFile, Rec) = 0)or
(SysUtils.FindFirst(Folder +'*.avi', faAnyFile, Rec) = 0)or
(SysUtils.FindFirst(Folder +'*.jpg', faAnyFile, Rec) = 0)then
try
repeat
sl.Add(Rec.Name);
until SysUtils.FindNext(Rec) <> 0;
finally
SysUtils.FindClose(Rec);
end;
end;
function BrowseDialog(const Title: string; const Flag: integer): string;
var
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
Result:='';
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
with BrowseInfo do begin
hwndOwner := Application.Handle;
pszDisplayName := @DisplayName;
lpszTitle := PChar(Title);
ulFlags := Flag;
end;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then begin
SHGetPathFromIDList(lpItemID, TempPath);
Result := IncludeTrailingBackslash(TempPath);
GlobalFreePtr(lpItemID);
end;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var Rec : TSearchRec;
begin
if ListBox1.Items.Count=0 then
exit;
mp3File := Concat(StaticText1.Caption,
ListBox1.Items.Strings
[ListBox1.ItemIndex]);
if not FileExists(mp3File) then
begin
ShowMessage('MP3 file does not exist?!');
exit;
end;
if (SysUtils.FindFirst(mp3file +'*.jpg', faAnyFile, Rec) = 0) then
begin
ListBox1.Visible:=False;
Image2.Picture.LoadFromFile(mp3File);
end
else
FillID3TagInformation (mp3File,
Label9,
Label10,
Label11,
Label12,
Label13,
Label14);
TrackBar1.Max:=0;
MediaPlayer1.FileName:=mp3File;
MediaPlayer1.Open;
TrackBar1.Max := MediaPlayer1.Length;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if TrackBar1.Max <> 0 then
TrackBar1.Position := MediaPlayer1.Position;
StatusBar1.Panels[1].Text:='Echo Por: Shelow Shaq';
if FinCansion = No then
begin
Inc(CronoMSeg, Timer1.Interval);
if CronoMSeg >=59 then begin
CronoMSeg:= 0;
Inc(CronoSeg);
DibujarCrono;
end;
if cronoseg>59 then
begin
cronoseg:=0;
inc(cronomin);
DibujarCrono;
end;
{inc(s);
sleep(1000);
if s>=59 then
begin
s:=0;
inc(m);
end;
if m>=59 then
begin
m:=0;
inc(h);
end;
form1.Repaint;
Label1.Caption:=inttostr(h);
Label15.Caption:=inttostr(m);
Label16.Caption:=IntToStr(s);}
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
{var
HTaskbar: HWND;
OldVal: LongInt;}
begin
FinCansion:=si;
iniciarcansion;
button1.Visible:=false;
StaticText1.Caption := ExtractFilePath(Application.ExeName);
FillMP3FileList(StaticText1.Caption, ListBox1.Items);
TrackBar1.Max:=0;
{ try
// Buscar manejar la barra de tareas
HTaskBar := FindWindow('Shell_TrayWnd', nil);
// Activar teclas de sistema apagado, sólo ganar 95/98/ME
SystemParametersInfo(97, Word(True), @OldVal, 0);
// Desactivar la barra de tareas
EnableWindow(HTaskBar, False);
// Ocultar la barra de tareas
ShowWindow(HTaskbar, SW_HIDE);
finally
with Form1 do
begin
BorderStyle := bsNone;
FormStyle := fsStayOnTop;
Left := 0;
Top := 0; Top:= 0;
Height := Screen.Height;
Width := Screen.Width;
end;
end;}
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
mp3Folder : string;
begin
mp3Folder := BrowseDialog('Choose a folder with mp3 files', BIF_RETURNONLYFSDIRS);
if mp3Folder = '' then
Exit;
StaticText1.Caption := mp3Folder;
MediaPlayer1.FileName:=mp3File;
FillMP3FileList(mp3Folder, ListBox1.Items);
end;
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
SetMPVolume(MediaPlayer1,trackbar2.Position*100);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
{begin
BorderStyle:= bsNone;
FormStyle := fsStayOnTop;}
var
HTaskbar: HWND;
OldVal: LongInt;
begin
button1.Visible:=true;
try
// Buscar manejar la barra de tareas
HTaskBar := FindWindow('Shell_TrayWnd', nil);
// Activar teclas de sistema apagado, sólo ganar 95/98/ME
SystemParametersInfo(97, Word(True), @OldVal, 0);
// Desactivar la barra de tareas
EnableWindow(HTaskBar, False);
// Ocultar la barra de tareas
ShowWindow(HTaskbar, SW_HIDE);
finally
with Form1 do
begin
BorderStyle := bsNone;
Left := 0;
Top := 0; Top:= 0;
Height := Screen.Height;
Width := Screen.Width;
end;
end;
MediaPlayer1.Visible:=false;
Panel1.Align:=alclient;
StatusBar1.Visible:=false;
BitBtn2.Visible:=false;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
HTaskbar: HWND;
OldVal: LongInt;
begin
// Buscar manejar la barra de tareas
HTaskBar := FindWindow('Shell_TrayWnd', nil);
// Activar teclas de sistema de nuevo, único triunfo 95/98/ME
SystemParametersInfo(97, Word(False), @OldVal, 0);
// Activar la barra de tareas
EnableWindow(HTaskBar, True);
// Mostrar la barra de tareas
ShowWindow(HTaskbar, SW_SHOW); ShowWindow (HTaskbar, SW_SHOW);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
HTaskbar: HWND;
OldVal: LongInt;
begin
button1.Visible:=false;
StatusBar1.Visible:=true;
// Buscar manejar la barra de tareas
HTaskBar := FindWindow('Shell_TrayWnd', nil);
// Activar teclas de sistema de nuevo, único triunfo 95/98/ME
SystemParametersInfo(97, Word(False), @OldVal, 0);
// Activar la barra de tareas
EnableWindow(HTaskBar, True);
// Mostrar la barra de tareas
ShowWindow(HTaskbar, SW_SHOW); ShowWindow (HTaskbar, SW_SHOW);
form1.Width:=842;
form1.Height:=466;
form1.BorderStyle:=bsSingle;
form1.Position:=podesktopcenter;
panel1.Align:=alnone;
Panel1.Height:=344;
Panel1.Width:=490;
Panel1.Left:=-1;
Panel1.Top:=22;
BitBtn2.Visible:=true;
MediaPlayer1.Visible:=true;
end;
procedure TForm1.ListBox1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
key:=#0;
mediaplayer1.Open;
mediaplayer1.Play;
end;
end;
end.
Suscribirse a:
Enviar comentarios (Atom)

0 comentarios:
Publicar un comentario