Ejercicio
Lector de MP3
Objetivo
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 versión 1
Esta primera especificación es muy simple. Consiste en adjuntar un tamaño de bloque fijo de 128 bytes al final del archivo en cuestión. Este bloque contiene las siguientes etiquetas: Un encabezado que identifica la presencia del bloque ID3 y la versión. Específicamente, dicho encabezado comprende caracteres TAG.
Título: 30 caracteres.
Artista: 30 caracteres.
Álbum: 30 caracteres.
Año: 4 caracteres.
Comentario: 30 caracteres.
Género (música): un personaje.
Todas las etiquetas que usan caracteres ASCII excepto el género, un entero almacenado dentro de un solo byte. El género musical asociado con cada byte está predefinido en las definiciones estándar e incluye 80 géneros, numerados del 0 al 79. Algunos programas de cría han ampliado sus propios géneros definidos (desde el 80).
Código de Ejemplo
import java.util.*;
public class Main
{
public static void main(String[] args)
{
final int SIZE = 128;
byte[] data;
System.out.print("Enter name: ");
String name = new Scanner(System.in).nextLine();
if (!(new java.io.File(name)).isFile())
{
System.out.println("Not exists");
return;
}
try
{
java.io.FileInputStream file = File.OpenRead(name);
data = new byte[SIZE];
file.Seek(-128, SeekOrigin.End);
file.read(data, 0, SIZE);
file.close();
byte b1 = data[0];
byte b2 = data[1];
byte b3 = data[2];
if ((char)b1 != 'T' || (char)b2 != 'A' || (char)b3 != 'G')
{
System.out.println("not mp3 valid");
return;
}
int i = 3;
String title = "";
for (; i < 33; i++)
{
if (data[i] != 0)
{
title += (char)data[i];
}
}
String author = "";
for (i = 33; i < 63; i++)
{
if (data[i] != 0)
{
author += (char)data[i];
}
}
String album = "";
for (i = 63; i < 93; i++)
{
if (data[i] != 0)
{
album += (char)data[i];
}
}
String year = "";
for (i = 93; i < 97; i++)
{
if (data[i] != 0)
{
year += (char)data[i];
}
}
String comments = "";
for (i = 97; i < 127; i++)
{
if (data[i] != 0)
{
comments += (char)data[i];
}
}
System.out.println("Data of MP3:");
System.out.println("----------------------------");
System.out.println();
System.out.println("Title: " + title);
System.out.println("Author: " + author);
System.out.println("Album: " + album);
System.out.println("Year: " + year);
System.out.println("Comments: " + comments);
System.out.println("Genre: " + data[127]);
}
catch (RuntimeException e)
{
System.out.println("Error");
}
}
}