- Curso
- Archivos binarios
- Leer etiquetas ID3 v1 de archivo MP3
Leer etiquetas ID3 v1 de archivo MP3
Última actualización:
23/08/2020
⁃
Dificultad:
Intermedio
Cree un programa en C# que lea las etiquetas de la especificación ID3 v1 desde un archivo de música MP3. También debería comprobar si la etiqueta ID corresponde con los caracteres TAG de la versión 1.
Las especificaciones ID3 se aplican a cualquier archivo o contenedor audiovisual. Sin embargo, generalmente se aplica principalmente contenedores de audio. Hay tres versiones de la especificación que son compatibles. Por ejemplo, un archivo puede contener etiquetas simultáneamente versión 1.1 y versión 2.0. En este caso, el reproductor multimedia debe decidir cuáles son relevantes.
ID3 version 1
Esta primera especificación es muy simple. Consiste en adjuntar un bloque de tamaño fijo de 128 bytes al final del fichero en cuestión. Este bloque contiene las siguientes etiquetas:
- Una cabecera de identificación con los caracteres "TAG".
- Título: 30 caracteres.
- Artista: 30 caracteres.
- Álbum: 30 caracteres.
- Año: 4 caracteres.
- Un comentario: 30 caracteres.
- Género (musical): un carácter.
Todas las etiquetas usan caracteres ASCII, excepto el género, que es un número entero almacenado en un único byte. El género musical asociado a cada byte está predefinido en el estándar e incluye definiciones de 80 géneros, numerados del 0 al 79. Determinados programas de reproducción han ampliado por su cuenta los géneros definidos (a partir del número 80).
Entrada
Salida
- TAG
- Impact Moderato
- Nauj Llopir
- YouTube Audio Library
- 1993
-
- :
Solución
- using System;
- using System.IO;
- using System.Text;
-
- public class LeerID3v1Etiquetas
- {
- public class ID3v1Etiqueta
- {
- private static byte idEtiquetaLongitud = 3;
- private static byte tituloEtiquetaLongitud = 30;
- private static byte artistaEtiquetaLongitud = 30;
- private static byte albumEtiquetaLongitud = 30;
- private static byte anyoEtiquetaLongitud = 4;
- private static byte comentarioEtiquetaLongitud = 30;
- private static byte generoEtiquetaLongitud = 1;
-
- public byte[] Id = new byte[idEtiquetaLongitud];
- public byte[] Titulo = new byte[tituloEtiquetaLongitud];
- public byte[] Artista = new byte[artistaEtiquetaLongitud];
- public byte[] Album = new byte[albumEtiquetaLongitud];
- public byte[] Anyo = new byte[anyoEtiquetaLongitud];
- public byte[] Comentario = new byte[comentarioEtiquetaLongitud];
- public byte[] Genero = new byte[generoEtiquetaLongitud];
-
-
- public bool EsID3v1Etiqueta()
- {
- if (Encoding.Default.GetString(Id).Equals("TAG"))
- {
- return true;
- }
- return false;
- }
-
- public override string ToString()
- {
- StringBuilder tag = new StringBuilder();
-
- tag.AppendLine(Encoding.Default.GetString(Id));
- tag.AppendLine(Encoding.Default.GetString(Titulo));
- tag.AppendLine(Encoding.Default.GetString(Artista));
- tag.AppendLine(Encoding.Default.GetString(Album));
- tag.AppendLine(Encoding.Default.GetString(Anyo));
- tag.AppendLine(Encoding.Default.GetString(Comentario));
- tag.AppendLine(Encoding.Default.GetString(Genero));
-
- return tag.ToString();
- }
- }
-
- public static void Main(string[] args)
- {
- const int TAMANYO = 128;
- byte[] datos = new byte[TAMANYO];
-
- ID3v1Etiqueta tag = new ID3v1Etiqueta();
-
- // Leer datos archivo .mp3
- string nombreArchivo = "input.mp3";
- using (FileStream archivo = File.OpenRead(nombreArchivo))
- {
- archivo.Seek(-128, SeekOrigin.End);
-
- archivo.Read(tag.Id, 0, tag.Id.Length);
- archivo.Read(tag.Titulo, 0, tag.Titulo.Length);
- archivo.Read(tag.Artista, 0, tag.Artista.Length);
- archivo.Read(tag.Album, 0, tag.Album.Length);
- archivo.Read(tag.Anyo, 0, tag.Anyo.Length);
- archivo.Read(tag.Comentario, 0, tag.Comentario.Length);
- archivo.Read(tag.Genero, 0, tag.Genero.Length);
- }
-
- if (tag.EsID3v1Etiqueta())
- {
- Console.WriteLine(tag.ToString());
- }
- }
- }