惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
月光博客
月光博客
AI
AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
CXSECURITY Database RSS Feed - CXSecurity.com
WordPress大学
WordPress大学
GbyAI
GbyAI
L
Lohrmann on Cybersecurity
O
OpenAI News
Schneier on Security
Schneier on Security
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Troy Hunt's Blog
V2EX - 技术
V2EX - 技术
W
WeLiveSecurity
L
LINUX DO - 最新话题
人人都是产品经理
人人都是产品经理
S
Security Affairs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
Arctic Wolf
Recorded Future
Recorded Future
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
G
GRAHAM CLULEY
N
Netflix TechBlog - Medium
TaoSecurity Blog
TaoSecurity Blog
C
Check Point Blog
Scott Helme
Scott Helme
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Apple Machine Learning Research
Apple Machine Learning Research
PCI Perspectives
PCI Perspectives
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Vercel News
Vercel News
The Hacker News
The Hacker News
Y
Y Combinator Blog
Latest news
Latest news
SecWiki News
SecWiki News
Hugging Face - Blog
Hugging Face - Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google Online Security Blog
Google Online Security Blog
Webroot Blog
Webroot Blog
Google DeepMind News
Google DeepMind News
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
Cisco Blogs
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
宝玉的分享
宝玉的分享
L
LINUX DO - 热门话题

Cyberia

《C(金钱掌控)》观后感 - Cyberia C#在Windows UI开发中的衰落 - Cyberia 存储退潮 字体padding计算器 开源已死 自动化EAC音频抓取 起夜级家庭网络正在变得越来越重要 优化Powershell的启动时间 无JavaScript其实没有很重要 你不需要一个电纸书阅读器 文件分享的难题 为什么我不敢看都市 某科学的 SSH 算号指南 时代的辉夜姬 为什么 Pixi 是神 关于神椿的过去,当下以及未来,我的一点看法 Tahoe 的图标令人难评 The EVE of PUSHING LIMITS 在 Word 中通过制表符实现居中对齐等操作 编码之殇:前 Unicode 时代的 WAV 处理 sHELL 即地狱 WR1800K AX NAND 路由器刷入 Immortalwrt 一个 PWM 的世界 沉痛悼念复选框同志 字体焕新 独立博客自省问卷15题 答一答 解决 Visual Studio Code 内终端启动报错问题 (1) 简评《鱿鱼游戏》 Sword Art Online,以及它带来了什么 解决 Visual Studio Code 内终端启动报错问题 2024 年度总结 轻小说重度依赖 铃音之后 解决部分应用在 Windows 平台下端口被随机占用的问题 计算机科学中最困难的事:居中 宿舍场景下多人共用路由器下流量分流实践 Extra Decal Pre Processor 自动化处理 Amazon Music 文件 MD5 不一致问题 解决 MultiMC 无 Forge 版本的 Optifine 安装问题
如何写出优雅完整的音频元数据
Nullpinter · 2026-05-07 · via Cyberia

Roon确实是本地音频播放器的佼佼者。虽然说有很多Hifi相关的功能,还有Roon Ready这种认证,但是就把它当作一个数据库管理软件来看,也是没有任何竞争对手的。可以说,如果你符合Roon用户的经典画像,你甚至不用处理元数据问题,Valance能够解决基本上全部的古典问题。对于我这种的日音弱智用户来说就差点了,Roon的数据库中角色名字都是按照罗马音显示,尽管能够用片假名/平假名搜到,但是还是看着很难受。更何况有些同人音乐根本不在数据库中,只有最新最热最火最潮的二次元才会被识别到。如果你用的Roon版本不能连接到Valance数据库,那更是只能根据文件元数据来组织。

音频元数据完全是一团糟,有ID3的各种版本,Vorbis Comment,APE Tag,甚至还有MP4。不过Roon只支持alac(m4a)、flac(vorbis comment)、mp3(ID3),dsf(ID3)。所以主要使用的也就这些。本人主要使用flac,所以主要根据flac来举例和实现。

基本信息#

