2011-06-02 18 views

Respuesta

1

utilicé enfoque diferente para calcular el tiempo de cada fotograma en el archivo mp3 .. el supuesto de que todos los marcos presentan el mismo tamaño en el archivo .. así que acaba de obtener el tiempo total del archivo mp3 en milisegundos .. luego calcular cuadros en total en el archivo y finalmente dividir el tiempo total de cuadros en total .. lo que la fórmula se vería así:

float frameTime = totalTimeMillisec/totalFrames; 

que obtendrá el tiempo total de todos los fotogramas de la pista en milisegundos .. después de hacerlo, obtuve alrededor de 52 milisegundos ... y eso fue similar a lo que dijo Mark Heath ..

todos modos gracias a todos por las soluciones ..

0

El marco no es lo mismo que el tiempo. PERO, si conoce el tamaño total, puede hacer algo como esto overhead + Frame * time = total size.

+0

Tengo longitud de fotograma y tengo el tiempo de duración total del archivo mp3 ... pero necesito obtener de alguna manera el tiempo de cada fotograma en milisegundos ... por ejemplo, si obtengo 20 fotogramas mp3 obtengo alrededor de 1 milisegundos, lo que significa 1 segundo ... cómo lograr esto – SolidSnake

+0

http://www.mp3-converter.com/mp3codec/frames.htm FrameSize = 144 * BitRate/(SampleRate + Padding) – Mikhail

0

http://en.wikipedia.org/wiki/MP3 tiene una entrada en la estructura de archivos MP3 pero debe intentar encontrar uno con más detalles.

El encabezado del marco contiene un campo denominado tasa de bits. Dada esta tasa de bits y el tamaño de los datos del fotograma, puede determinar la cantidad de tiempo real de la música en los datos de ese fotograma. Espero que la fórmula sea: DataSize = BitRate * TimeInterval.

Consulte http://www.mp3-tech.org/programmer/frame_header.html para obtener detalles sobre la codificación de la velocidad de bits.

+0

No necesito el tamaño de la información .. Solo necesito el total tiempo de ese fotograma ... – SolidSnake

+0

... que obtienes a través de una división. – Andrei

8

Debe analizar el encabezado del marco de MP3 para obtener la versión de MP3 y el número de capa (consulte this document para ver el formato de encabezado de marco). Una vez que los tenga, puede usar la siguiente tabla de búsqueda para obtener el número de muestras en el marco.

private static readonly int[,] samplesPerFrame = new int[,] { 
     { // MPEG Version 1 
      384, // Layer1 
      1152, // Layer2 
      1152 // Layer3 
     }, 
     { // MPEG Version 2 & 2.5 
      384, // Layer1 
      1152, // Layer2 
      576  // Layer3 
     } 
    }; 
+0

ok ... su MPEG versión 1 y la capa es 1152 ahora ¿dónde debería agregar eso para obtener el tiempo total del marco? – SolidSnake

+0

la frecuencia de muestreo también se puede encontrar desde el encabezado MP3. La frecuencia de muestreo es muestras por segundo, por lo que el número de muestras dividido por la frecuencia de muestreo es la duración del cuadro. (No puedo recordar la parte superior de mi cabeza si tienes que factorizar el número de canales también, creo que sí, así que para el estéreo, primero reducirás a la mitad el número de muestras) –

+0

hmm, ahora hice lo que me dijiste pero me estoy poniendo "0" siempre ... esto es lo que hice, "mp3Frame.SampleCount/mp3Frame.SampleRate" .. btw, mp3Frame.SampleCount = 576 y mp3Frame.SampleRate = 11025 .. tal vez necesito multiplicar el SampleCount por 2? – SolidSnake

0

Dado que los datos se cifran no puedes saber la velocidad de bits jugado hasta que los datos han sido descifrados. Nadie habla de cómo encriptar (comprimir) y descomprimir los datos. Todo lo que sé es que el programa Lame tomará un archivo de onda y luego lo filtrará/remuestreará y de alguna manera comprimirá los datos antes de colocarlos dentro de los marcos. No sé si estos reproductores de mp3 están usando palabras de 8 o 16 bits para reproducir en cada canal. Pero la velocidad de bits y todas están relacionadas con el tamaño del byte del canal y la frecuencia de muestreo reproducida. No es lo mismo que los datos primero afectan al codificador. Cómo ver los resultados finales que juega el jugador es el truco aquí. CBR hace una buena referencia para aprender más adelante VBR.

¿Cómo se toman 16 bits (WORD por muestra) de una muestra de un canal y se comprime ot para los datos de MP3? ¿Los resultados son de 12 bits o menos? ¿Cómo se llama la rutina de compresión?

+0

cifrado? ¿Quieres decir comprimido? Tu respuesta es un poco confusa – nalply

15

Hmm, es extraño, pero nadie responde la pregunta correctamente. He estado investigando, aquí está la fórmula:

longitud de trama (en ms) = (muestras por velocidad de fotogramas/muestra (en Hz)) * 1,000

El MP3 típico (una capa de MPEG III, versión 1) tiene 1152 muestras por cuadro y la frecuencia de muestreo es (comúnmente) 44100 hz. Entonces (1152/44100) * 1000 = 26,122449 ms por cuadro.

Observe que la longitud de cuadro (tiempo) no depende de la velocidad de bits.

Más información: http://www.mp3-converter.com/mp3codec/frames.htm

Cuestiones relacionadas