• Miércoles 20 de Noviembre de 2024, 18:26

Autor Tema:  MediaPlayer o como saber duracion de MP3  (Leído 5352 veces)

madriles

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
MediaPlayer o como saber duracion de MP3
« en: Martes 11 de Noviembre de 2003, 09:24 »
0
hola amigos foristas
necesitaba saber como o de donde se puede sacar la duracion ( en tiempo ) de un mp3, para manejar estos datos desde delphi. Se que nombre, album y demas se sacan con un string desde el Stream del mp3 pero no soy capaz de sacar un valor de tiempo
Alguna idea ?

BlackTigerX

  • Miembro activo
  • **
  • Mensajes: 92
    • Ver Perfil
Re: MediaPlayer o como saber duracion de MP3
« Respuesta #1 en: Lunes 15 de Diciembre de 2003, 20:52 »
0
ahi mismo en Delphi viene la ayuda para sacar eso... checa la propiedad Length del componente mediaplayer

type

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

  end;

procedure TForm1.Button1Click(Sender: TObject);

var
  TheLength: LongInt;
begin

  { Set time format - note that some devices don’t support tfHMS }

  MediaPlayer1.TimeFormat := tfHMS;
  { Store length of currently loaded media }
  TheLength := MediaPlayer1.Length;
  with HMSRec(TheLength) do { Typecast TheLength as a HMSRec record }
  begin
    Label1.Caption := IntToStr(Hours); { Horas en Label1 }
    Label2.Caption := IntToStr(Minutes); { Minutos en Label2 }
    Label3.Caption := IntToStr(Seconds); { Segundos en Label3 }
  end;
end;
BlackTigerX

madriles

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: MediaPlayer o como saber duracion de MP3
« Respuesta #2 en: Martes 16 de Diciembre de 2003, 08:47 »
0
hola BlackTigerX
gracias por tu respuesta. Ha veces se nos pasa por alto lo que tenemos delante de las narices
un saludo

BlackTigerX

  • Miembro activo
  • **
  • Mensajes: 92
    • Ver Perfil
Re: MediaPlayer o como saber duracion de MP3
« Respuesta #3 en: Martes 16 de Diciembre de 2003, 09:44 »
0
asi es, de hecho la ayuda de Delphi es bastante buena, te puedo decir que mucho de lo que yo aprendi lo aprendi de los ejemplos de la ayuda de Delphi
 :)
salu2
BlackTigerX

madriles

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: MediaPlayer o como saber duracion de MP3
« Respuesta #4 en: Jueves 18 de Diciembre de 2003, 11:23 »
0
tienes razon la ayuda es muy buena pero... en ingles y algunas veces a los que no sabemos ingles nos cuesta un poco entenderla.
de todas formas, retornando a mi pregunta comentarte que, probada tu respuesta... no me sirve. MP3 es un formato que no admite  tfHMS. de todas maneras me dio la idea, Gracias, asi es que use tfMiliseconds y con un pequeño algoritmo lo pase a formato mm:ss y listo.
aunque la verdad lo que yo pretendia ( y pretendo ) es leerlo sin necesidad del mediaplayer (se que puede hacerse, ya que si pasas el raton en el administrador de archivos te lo indica )
lo que de momento estoy haciendo es leer mediante un TFileStream los ultimos 128 bytes del archivo, donde se guarda la informacion, para cambiarla a mi gusto, de hecho lo que pretendo es en el apartado de comentarios poner la duracion y ya, con todos los datos cambiados, leerlos y usarlos en una base de datos.
como te he dicho, de momento me apaño y si consigo solucionarlo como quiero, ya lo pondre a disposicion de quien le pueda interesar.
un saludo

BlackTigerX

  • Miembro activo
  • **
  • Mensajes: 92
    • Ver Perfil
Re: MediaPlayer o como saber duracion de MP3
« Respuesta #5 en: Jueves 18 de Diciembre de 2003, 16:55 »
0
eso si es cierto... y lo malo tambien es que el hecho de no saber ingles (leer aunque sea) es una desventaja muy grande en este ramo de la programacion.

sobre tu idea de leer la duracion de un mp3... estuve viendo y lo que encontre es que la unica forma de saber la duracion, es leer todo el archivo, contar los "frames" y luego al final algo asi como dividir entre los frames por segundo...

encontre un componente de mp3 gratis de codigo abierto (en ingles), pero puedes ver el codigo y ver como saca eso de la duracion

http://www.dv.co.yu/mpgscript/download.htm

yo tambien voy a ver si puedo sacar eso... porque ya vi que en ningun lado esta esa informacion de como hacerlo en Delphi
(encontre un codigo en php y lo traduje a Delphi pero no sirvio  :angry: )
BlackTigerX

madriles

  • Nuevo Miembro
  • *
  • Mensajes: 21
    • Ver Perfil
