MP3 reader Learn programming Java

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:

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");
		}
	}
}

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