Categorias

Leitor de TAGS ID3v1 e ID3v1.1 em um MP3

Neste código foi desenvolvido uma Classe chamada MP3ID3 que é responsável por fazer uma leitura das Tags ID3v1 e ID3v1.1 de um arquivo MP3 e armazenar os dados encontrados nas propriedades do objeto.

Desta forma basta passar o caminho completo do arquivo MP3 para o método readID3Tags que ele fará todo o trabalho. Depois de realizada a leitura basta utilizar as propriedades:

– Arquivo
– Titulo
– Artista
– Album
– Ano
– Comentario
– Trilha
– Genero
– TAG

<%
'==========================================================================================
'	I D 3   T A G   R E A D E R  (ID3v1 e ID3v1.1)
'	Autor: Gabriel Fróes (www.codigofonte.com.br)
'	Data: 17/07/2006
'	Versão: 1.0
'==========================================================================================

'*******************************************************
'CLASSE RESPONSÁVEL PELA LEITURA DAS TAGS ID3 NO MP3
'*******************************************************
Class MP3ID3
	'-----------------------------------------------------
	'ATRIBUTOS DA CLASSE
	'-----------------------------------------------------
	Private a_Tamanho
	Private a_Arquivo
	Private a_Titulo
	Private a_Artista
	Private a_Album
	Private a_Ano
	Private a_Comentario
	Private a_Trilha
	Private a_Genero
	Private a_TAG
	'Objetos
	Private objFSO
	Private objMP3
	'Array com os Gêneros
	Private arrGeneros
	
	'-----------------------------------------------------
	'PROPRIEDADES DA CLASSE
	'-----------------------------------------------------
	Public Property Get Tamanho
		Tamanho = a_Tamanho
	End Property
	Public Property Get Arquivo
		Arquivo = a_Arquivo
	End Property
	Public Property Get Titulo
		Titulo = a_Titulo
	End Property
	Public Property Get Artista
		Artista = a_Artista
	End Property
	Public Property Get Album
		Album = a_Album
	End Property
	Public Property Get Ano
		Ano = a_Ano
	End Property
	Public Property Get Comentario
		Comentario = a_Comentario
	End Property
	Public Property Get Trilha
		Trilha = a_Trilha
	End Property
	Public Property Get Genero
		Genero = a_Genero
	End Property
	Public Property Get TAG
		TAG = a_TAG
	End Property
	
	'-----------------------------------------------------
	'Procedimentos de Inicialização de Destruição da Classe
	'-----------------------------------------------------
	Private Sub Class_Initialize()
		'Criação dos Objetos
		Set objFSO	= Server.CreateObject("Scripting.FileSystemObject")
		Set objMP3	= Server.CreateObject("ADODB.Stream")  
		objMP3.Type = 1	'adTypeBinary
		arrGeneros	= Split("Blues,Classic Rock,Country,Dance,Disco,Funk,Grunge,Hip-Hop,Jazz,Metal,New Age,Oldies,Other,Pop,R&B,Rap,Reggae,Rock,Techno,Industrial,Alternative,Ska,Death Metal,Pranks,Soundtrack,Euro-Techno,Ambient,Trip-Hop,Vocal,Jazz+Funk,Fusion,Trance,Classical,Instrumental,Acid,House,Game,Sound Clip,Gospel,Noise,Altern Rock,Bass,Soul,Punk,Space,Meditative,Instrumental Pop,Instrumental Rock,Ethnic,Gothic,Darkwave,Techno-Industrial,Electronic,Pop-Folk,Eurodance,Dream,Southern Rock,Comedy,Cult,Gangsta,Top 40,Christian Rap,Pop/Funk,Jungle,Native American,Cabaret,New Wave,Psychadelic,Rave,Showtunes,Trailer,Lo-Fi,Tribal,Acid Punk,Acid Jazz,Polka,Retro,Musical,Rock & Roll,Hard Rock,Folk,Folk/Rock,National Folk,Swing,Bebob,Latin,Revival,Celtic,Bluegrass,Avantgarde,Gothic Rock,Progressive Rock,Psychedelic Rock,Symphonic Rock,Slow Rock,Big Band,Chorus,Easy Listening,Acoustic,Humor,Speech,Chanson,Opera,Chamber Music,Sonata,Symphony,Booty Bass,Primus,Porn Groove,Satire,Slow Jam,Club,Tango,Samba,Folclore", ",")
	End Sub
	Private Sub Class_Terminate()
		'Destruição dos Objetos
		Set objMP3	= Nothing
		Set objFSO	= Nothing
	End Sub

	'-----------------------------------------------------
	'MÉTODOS DA CLASSE
	'-----------------------------------------------------
	'-----------------------------------------------------
	'Funcao: readID3Tags(ByVal CaminhoMP3)
	'Sinopse: Realizar a leitura do MP3 e extrai as TAGS ID3
	'		  e preenche as propriedades
	'Parametro:
	'       CaminhoMP3: Caminho Virtual do arquivo MP3
	'Retorno: Booleano
	'-----------------------------------------------------
	Function readID3Tags(ByVal CaminhoMP3)
		'Declaração
		Dim Retorno
		Dim GeneroID
		Dim tmpComentario
		
		'Inicialização
		Retorno		= False
		a_Tamanho	= ""
		a_Arquivo	= ""
		a_Titulo	= ""
		a_Artista	= ""
		a_Album		= ""
		a_Ano		= ""
		a_Comentario= ""
		a_Trilha	= ""
		a_Genero	= ""
		a_TAG		= ""
		
		'Abrindo o arquivo MP3
		objMP3.Open
		objMP3.LoadFromFile CaminhoMP3
		objMP3.Position = objMP3.Size - 128
		
		'Verificando se o arquivo possui TAG
		If UCase(converteBinario(objMP3.Read(3))) = "TAG" Then
			'TAMANHO
			a_Tamanho		= Round((objMP3.Size/1024)/1024,2) & " MB"
			'ARQUIVO
			a_Arquivo		= objFSO.GetFileName(CaminhoMP3)
			'TITULO
			a_Titulo		= converteBinario(objMP3.Read(30))
			'ARTISTA
			a_Artista		= converteBinario(objMP3.Read(30))
			'ALBUM
			a_Album			= converteBinario(objMP3.Read(30))
			'ANO
			a_Ano			= converteBinario(objMP3.Read(4))
			'COMENTARIO
			tmpComentario	= objMP3.Read(30)
			'TAG
			If AscB(MidB(tmpComentario, 29, 1)) = 0 And AscB(MidB(tmpComentario, 30, 1)) > 0 And AscB(MidB(tmpComentario, 30, 1)) < 256 Then
				a_Tag = "ID3v1.1"
				'COMENTARIO (v1.1)
				a_Comentario = converteBinario(LeftB(a_Comentario, 28))
				'TRILHA
				a_Trilha = AscB(MidB(tmpComentario, 30, 1))
			Else
				a_Tag			= "ID3v1"
				a_Comentario	= tmpComentario
			End If
			'GENERO
			GeneroID = AscB(objMP3.Read(1))
			If GeneroID <= 114 AND GeneroID >= 0 Then
				a_Genero = arrGeneros(GeneroID)
			End If
			Retorno = True
		End If
		objMP3.Close
		
		'Retornando a função
		readID3Tags = Retorno
	End Function
	
	'-----------------------------------------------------
	'Funcao: converteBinario(ByVal Bin)
	'Sinopse: Converte o Valor Binário passado.
	'Parametro:
	'       Bin: Valor em Binário
	'Retorno: String
	'-----------------------------------------------------
	Private Function converteBinario(ByVal Bin)
		Dim Aux
		For Aux = 1 To LenB(Bin)
			If AscB(MidB(Bin, Aux, 1)) <> 0 Then converteBinario = converteBinario & Chr(AscB(MidB(Bin, Aux, 1)))
		Next
	End Function
