C# 读取和编辑 MP3

ID3 是一个较为标准化的 MP3 属性标签集, 它可以在 MP3 文件的内部嵌入歌曲的一些信息, 比如标题, 艺术家, 专辑, 年份等, 在二代的版本中, 甚至支持将歌曲的图片和歌词, 都嵌入到文件中. 这使得我们在使用一些较为智能的播放器播放歌曲时, 会看到比较详细的信息, 如果带有封面显示的话, 也显得个性, 不会都是千篇一律的界面.

网上有很多修改 ID3 的工具, 代码也有一些, 但大部分的代码, 介绍的都是修改 ID3v1 的属性, 也就是总会看到的 MP3 最后 128 字节. 而关于如何修改 ID3v2 的非常少, 有也只是在介绍原理, 实际如何操作的更是少之又少. 甚至, 目前就没看到如何修改封面的. 于是决定把自己的实际操作收藏一下.

修改和获取 ID3 的相关信息, 我们可以借助官方推荐的一个类库:
类库的官方地址: 猛击这里去官方网址
我自己编译后的 DLL 文件下载: 猛击这里下载 DLL 文件
如果到官方下载, 可下载最新版, 但需要自己编译一下. 如果下载我编译的 DLL 文件, 只要在项目中直接引入即可.

以下用代码演示如何修改 ID3v2 的属性:

string filename = “F:\\Sleep Away.mp3”;
string cover = “F:\\cover.jpg”;

// 加载MP3
ID3Info info = new ID3Info(filename, true);

// 创建新封面
AttachedPictureFrame pic = new AttachedPictureFrame(
FrameFlags.Compression, “cover.jpg”, TextEncodings.UTF_16, “”,
AttachedPictureFrame.PictureTypes.Other,
new System.IO.MemoryStream(File.ReadAllBytes(cover)));

// 添加新封面到MP3中
info.ID3v2Info.AttchedPictureFrames.Add(pic);

// 设置其它属性
info.ID3v2Info.SetTextFrame(“TIT2”, “歌曲标题”);
info.ID3v2Info.SetTextFrame(“TPE1”, “艺术家”);
info.ID3v2Info.SetTextFrame(“TALB”, “专辑”);
info.ID3v2Info.SetTextFrame(“COMM”, “备注”);

// 保存到MP3中
info.Save();

通过别人做好的类, 其实我们的工作已经非常简单, 有几点要说明一下:

1. 在 XP 中 MP3 文件的属性是 ID3v1 的版本, 在 win 7 是 ID3v2 的版本;
2. 更多的属性列表, 可以到 ID3 官方查看, 猛击这里飞过去;
3. 在读取 ID3 属性的时候应该先判断是否存在 ID3 属性;
4. 专辑封面可以添加多张, 但播放器一般只会读取第一张, 所以要移除掉其它的;

https://github.com/tabtu/MP3EdProty

Leave a Comment

Your email address will not be published. Required fields are marked *