¿Cómo se obtiene la duración (en minutos y segundos) de un archivo de audio MP3/wav en Delphi?Duración de un archivo de audio MP3/wav
Respuesta
Se puede calcular la duración dividiendo el tamaño del archivo de la tasa de bits. Puede obtener la velocidad de bits de uno de los encabezados de cuadros. Por supuesto, esto no funcionará para MP3 de tasa variable, donde puede tener una velocidad diferente para cada fotograma.
Utilizando el Header Layout (que es sólo cuatro bytes):
Abra el MP3 en una corriente
Localizar el inicio de la primera cabecera de la trama mediante la lectura hasta que encontrar la cabecera de sincronización, que tiene 11 bits consecutivos establecidos en 1. Este solía ser 12, pero se modificó para permitir MPEG versión 2.5.
Determine la ID de la versión MPEG. A los efectos de la búsqueda de la velocidad de bits, V2.5 es la misma que V2
Determinar la descripción de la capa
Leer el índice de tasa de bits
Usando la versión MPEG, descripción de la capa y el bit índice de tasa, determinar la tasa de bits real de la tabla de índice de tasa de bits en la referencia de encabezado enlazado
Divida el tamaño del archivo en kilobits ((8 * tamaño en bytes)/1000) por la tasa de bits para obtener la duración segundos
No pude encontrar una muestra Delphi, pero aquí hay un C# implementation que utiliza esta técnica como referencia. Vea el método getLengthInSeconds.
+1, el código para calcular la longitud en segundos es idéntico al que encontré. –
Downvoted: respuesta de solo enlace donde el artículo vinculado ha desaparecido desde que se escribió. – Jules
@Jules: Agradezco un motivo para el voto a la baja, que era válido. Repare el enlace y agregué un resumen de los pasos requeridos y un enlace a la referencia del encabezado. –
Ha pasado mucho tiempo desde que jugué con Dephi.
intento,
FileSize(var aFile)
Eso dará el tamaño en bytes, no en minutos y segundos. –
@ Charlie Sales - Esto fue publicado antes de que OP explicara que querían minutos/segundos. Le daría un descanso a Secko. Además, FileSize() podría ser útil y usarse en la fórmula que Bruce y yo publicamos. –
La pregunta era "¿Cómo se obtiene la longitud de un archivo de audio MP3/WAV en Delphi?". – Secko
Mp3 are divided into frames like this
Tendrá que contar el número de fotogramas
+1 para obtener información sobre marcos. –
no es tan simple como decirlo. El archivo mp3 tiene mucha información antes de que comiencen los marcos ... –
No estoy seguro de que esto funcione, pero encontré este forum post. Compararía resultados con algo así como winamp para asegurarme de que funciona.
Preciso para CBR (velocidad de bits constante), probablemente inexacto para VBR (velocidad de bits variable). En los casos donde solo se necesita un tiempo aproximado, esta es una buena idea –
¡Aunque este método asume que conoce la velocidad de bits! –
@ Charlies Sales - Es correcto, la fórmula no funcionará en casos de VBR, y la publicación del foro no tiene ninguna indicación de cómo determinar la tasa de bits. La respuesta de Bruce McGee es más completa, y la recomendaría sobre la mía. –
Vaya a www.un4seen.com y descargue la biblioteca de bajo, obtendrá mucha información de la sección del foro. ;)
En Windows hay una manera bastante efectiva de determinar la longitud de un archivo MP3.
Esto es un truco enorme pero parece funcionar.
Ryan.
//add MPlayer to the uses clause;
//
//add the MP3PlayLength function to an existing form and
//place a button on the form, linking the button click method to see how it works.
uses MPlayer;
function TForm1.MP3PlayLength(aMP3FileName:string):string;
var
wMP : TMediaPlayer;
wLen : Cardinal;
begin
Try
wMP := TMediaPlayer.Create(self);
try
wMP.Visible := false;
wMP.parent := self;
wMP.FileName := aMP3FileName;
wMP.TimeFormat := tfMilliseconds;
wMP.DeviceType := dtAutoSelect;
wMP.Open;
try
wLen := trunc(wMP.Length/1000);
result := inttostr(wLen div 60)+':'+inttostr(wLen mod 60);
finally
wMP.Close;
end;
finally
wMP.free;
end;
except
result := '(err)';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
showmessage(MP3PlayLength(OpenDialog1.FileName));
end;
recomiendo que uses BASS
http://www.un4seen.com/bass.html
Bass es una biblioteca de audio .. proporcionar a los desarrolladores de gran alcance funciones de transmisión (MP3 ... OGG ..). Todo en una pequeña DLL, de menos de 100 KB de tamaño.
Es muy fácil de usar
uses BASS;
var
playingChannel: HSTREAM;
playingLength: Double;
mp3filename: String;
begin
BASS_Init(-1,44100,0,Application.Handle,nil);
playingChannel:=BASS_StreamCreateFile(FALSE,pchar(mp3filename),0,0,0);
playingLength:=BASS_ChannelBytes2Seconds(playingChannel,
BASS_ChannelGetLength(playingChannel,BASS_POS_BYTE));
end;
No es gratis, ¿verdad? – Vassilis
es, para uso no comercial. Consulte "licenciamiento" en www.un4seen.com –
pago y envío este blog, usando ffmpeg para el fondo solución en un proyecto de rubí.
- 1. iPhone: obtenga la duración de un archivo de audio
- 2. Determinación de la duración y el formato de un archivo de audio
- 3. ¿Cuál es la mejor forma de obtener una duración de archivo de audio en Android?
- 4. Duración del reproductor de audio HTML5 que muestra Nan
- 5. ¿Cómo puedo obtener el tiempo de duración del audio html5?
- 6. Obtener longitud o duración del archivo .wav
- 7. Como llegar duración de la corriente de audio y continuar la transmisión de audio desde cualquier punto
- 8. ¿Cómo reproduzco un archivo de audio en Android?
- 9. verificar la duración de los archivos de audio en la línea de comandos
- 10. Obtener la longitud de un archivo de audio php
- 11. leer información de archivo de audio php
- 12. Generar miniatura para archivo de audio arbitrario
- 13. Invertir archivo de audio en Android
- 14. procesando un archivo wav de audio con C
- 15. Guardando el byte de audio [] en un archivo wav
- 16. Activar un archivo de audio cuando se responde una llamada
- 17. Reproduzca un archivo de audio en Windows 7 Phone
- 18. Java impresión bonita de duración
- 19. Combinar 2 archivos de audio en sox
- 20. FFMPEG No se puede mostrar la duración de un video
- 21. C#: transmisión de un archivo de audio de un servidor a un cliente
- 22. Lista de reproducción de audio HTML5: ¿cómo reproducir un segundo archivo de audio después de que termine el primero?
- 23. Encontrar la longitud de una grabación de audio en iPhone
- 24. Crear forma de onda de archivo de audio en android
- 25. configuración de archivo de audio como tono de llamada
- 26. Calcular duración
- 27. iOS: Formato de archivo de grabación de audio
- 28. C# Audio - ¿Cómo alargar la duración (diferente ritmo, el mismo tono)
- 29. ¿Comienza a reproducir un archivo de audio cargado en el medio con Chrome webkitAudioContext?
- 30. Java - archivo de audio wav de baja resolución
¿Qué API está utilizando para reproducir el archivo MP3? TMediaPlayer? –
no, no estoy reproduciendo el archivo, solo necesito la información del archivo. – Attilah