5个实用场景玩转mp3tag4cxx:嵌入专辑封面、写歌词、章节导航与评分标签
【免费下载链接】mp3tag4cj一个用于读取、创建和修改MP3标签信息的库项目地址: https://gitcode.com/Cangjie-TPC/mp3tag4cj
mp3tag4cj是一个用于读取 MP3 文件、读取/创建/修改 ID3 标签(ID3v1 与 ID3v2.2~v2.4)的 Cangjie 开源库。本文挑出 5 个新手最常用的实用场景:嵌入专辑封面、写入歌词、章节导航、评分标签、批量修复旧标签,让你几分钟就能上手这个 MP3 标签处理库。
一、快速上手:3步接入mp3tag4cj
第一步:获取源码
git clone https://gitcode.com/Cangjie-TPC/mp3tag4cj第二步:确认依赖。库依赖 charset4cj 字符集包,需要 cjc v1.1.3 以上版本(见 cjpm.toml)。
第三步:构建
cjpm build核心入口类只有两个:Mp3File负责打开文件和音频信息,ID3v2标签负责封面、歌词等数据帧。
二、场景1:嵌入专辑封面(APIC帧)
音乐播放器里显示专辑封面,靠的就是 ID3v2 的APIC 帧。mp3tag4cj 提供了setAlbumImage()接口(定义于 abstract_id3v2_tag.cj),只需传入三步:
- 图片字节数据(
Array<Int8>) - MIME 类型:一般填
image/png或image/jpeg - 图片类型:
0x03= 正面封面(最常用),还支持背面、艺人照、Logo 等 14 种类型
读取封面用getAlbumImage(),想删掉就用clearAlbumImage()。接口细节可查官方文档 doc/feature_API.md。
三、场景2:写入歌词(USLT帧)
给 MP3 内嵌完整歌词,播放器切歌时歌词就能自动滚动。对应的是USLT 帧:
setLyrics(Option<String>)写入歌词getLyrics()读取歌词
标签内容支持ISO-8859-1、UTF-16LE、UTF-16BE、UTF-84 种编码,由 encoded_text.cj 统一处理,所以中文歌词放心写入,不会乱码。
四、场景3:章节导航(CHAP + CTOC帧)
播客、有声书、Live 合集这类"一首文件多段内容"的场景,需要章节标签:
- CHAP 帧(
setChapters()):每一章包含id、startTime/endTime(毫秒)、startOffset/endOffset,还支持子帧挂载额外信息,封装类见 id3v2_chapter_frame_data.cj - CTOC 帧(
setChapterTOC()):目录树,支持层级化章节索引,见 id3v2_chapter_toc_frame_data.cj
写入后,支持章节跳转的播放器就能直接点章节播放。
五、场景4:添加评分标签(POPM帧)
给心爱的歌打 1~5 星?ID3v2 的POPM 帧就是干这个的:
// 设置评分,有效值 [0,5] id3v2Tag.setWmpRating(4) // 读取评分 var rating: Int32 = id3v2Tag.getWmpRating()很多播放器会直接把它显示成星标,帮你快速区分"常听"和"听过"的歌。POPM 帧数据封装在 id3v2_popm_frame_data.cj。
六、场景5:批量读取与修复旧MP3的ID3v1标签
老歌库里大量 MP3 只有 128 字节的ID3v1 标签。mp3tag4cj 对 ID3v1 提供完整支持(id3v1_tag.cj):
| 操作 | 接口 |
|---|---|
| 判断是否存在 | hasId3v1Tag() |
| 获取/设置标题 | getTitle()/setTitle() |
| 设置艺术家/专辑/年份 | setArtist()/setAlbum()/setYear() |
| 设置流派/评论 | setGenre()/setComment() |
| 保存为新文件 | mp3File.save(新路径) |
配合getBitrate()、isVbr()、getLengthInSeconds()等音频信息接口,非常适合写批量扫描+批量写标签的小工具。完整可运行的示例见 README.md。
七、总结:一张表看懂5个场景
| 场景 | ID3v2 帧 | 核心接口 | 关键源码 |
|---|---|---|---|
| 专辑封面 | APIC | setAlbumImage() | id3v2_picture_frame_data.cj |
| 写入歌词 | USLT | setLyrics() | abstract_id3v2_tag.cj |
| 章节导航 | CHAP / CTOC | setChapters()/setChapterTOC() | id3v2_chapter_frame_data.cj |
| 评分标签 | POPM | setWmpRating() | id3v2_popm_frame_data.cj |
| 旧标签修复 | ID3v1 | setId3v1Tag()+save() | id3v1_tag.cj |
所有标签修改完成后,调用Mp3File.save()一次性写回文件即可。项目基于 MIT License 开源,当前版本 v1.0.4(见 CHANGELOG.md),欢迎上手尝试这 5 个场景!🎧
【免费下载链接】mp3tag4cj一个用于读取、创建和修改MP3标签信息的库项目地址: https://gitcode.com/Cangjie-TPC/mp3tag4cj
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考