User Tips: Reading an MP3s ID3 Tag through an ASP Page
By Dave W.
Hi! I absolutely love your site, It helped me greatly when I was learning
ASP, now actually being employed in the industry I thought I would share a
script I just whipped up. The script pulls the ID3 tag v1.0 from an MP3 file.
(I tried to find one on the net, but, alas, could not find one, so I wrote my own!)
I've not extensively tested the script, however it appears to work on my MP3 files!
Note that I needed to pull the binary data from the MP3 file. I did this using the Stream object
as you discussed in a previous article: Tired of FileSystemObject?
Use the Stream Object Instead! Also, to learn more about the makeup of the MP3 ID3 tag, check out:
What is ID3 v1? (For those of you who have no idea what
MP3 files are, check out this article.)
That being said, here is the code. It will iterate through a physical directory on the Web server and
output the ID3 information for each MP3 in the specified directory.
'For more information on using METADATA check out:
' Using METADATA to Import DLL Constants
' http://www.4guysfromrolla.com/webtech/110199-1.shtml
<!--METADATA TYPE="typelib"
UUID="00000205-0000-0010-8000-00AA006D2EA4"
NAME="ADODB Type Library"
-->
<%
Function ConvertBin(Binary)
'This function converts a binary byte into an ASCII byte.
for i = 1 to LenB(Binary)
strChar = chr(AscB(MidB(Binary,i,1)))
ConvertBin = ConvertBin & strChar
Next
End Function
dim objStream
dim strTag, strSongName, strArtist, strAlbum, strYear, _
strComment, strGenre, strFile
'Specify the folder to iterate through, displaying all the MP3s
Const folder = "C:\mp3s\"
'Grab the folder information
'For more information on this technique below, check out this FAQ:
' http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=90
Dim objFSO, objFolder, objFile
Set objFSO = Server.CreateObject("Scripting.FileSYstemObject")
Set objFolder = objFSO.GetFolder(folder)
'Create the Stream object
set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type = adTypeBinary
'Loop through the files in the folder
For Each objFile in objFolder.Files
'Open the stream
objStream.Open
objStream.LoadFromFile objFile.Path
'Read the last 128 bytes
objStream.Position = objStream.size - 128
'Read the ID3 v1 tag info
strTag = ConvertBin(objStream.Read(3))
if ucase(strTag) = "TAG" then
strSongName = ConvertBin(objStream.Read(30))
strArtist = ConvertBin(objStream.Read(30))
strAlbum = ConvertBin(objStream.Read(30))
strYear = ConvertBin(objStream.Read(4))
strComment = ConvertBin(objStream.Read(30))
end if
'Display the results
response.write "<table><tr><td colspan=2><h3>" & _
"ID3 Tag info for:</td></tr><tr>" & _
"<td colspan=2>" & objFile.Name & "</td></tr>"
response.write "<tr><td><b>Artist: </b></td>" & _
"<td>" & strArtist & "</td></tr>"
response.write "<tr><td><b>Track: </b></td>" & _
"<td>" & strSongName & "</td></tr>"
response.write "<tr><td><b>Album: </b></td>" & _
<td>" & strAlbum & "</td></tr>"
response.write "<tr><td><b>Year: </b></td>" & _
"<td>" & strYear & "</td></tr>"
response.write "<tr><td><b>Comment: </b>" & _
"</td><td>" & strComment & "</td></tr>"
response.write "</table>"
objStream.Close
Response.Write "<p><hr><p>"
Next
Set objStream = Nothing 'Clean up...
%>
|
Happy Programming!