总是没有办法得到MP3文件的ID3_Tag 这些信息。谢谢

Mohoman 2003-08-13 12:01:05
总是没有办法得到MP3文件的ID3_Tag 这些信息。谢谢

很多地方提供的源代码都没有办法正确的读出mp3的信息,要不就是读不出?为什么
ID3和ID2都这样!!!

没有遇到一个代码可以正确的

希望哪位有可用的正确的,贴出来,谢谢!!
...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2003-08-14
  • 打赏
  • 举报
回复
Public Sub Id3v1(selectedFile As String)

Dim test As String * 3
Dim Detect As Byte

If frmId3.lblTest = "TAG" Then frmId3.cmdUpdate.Enabled = True
openstate:
Open selectedFile For Binary Access Read As #1
Position = FileLen(selectedFile) - 128

Get #1, Position + 1, test
frmId3.lblTest = test

Get #1, FileLen(selectedFile), Detect
lblDetect = Detect

If test = "TAG" Then

Check1.Value = 1

start = Position + 4
Get #1, start, Title
frmId3.txtTitle.Text = Trim(Title)

start = start + 30
Get #1, start, Artist
frmId3.txtArtist.Text = Trim(Artist)

start = start + 30
Get #1, start, Album
frmId3.txtAlbum.Text = Trim(Album)

start = start + 30
Get #1, start, Year
frmId3.txtYear.Text = Trim(Year)

start = start + 4
Get #1, start, Comment
frmId3.txtComm.Text = Trim(Comment)

start = start + 29
Get #1, start, TrckNum
Select Case TrckNum
Case 0
frmId3.txtTrck = ""
Case Else
frmId3.txtTrck = TrckNum
End Select

For i = 0 To 148
Select Case lblDetect
Case i
frmId3.Combo1.ListIndex = i
Case 255
frmId3.Combo1.ListIndex = 148
End Select
Next i

frmId3.txtTitle.Enabled = True
frmId3.txtArtist.Enabled = True
frmId3.txtAlbum.Enabled = True
frmId3.txtYear.Enabled = True
Combo1.Enabled = True
frmId3.txtTrck.Enabled = True
frmId3.txtComm.Enabled = True

frmId3.txtTitle.BackColor = &H80000005
frmId3.txtArtist.BackColor = &H80000005
frmId3.txtAlbum.BackColor = &H80000005
frmId3.txtYear.BackColor = &H80000005
Combo1.BackColor = &H80000005
frmId3.txtTrck.BackColor = &H80000005
frmId3.txtComm.BackColor = &H80000005

Else
frmId3.Check1.Value = 0
frmId3.txtTitle.Text = ""
frmId3.txtArtist.Text = ""
frmId3.txtAlbum.Text = ""
frmId3.txtYear.Text = ""
frmId3.Combo1.ListIndex = 148
frmId3.txtTrck.Text = ""
frmId3.txtComm.Text = ""

frmId3.txtTitle.Enabled = False
frmId3.txtArtist.Enabled = False
frmId3.txtAlbum.Enabled = False
frmId3.txtYear.Enabled = False
frmId3.Combo1.Enabled = False
frmId3.txtTrck.Enabled = False
frmId3.txtComm.Enabled = False

frmId3.txtTitle.BackColor = &H8000000F
frmId3.txtArtist.BackColor = &H8000000F
frmId3.txtAlbum.BackColor = &H8000000F
frmId3.txtYear.BackColor = &H8000000F
frmId3.Combo1.BackColor = &H8000000F
frmId3.txtTrck.BackColor = &H8000000F
frmId3.txtComm.BackColor = &H8000000F

End If
Close #1
End Sub

Private Sub cmdUpdate_Click()
Update (cdlId3.FileName)
End Sub

Private Sub Command1_Click()
txtTitle.Text = LCase(txtTitle.Text)
txtAlbum.Text = LCase(txtAlbum.Text)
txtArtist.Text = LCase(txtArtist.Text)
End Sub

Private Sub cmdCancel_Click()
Unload Me
End Sub

Private Sub Command2_Click()
cdlId3.Filter = "Mpeg Layer III files (*.mp3)|*.mp3"
cdlId3.ShowOpen
If cdlId3.FileName <> "" Then
Id3v1 (cdlId3.FileName)
Check1.Enabled = True
Else: Exit Sub
End If
End Sub

Private Sub Form_Load()
genr
frmId3.Combo1.ListIndex = 148
End Sub
Private Sub Check1_Click()
If Check1.Value = 1 Then
If lblTest = "TAG" Then
cmdUpdate.Enabled = True
Exit Sub
Else
cmdUpdate.Enabled = True
Open selectedFile For Binary Access Write As #1
Position = FileLen(selectedFile)
Dim place As String * 3
place = "TAG"
Put #1, Position, place
Position = Position + 2
For i = 1 To 125
Put #1, Position + i, CByte(0)
Next i
Put #1, Position + 125, CByte(148)
End If
End If
txtTitle.Enabled = True
txtArtist.Enabled = True
txtAlbum.Enabled = True
txtYear.Enabled = True
Combo1.Enabled = True
txtTrck.Enabled = True
txtComm.Enabled = True

