TagLib#用于处理媒体文件,例如视频,音频和照片等等,TagLib#采用LGPL和MPL两种开源协议。TagLib#是用于读取和编辑几种流行音频格式的元数据的库。目前,它支持 MP3文件的ID3v1和ID3v2,FLAC,MPC,Speex,WavPack,TrueAudio,WAV,AIFF,MP4和ASF文件中的Ogg Vorbis注释和ID3标签和Vorbis注释。其可以简化我们对mp3等媒体文件的处理,不需要我们按照字段长度分别获取信息,而是直接输入所需要获取的名称获取。
C#版本的开源库来自于https://github.com/mono/taglib-sharp,但是我们一般添加的方式可以直接在vs中的菜单栏选择:工具–>NuGet包管理器–>管理解决方案的NuGet程序包 进入”浏览”页面
直接搜素TagLib,第一个就是,直接安装即可。
安装完成后,做一个测试看一下是否成功(在原有的程序补全),传递给函数的x为文件地址,其要求为绝对地址,包含文件名与格式:如 C://test.mp3
函数会在控制台输出音乐文件的标题信息。
using TagLib;
private void GetMp3ImageFile(string x)
{
TagLib.File xxxx = TagLib.File.Create(x);
string title = xxxx.Tag.Title;
Console.WriteLine(title);
}
好了完成,本文到此结束。
()
欸欸欸别打我嘛,皮这一下我很开心。
好了说回来,TabLib中最核心的创建文件信息的语句是TagLib.File xxxx = TagLib.File.Create(new string(“xxxxx:\\xxxxx.mp3”)); //可以去掉new,直接存string
这句话为文件创建出相应的信息,其最主要的安排在Tag和Properties路径下这里挑选几个常用的属性标签:
TagLib.File:
IsEmpty: 判断信息是否为空
Tag:标签
Tag.Title: 标题
Tag.Album: 专辑
Tag.Artists: 歌手
Tag.Genres[]: 类型Properties属性
Properties.AudioBitrate:音频比特率
Properties.AudioChannels:音频频道
Properties.AudioSampleRate:音频采样率
Properties.Description:描述,如”MPEG Version 1Audio,Layer 3″
Properties.Duration:播放时长
可以参考一下本人自己做的项目中的一部分代码:
/*
获取MP3文件信息
*/
//获取MP3信息--包括图片信息
private void GetMp3ImageFile(string x)
{
var y = x.Length;
//将得到的文件实例化,x为MP3路径
TagLib.File xxxx = TagLib.File.Create(x);
//歌曲属性均在实例文件的tag属性属性中
string artist = xxxx.Tag.FirstArtist;
string title = xxxx.Tag.Title;
string album = xxxx.Tag.Album;
string[] performers = xxxx.Tag.Performers;
try {
MessageBox.Show("艺术家:" + artist + "\n" + "标题:" + title + "\n" + "唱片集 " + album + "\n" + "参与创作的艺术家 " + performers[0]);
}
catch {
}
//不一定每首歌都有专辑图片,需要判断
if (xxxx.Tag.Pictures.Length >= 1)
{
//tag中的图片信息为byte数组,需要用函数进行转化
byte[] bin = xxxx.Tag.Pictures[0].Data.Data;
pictureBox1.Image = ReturnPhoto(bin);//转化函数
}
else
{
//没有封面则显示封面图片缺失
//进行相对路径的处理
string LakeImage = Application.StartupPath;
LakeImage = LakeImage.Substring(0, LakeImage.LastIndexOf("\\"));
LakeImage = LakeImage.Substring(0, LakeImage.LastIndexOf("\\"));
LakeImage += "\\img\\lakepic.jpg";
Console.WriteLine(LakeImage);
pictureBox1.Image = Image.FromFile(LakeImage);
}
//string image = xxxx.Tag.Pictures[0].;
}
//图片传回
public System.Drawing.Image ReturnPhoto(byte[] streamByte)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream(streamByte);
System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
return img;
}
pictureBox1就是Form程序设计中最基本的图片盒的标准内容,直接输入即可。
有部分信息使用string数组,但是这些string数组基本信息都只保存在首位即string[0]这里,极少有多重的。
1 条评论
轩沫博客 · 2019年8月26日 下午6:57
目前我所有的友情链接已迁移到侧边栏,手机端点击顶部Logo右边的图标即可看到,点击原友链界面只显示申请友链要求&格式。