Taglib#是一个为.NET开发的元数据读取类库,为一个开源项目,可以在他们的官网上获取windows版本的源码包或者编译好的类库:http://download.banshee.fm/taglib-sharp/

可以使用下面的一个小小的类读取mp3音频文件中的ID3v2标签,类模块输出的字段包括最常用的专辑名称、专辑作者、歌曲标题和内嵌于mp3文件中的专辑封面。

内嵌的专辑封面的读取参阅这篇文章:http://social.msdn.microsoft.com/Forums/pl-PL/vbgeneral/thread/b540120b-1904-44ad-9448-9695482aebdf

Private Class ID3v2

Dim MP3 As TagLib.File= Nothing

Public lbAlbum, lbArtist, lbTitle As String

Public AlbumArt As Image = Nothing

Private Function GetString(ByVal str As String(), ByVal strDelimeter As String) As String

Dim value As String= Nothing

For i As Integer = 0 To str.Length - 1

value += str(i)

Ifi = str.Length - 1 Then Exit For

value += strDelimeter

Next

Return value

End Function

Sub New(ByVal lpFile As String)

MP3 = TagLib.File.Create(lpFile)

If MP3.Tag.Album = Nothing OrElse MP3.Tag.Album.Trim = "" Then

lbAlbum = "Unknown"

Else

lbAlbum = MP3.Tag.Album

End If

If MP3.Tag.Title = Nothing OrElse MP3.Tag.Title.Trim = "" Then

'如果歌曲标题字段为空,则默认使用文件名作Á为歌曲的标题

lbTitle = GetFileName(lpFile)

Else

lbTitle = MP3.Tag.Title

EndIf

lbArtist = GetString(MP3.Tag.AlbumArtists, ",")

If lbArtist = Nothing OrElse lbArtist.Trim = "" Then lbArtist = "Unknown"

If Not MP3.Tag.Pictures.Length >= 1 Then

AlbumArt = My.Resources.rhythmbox

Return

End If

'Esle

Dim bin = DirectCast(MP3.Tag.Pictures(0).Data.Data, Byte())

AlbumArt = Image.FromStream(New MemoryStream(bin)).GetThumbnailImage(115, 115, Nothing, System.IntPtr.Zero)

End Sub

Private Function GetFileName(ByVal path As String) As String

Dim Tmp As String() = Split(path, "\")

'找到文件拓展名,并将其去除

For i As Integer = Tmp(Tmp.Length - 1).Length To 1 Step -1

IfMid(Tmp(Tmp.Length - 1), i, 1) = "."Then ReturnMid(Tmp(Tmp.Length - 1), 1, i - 1).Trim

Next

'没有文件拓展名的,则直接返回文件名

Return Tmp(Tmp.Length - 1).Trim

End Function

End Class

嗯,效果吗,真的很不错

不过,似乎TagLib-Sharp对utf8编码的中文不是非常的兼容,读取的时候很容易出现乱码,对于中文字符串的处理似乎需要而外的解码处理,需要在日后查阅资料来解决这个问题,郁闷纠结中。。。

VB.NET使用TagLib#读取MP3中的ID3v2标签的更多相关文章

  1. C#读取MP3文件的专辑图片和ID3V2Tag信息(带代码)

    第二次更新,后面的代码有问题,有些专辑图片读取不到.发现是PNG图片的问题.在读取的过程中调试发现,图片帧前10个字节包含了图片的格式,在有些歌曲写着JPEG的格式,数据却是PNG的.先说下思路. j ...

  2. java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)

    使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...

  3. mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换等

    mp3 音频 音乐 tag ID3 ID3V1 ID3V2 标签 读取信息 获得图片 jpeg bmp 图片转换(上) MP3文件格式(二)---ID3v2 图:ID3V1标签结构 图:ID3V2标签 ...

  4. Open Xml 读取Excel中的图片

      在我的一个项目中,需要分析客户提供的Excel, 读出其中的图片信息(显示在Excel的第几行,第几列,以及图片本身). 网络上有许多使用Open Xml插入图片到Word,Excel的文章, 但 ...

  5. Python中如何读取xls中的数据

    要想读取EXCEL中的数据,首先得下载xlrd包,地址:https://pypi.python.org/pypi/xlrd  安装方法:下载解压后,利用windows  dos命令进入解压目录eg,c ...

  6. 读取NVRAM中的SN(barcode)

    在Custom_NvRam_LID.h中,找到需要读取的ID对应的值 实现NvRAMAgent import java.lang.String; import android.os.RemoteExc ...

  7. php读取出字符串中的img标签中的图片路径

    php读取出字符串中的img标签中的图片路径 $pageContents = '字符串,带img标签'; $pageContents = str_replace('\"','"', ...

  8. iOS开发--应用设置及用户默认设置【2、读取应用中的设置】

            在上一节中,我们通过探讨应用的系统设置的基本功能,了解运用bundle捆绑包以及plist文件的基本开发.用户能够使用设置应用来声明他们的偏好设置,那么我们怎样去调用用户所设置的参数呢 ...

  9. IO流的练习5 —— 读取文件中的字符串,排序后写入另一文件中

    需求:已知s.txt文件中有这样的一个字符串:“hcexfgijkamdnoqrzstuvwybpl” 请编写程序读取数据内容,把数据排序后写入ss.txt中. 分析: A:读取文件中的数据 B:把数 ...

随机推荐

  1. 【spark】常用转换操作:keys 、values和mapValues

    1.keys 功能: 返回所有键值对的key 示例 val list = List("hadoop","spark","hive",&quo ...

  2. Webpack 热部署检测不到文件变化问题

    Webpack 热部署检测不到文件变化问题 今天在用Webpack开发的时候,突然发现文件变动后热部署功能不工作了,感觉好像是webpack检测不到文件的修改了.折腾了半天,开始一直以为是自己的代码有 ...

  3. MySQL 的中文乱码问题终结

    中文正确 1:保存sql脚本文件 utf8 !!!!! ANSI<-->GBK 2:打开mysql窗口 SET NAMES UTF8; 每次新打开窗口执行指令 3:SOURCE d:/1. ...

  4. toString 和 valueOf 总结

    两者的共同点与不同点: 共同点:二者都能用来数据转换,并且在输出对象时会自动调用. 不同点:二者并存的情况下,在数值运算中,优先调用了valueOf,字符串运算中,优先调用了toString,没有操作 ...

  5. (四)js数组方法一

    ES5数组方法: Array.prototype.filter()   对数组元素进行过滤 三个参数:元素值,下标,原数组 返回:过滤后符合条件的数组,不会改变原数组 let arr = [2,4,6 ...

  6. 【MFC】MFC改变对话框中静态文本的字体大小

    MFC改变对话框中静态文本的字体大小 2010/08/09 11:30 VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体.对于你的问题,需要首先用CreateFont来建立一个 ...

  7. HDU - 5829:Rikka with Subset (NTT)

    As we know, Rikka is poor at math. Yuta is worrying about this situation, so he gives Rikka some mat ...

  8. bzoj 1925 地精部落

    Written with StackEdit. Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 \(N\) 的山脉 \(H ...

  9. 转载论文关于fir滤波器的fpga实现

    摘 要 本文讨论的FIR滤波器因其具有严格的线性相位特性而得到广泛的应用.在工程实践中,往往要求信号处理具有实时性和灵活性,本论文研究FIR的FPGA解决方案正体现了电子系统的微型化和单片化. 本论文 ...

  10. Python 函数 set()

    set() 功能:       set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. iterable -- 可迭代对象对象:返回新的集合对象. 语法 ...