TITLEALBUMARTISTALBUM ARTISTCOMPOSER这些信息都非常基础,不必多说。不过有一点需要注意:Roon在识别到同一专辑有多个ARTIST的时候,会根据艺术家数量判断是否为Various Artists专辑,如果是就会把ARTIST显示为Various Artists,而不是专辑中ARTIST字段的内容。有些时候为了让Roon识别成“合辑”(即Various Artists专辑),需要手动调整ALBUM ARTIST字段为Various Artists。

日期#

第一个大坑就是日期了。如果你用的是Mp3tag,这个软件会把Vorbis Comment中的DATE字段映射到实际上的YEAR上,而ID3的YEAR是只能写年份的,所以尽管这个地方在flac中能够写完整日期,但是还是不建议在这里写完整日期。

从而,我们需要建立几个映射:

标签原始信息目标信息
VorbisCommentDATEYEAR
VorbisCommentORGANIZATIONPUBLISHER
VorbisCommentTRACKNUMBERTRACK
ID3v2ORIGINALRELEASEDATERELEASETIME
APEv2Album ArtistALBUMARTIST
VorbisCommentTDRLRELEASETIME
MP4TDRLRELEASETIME

所有的详细日期都写在TDRL字段中,YEAR/DATE只写年份,这样就能兼容所有的播放器了。

关于详细日期,Roon还有一个坑点,它的识别支持YYYYYYYY-MM-DD,但是不支持YYYY-MMYYYY-MM会被强制加一个1号,比如1991-03会变成1991-03-01。但是有些专辑确实不知道什么时候发布的,就要写文字月份了。文字月份的意思是类似于jan 1991的写法,前面的月份可以是全名或者是三字母缩写,这些日期能够被正确的识别成1991-01

多艺术家、多编曲等等#

Roon默认使用的艺术家分割符是;,没有。所以多个艺术家默认需要使用;分割,当然可以把、也加入分隔符,但是相信我你会被日本人莫名其妙的艺名恶心的。

还有一种是多字段。这种在flac中比较常见,就是有多个ARTIST字段,或者多个COMPOSER字段。在Mp3tag中显示为名字1\\名字2,这种同样不会导致识别错误。

厂牌和碟号#

厂牌可以写在LABELPUBLISHER中,Roon都会识别。碟号可以写在CATALOGNUMBERCATALOG NUMBER(谁有病加空格)中,Roon也会识别。

基本上,大部分人都到此为止了。那么如何做到以下效果呢?

丰富的元数据示例

其他元数据需要依赖接下来的字段:INVOLOVEDPEOPLE(Vorbis Comment)、TIPL(ID3)、PERSONNEL(两者都能用)。

更多角色#

在Mp3tag中,INVOLOVEDPEOPLE字段会被正确的映射到ID3 TIPL中,所以你可以直接写INVOLOVEDPEOPLE字段。但是这两个字段有不同的格式!是一个坑点。

Roon支持的角色列表在这里。Roon只会识别已知的角色列表。

name (role)

name (role[additional info])

实际上多个是name (role)\\name (role)\\name (role)\\name (role)

举个例子:

堀江晶太 (arranger)\\堀江晶太 (instrument)\\野沢香苗 (erhu)\\野々村昌樹 (erhu)\\村上宣之 (mix)\\村上宣之 (recording)\\LiSA (lead vocals)\\LiSA (lyricist)

但是但是!这个格式有问题,因为他用的正则匹配方式非常愚蠢,所以aaa(cv.xxx) (arranger)这种格式会识别失败,令人忍俊不禁。这种情况你就要去写PERSONNEL了。

最正统的ID3写法#

role:name;

role:name;role:name;role:name

一定要用分号分隔,这是ID3要求的。举个例子:

arranger:堀江晶太;instrument:堀江晶太;erhu:野沢香苗;erhu:野々村昌樹;mix:村上宣之;recording:村上宣之;lead vocals:LiSA;lyricist:LiSA;

PERSONNEL写法#

PERSONNEL出现于以上两种都没有被彻底规范的时候,是Roon的私有字段。支持以下格式:

name\trole

name role

name - role

\t是tab分隔符,不要真当作字符了。第二行是两个空格。尽管理论上有侧支持使用,分割多个role,但是实际上不会识别!你要多写几个PERSONNEL行才行。例子:

