对于ID3v1我已经可以读取和修改了,但ID3v2好象没有什么规则一样啊!
而且长度也没有限制,有哪位知道的说一下!

解决方案 »

  1.   

    关注中...楼主能把你对ID3v1读取和修改的代码发来看看吗[email protected]
      

  2.   

    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
      

  3.   


    我也帖一个获取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 
       
         以上代码在VB6 \Win2000中测试通过。  
      

  4.   

    我看了 cso(sjxsoft) 给的例子,它并没正确读出ID3v的信息,不过看懂了一点
    就是ID3v2的第七个字节(ID3456"7")里保存了整个ID3v2的长度,可以保存在long类型里面,
    通过转换得到字节长度。
    其它信息我想也是一样有个地方保存了自己的长度的地方。
    大家看看有没说错?captainivy(Ivy)的对中英文混合时会出问题,最好定义
    strInput() as byte
    而且
    ....
    Genre as byte
    ....Get FileNum, , Genre(Genre就是对应流派的序号,不用(asc)转换了)