End Class

'EXEMPLO DE CHAMADA
Dim objID3
Set objID3 = New MP3ID3
If objID3.readID3Tags("D:GabrielMinhas músicasKiss From a Rose.mp3") = True Then
	Response.Write "

" & objID3.Arquivo & "

" Response.Write "Artista: " & objID3.Artista & "
" Response.Write "Titulo: " & objID3.Titulo & "
" Response.Write "Tamanho: " & objID3.Tamanho & "
" Response.Write "TAG: " & objID3.TAG & "
" Response.Write "Genero: " & objID3.Genero & "
" Response.Write "Album: " & objID3.Album & "
" Response.Write "Ano: " & objID3.Ano & "
" Response.Write "Trilha: " & objID3.Trilha & "
" Else Response.Write "Não foi possível ler o arquivo MP3." End If If objID3.readID3Tags("D:GabrielMinhas músicasSeal - Kiss from a rose (unplugged & acoustic session).mp3") = True Then Response.Write "

" & objID3.Arquivo & "

" Response.Write "Artista: " & objID3.Artista & "
" Response.Write "Titulo: " & objID3.Titulo & "
" Response.Write "Tamanho: " & objID3.Tamanho & "
" Response.Write "TAG: " & objID3.TAG & "
" Response.Write "Genero: " & objID3.Genero & "
" Response.Write "Album: " & objID3.Album & "
" Response.Write "Ano: " & objID3.Ano & "
" Response.Write "Trilha: " & objID3.Trilha & "
" Else Response.Write "Não foi possível ler o arquivo MP3." End If Set objID3 = Nothing %>