Click here to Skip to main content
15,881,516 members
Articles / Programming Languages / Visual Basic
Article

Reading ID3 tags from a WMA file (MP3 as well)

Rate me:
Please Sign up or sign in to vote.
4.00/5 (22 votes)
6 Mar 20061 min read 149.2K   3K   54   19
A pair of classes to read the ID3 tags from either a WMA or MP3 file.

Introduction

I wanted to get to the ID3 taqs (artist, album, title, genre, ...) in a WMA file, and found out that it's not quite as straightforward as it is getting the ID3V1.1 tags from an MP3 file. So I created a set of classes, one to get the ID3V1.1 tags from an MP3 file (easy), and another to get the same information out of a WMA file.

Background

You can find the ASF specification here: Advanced Systems Format (ASF) Specification. It is the internal file format of a WMA file.

Using the code

The classes are fairly straightforward to use. You simply create an instance of either WMAID3Tag or ID3V1Tag, specifying the filename of the music file, and then you can access the key information directly:

VB
//
// Allocate a WMAID3Tag and access the fields
//
Try
    w = New WMAID3Tag(tbFilename.Text)
Catch ex As Exception
    MsgBox(tbFilename.Text & " is not a valid wma" & _ 
           " file or has invalid tag information")
    Return
End Try

tbTitle.Text = w.title
tbArtist.Text = w.artist
tbAlbum.Text = w.album
tbGenre.Text = w.genre
tbYear.Text = w.year.ToString
tbTrack.Text = w.track.ToString
tbDescription.Text = w.description

Points of Interest

One interesting side note is that the .NET classes that read/write Unicode strings (like BinaryReader/Writer or StreamReader/Writer) use an interesting convention for the length field at the start of the string. It appears that strings less than 255 characters use a single byte for the length, but others use two bytes. It's not clear (to me) exactly how this works, but since in the WMA files the length field is always two bytes, you can't use the .NET routines.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here



Comments and Discussions

 
QuestionRead other WMA Attributes Pin
TheDaneMan21-Jul-14 11:57
TheDaneMan21-Jul-14 11:57 
QuestionNice, very nice but... Pin
Metafunken10-Nov-13 2:51
Metafunken10-Nov-13 2:51 
GeneralMy vote of 5 Pin
Be Yourself20-Oct-10 17:14
Be Yourself20-Oct-10 17:14 
GeneralReally Appreciate! Pin
dongwon_kang14-Mar-10 6:01
dongwon_kang14-Mar-10 6:01 
GeneralThanks a million Pin
grismun14-Jan-09 14:00
grismun14-Jan-09 14:00 
QuestionHow can we access the other values in a WMA file? Pin
yarborg21-Oct-08 11:00
yarborg21-Oct-08 11:00 
Generalother WMA information Pin
jingyeu10-Apr-08 21:03
jingyeu10-Apr-08 21:03 
QuestionVB5 Pin
hobbitdome23-Nov-07 3:58
hobbitdome23-Nov-07 3:58 
GeneralThis is good Pin
Hamed J.I21-Oct-07 5:49
Hamed J.I21-Oct-07 5:49 
GeneralC# Version Pin
Murpheux Melony24-Feb-07 6:01
Murpheux Melony24-Feb-07 6:01 
Nice code Danhi. I did a c# conversion of the two classes though I still left the IsNumeric usage in VB so one needs to add a reference to Microsoft.VisualBasic library

Kindly mail me if u need the source. I could not paste it in here as it's too long and wondered why there aint an attachment features to messages.
GeneralRe: C# Version Pin
DalePres21-Mar-07 12:35
DalePres21-Mar-07 12:35 
GeneralRe: C# Version Pin
vinyasa6-Apr-07 18:28
vinyasa6-Apr-07 18:28 
GeneralRe: C# Version Pin
Shiku-5784124-Sep-11 18:49
professionalShiku-5784124-Sep-11 18:49 
Questionsetting the tag values... Pin
Michael Elly13-Aug-06 10:04
Michael Elly13-Aug-06 10:04 
AnswerRe: setting the tag values... Pin
Andy Lang17-Dec-06 14:44
Andy Lang17-Dec-06 14:44 
AnswerRe: setting the tag values... Pin
CalhounIND22-Aug-07 8:25
CalhounIND22-Aug-07 8:25 
GeneralRe: setting the tag values... Pin
Relentless3-Oct-07 8:25
Relentless3-Oct-07 8:25 
GeneralRe: setting the tag values... Pin
Member 173839027-Aug-08 20:29
Member 173839027-Aug-08 20:29 
AnswerRe: setting the tag values... Pin
grundt2-Apr-10 19:47
grundt2-Apr-10 19:47 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.