Re: MediaPlayer o como saber duracion de MP3
« Respuesta #6 en: Viernes 19 de Diciembre de 2003, 07:17 »
0
gracias por la informacion
voy a mirarlo a ver si con el codigo soy capaz de sacarlo, ya te contare en que acaba todo esto

rodrigoshoto

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: MediaPlayer o como saber duracion de MP3
« Respuesta #7 en: Domingo 29 de Agosto de 2004, 21:43 »
0
Hola, mira te voy a mostrar el código que he creado para obtener lo que quieres... espero te sirva de ayuda...
Bueno esto lo que logra es el nombre del tema... sin su path (dirección dentro del equipo) y su duración. Luego agrego el nombre del tema y su duración a un listbox
De la división el couciente son los minutos y el residuo los segundos... el código está garantizado... pero no considera casos especiales

procedure TForm2.SpeedButton1Click(Sender: TObject);
var
  i,largo,j,minu, seg:integer;
  aux,largot,min:string;
begin
  if opendialog1.Execute then
  begin
    largo:=length(opendialog1.FileName );
    j:=0;
    for i:=largo-4 downto 1 do
    begin
      j:=j+1;
      aux:=copy(opendialog1.FileName ,i,1);
      if aux='\' then
      begin
        break;
      end;
      nombre:= copy(opendialog1.FileName ,i,j);
    end;
    listbox2.Items.Add (opendialog1.FileName) ;
    mediaplayer1.FileName := opendialog1.FileName ;
    mediaplayer1.Open ;
    largot:=inttostr(mediaplayer1.TrackLength [1]);
    for i:=1 to 3 do
    begin
       min:=min+copy(largot,i,1);
    end;
    minu:= strtoint(min) div 60;
    seg:= strtoint(min) mod 60;
    edit1.Text :=  inttostr(minu) + ':' + inttostr(seg);
    listbox1.Items.Add(nombre + ' ' + edit1.Text);
  end;
end;

migbara

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: MediaPlayer o como saber duracion de MP3
« Respuesta #8 en: Lunes 20 de Diciembre de 2004, 11:43 »
0
Yo también estoy muy interesado en conocer cómo saber la duración del MP3, sin tener que abrir el Mediaplayer.

He mirado las referencias que habéis citado en este foro, pero no localizo ningún componente o una manera sencilla para leer la información del archivo MP3 y poder leer directamente su duración o calcularla con los datos que contienen.

En mi caso probé con Windows 2000 y Delphi 7 a hacer un programa que lee todos los MP3 del ordenador y que guarda en una base de datos la información sobre el autor, titulo del tema, etc, pero basandose no en los IDTags sino simplemente en los nombres de los archivos (por tanto mi programa requiere que previamente los nombres de los archivos tengan una estructura bien definida).

Probé a poner un MediaPlayer y a hacer file-open-leeduracion-close, pero cuando se hace un número determinado de ejecuciones, una ventana de windows aparece, en teoría, advirtiendome de una protección en Windows NT acerca del debugger (algo extraño que no habñia visto nunca antes). Probé incluso a ejecutar el EXE por si sólo, pero se queda como colgado. Pienso que el problema del MediaPlayer en una ejecución repetitiva es que no le da tiempo a cargar y descargar el MP3 del mediaplayer y provoca una salida de la ejecución. Algo así, tampoco se me ocurre otra circunstancia. El caso es que si quito todo lo referente al mediaPlayer el programa funciona correctamente.

Es por ello que preferiría encontrar un método que lea directamente la información que contiene cada MP3. Como vosotros ya visteis este tema en su momento, ¿podeis ayudarme de alguna manera?

Saludos  :hola:

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: MediaPlayer o como saber duracion de MP3
« Respuesta #9 en: Lunes 20 de Diciembre de 2004, 22:28 »
0
¿Y probaste usando el TmediaPlayer pero con control total de errores y excepciones?

Pues yo también tengo varios problemas al usar los comandos MCI para reproducir midis con los cuales funciona el Tmediaplayer: los reproduce pero tiene una demora detestable al abrir el midi si se utiliza sintetización por software.

Busca el bitrate por segundo, el nivel de Khz máximo y tomando el tamaño del archivo puedes calcular su longitud.

Primero estaba revisando los encabezados: si notas son sólo 4 bytes. Luego enconté una página con información del encabezado.

http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm

http://mpgedit.org/mpgedit/mpeg_format/MP3Format.html

Primero busca 11 bits consecutivos en 1, siempre comenzando en un byte "FF" y el segundo con los 3 siguiente bits altos en 1. Luego comienzan los bits del encabezado. Tendrías que calcular el tiempo de duración basándote en la longitud del archivo y el bitrate y número de canales que encuentres en los 15 bits que describen estos detalles, algunos bits no tienen nada que ver con lo que necesitas así que tal vez podrías apiñarlos todos los relevantes y acceder a una tabla para obtener un factor que multiplicado a la longitud del archivo te de el tiempo de duración. El problema serían los .mp3 de bitrate variable, tendrías que leer todo el archivo en ese caso y sacar un promedio.