得到MP3中隐藏的信息

 为了保护音乐者的版权,在MP3文件中有一段特意存储版权说明的信息,众多的MP3播放器软件都提供了修改和读取MP3文件中隐藏信息的功能,那么这些信息到底存储在哪里呢?如何得到这些信息呢?本文将为大家提供得到MP3信息的模块。

      首先,定义一个公共类型Mp3tag如下:

  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中测试通过。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
功能:实现制作Mp3的小技巧 1:单击打开,执行三个子程序:音效,保存,加入列表框。然后数组清零,多文件对话框保存到音乐路径程序集变量。默认选择第一个,然后获取焦点。定义个程序集数组变量存储路径 2:加入列表框:判断取数组成员数的音乐路径不等于0,在判断列表框的表项数不等于0,那么就取表项数赋值给变量。开始计次循环,想执行的次数是音乐次数的数组成员数目,倒找文本寻找是否有\,赋值给变量。然后寻找右边开始找起。取出分和秒,然后把分和秒去掉。然后判断插入列表项,插入表项,置标题搞定。 3:播放按钮,定义一个时钟事件,是用来控制音乐播放的秒钟。如果等于列表框的时间长度就停止播放。 4:暂停,如果判断mp3的状态是否等于正在播放,是正在播放的话,就停止播放,并隐藏暂停,显示继续播放的按钮,超级列表框1获得焦点 5:点击继续播放:隐藏继续播放按钮,显示暂停,然后继续播放mp3 6:上一首:该初始化的初始化。停止播放,让列表框的现行选择项减去1,判断列表的现行选择项目是否小于0,然后是就选择0,按播放的按钮。 7:下一首:刚好相反,停止播放,让列表框的现行选择项加1,判断列表的现行选择项目是否大于列表的表项数,大于的话就选择最后一个,就是减去1,按播放的按钮。 8:删除歌曲,如果判断是否选择的不为-1,然后就删除表项为选择的项。等于-1的话表示没有选,就弹出信息框 9:全部删除,和删除歌曲差不读。条件不一样,是判断表项目不等于0 10:随机播放,判断Mp3播放的状态为0,暂停或者未播放,就放一个随机种子,就取随机数,播放选的列表Mp3 11:单曲播放,判断状态为0,就按播放按钮 12:顺序播放,判断状态为0,就按下一首 13:音量,用多功能条实现,打开系统音量,置音量

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值