Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Alguna idea de como Usar TMediaPlayer!! (https://www.clubdelphi.com/foros/showthread.php?t=84207)

Anitan 21-09-2013 14:25:28

Alguna idea de como Usar TMediaPlayer!!
 
Antes q nada ya busque con el navegador de buscar y claro encontre hilos interesantes pero ninguno de ellos resuelve mi duda...

tengo entendido q se hace uso de 2 de components(tmediaplayer, topendialog) e incluso acudi a los videos y tampoco no resuelve mi duda...

ya q el open dialog abre una ventana de tu S.O para buscar tus music y para elegir una carpeta llenas de musica(pones su opcion en multiselect en true) muy cierto no.

basicamente mi duda es: q no quiero quiero q se abra esta ventana y cargue todos las musicas automaticamente dandole la ubicacion de tales archivos (y como hacerlo).


Cualquier idea sera de buena ayuda...!!

Adios y muchas graxxx!!

nlsgarcia 23-09-2013 01:32:15

Anitan,

Cita:

Empezado por Anitan
...Alguna idea de como Usar TMediaPlayer...

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, MPlayer, ComCtrls, MMSystem, ShlObj;

const
   MCI_SETAUDIO = $0873;
   MCI_DGV_SETAUDIO_VOLUME = $4002;
   MCI_DGV_SETAUDIO_ITEM = $00800000;
   MCI_DGV_SETAUDIO_VALUE = $01000000;
   MCI_DGV_STATUS_VOLUME = $4019;
   CSIDL_MYMUSIC = $D;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    ListBox1: TListBox;
    ScrollBar1: TScrollBar;
    ProgressBar1: TProgressBar;
    MediaPlayer1: TMediaPlayer;
    Timer1: TTimer;
    GroupBox1: TGroupBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure ListBox1DblClick(Sender: TObject);
    procedure MediaPlayer1Click(Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean);
    procedure ScrollBar1Change(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button3Click(Sender: TObject);
    procedure MediaPlayer1Notify(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

  // Estructura de Set Values MediaPlayer
  MCI_DGV_SETAUDIO_PARMS = record
     dwCallback: DWORD;
     dwItem: DWORD;
     dwValue: DWORD;
     dwOver: DWORD;
     lpstrAlgorithm: PChar;
     lpstrQuality: PChar;
  end;

  // Estructura de Get Values MediaPlayer
  MCI_STATUS_PARMS = record
     dwCallback: DWORD;
     dwReturn: DWORD;
     dwItem: DWORD;
     dwTrack: DWORD;
  end;

var
  Form1: TForm1;
  Terminated : Boolean;
  PlayList : Boolean;

implementation

{$R *.dfm}

// Obtiene Path de Folders Especiales en Windows
function GetSpecialFolderPath(const CSIDL: Integer): string;
var
  Buffer: Array[0..255] of Char;

begin

  if SHGetSpecialFolderPath(Application.Handle, @Buffer[0], CSIDL, False) then
     Result := Buffer
  else
     RaiseLastOSError;

end;

// Asigna el Volumen al MediaPlayer
procedure MPSetVolume(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;

// Obtiene el Volumen del MediaPlayer
function MPGetVolume(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;
end;

// Establece Valores Iniciales de Ejecución
procedure TForm1.FormCreate(Sender: TObject);
begin

   MediaPlayer1.VisibleButtons := [btPlay, btPause, btStop];
   MediaPlayer1.Width := 271;
   MediaPlayer1.Height := 30;
   MediaPlayer1.TimeFormat := tfMilliseconds;
   MediaPlayer1.AutoEnable := False;
   MediaPlayer1.EnabledButtons := [];

   ScrollBar1.Min := 0;
   ScrollBar1.Max := 1000;

   ScrollBar1.Position := MPGetVolume(MediaPlayer1);

   ProgressBar1.Smooth := True;
   ProgressBar1.Min := 0;
   ProgressBar1.Max := 0;

   Timer1.Interval := 1000;

end;

// Muestra el Progreso de Reproducción de un Archivo MP3
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   if ProgressBar1.Max <> 0 then
      ProgressBar1.Position := MediaPlayer1.Position;
end;

// Selecciona Archivos MP3 para su Reproducción (Por Defecto Folder My Music)
procedure TForm1.Button1Click(Sender: TObject);
var
   OpenDialog : TOpenDialog;
   i : Integer;

begin

   OpenDialog := TOpenDialog.Create(self);
   OpenDialog.InitialDir := GetSpecialFolderPath(CSIDL_MYMUSIC);
   OpenDialog.Options := [ofFileMustExist,ofAllowMultiSelect];
   OpenDialog.Filter := 'MP3|*.mp3';
   OpenDialog.FilterIndex := 1;

   if OpenDialog.Execute then
   begin

      for i:= 0 to OpenDialog.Files.Count - 1 do
      begin
         ListBox1.Items.Add(OpenDialog.Files[i]);
         if ListBox1.ScrollWidth < ListBox1.Canvas.TextWidth(OpenDialog.Files[i]) then
            ListBox1.ScrollWidth := ListBox1.Canvas.TextWidth(OpenDialog.Files[i]) + 120;
      end;

      MediaPlayer1.EnabledButtons := [btPlay, btPause, btStop];

      MediaPlayer1.FileName := ListBox1.Items.Strings[0];
      MediaPlayer1.Open;
      ListBox1.ItemIndex := 0;

   end;

   OpenDialog.Free;

end;

// Lista de Reproducción Automática de Archivos MP3 en el ListBox1
procedure TForm1.Button2Click(Sender: TObject);
var
   i : Integer;

begin

   if ListBox1.Items.Count <> 0 then
   begin

      PlayList := True;

      ScrollBar1.Position := MPGetVolume(MediaPlayer1);
      ProgressBar1.Position := 0;

      repeat

         for i := 0 to ListBox1.Items.Count - 1 do
         begin

            ListBox1.ItemIndex := i;
            MediaPlayer1.FileName := ListBox1.Items.Strings[i];
            MediaPlayer1.EnabledButtons := [btPlay, btPause, btStop];
            MediaPlayer1.Wait := True;
            MediaPlayer1.Open;
            MediaPlayer1.Play;
            ProgressBar1.Max := MediaPlayer1.Length;

            repeat
               Application.ProcessMessages;
               if Terminated then Exit;
            until (MediaPlayer1.Position = MediaPlayer1.Length);

         end;

      until not CheckBox2.Checked; // Repite una Lista de Forma Continua 

      PlayList := False;

   end;

end;

// Borra Lista de Reproducción de Archivos MP3
procedure TForm1.Button3Click(Sender: TObject);
begin
   ListBox1.Clear;
   MediaPlayer1.Stop;
   MediaPlayer1.EnabledButtons := [];
   ProgressBar1.Position := 0;
end;

// Asigna un Archivo MP3 para su Reproducción Manual en MediaPlayer
procedure TForm1.ListBox1Click(Sender: TObject);
begin

   ScrollBar1.Position := 1000;
   MPSetVolume(MediaPlayer1,ScrollBar1.Position);

   MediaPlayer1.FileName := ListBox1.Items.Strings[ListBox1.ItemIndex];
   MediaPlayer1.EnabledButtons := [btPlay, btPause, btStop];
   MediaPlayer1.Open;
   ProgressBar1.Position := 0;
   ProgressBar1.Max := MediaPlayer1.Length;

   if PlayList then
      Terminated := True;

end;

// Reproduce un Archivo MP3 Automáticamente en MediaPlayer
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin

   ScrollBar1.Position := 1000;
   MPSetVolume(MediaPlayer1,ScrollBar1.Position);
   ProgressBar1.Max := MediaPlayer1.Length;

   MediaPlayer1.FileName := ListBox1.Items.Strings[ListBox1.ItemIndex];
   MediaPlayer1.EnabledButtons := [btPlay, btPause, btStop];
   MediaPlayer1.Open;
   ProgressBar1.Position := 0;
   ProgressBar1.Max := MediaPlayer1.Length;

   if CheckBox1.Checked then
   begin
      Mediaplayer1.AutoRewind := True;
      Mediaplayer1.Notify := True;
   end;

   MediaPlayer1.Play;

   if PlayList then
      Terminated := True;

end;

// Gestiona las Acciones del MediaPlayer por medio de su Interfaz
procedure TForm1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType; var DoDefault: Boolean);
begin

   DoDefault := False;

   Mediaplayer1.AutoRewind := False;
   Mediaplayer1.Notify := False;

   case button of

      btPlay : begin

                  if CheckBox1.Checked then
                  begin
                     Mediaplayer1.AutoRewind := True;
                     Mediaplayer1.Notify := True;
                  end;

                  MediaPlayer1.Play;
                  ProgressBar1.Max := MediaPlayer1.Length;

               end;

      btStop : begin
                  MediaPlayer1.Stop;
                  MediaPlayer1.Position := 0;
                  Mediaplayer1.AutoRewind := False;
                  Mediaplayer1.Notify := False;
                  ProgressBar1.Max := 0;
               end;

      btPause : MediaPlayer1.Pause;

   end;

end;

// Cambia el Volumen del MediaPlayer
procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
   MPSetVolume(MediaPlayer1, ScrollBar1.Position) ;
end;

// Libera los Recursos del Form
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   Action := caFree;
end;

// Control de Finalización del MediaPlayer por Lista de Reproducción Automática
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
   Terminated := True;
end;

// Repite un Archivo MP3 de Forma Continua
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
   if MediaPlayer1.NotifyValue = nvSuccessful then
   begin
      if CheckBox1.Checked then
      begin
         MediaPlayer1.Play;
         MediaPlayer1.Notify := True;
      end;
   end;
end;

end.
El código anterior selecciona y reproduce archivos MP3 por medio del componente TMediaPlayer, como se muestra en la siguiente imagen:



El ejemplo esta disponible en el link : http://terawiki.clubdelphi.com/Delph...ediaPlayer.rar

Espero sea útil :)

Nelson.

nlsgarcia 03-04-2014 17:09:28

:rolleyes:

Nelson.

rmmarcus 11-05-2015 06:18:03

Nelson, este es el código con el que estoy trabajando:
Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.ComCtrls, Vcl.StdCtrls, MMSystem,
  Vcl.MPlayer, ShlObj;
//  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
//  ExtCtrls, ComCtrls, StdCtrls, XPMan;

type
  TFrmSonidos1 = class(TForm)
    BtnEjecutar: TButton;
    RdoGrpFormato: TRadioGroup;
    TrkBarIzq: TTrackBar;
    TrkBarDer: TTrackBar;
    LblControlDer: TLabel;
    LblControlIzc: TLabel;
    LblArchivo: TLabel;
    Panel1: TPanel;
    Imagen: TImage;
    OpenDialog1: TOpenDialog;
    MediaPlayer1: TMediaPlayer;
    BtnAbrir: TButton;
    btnDetener: TButton;
    procedure BtnEjecutarClick(Sender: TObject);
    procedure TrkBarDerChange(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RdoGrpFormatoClick(Sender: TObject);
    procedure BtnAbrirClick(Sender: TObject);
    procedure btnDetenerClick(Sender: TObject);
    procedure MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
      var DoDefault: Boolean);
  private
    { Private declarations }
    Procedure Sonar;
    Procedure MostrarVolumen;
  public
    { Public declarations }
  end;

var
  FrmSonidos1: TFrmSonidos1;
  ArchWAV    : String;
  CadWAV     : array[0..256] of Char;

implementation

{$R *.DFM}

Procedure TFrmSonidos1.Sonar;
Begin
  StrPLCopy(CadWAV, ArchWAV, 256);
  Case RdoGrpFormato.ItemIndex of
    0: PlaySound(CadWAV, 0, SND_ASYNC);
    1: PlaySound(CadWAV, 0, SND_SYNC);
    2: PlaySound(CadWAV, 0, SND_ASYNC + SND_LOOP)
  End
End;

procedure TFrmSonidos1.MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
  var DoDefault: Boolean);
begin
  if Button = TMPBtnType.btStop then
     BtnDetener.Click;
end;

Procedure TFrmSonidos1.MostrarVolumen;
var
  Volumen: dWord;
  Izq,Der: Word;

begin
  WaveOutGetVolume(WAVE_MAPPER,@Volumen);
  Izq := Volumen and $ffff;     //Canal Izquierdo
  Der := Volumen shr $10;       //Canal Derecho
  TrkBarIzq.Position := Izq;
  TrkBarDer.Position := Der;
  Caption := 'Volumen Salida WAV Izq: ' + IntToStr(Izq)
           + ' - Der: ' + IntToStr(Der)
end;

procedure TFrmSonidos1.BtnAbrirClick(Sender: TObject);
var
OpenMediaDialog : TOpenDialog;
begin
  OpenMediaDialog := TOpenDialog.Create(Self);
  OpenMediaDialog.Filter := 'Abrir Archivo MP3|*.MP3';
  if OpenMediaDialog.Execute() then
  begin
    MediaPlayer1.FileName := OpenMediaDialog.FileName;
    if (FileExists(OpenMediaDialog.FileName)) and
       (not DirectoryExists(OpenMediaDialog.FileName)) then
    begin
      MediaPlayer1.Wait := true;
      MediaPlayer1.Open;
      MediaPlayer1.Play;
      MediaPlayer1.EnabledButtons :=
        [TMPBtnType.btPause, TMPBtnType.btStop, TMPBtnType.btPlay];
        BtnDetener.Enabled := true;
        BtnAbrir.Enabled   := false;
    end;
  end;

  OpenMediaDialog.Free;
end;

procedure TFrmSonidos1.btnDetenerClick(Sender: TObject);
begin
  MediaPlayer1.Stop;
  MediaPlayer1.Close;

  MediaPlayer1.EnabledButtons := [];
  BtnAbrir.Enabled := true;
end;

procedure TFrmSonidos1.BtnEjecutarClick(Sender: TObject);
begin
  OpenDialog1.Execute;
  ArchWAV := OpenDialog1.FileName;
  LblArchivo.Caption := ArchWAV;
  Sonar
end;

procedure TFrmSonidos1.TrkBarDerChange(Sender: TObject);
var
  Volumen: dWord;
  Izq,Der: Word;
begin
  Izq := TrkBarIzq.Position;     //Canal Izquierdo
  Der := TrkBarDer.Position;     //Canal Derecho
  Volumen := (Der shl $10) + (Izq and $ffff);
  waveOutSetVolume(WAVE_MAPPER,Volumen);
  MostrarVolumen
end;

procedure TFrmSonidos1.FormCreate(Sender: TObject);
begin
  MostrarVolumen;

  MediaPlayer1.AutoEnable := false;
  MediaPlayer1.EnabledButtons := [];
end;

procedure TFrmSonidos1.RdoGrpFormatoClick(Sender: TObject);
begin
  Sonar
end;
end.
Este reproduce archivos WAV controlando el volumen de salida Izquierdo y Derecho con un par de TTrackBar.
Lo que intento hacer es poder reproducir en el mismo programa MP3 con el TMediaPlayer.
Pero no estoy familiarizado con los codecs, no se como manejarlo.

nlsgarcia 11-05-2015 07:11:29

rmmarcus,

Cita:

Empezado por rmmarcus
...no estoy familiarizado con los codecs, no se como manejarlo...

:rolleyes:

Revisa esta información:
Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 20:29:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi