如何写出优雅完整的音频元数据
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来举例和实现。
基本信息
TITLE、ALBUM、ARTIST、ALBUM ARTIST、COMPOSER这些信息都非常基础,不必多说。不过有一点需要注意:Roon在识别到同一专辑有多个ARTIST的时候,会根据艺术家数量判断是否为Various Artists专辑,如果是就会把ARTIST显示为Various Artists,而不是专辑中ARTIST字段的内容。有些时候为了让Roon识别成“合辑”(即Various Artists专辑),需要手动调整ALBUM ARTIST字段为Various Artists。
日期
第一个大坑就是日期了。如果你用的是Mp3tag,这个软件会把Vorbis Comment中的DATE字段映射到实际上的YEAR上,而ID3的YEAR是只能写年份的,所以尽管这个地方在flac中能够写完整日期,但是还是不建议在这里写完整日期。
从而,我们需要建立几个映射:
| 标签 | 原始信息 | 目标信息 |
|---|---|---|
| VorbisComment | DATE | YEAR |
| VorbisComment | ORGANIZATION | PUBLISHER |
| VorbisComment | TRACKNUMBER | TRACK |
| ID3v2 | ORIGINALRELEASEDATE | RELEASETIME |
| APEv2 | Album Artist | ALBUMARTIST |
| VorbisComment | TDRL | RELEASETIME |
| MP4 | TDRL | RELEASETIME |
所有的详细日期都写在TDRL字段中,YEAR/DATE只写年份,这样就能兼容所有的播放器了。
关于详细日期,Roon还有一个坑点,它的识别支持YYYY、YYYY-MM-DD,但是不支持YYYY-MM,YYYY-MM会被强制加一个1号,比如1991-03会变成1991-03-01。但是有些专辑确实不知道什么时候发布的,就要写文字月份了。文字月份的意思是类似于jan 1991的写法,前面的月份可以是全名或者是三字母缩写,这些日期能够被正确的识别成1991-01。
多艺术家、多编曲等等
Roon默认使用的艺术家分割符是;,没有、。所以多个艺术家默认需要使用;分割,当然可以把、也加入分隔符,但是相信我你会被日本人莫名其妙的艺名恶心的。
还有一种是多字段。这种在flac中比较常见,就是有多个ARTIST字段,或者多个COMPOSER字段。在Mp3tag中显示为名字1\\名字2,这种同样不会导致识别错误。
厂牌和碟号
厂牌可以写在LABEL和PUBLISHER中,Roon都会识别。碟号可以写在CATALOGNUMBER和CATALOG NUMBER(谁有病加空格)中,Roon也会识别。
基本上,大部分人都到此为止了。那么如何做到以下效果呢?

其他元数据需要依赖接下来的字段:INVOLOVEDPEOPLE(Vorbis Comment)、TIPL(ID3)、PERSONNEL(两者都能用)。
更多角色
在Mp3tag中,INVOLOVEDPEOPLE字段会被正确的映射到ID3 TIPL中,所以你可以直接写INVOLOVEDPEOPLE字段。但是这两个字段有不同的格式!是一个坑点。
Roon支持的角色列表在这里。Roon只会识别已知的角色列表。
最正统的Vorbis Comment写法
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\trolename rolename - role\t是tab分隔符,不要真当作字符了。第二行是两个空格。尽管理论上有侧支持使用,分割多个role,但是实际上不会识别!你要多写几个PERSONNEL行才行。例子:
Wolfgang Schulz - FluteDaniel Gaede - ViolinThomas Selditz - ViolaAndreas Greger - CelloJeremy Poole - Liner Note TranslationChristophe Huss - Liner Note TranslationToms Spogis - Booklet DesignJulia Zancker - Cover PhotoJulia Zancker - Cover DesignAndreas Spreer - RecordingAndreas Spreer - MixRoland Kistner - EditingAndreas Spreer - ProducerAndreas Spreer - Liner NotesThomas Seedorf - Liner NotesRegina 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,接受true、1,如果是的话就会被识别成盗版碟。
曲目是不是Live版本
Roon不支持从文件元数据设置这个专辑是不是Live版本!所以这个很鸡肋。
检查LIVE的值是不是true,接受true、1,如果是的话就会被识别成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的元数据系统虽然有很多坑点,但是只要你按照上面的方法来写,基本上就能写出一个非常完整的元数据了。