Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Belial & Grimoire en 22 Mayo 2013, 18:16 pm



Título: como encontrar la duracion de un mp3
Publicado por: Belial & Grimoire en 22 Mayo 2013, 18:16 pm
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

Citar
Para 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


Título: Re: como encontrar la duracion de un mp3
Publicado por: rir3760 en 22 Mayo 2013, 19:16 pm
Citar
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.
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


Título: Re: como encontrar la duracion de un mp3
Publicado por: Belial & Grimoire en 22 Mayo 2013, 19:44 pm
jeje ok gracias, lo intente entre 60 y entre 180 y no se me ocurrió entre 3

gracias de nuevo


Título: Re: como encontrar la duracion de un mp3
Publicado por: engel lex en 22 Mayo 2013, 20:10 pm
y que pasa si es un mp3 con bitrate variable? D:


Título: Re: como encontrar la duracion de un mp3
Publicado por: Belial & Grimoire en 22 Mayo 2013, 23:08 pm
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


Título: Re: como encontrar la duracion de un mp3
Publicado por: engel lex en 23 Mayo 2013, 03:57 am
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?


Título: Re: como encontrar la duracion de un mp3
Publicado por: Belial & Grimoire en 23 Mayo 2013, 04:39 am
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



Título: Re: como encontrar la duracion de un mp3
Publicado por: leosansan en 28 Mayo 2013, 07:20 am

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


Creo  que simplemente es esto:

Código
  1. 3,9 MB* 1024 KB/MB = 3993,6 KB
  2.  
  3. 3993,6 KB * 8 kb/kB = 31948,8 kb en total
  4.  
  5. 31948,8 kb / 128 kb/s = 249,6 segundos / 60 S= 4,16 MIN = 4 MIN 9,6 SEG
  6.  

O sea los 4.10, redondeando, que te marcaba.

Saluditos!. .... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)