txtTitle.BackColor = &H80000005
txtArtist.BackColor = &H80000005
txtAlbum.BackColor = &H80000005
txtYear.BackColor = &H80000005
Combo1.BackColor = &H80000005
txtTrck.BackColor = &H80000005
txtComm.BackColor = &H80000005

Close #1
End Sub

Private Sub txtYear_Change()
If Not IsNumeric(txtYear.Text) Then
txtYear.Text = ""
End If
End Sub
道素 2003-08-14
  • 打赏
  • 举报
回复
那是这段,一个窗体,一个checkbox,6个文本框,名字到代码里看,一个combobox,3个按钮

Dim Title As String * 30
Dim Artist As String * 30
Dim Album As String * 30
Dim Year As String * 4
Dim genre As Byte
Dim Comment As String * 29
Dim TrckNum As Byte

Public Sub genr()
Dim genre(0 To 148)
genre(0) = "Blues"
genre(1) = "Classic Rock"
genre(2) = "Country"
genre(3) = "Dance"
genre(4) = "Disco"
genre(5) = "Funk"
genre(6) = "Grunge"
genre(7) = "Hip-Hop"
genre(8) = "Jazz"
genre(9) = "Metal"
genre(10) = "New Age"
genre(11) = "Oldies"
genre(12) = "Other"
genre(13) = "Pop"
genre(14) = "R&B"
genre(15) = "Rap"
genre(16) = "Reggae"
genre(17) = "Rock"
genre(18) = "Techno"
genre(19) = "Industrial"
genre(20) = "Alternative"
genre(21) = "Ska"
genre(22) = "Death Metal"
genre(23) = "Pranks"
genre(24) = "Soundtrack"
genre(25) = "Euro-Techno"
genre(26) = "Ambient"
genre(27) = "Trip-Hop"
genre(28) = "Vocal"
genre(29) = "Jazz+Funk"
genre(30) = "Fusion"
genre(31) = "Trance"
genre(32) = "Classical"
genre(33) = "Instrumental"
genre(34) = "Acid"
genre(35) = "House"
genre(36) = "Game"
genre(37) = "Sound Clip"
genre(38) = "Gospel"
genre(39) = "Noise"
genre(40) = "Alternative Rock"
genre(41) = "Bass"
genre(42) = "Soul"
genre(43) = "Punk"
genre(44) = "Space"
genre(45) = "Meditative"
genre(46) = "Instrumental Pop"
genre(47) = "Instrumental Rock"
genre(48) = "Ethnic"
genre(49) = "Gothic"
genre(50) = "Darkwave"
genre(51) = "Techno-Industrial"
genre(52) = "Electronic"
genre(53) = "Pop-Folk"
genre(54) = "Eurodance"
genre(55) = "Dream"
genre(56) = "Southern Rock"
genre(57) = "Comedy"
genre(58) = "Cult"
genre(59) = "Gangsta"
genre(60) = "Top 40"
genre(61) = "Christian Rap"
genre(62) = "Pop/Funk"
genre(63) = "Jungle"
genre(64) = "Native US"
genre(65) = "Cabaret"
genre(66) = "New Wave"
genre(67) = "Psychadelic"
genre(68) = "Rave"
genre(69) = "Showtunes"
genre(70) = "Trailer"
genre(71) = "Lo-Fi"
genre(72) = "Tribal"
genre(73) = "Acid Punk"
genre(74) = "Acid Jazz"
genre(75) = "Polka"
genre(76) = "Retro"
genre(77) = "Musical"
genre(78) = "Rock & Roll"
genre(79) = "Hard Rock"
genre(80) = "Folk"
genre(81) = "Folk-Rock"
genre(82) = "National Folk"
genre(83) = "Swing"
genre(84) = "Fast Fusion"
genre(85) = "Bebob"
genre(86) = "Latin"
genre(87) = "Revival"
genre(88) = "Celtic"
genre(89) = "Bluegrass"
genre(90) = "Avantgarde"
genre(91) = "Gothic Rock"
genre(92) = "Progressive Rock"
genre(93) = "Psychedelic Rock"
genre(94) = "Symphonic Rock"
genre(95) = "Slow Rock"
genre(96) = "Big Band"
genre(97) = "Chorus"
genre(98) = "Easy Listening"
genre(99) = "Acoustic"
genre(100) = "Humour"
genre(101) = "Speech"
genre(102) = "Chanson"
genre(103) = "Opera"
genre(104) = "Chamber Music"
genre(105) = "Sonata"
genre(106) = "Symphony"
genre(107) = "Booty Bass"
genre(108) = "Primus"
genre(109) = "Porn Groove"
genre(110) = "Satire"
genre(111) = "Slow Jam"
genre(112) = "Club"
genre(113) = "Tango"
genre(114) = "Samba"
genre(115) = "Folklore"
genre(116) = "Ballad"
genre(117) = "Power Ballad"
genre(118) = "Rhytmic Soul"
genre(119) = "Freestyle"
genre(120) = "Duet"
genre(121) = "Punk Rock"
genre(122) = "Drum Solo"
genre(123) = "Acapella"
genre(124) = "Euro-House"
genre(125) = "Dance Hall"
genre(126) = "Goa"
genre(127) = "Drum & Bass"
genre(128) = "Club-House"
genre(129) = "Hardcore"
genre(130) = "Terror"
genre(131) = "Indie"
genre(132) = "BritPop"
genre(133) = "Negerpunk"
genre(134) = "Polsk Punk"
genre(135) = "Beat"
genre(136) = "Christian Gangsta"
genre(137) = "Heavy Metal"
genre(138) = "Black Metal"
genre(139) = "Crossover"
genre(140) = "Contemporary C"
genre(141) = "Christian Rock"
genre(142) = "Merengue"
genre(143) = "Salsa"
genre(144) = "Thrash Metal"
genre(145) = "Anime"
genre(146) = "Jpop"
genre(147) = "SynthPop"
genre(148) = ""
For i = 0 To 148
frmId3.Combo1.AddItem genre(i), i
Next i
End Sub

