2010-06-03 27 views
13

Quiero leer archivos MP3 en C++ y prefiero escribir mi propio código para esto. Básicamente para aprender cómo funciona el tipo de archivo. Quiero leer todos los bits de datos hexadecimales de un archivo MP3 y hacer que mis altavoces lo reproduzcan. :) No tengo idea de dónde empezar, ya que todavía no sé cómo se almacenan los datos en un archivo MP3.Lectura de archivos MP3

Gracias por su ayuda

+10

Si necesita hacer una consulta como esta, le recomiendo que abandone la idea de escribirla por su cuenta, y más bien use alguna biblioteca. – nothrow

Respuesta

17

Puede comprar la especificación para el formato MP3 de here. Se trata de 160EUR.

Ah, y por cierto, no es "datos hexadecimales". Si aún se encuentra en el punto en que se refiere a datos no legibles como "hexadecimal" (que es un sistema numérico), profundizar de cabeza en un formato de datos binarios que involucre algoritmos de decodificación/codificación complejos podría ser un poco demasiado para ti por el momento.

¿Qué le parece comenzar escribiendo un reproductor que pueda reproducir archivos .wav? (Cualquier archivo .wav razonable, que importa, teniendo en cuenta el formato de archivo y los diferentes formatos de audio)

+1

¿Cuál es la diferencia entre la especificación adquirible y los enlaces proporcionados por otras respuestas? – Pindatjuh

+0

+1 para la sugerencia de comenzar con archivos .wav –

+1

@Pindatjuh: Diría que es completo (y posiblemente en algunas partes del mundo, legalidad). Además, muchos de los enlaces parecen referirse al formato de archivo (que es razonablemente simple) y no al algoritmo de descompresión real. –

4

Bueno, sería difícil :)

de todos modos, su solicitud debe constar de dos partes - biblioteca de descompresión/rutinas y su principal back-end, lo que llevará algún dat descomprimido un bloque y en realidad reproducirlo.

recomendaría "Compresión de datos" libro de David Salomon para entender cómo su decodificador en realidad debería hacerlo . Las variantes para sus segundas partes son, desafortunadamente, demasiado amplias para cubrirlas en una oración.

También podría intentar investigar algunos de código abierto mp3 decodificadores/libs decodificación como this one.

+1

+1 por recomendar la lectura del código existente. –

5

Hice un poco de investigación, tal vez te ayude.

estructura de archivos

enter image description here Un archivo MP3 se compone de múltiples marcos de MP3, que consisten en una cabecera y un bloque de datos.Esta secuencia de cuadros se llama una corriente elemental. Los marcos no son elementos independientes ("depósito de bytes") y, por lo tanto, no se pueden extraer en límites de marcos arbitrarios. Los bloques de datos MP3 contienen la información de audio (comprimida) en términos de frecuencias y amplitudes. El diagrama muestra que el encabezado de MP3 consiste en una palabra de sincronización, que se usa para identificar el comienzo de un fotograma válido. Esto es seguido por un bit que indica que este es el estándar MPEG y dos bits que indican que se utiliza la capa 3; de ahí MPEG-1 Audio Layer 3 o MP3. Después de esto, los valores serán diferentes, dependiendo del archivo MP3. ISO/IEC 11172-3 define el rango de valores para cada sección del encabezado junto con la especificación del encabezado. La mayoría de los archivos MP3 actuales contienen metadatos ID3, que preceden o siguen a los cuadros MP3; como se observa en el diagrama.

El código fuente de LAME

LAME es un libary MP3, pero también es de código abierto, cosa que significa que se puede descargar el código fuente y buscar en ella. http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz/download Lo eche un vistazo yo mismo, y parece estar escrito en C o C++, así que tienes suerte. Si examina el código fuente de LAME y entiende cómo funciona, tal vez pueda lograr crear su propia biblioteca de MP3. Solo tenga en cuenta que LAME no es una biblioteca para reproducir archivos MP3, sino para codificarlos. Pero como crea MP3 en lugar de leerlos, creo que la estructura debería ser un poco más clara que con cualquier otra biblioteca de reproductores de MP3.

Explicación del formato de archivo MP3

Esto también parece explicar cómo funciona MP3 bastante bien, pero es pura teoría, por lo que tendrá mucha paciencia. http://www.mp3-converter.com/mp3codec/