Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-08-2015
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Error calculando duración MP3

Hola, tengo el siguiente codigo de delphi 6:
Código Delphi [-]

type
  HMSRec = record
    Hours: byte;
    Minutes: byte;
    Seconds: byte;
    NotUsed: byte;
  end;

// y ya en código

  If OpenDialog1.Execute then begin
    Label16.Caption := OpenDialog1.FileName;
    MediaPlayer1.FileName := OpenDialog1.FileName;
    MediaPlayer1.Open;
    MediaPlayer1.Rewind;
    MediaPlayer1.TimeFormat := tfHMS;
    TheLength := MediaPlayer1.Length;
    with HMSRec(TheLength) do { Typecast TheLength as a HMSRec record }
    begin
      Label17.Caption := IntToStr(Hours);
      Label17.Caption := Label17.Caption+'H ' + IntToStr(Minutes) + 'M ';
      Label17.Caption := Label17.Caption+ IntToStr(Seconds)+ 'S ';
    end;
  end;

Y cuando selecciono un archivo MP3 el tiempo no lo hace bien, el fichero lo reproduzco con el VLC, por ejemplo y esta bien y la duracción que dice si es real, pero en este codigo, sacado de la ayuda, da unos valores muy diferentes.

Que estoy haciendo mal???
Gracias
Responder Con Cita
  #2  
Antiguo 30-08-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola tarco35.

Intenta de este modo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  len: Integer;
  mp : TMediaPlayer;
begin
  if OpenDialog1.Execute then
  begin
    mp := MediaPlayer1;
    mp.FileName   := OpenDialog1.FileName;
    mp.TimeFormat := tfMilliseconds;
    mp.Open;
    len := Trunc(mp.Length / 1000);
    Label16.Caption := mp.FileName;
    Label17.Caption := Format('%d:%d:%d',[len div 3600, len div 60, len mod 60]);
    mp.Close;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 30-08-2015 a las 23:39:33.
Responder Con Cita
  #3  
Antiguo 31-08-2015
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Thumbs up

Va perfecto... muchas gracias.... un saludo.
Responder Con Cita
  #4  
Antiguo 31-08-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Me alegro

Por si te resultase mas cómoda, rapida, etc., esta es otra forma en que podes conseguir la duración:
Código Delphi [-]
uses mmSystem;

function MP3Length(const FileName: string): string;
var
  LenStr: string;
  len   : Integer;
begin
  mciSendString(PChar(Format('open "%s" alias MP3',[FileName])), nil, 0, 0);
  SetLength(LenStr, 255);
  mciSendString('status MP3 length', PChar(LenStr), Length(LenStr), 0);
  len := Trunc(StrToInt(LenStr) / 1000);
  Result := Format('%d:%d:%d', [len div 3600, len div 60, len mod 60 ])
end;

Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
    ShowMessage(MP3Length(OpenDialog1.FileName));
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 31-08-2015
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 21
tarco35 Va por buen camino
Y ya ... hay alguna forma de saber cuando termina de reproducir un TmediaPlayer.. he probado con el evento OnNotify pero parace ser que solo se produce cuando haces click.
Responder Con Cita
  #6  
Antiguo 31-08-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

El evento es el correcto pero tendrías que evaluar la propiedad Mode, ejemplo:

Código Delphi [-]
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
var
  mp: TMediaPlayer;
begin
  mp := TMediaPlayer(Sender);
  if mp.Mode = mpStopped then
  begin
    ShowMessage('¡ Se terminó !');
    mp.Notify := True;
  end;
end;
( Recuerda que es una pregunta por hilo... )

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Calculando una fecha con IncMonth gsilvei Varios 4 01-07-2011 07:04:22
Obtener decimales calculando porcentajes rrf SQL 5 26-08-2010 23:59:13
Duracion de pistas chiche_s Varios 1 24-12-2009 11:48:08
calcular duracion mp3 madriles Varios 5 10-08-2005 16:20:24
funcion duracion tango01 Varios 1 10-01-2005 21:11:42


La franja horaria es GMT +2. Ahora son las 18:21:16.


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