☰
5个实用场景玩转mp3tag4cxx:嵌入专辑封面、写歌词、章节导航与评分标签
2026/9/25 7:00:42 网站建设 项目流程

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),只需传入三步:

  1. 图片字节数据(Array<Int8>)
  2. MIME 类型:一般填image/png或image/jpeg
  3. 图片类型: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 帧核心接口关键源码
专辑封面APICsetAlbumImage()id3v2_picture_frame_data.cj
写入歌词USLTsetLyrics()abstract_id3v2_tag.cj
章节导航CHAP / CTOCsetChapters()/setChapterTOC()id3v2_chapter_frame_data.cj
评分标签POPMsetWmpRating()id3v2_popm_frame_data.cj
旧标签修复ID3v1setId3v1Tag()+save()id3v1_tag.cj

所有标签修改完成后,调用Mp3File.save()一次性写回文件即可。项目基于 MIT License 开源,当前版本 v1.0.4(见 CHANGELOG.md),欢迎上手尝试这 5 个场景!🎧

【免费下载链接】mp3tag4cj一个用于读取、创建和修改MP3标签信息的库项目地址: https://gitcode.com/Cangjie-TPC/mp3tag4cj

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询