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.
 

programas en delphi Copyright © 2011 - |- Template created by O Pregador - |- Powered by Blogger Templates