como encontrar la duracion de un mp3

Iniciado por Belial & Grimoire, 22 Mayo 2013, 18:16 PM

0 Miembros y 1 Visitante están viendo este tema.

Belial & Grimoire

hola

tengo una duda, estoy sacando los tags de un mp3, y se me ocurrió encontrar la duración del mismo

hasta ahorita mediante fseek he logrado sacar los hexadecimales, donde se encuentra la mayoria de las cosas, pero después de usar un rato el buscador del foro me encontré con esto, pero es para visual basic

CitarPara la duración de un archivo de audio, lo primero que tienes que plantearte es el formato. ¿Es un MP3? Por ejemplo, un archivo de tres minutos en MP3 codificado a 128 kilobits por segundo (Kbps) ocupa 2,8 Megabytes en disco duro.

Bien, 2,8 * 1048575 = 2936010 bytes. Ok, entonces 3 minutos a 128 kbps son unos 2936010 bytes lo que nos salen unos 978670 bytes por minuto.

Entonces, coges el tamaño del archivo con FileLen. Supongamos que te devuelve 1174404 bytes. Divide 1174404 entre 978670 y ¡voila! tenemos que el archivo tiene 1,2 minutos de duración

con ftell puedo sacar el tamaño del archivo, y al parecer se multiplica por 1048576, que seria 128kb a bits (128x1024x8bits)

lo que no entiendo es de donde salio la cantidad 978670?, alguien sabe como o de donde se obtiene esa cantidad?

porque después de eso se obtiene la longitud y se divide entre esa cantidad y podría encontrar la duración

espero me puedan ayudar
.                                 

rir3760

Cita de: Belial & Grimoire en 22 Mayo 2013, 18:16 PM
CitarBien, 2,8 * 1048575 = 2936010 bytes. Ok, entonces 3 minutos a 128 kbps son unos 2936010 bytes lo que nos salen unos 978670 bytes por minuto.
lo que no entiendo es de donde salio la cantidad 978670?, alguien sabe como o de donde se obtiene esa cantidad?
Se calcula, división entre tres.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Belial & Grimoire

jeje ok gracias, lo intente entre 60 y entre 180 y no se me ocurrió entre 3

gracias de nuevo
.                                 

engel lex

y que pasa si es un mp3 con bitrate variable? D:
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Belial & Grimoire

mmm cierto, no lo habia pensado, mmm creo tendre que googlear un poco mas

bueno, ahorita intente hacer lo mismo en un mp3 de 128kbps que pesa 4.1mb y al final me dio 3.88, que redondeando me aparece 3.9, y para encontrar el tamaño exacto dividi la longitud, ((longitud/1024.0)/1024.0) =  3.9 y le tuve que sumar 0.2 para que me aparezca igual que en las propiedades 4,1

al hacer la misma operacion de arriba, multiplique 4.1 * 1048576, despues dividi el resultado por el mismo tamaño redondeado y me aparecio 1074790

y para finalizar, dividi la longitud entre los bites por minuto

4064417÷1074790 = 3,781591753, lo que serian 3 minutos y siete segundos, redondeado serian 3.8, y le sume 0.2, de los primeros 0.2 que le sume al principio, asi que seria 3.8+0.2= 4.1

la duracion del mp3 es de 4:12, seria muy cercano a 4.1, pero no sabria si es 4:01 o 4:10, a lo que le veo muchos problemas porque ademas la duracion es de 4:12 y no 4:01 ni 4:10

alguien sabria otra forma de hacer esto, o como podria mejorarlo?

salu2
.                                 

engel lex

4.1 minutos = 4.1 * 60 = 246 = 4:06 y te debe descuadrar porque no todos los bits son "musica" hay cabeceras y ciertas codificaciones (ya tu mismo las viste)

de donde sacas ese 0.2? fue arbitrario?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Belial & Grimoire

sip, 0.2 lo puse solo para llegar a 4,1, ya que por la longitud, me salio 3.9 redondeado, asi que hice la prueba con un mp3 y un .avi y me aparecio bien la cantidad al sumarle 0.2 al final

(((longitud/1024.0)/1024.0) + 0.2);

pues creo buscare otra forma de encontrar la duracion, se me ha ocurrido encontrar la longitud eliminando los ID3_tags del inicio y del final, y luego dividirlo entre el bitrate, el problema es como mencionaste, como saber cuando el bitrate es variable

.                                 

leosansan

#7
Cita de: Belial & Grimoire en 22 Mayo 2013, 23:08 PM

alguien sabria otra forma de hacer esto, o como podria mejorarlo?


Creo  que simplemente es esto:

Código (cpp) [Seleccionar]

3,9 MB* 1024 KB/MB = 3993,6 KB

3993,6 KB * 8 kb/kB = 31948,8 kb en total

31948,8 kb / 128 kb/s = 249,6 segundos / 60 S= 4,16 MIN = 4 MIN 9,6 SEG


O sea los 4.10, redondeando, que te marcaba.

Saluditos!. .... ..