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
Imports System
Imports System.IO
Public Class MP3Reader
Public Shared Sub Main()
Const SIZE As Integer = 128
Dim data As Byte()
Console.Write("Enter name: ")
Dim name As String = Console.ReadLine()
If Not File.Exists(name) Then
Console.WriteLine("Not exists")
Return
End If
Try
Dim file As FileStream = File.OpenRead(name)
data = New Byte(127) {}
file.Seek(-128, SeekOrigin.[End])
file.Read(data, 0, SIZE)
file.Close()
Dim b1 As Byte = data(0)
Dim b2 As Byte = data(1)
Dim b3 As Byte = data(2)
If Convert.ToChar(b1) <> "T"c OrElse Convert.ToChar(b2) <> "A"c OrElse Convert.ToChar(b3) <> "G"c Then
Console.WriteLine("not mp3 valid")
Return
End If
Dim i As Integer = 3
Dim title As String = ""
While i < 33
If data(i) <> 0 Then title += Convert.ToChar(data(i))
i += 1
End While
Dim author As String = ""
For i = 33 To 63 - 1
If data(i) <> 0 Then author += Convert.ToChar(data(i))
Next
Dim album As String = ""
For i = 63 To 93 - 1
If data(i) <> 0 Then album += Convert.ToChar(data(i))
Next
Dim year As String = ""
For i = 93 To 97 - 1
If data(i) <> 0 Then year += Convert.ToChar(data(i))
Next
Dim comments As String = ""
For i = 97 To 127 - 1
If data(i) <> 0 Then comments += Convert.ToChar(data(i))
Next
Console.WriteLine("Data of MP3:")
Console.WriteLine("----------------------------")
Console.WriteLine()
Console.WriteLine("Title: " & title)
Console.WriteLine("Author: " & author)
Console.WriteLine("Album: " & album)
Console.WriteLine("Year: " & year)
Console.WriteLine("Comments: " & comments)
Console.WriteLine("Genre: " & data(127))
Catch __unusedException1__ As Exception
Console.WriteLine("Error")
End Try
End Sub
End Class