Lector de MP3 Curso de Programación Visual Basic

Lección:

Administración de Archivos


Ejercicio:

Lector de MP3 9


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