delphi - para - online audio converter
Duración de un archivo de audio MP3/wav (9)
En Windows hay una manera razonablemente efectiva de determinar la longitud de un archivo MP3.
Este es un gran truco, 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;
¿Cómo se obtiene la duración (en minutos y segundos) de un archivo de audio MP3 / WAV en Delphi?
Ha pasado mucho tiempo desde que jugué con Dephi.
Tratar,
FileSize(var aFile)
No estoy seguro de que esto funcione, pero encontré esta publicación en el foro . Compararía resultados con algo así como winamp para asegurarme de que funciona.
Vaya a www.un4seen.com y descargue la biblioteca de bajo obtendrá mucha información de la sección del foro. ;)
Mp3 se divide en marcos como este
Necesitarás contar la cantidad de cuadros
O pruebe el texto de enlace de MediaInfo.dll.
Incluye una clase de envoltura Delphi. Por ejemplo:
MediaInfo_Get(Handle, Stream_General, 0, ''Duration'', Info_Text, Info_Name)
Otra solución DSPack link text
size := FilterGraph.Duration;
Te recomiendo que uses BASS
http://www.un4seen.com/bass.html
BASS es una biblioteca de audio ... para proporcionar a los desarrolladores poderosas 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;
revise este blog, usando ffmpeg para una solución de fondo en un proyecto de ruby.
Puede calcular la duración dividiendo el tamaño del archivo por la velocidad de bits. Puede obtener la velocidad de bits de uno de los encabezados de cuadros. Por supuesto, esto no funcionará para MP3 de velocidad variable, donde puede tener una velocidad diferente para cada fotograma.
Usando el diseño del encabezado (son solo cuatro bytes):
Abre el MP3 en una transmisión
Busque el comienzo del primer encabezado del marco leyendo hasta encontrar el encabezado de sincronización, que tiene 11 bits consecutivos establecidos en 1. Esto solía ser 12, pero se modificó para permitir la versión 2.5 de MPEG.
Determine la ID de la versión MPEG. A los efectos de encontrar la velocidad de bits, V2.5 es lo mismo que V2
Determine la descripción de la capa
Lee el índice de tasa de bits
Utilizando la versión MPEG, la descripción de capa y el índice de tasa de bits, determine la tasa de bits real de la tabla de índice de tasa de bits en la referencia de encabezado vinculado.
Divida el tamaño del archivo en kilobits ((8 * tamaño en bytes) / 1000) por la velocidad de bits para obtener la duración en segundos
No pude encontrar una muestra de Delphi, pero aquí hay una implementación de C # que utiliza esta técnica para fines de referencia. Vea el método getLengthInSeconds.