总是没有办法得到MP3文件的ID3_Tag 这些信息。谢谢很多地方提供的源代码都没有办法正确的读出mp3的信息,要不就是读不出?为什么
ID3和ID2都这样!!!没有遇到一个代码可以正确的希望哪位有可用的正确的,贴出来,谢谢!!

解决方案 »

  1.   

    首先在窗体上添加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了。
      

  2.   

    那是这段,一个窗体,一个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 BytePublic 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 SubPublic 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 istart = 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 istart = 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 istart = 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 istart = 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 istart = start + 29
    If frmId3.txtTrck.Text = "" Then
    Put #1, start, CByte(0)
    Else
    TrckNum = CByte(frmId3.txtTrck.Text)
    Put #1, start, TrckNum
    End Ifstart = 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 #1End Sub
      

  3.   

    Public Sub Id3v1(selectedFile As String)Dim test As String * 3
    Dim Detect As ByteIf frmId3.lblTest = "TAG" Then frmId3.cmdUpdate.Enabled = True
    openstate:
    Open selectedFile For Binary Access Read As #1
    Position = FileLen(selectedFile) - 128Get #1, Position + 1, test
    frmId3.lblTest = testGet #1, FileLen(selectedFile), Detect
    lblDetect = DetectIf test = "TAG" ThenCheck1.Value = 1start = 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 SelectFor i = 0 To 148
    Select Case lblDetect
    Case i
    frmId3.Combo1.ListIndex = i
    Case 255
    frmId3.Combo1.ListIndex = 148
    End Select
    Next ifrmId3.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 = TruefrmId3.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 = &H80000005Else
    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 = FalsefrmId3.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 = &H8000000FEnd If
    Close #1
    End SubPrivate Sub cmdUpdate_Click()
    Update (cdlId3.FileName)
    End SubPrivate Sub Command1_Click()
    txtTitle.Text = LCase(txtTitle.Text)
    txtAlbum.Text = LCase(txtAlbum.Text)
    txtArtist.Text = LCase(txtArtist.Text)
    End SubPrivate Sub cmdCancel_Click()
    Unload Me
    End SubPrivate 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 SubPrivate 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 = TruetxtTitle.BackColor = &H80000005
    txtArtist.BackColor = &H80000005
    txtAlbum.BackColor = &H80000005
    txtYear.BackColor = &H80000005
    Combo1.BackColor = &H80000005
    txtTrck.BackColor = &H80000005
    txtComm.BackColor = &H80000005Close #1
    End SubPrivate Sub txtYear_Change()
    If Not IsNumeric(txtYear.Text) Then
        txtYear.Text = ""
    End If
    End Sub