When you think ASP, think...
Recent Articles
All Articles
ASP.NET Articles
Related Web Technologies
User Tips!
Coding Tips

Sample Chapters
JavaScript Tutorials
MSDN Communities Hub
Official Docs
Stump the SQL Guru!
XML Info
Author an Article
Print this page.
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
'  https://www.4guysfromrolla.com/webtech/110199-1.shtml
<!--METADATA TYPE="typelib"
     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
  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.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>"


    Response.Write "<p><hr><p>"

  Set objStream = Nothing    'Clean up...

Happy Programming!

Return to user tips...

ASP.NET [1.x] [2.0] | ASPFAQs.com | Advertise | Feedback | Author an Article