例如获取wma的信息:'引用Windows Media Player Private Sub cmdOk_Click() Dim I As Long Dim oWMP As WindowsMediaPlayer Dim oMedia As IWMPMedia3 Dim oPlaylist As IWMPPlaylist
Set oWMP = New WindowsMediaPlayer Set oMedia = oWMP.newMedia(App.Path & "\Study06\文件名.wma") With oMedia '列出所有可用属性 For I = 0 To .attributeCount - 1 'Debug.Print .getAttributeName(I) txt.Text = txt.Text & .getAttributeName(I) & Space(20) Next '设定属性 Call .setItemInfo("Author", "作者") End With End Sub^_^
一个获取mp3信息的例子Public Type Mp3tag Artist As String ’Artist 存储歌手信息 Album As String ’Album 存储唱片专辑信息 Title As String ’Title 存储标题信息 Year As String ’Year 存储年代信息 Comments As String ’Comments 存储备注信息 Genre As Integer ’Genre 存储音乐风格序列 End Type 然后,定义一个获取MP3信息的函数,它将返回这些信息,代码如下: Public Function GetMp3Tag(FName As String) As Mp3tag Dim Artist As String Dim Album As String Dim Title As String Dim Year As String Dim Comments As String Dim Genre As Integer
If FName = "" Then Exit Function If Dir(FName) = "" Then Exit Function
Dim FileNum As Integer FileNum = FreeFile ’得到一个自由的文件号 Dim strInput As String Open FName For Binary Access Read As FileNum ’以二进制形式打开文件
If LOF(FileNum) < 128 Then Close FileNum Exit Function End If
Seek FileNum, LOF(FileNum) - 127 ’把文件指针移动到MP3信息处 strInput = Space(3) Get FileNum, , strInput If strInput <> "TAG" Then ’如果没有发现信息标识,就关闭文件 Close FileNum GoTo Done: End If
strInput = Space(30) Get FileNum, , strInput Title = Trim(strInput)
strInput = Space(30) Get FileNum, , strInput Artist = Trim(strInput)
strInput = Space(30) Get FileNum, , strInput Album = Trim(strInput)
strInput = Space(4) Get FileNum, , strInput Year = Trim(strInput)
strInput = Space(30) Get FileNum, , strInput Comments = Trim(strInput)
strInput = Space(1) Get FileNum, , strInput Genre = Asc(strInput) Done: GetMp3Tag.Title = Title GetMp3Tag.Artist = Artist GetMp3Tag.Album = Album GetMp3Tag.Year = Year GetMp3Tag.Year = Comments If Genre < 0 Or Genre > 254 Then Genre = 12 GetMp3Tag.Genre = CInt(Genre)
Close FileNum End Function
注意:MP3文件对音乐的风格进行了限制,共254种。Genre返回的只是MP3风格的序列号,具体还需要定位,在这里我把所有类型以常数形式列出,每个类型之间用"|"号隔开。 Private Const sGenreMatrix = "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|Alt. 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 Rap|Top 40|Christian Rap|" + _ "Pop/Punk|Jungle|Native American|Cabaret|New Wave|Phychedelic|Rave|Showtunes|Trailer|" + _ "Lo-Fi|Tribal|Acid Punk|Acid Jazz|Polka|Retro|Musical|Rock & Roll|Hard Rock|Folk|" + _ "Folk/Rock|National Folk|Swing|Fast-Fusion|Bebob|Latin|Revival|Celtic|Blue Grass|" + _ "Avantegarde|Gothic Rock|Progressive Rock|Psychedelic Rock|Symphonic Rock|Slow Rock|" + _ "Big Band|Chorus|Easy Listening|Acoustic|Humour|Speech|Chanson|Opera|Chamber Music|" + _ "Sonata|Symphony|Booty Bass|Primus|Porn Groove|Satire|Slow Jam|Club|Tango|Samba|Folklore|" + _ "Ballad|power Ballad|Rhythmic Soul|Freestyle|Duet|Punk Rock|Drum Solo|A Capella|Euro-House|" + _ "Dance Hall|Goa|Drum & Bass|Club-House|Hardcore|Terror|indie|Brit Pop|Negerpunk|Polsk Punk|" + _ "Beat|Christian Gangsta Rap|Heavy Metal|Black Metal|Crossover|Comteporary Christian|" + _ "Christian Rock|Merengue|Salsa|Trash Metal|Anime|JPop|Synth Pop" 把以上代码写到一个模块中(.Bas),然后在窗体上加入5个TextBox和1个ComboBox控件,其中5个TextBox控件分别用来显示一首Mp3文件的以下信息:歌手、年代、唱片、评论、标题,ComboBox控件用来显示歌曲的风格。再放一个Command控件,其标题为“显示信息”,在它的Click事件中加入以下代码: Private sub Command1_click() Dim mp3Tag as Mp3tag mp3tag = GetMp3Tag ("c:\Song.mp3") Text1.Text = mp3tag.Artist Text2.Text = mp3tag.Album Text3.Text = mp3tag.Title Text4.Text = mp3tag.Year Text5.Text = mp3tag.Comments Combo1.ListIndex = mp3tag.Genre End Sub 在窗体的加载过程中加入如下代码: Private Sub Form_Load() Dim i As Integer,GenreArray() As String GenreArray = Split(sGenreMatrix, "|") For i = LBound(GenreArray) To UBound(GenreArray) Combo1.AddItem GenreArray(i) Next i End Sub
Private Sub cmdOk_Click()
Dim I As Long
Dim oWMP As WindowsMediaPlayer
Dim oMedia As IWMPMedia3
Dim oPlaylist As IWMPPlaylist
Set oWMP = New WindowsMediaPlayer
Set oMedia = oWMP.newMedia(App.Path & "\Study06\文件名.wma")
With oMedia
'列出所有可用属性
For I = 0 To .attributeCount - 1
'Debug.Print .getAttributeName(I)
txt.Text = txt.Text & .getAttributeName(I) & Space(20)
Next
'设定属性
Call .setItemInfo("Author", "作者")
End With
End Sub^_^
BitRate:MP3流比特率;FrameCount:MP3流帧记数;TotalTime:总计已播放的时间;FrameNotifyCount(RW):发送一次通告的帧数,缺省为32;IsCopyrighted、IsOriginal、HasChecksums:从MP3流获得的发行信息;SampleFrequency:采样率;Layer:取值可以为1、2、3,分别代表Layer1、Layer2、Layer3的标准,缺省为3,这意味着MPx的文件都可以播放;MPEGVersion:取值代表MPEG-1或MPEG-2。常用的方法有:
AboutBox():显示About框。
Authorize(Name,Password):验证许可证(注册码),Name即注册名,Password为注册码,由控件的提供商在用户注册后提供,返回值为0则通过,否则为5。Open(Inputfile,Outputfile):打开MPEG音频文件并解码播放,若在声卡上播放则Outputfile应为空串,返回非0值表示解码有误。如果Outputfile为文件名则解码至WAV文件。也就是说,可以利用此方法编写MP3-WAV转换器。Close:关闭当前MPEG流解码。
GetVolumeLeft,GetVolumeRight:获取左右声道的音量,返回Long型值。SetVolume(leftchannel,rightchannel):设置系统左右声道音量。Pause():暂停,奇次声音暂停,偶次开启。
Play():开始解码,并播放当前MPEG文件,返回0表示解码无误。Stop():停止当前解码工作,返回非0表示有误。
下面,我们一步一步地完成:
1.添加Mp3Play.ocx控件
启动VB5,选择StandardEXE。此时,左边的控件面板中只是一些Win95标准控件。我们选Project(工程)菜单下的Components...(组件)项,在弹出的对话框中选中Dialog-MedienMp3PlayActiveXControlModule项。这“宝贝”即我们所需的MP3控件。确定后在控件面板中会增添一个蓝色的喇叭图标,表示该控件已经添加到控件面板中。2.设置属性
点中蓝色喇叭,在窗体中拖动一个矩形框,松开后在窗体中出现MP3控件图标。为了在播放时隐去喇叭,在MP3Play1的属性表中将Visible设为False。一般就这么多,剩下的就是使用它的方法(Methods)了。3.添加按钮
点中“Command”按钮,在窗体中建立三个名字分别为Command1、Command2、Command3的命令按钮,将它们的Caption分别设为“选择MP3文件”、“播放”、“暂停”。4.添加CommonDialog控件
为能方便地选择MP3文件,还需文件打开对话框。如果控件面板中没有此控件,如1中所述选中Components菜单项,在MicrosoftCommonDialogControl5.0前的复选框中打勾,确认后即可在控件面板中看到此控件图标。在窗体中建立一个名为CommonDialog1的对象,为使能快速找到MP3的文件,需要设置它的Filter属性为“.MP3|.MP3”。5.在按钮中编写相应的代码
双击Command1,在PrivateSubCommand1_Click()中输入以下代码:CommonDialog1.ShowOpen
双击Command2,在PrivateSubCommand2_Click()中输入:Err=Mp3Play1.Open(CommonDialog1.filename,″″)Mp3Play1.Play
双击Command3,在PrivateSubCommand3_Click()中输入:Mp3Play1.Pause
6.调整窗口大小,运行播放器
Artist As String ’Artist 存储歌手信息
Album As String ’Album 存储唱片专辑信息
Title As String ’Title 存储标题信息
Year As String ’Year 存储年代信息
Comments As String ’Comments 存储备注信息
Genre As Integer ’Genre 存储音乐风格序列
End Type 然后,定义一个获取MP3信息的函数,它将返回这些信息,代码如下: Public Function GetMp3Tag(FName As String) As Mp3tag
Dim Artist As String
Dim Album As String
Dim Title As String
Dim Year As String
Dim Comments As String
Dim Genre As Integer
If FName = "" Then Exit Function If Dir(FName) = "" Then Exit Function
Dim FileNum As Integer FileNum = FreeFile ’得到一个自由的文件号 Dim strInput As String Open FName For Binary Access Read As FileNum ’以二进制形式打开文件
If LOF(FileNum) < 128 Then
Close FileNum
Exit Function
End If
Seek FileNum, LOF(FileNum) - 127 ’把文件指针移动到MP3信息处
strInput = Space(3)
Get FileNum, , strInput
If strInput <> "TAG" Then ’如果没有发现信息标识,就关闭文件
Close FileNum
GoTo Done:
End If
strInput = Space(30)
Get FileNum, , strInput
Title = Trim(strInput)
strInput = Space(30)
Get FileNum, , strInput
Artist = Trim(strInput)
strInput = Space(30)
Get FileNum, , strInput
Album = Trim(strInput)
strInput = Space(4)
Get FileNum, , strInput
Year = Trim(strInput)
strInput = Space(30)
Get FileNum, , strInput
Comments = Trim(strInput)
strInput = Space(1)
Get FileNum, , strInput
Genre = Asc(strInput) Done:
GetMp3Tag.Title = Title
GetMp3Tag.Artist = Artist
GetMp3Tag.Album = Album
GetMp3Tag.Year = Year
GetMp3Tag.Year = Comments
If Genre < 0 Or Genre > 254 Then Genre = 12
GetMp3Tag.Genre = CInt(Genre)
Close FileNum End Function
注意:MP3文件对音乐的风格进行了限制,共254种。Genre返回的只是MP3风格的序列号,具体还需要定位,在这里我把所有类型以常数形式列出,每个类型之间用"|"号隔开。 Private Const sGenreMatrix = "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|Alt. 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 Rap|Top 40|Christian Rap|" + _
"Pop/Punk|Jungle|Native American|Cabaret|New Wave|Phychedelic|Rave|Showtunes|Trailer|" + _
"Lo-Fi|Tribal|Acid Punk|Acid Jazz|Polka|Retro|Musical|Rock & Roll|Hard Rock|Folk|" + _
"Folk/Rock|National Folk|Swing|Fast-Fusion|Bebob|Latin|Revival|Celtic|Blue Grass|" + _
"Avantegarde|Gothic Rock|Progressive Rock|Psychedelic Rock|Symphonic Rock|Slow Rock|" + _
"Big Band|Chorus|Easy Listening|Acoustic|Humour|Speech|Chanson|Opera|Chamber Music|" + _
"Sonata|Symphony|Booty Bass|Primus|Porn Groove|Satire|Slow Jam|Club|Tango|Samba|Folklore|" + _
"Ballad|power Ballad|Rhythmic Soul|Freestyle|Duet|Punk Rock|Drum Solo|A Capella|Euro-House|" + _
"Dance Hall|Goa|Drum & Bass|Club-House|Hardcore|Terror|indie|Brit Pop|Negerpunk|Polsk Punk|" + _
"Beat|Christian Gangsta Rap|Heavy Metal|Black Metal|Crossover|Comteporary Christian|" + _
"Christian Rock|Merengue|Salsa|Trash Metal|Anime|JPop|Synth Pop"
把以上代码写到一个模块中(.Bas),然后在窗体上加入5个TextBox和1个ComboBox控件,其中5个TextBox控件分别用来显示一首Mp3文件的以下信息:歌手、年代、唱片、评论、标题,ComboBox控件用来显示歌曲的风格。再放一个Command控件,其标题为“显示信息”,在它的Click事件中加入以下代码:
Private sub Command1_click()
Dim mp3Tag as Mp3tag
mp3tag = GetMp3Tag ("c:\Song.mp3")
Text1.Text = mp3tag.Artist
Text2.Text = mp3tag.Album
Text3.Text = mp3tag.Title
Text4.Text = mp3tag.Year
Text5.Text = mp3tag.Comments
Combo1.ListIndex = mp3tag.Genre
End Sub
在窗体的加载过程中加入如下代码:
Private Sub Form_Load()
Dim i As Integer,GenreArray() As String
GenreArray = Split(sGenreMatrix, "|")
For i = LBound(GenreArray) To UBound(GenreArray)
Combo1.AddItem GenreArray(i)
Next i
End Sub
以上代码在VB6 \Win2000中测试通过。 http://www.vbaccelerator.com/home/VB/Code/vbMedia/Reading_and_Writing_MP3_ID3v1_and_v2_Tags/MP3_ID3_Tags_Code.zip
这个例子可以读取修改MP3_ID3v1和ID3v2的Tag
看这个例子,比较通用