Public Sub Update(selectedFile As String)
Dim B As String
Dim A As String
On Error GoTo hell:
Open selectedFile For Binary Access Write As #1
savestate:
Position = FileLen(selectedFile) - 128
start = Position + 4
Title = Trim(frmId3.txtTitle.Text)
Put #1, start, Title
B = Len(frmId3.txtTitle.Text)
A = 30 - B
For i = 0 To A
Put #1, (start + B) + i, CByte(0)
Next i

start = start + 30
Artist = Trim(frmId3.txtArtist.Text)
Put #1, start, Artist
B = Len(frmId3.txtArtist.Text)
A = 30 - B
For i = 0 To A
Put #1, (start + B) + i, CByte(0)
Next i

start = start + 30
Album = Trim(frmId3.txtAlbum.Text)
Put #1, start, Album
B = Len(frmId3.txtAlbum.Text)
A = 30 - B
For i = 0 To A
Put #1, (start + B) + i, CByte(0)
Next i

start = start + 30
Year = frmId3.txtYear.Text
Put #1, start, Year
B = Len(frmId3.txtYear.Text)
A = 30 - B
For i = 0 To A
Put #1, (start + B) + i, CByte(0)
Next i

start = start + 4
Comment = Trim(frmId3.txtComm.Text)
Put #1, start, Comment
B = Len(frmId3.txtComm.Text)
A = 30 - B
For i = 0 To A
Put #1, (start + B) + i, CByte(0)
Next i

start = start + 29
If frmId3.txtTrck.Text = "" Then
Put #1, start, CByte(0)
Else
TrckNum = CByte(frmId3.txtTrck.Text)
Put #1, start, TrckNum
End If

start = start + 1
For i = 0 To 148
If Combo1.ListIndex = i Then
genre = i
End If
Next i
Put #1, start, genre
Close #1
Exit Sub
hell:
Dim mes
mes = MsgBox("You can not modify this file while is playing...")
Close #1

End Sub

yunfeng007 2003-08-14
  • 打赏
  • 举报
回复
既然歌名都取出来了,你在把其它的左右偏移几个字节试试。总会试出来的
Mohoman 2003-08-14
  • 打赏
  • 举报
回复
天!!进来看看拉!!!这段代码确实不行
Mohoman 2003-08-13
  • 打赏
  • 举报
回复
帮我看看阿!!
Mohoman 2003-08-13
  • 打赏
  • 举报
回复
真的阿
这个我见过的!!
用一个正常的mp3文件
信息都有!!但是用这段代码读出来
就姓名不正确少2个字
歌名对了!!
其他没有显示!!!!!
用其他播放器就能读出来!!

谢谢
scisaac 2003-08-13
  • 打赏
  • 举报
回复
首先在窗体上添加5个TextBox,一个ComboBox,一个CommandButton,全都是用默认名称。

然后新建一个模块:
Option Explicit
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
Public 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"
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
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.Comments = Comments
If Genre < 0 Or Genre > 254 Then Genre = 12
GetMp3Tag.Genre = CInt(Genre)
Close FileNum
End Function

接下来在主窗体的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

在 Command1_Click 部分加入以下内容:
Dim mp3Tag As mp3Tag
mp3Tag = GetMp3Tag("F:\TestMp3.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

这样就能读出指定文件的ID3v1 Tag了。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