Proposed exercise
Create a program to read and display the information stored in a MP3 file (with a "TAG ID3 V1" header): title, artist, album, year.
-----------------
ID3 specifications apply to any file or audiovisual container. However, it is usually applied primarily audio containers. There are three versions of the specification that are compatible. For example, a file may contain labels simultaneously version 1.1 and version 2.0. In this case, the media player must decide which are relevant.
ID3 version 1
This first specification is very simple. It consists of attaching a fixed block size of 128 bytes at the end of the file in question. This block contains the following tags:
A header that identifies the presence of block ID3 and version. Specifically, said header comprises TAG characters.
Title: 30 characters.
Artist: 30 characters.
Album: 30 characters.
Year: 4 characters.
Comment: 30 characters.
Genre (music): a character.
All tags using ASCII characters except gender, an integer stored within a single byte. The musical genre associated with each byte is predefined in the standard definitions and includes 80 genera, numbered 0 to 79. Some breeding programs have expanded their own defined genres (from 80th).
Output
Solution
using System; using System.IO; public class MP3Reader { public static void Main() { const int SIZE = 128; byte[] data; int width, height; 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"); } } }