Estoy escribiendo una librería de C++ para la codificación y la descodificación de audio entre diferentes formatos de códecs. Tengo una rutina para detectar rápidamente el formato antes de cargar el códec necesario biblioteca.

De los archivos WAV uno puede simple vistazo a los valores ASCII «RIFF» y «OLA» en el inicio del archivo. Lo mismo se aplica a FLAC, simplemente podemos leer en los primeros 4 bytes, que será «fLaC».

Pero, ¿cómo puedo detectar rápidamente si un archivo MP3? Yo no puede depender de la extensión de archivo. Yo también puedo intentar decodificar el primer MP3 de marco, ya que puede haber datos adicionales en el inicio del archivo (por ejemplo: ID3, imagen de portada, etc).

OriginalEl autor goocreations | 2012-07-06

2 Comentarios

  1. 24

    Detectar si un archivo MP3 es más complicada que la búsqueda de un patrón fijo en el archivo.

    Some concepts

    (Ver http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header para más detalles)

    • MP3 archivo consta de una serie de fotogramas y cada cuadro tiene un encabezado al principio.
    • Encabezado comienza en un byte en la frontera con 11 bits de sincronización de la palabra, que es de todos 1s. Por tanto, la sincronización de la palabra es 0xFFE o 0XFFF.
    • Longitud de cada marco se calcula basado en la cabecera de los parámetros.

    Algorithm to determine if a file is MP3 or not

    • De búsqueda para la sincronización de la palabra en el archivo (0xFFF o 0xFFE).
    • Analizar el encabezado de parámetros.
    • Determinar la longitud del bastidor usando el encabezado de parámetros.
    • Buscar la siguiente marco con la longitud de trama.
    • Si encuentra otro de sincronización word después de la búsqueda, a continuación, el archivo es principalmente un archivo MP3.
    • Para estar seguro, repita el proceso para encontrar N consecutivos MP3 marcos. N puede ser mayor para un mejor precio.

    OriginalEl autor Oak Bytes

  2. -3

    Acabo de comprobar la firma como en tu onda y flac prueba.

    Un archivo mp3 debe tener esto en hexadecimal:

    0x49, 0x44, 0x33

    Funciona para algunos de los archivos que tenía. No estoy seguro de si funciona en todas las circunstancias de modo más complejo, la solución como el Roble Bytes de la respuesta puede ser necesario.

    La secuencia de bytes sugieren (I D 3) es la parte de la cabecera de un ID3 (v2) etiqueta de metadatos, pero no todos los archivos MP3 tienen etiquetas ID3v2 (y ID3v2.4 etiqueta podría ser al final de el archivo en lugar de al principio).

    OriginalEl autor pilkch

Dejar respuesta

Please enter your comment!
Please enter your name here