为了保护音乐者的版权,在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中测试通过。

得到MP3中隐藏的信息相关推荐

  1. 从MP3中提取歌曲信息

    一首MP3歌曲除了音乐信息外,还包含了如歌名.演唱者等信息,当我们用winamp软件听音乐时,播放清单就自动将这些信息读出来.大部分人都喜欢从网上下载音乐,但下载下来的MP3文件名都是文件上传系统自动 ...

  2. 列注释_【EXCEL检查问题】:如何快速检查并删除EXCEL中隐藏的工作表、行、列等信息...

    前注:本案例是以EXCEL2016为示范软件,各版本的部分功能和路径可能不同 在EXCEL使用过程中,你是否遇到过某一列的公式怎么修改都报错的情况?你是否遇到过一个只有区区几行数据的表格,却占用了好几 ...

  3. WIN7计算机管理里没有便携设备,如何显示及删除Win7设备管理器中隐藏的已用过的硬件设备信息(图)...

    一.创建"devmgr_show_nonpresent_devices"变量 先右击桌面的"计算机"图标,依次选择"属性→高级系统设置",打 ...

  4. python读取文本中的英文歌_Python 实例分析 - 获取MP3歌曲的Tag信息

    下面利用一个python的实例程序,来学习python.这个程序的目的就是分析出所有MP3文件的Tag信息并输出. 其中遇到一个问题,让我深切感受到python中依靠缩进来控制流程的缺点,不多说,看程 ...

  5. Android设备获取mp3中的专辑封面信息

    Mp3文件中包含图片信息.如下图: MP3文件的专辑封面数据是编码在MP3文件中的ID3中,需要在解析ID3 tag的时候将这段压缩的数据从MP3文件中copy出来,写到某个文件中去.具体流程可以参考 ...

  6. mysql隐藏密码_MySQL在Linux系统中隐藏命令行中的密码的方法

    在命令行中输入命令并不是一个好主意,会造成安全问题.但是如果你决定去写一个应用,而这个应用需要在命令行中使用密码或者其他敏感信息.那么,你能通过以下方法禁止系统的其他用户轻易的看到这些敏感数据 呢?, ...

  7. java 隐藏地址栏参数_要想在浏览器的地址栏上的URL中隐藏传输的参数,需要将form标签的method属性值设置为( )。 (5.0分)_学小易找答案...

    [填空题]若在JSP页面的不同作用域中有相同名称的对象,且EL表达式中又省略了相应的作用域类型名,则系统将会按照 . . . 的先后顺序查找相应对象. (20.0分) [简答题]AJAX异步请求过程中 ...

  8. Nginx隐藏主机信息,proxy_hide_header 与fastcgi_hide_header

    Nginx中proxy_hide_header 与fastcgi_hide_header都可以隐藏主机头信息,两者在具体使用时还是有着一定的区别的.刚好业务使用的nginx反向代理在显示响应头时将后端 ...

  9. Paper:《Hidden Technical Debt in Machine Learning Systems—机器学习系统中隐藏的技术债》翻译与解读

    Paper:<Hidden Technical Debt in Machine Learning Systems-机器学习系统中隐藏的技术债>翻译与解读 导读:机器学习系统中,隐藏多少技术 ...

最新文章

  1. vue 函数 路由跳转_vue中通过路由跳转的三种方式
  2. 算法练习day14——190402(贪心:切金条、做项目、会议室安排)
  3. 翻转棋游戏c语言讲解,有没有人懂黑白棋(翻转棋)的核心算法
  4. SQL Server Profiler的一个小问题
  5. Symfony1.4.11学习笔记(四):数据模型
  6. 探探发布春节短片《慢慢来》 两代人隔空对话催婚问题
  7. 条款2. 最好使用C++转型操作符
  8. 关于行业的浅析以及未来工作的前景初判
  9. lora终端连接云服务器_云服务器如何连接LoRa网关
  10. 解决Untracked Files Prevent Checkout问题
  11. 太空大战游戏开发实例
  12. 【基础】Premultiplied Alpha Blending/Alpha预乘/透明图片黑边
  13. SupeSite模板中的代码代表什么意思
  14. 通过阿里云API查询账户余额
  15. 【人月神话】第二章:人月神话
  16. 那个时候我不小心建立了一个间谍应用
  17. Hacking 开心网(虚拟朋友) with Mechanize
  18. Received status code 502 from server: Bad Gateway
  19. 2020年美亚杯电子数据取证大赛-个人赛
  20. 无胁科技-TVD每日漏洞情报-2022-11-16

热门文章

  1. List对象集合通过对象属性进行查找
  2. Linux安装教程4,pfSense-2.4.4安装教程
  3. 发的楷体怎么写_孩子作业实在写不完,父母该怎么办?我直接给老师发信息
  4. 【Decision Tree】林轩田机器学习技法
  5. mysql配置主从数据库_mysql配置主从数据库
  6. SVG添加链接(转载)
  7. 我乃平常客,本持平常心| 2021 年中总结
  8. java 大文件上传_JAVA大文件上传分片上传方法(附带demo)
  9. mysql exporter怎么配置_mysqld_exporter的源码分析和定制化(单个mysqld_exporter监控多个数据库实例)...
  10. asp.net 页面右下角弹出类似QQ或MSN的消息提示