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]这里,极少有多重的。

分类: C#

1 条评论

轩沫博客 · 2019年8月26日 下午6:57

目前我所有的友情链接已迁移到侧边栏,手机端点击顶部Logo右边的图标即可看到,点击原友链界面只显示申请友链要求&格式。

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注