Wolfgang Schulz - Flute

Daniel Gaede - Violin

Thomas Selditz - Viola

Andreas Greger - Cello

Jeremy Poole - Liner Note Translation

Christophe Huss - Liner Note Translation

Toms Spogis - Booklet Design

Julia Zancker - Cover Photo

Julia Zancker - Cover Design

Andreas Spreer - Recording

Andreas Spreer - Mix

Roland Kistner - Editing

Andreas Spreer - Producer

Andreas Spreer - Liner Notes

Thomas Seedorf - Liner Notes

Regina Köhler - Liner Notes

需要指出的是,Roon不会读取ORCHESTRA字段,所以Orchestra需要写在PERSONNEL中。ENSEMBLE和SOLOIST可以按需写,不是必须。

不推荐的写法#

Roon为了强兼所有人,还有其他地方的元数据也会被读取,但是我不建议按照这样分开来写(目标字段:从哪里读取):

  • Soloists:“SOLOIST”, “SOLOISTS”, “©PRF”
  • Lyricists:“LYRICIST”
  • Librettists:“LIBRETTO”, “LIBRETTIST”
  • Vocalists:“VOCALS”, “VOCALIST”
  • RemixedBy:“REMIXED BY”, “MIXARTIST”, “REMIXER”
  • DjMixers:“DJMIXER”
  • Mixers:“MIXER”
  • Arrangers:“ARRANGER”
  • Ensembles:“ENSEMBLE”
  • Engineers:“ENGINEER”
  • Authors:“AUTHOR”, “IWRI”
  • Writers:“WRITER”
  • Conductors:“CONDUCTOR”, “TPE3”, “©CON”
  • Producers:“PRODUCER”, “IPRO”
  • Featuring:“FEATURING”

更多元数据#

歌词#

从这些 key 取值:“SYLT”,“SYNCED LYRICS”,“LYRICS”,“©LYR”,“UNSYNCED LYRICS”,“USLT”

Roon会自动检测是不是LRC歌词。TTML是不支持的,别想了。

更多出版信息#

  • ProductCode:“BARCODE”, “UPC”, “EAN/UPN”
  • CatalogNumber:“CATALOGNUMBER”, “CATALOGUE #”, “CATALOGNO”, “CATALOG NUMBER”, “CATALOGUE NUMBER”, “CATALOG”, “CATALOGUE”, “LABELNO”
  • Labels:“TPUB”, “ORGANIZATION”, “LABEL”
  • Isrc:“TSRC”, “ISRC”
  • Country:“RELEASECOUNTRY”, “COUNTRY”, “RELEASE COUNTRY”

是否是盗版碟#

检查BOOTLEG的值是不是true,接受true1,如果是的话就会被识别成盗版碟。

曲目是不是Live版本#

Roon不支持从文件元数据设置这个专辑是不是Live版本!所以这个很鸡肋。

检查LIVE的值是不是true,接受true1,如果是的话就会被识别成Live版本。

图片#

Roon不支持webp,avif这些现代图片格式,别想了。

更多日期#

  • IMPORTDATE:专辑被导入到Roon的日期,格式需要是YYYY-MM-DD,这个可以维持按日期排序的顺序。
  • OrIGINALRELEASEDATE:专辑的原始发行日期,格式需要是YYYY-MM-DD,为的是写出这个专辑第一次发行在什么时候,在同一个专辑多次再版的时候很有用。

Roon拓展元数据#

  • ROONALBUMTAG:专辑标签,Roon会把这个字段的值当成标签来识别,多个标签需要写多个在Mp3tag中显示为xx\\xx\\xx
  • ROONTRACKTAG:曲目标签,Roon会把这个字段的值当成标签来识别,多个标签需要写多个在Mp3tag中显示为xx\\xx\\xx

结语#

到此,基本上你能写的都写了,Roon能认的都认了。Roon不支持给碟片命名,这个已经骂了很久了;Roon不支持从文件读取Artist头像,这个也骂了很久了。总之,Roon的元数据系统虽然有很多坑点,但是只要你按照上面的方法来写,基本上就能写出一个非常完整的元数据了。