MP3 reader Learn programming C#



Lesson:

File Management


Exercise:

MP3 reader


Objetive:

ID3 specifications apply to any file or audiovisual container, but they are primarily used with audio containers. There are three compatible versions of the specification. For example, a file may contain both version 1.1 and version 2.0 tags simultaneously, and in this case, the media player must determine which tags are relevant.

ID3 version 1 is a very simple specification. It involves appending a fixed block size of 128 bytes to the end of the file in question. This block contains the following tags:

A header that identifies the presence of the ID3 block and its version. Specifically, this header comprises the characters "TAG".
Title: 30 characters.
Artist: 30 characters.
Album: 30 characters.
Year: 4 characters.
Comment: 30 characters.
Genre (music): 1 character.
All tags use ASCII characters, except for genre, which is an integer stored within a single byte. The musical genre associated with each byte is predefined in the standard definitions and includes 80 genres numbered from 0 to 79. Some tagging programs have expanded the predefined genres beyond 79.


Code:

using System;
using System.IO;
public class MP3Reader
{
    public static void Main()
    {
        const int SIZE = 128;

        byte[] data;

        Console.Write("Enter name: ");
        string name = Console.ReadLine();

        if (!File.Exists(name))
        {
            Console.WriteLine("Not exists");
            return;
        }

        try
        {
            FileStream 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 (Convert.ToChar(b1) != 'T' || Convert.ToChar(b2) != 'A' ||
            Convert.ToChar(b3) != 'G')
            {
                Console.WriteLine("not mp3 valid");
                return;
            }

            int i = 3;

            string title = "";
            for (; i < 33; i++)
            {
                if (data[i] != 0)
                    title += Convert.ToChar(data[i]);
            }

            string author = "";
            for (i = 33; i < 63; i++)
            {
                if (data[i] != 0)
                    author += Convert.ToChar(data[i]);
            }

            string album = "";
            for (i = 63; i < 93; i++)
            {
                if (data[i] != 0)
                    album += Convert.ToChar(data[i]);
            }

            string year = "";
            for (i = 93; i < 97; i++)
            {
                if (data[i] != 0)
                    year += Convert.ToChar(data[i]);
            }

            string comments = "";
            for (i = 97; i < 127; i++)
            {
                if (data[i] != 0)
                    comments += Convert.ToChar(data[i]);
            }

            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 (Exception)
        {
            Console.WriteLine("Error");
        }
    }
}



Juan A. Ripoll - Systems Tutorials and Programming Courses ©  All rights reserved.  Legal Conditions.