Programación General > Delphi
MediaPlayer o como saber duracion de MP3
BlackTigerX:
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: )
madriles:
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:
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:
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:
¿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.
Navegación
[*] Página Anterior
Ir a la versión completa