多数音乐软件都能显示标题。真正棘手的问题在于这个标题指向什么:一部作品,作品的某次录音室演奏,这段演奏的重制版,某张特定 CD 上的第七首曲目,还是收录第七首曲目的那一版专辑?搜索框可以把五者一并摊平成“歌曲”,经得起长期使用的目录却不能这样处理。
MusicBrainz 正是从拒绝这种摊平开始的。它既是开源项目,也是由社区维护的音乐数据库,为艺术家、录音、发行版、发行组、作品、厂牌、地点、事件及其相互关系分别赋予身份,再通过网站、REST API、数据库转储和 Picard 标签工具开放这些数据。起初,这些区分会显得过分细密;等到音乐库里出现现场版、再版、套装,遇上两位同名艺术家,或需要区分属于作品的创作者署名与属于音频的署名时,这份细密就成了产品本身。[1][2]
上方照片拍摄的是 MetaBrainz 贡献者参加 2024 年新德里峰会时的合影。[9] 它之所以重要,在于 MusicBrainz 的实质还包括 API endpoint 背后的人员协作。人们判断一项实体究竟是什么,附上证据,审查变更,合并重复项,并维护保存这些决定的软件。人的组织本身也是数据库引擎的一部分。
一个熟悉的词里藏着五类实体
一部作品(work)是作为根基的创作本体,可以被谱写、编曲、翻译或演奏。一项录音(recording)是特定的音频内容,即一场演奏或一次录音室制作的成果,可以出现在多种发行产品里。一条曲目(track)是发行版中某个介质上的一个位置;它指向一项录音,同时可以保留该版印刷的特定标题和艺术家署名。一个发行版(release)是一次具体出版,带有国家、日期、厂牌、目录编号、条码、包装和介质编排。一个发行组(release group)则把代表同一张广义专辑、单曲、EP、广播节目或其他项目的发行版归在一起。[2]
设想同一场演奏先出现在国内版 CD 上,随后收入国际再版,又在一套回顾性套装中出现。MusicBrainz 可以用一项录音连接三条曲目,而每条曲目都位于不同发行版内;这些发行版可以同属一个发行组。录音还可以向上连接它所实现的作品,表演者署名归于录音,作曲者署名则归于作品。“标题相同”与“实体相同”由此各自保持独立。
这种分离可以防止几类常见的数据错误。曲目标题得到修正时,变更可以只停留在对应位置,不会连带改掉各处的录音名称。不同的母带处理仍可归在同一部作品之下。数字版可以保留自己的信息,同时完整留下实体版的条码与包装。某项录音收入合辑时,即使曲目位置改变,也可以继续指向原有录音。判断仍由编辑作出——他们还要决定两段音频是否算作同一项录音——但每项判断都有一个名称明确的归属层级。[2]
这套模型在处理署名时尤其有用。“表演者”“作曲者”“录音工程师”“发行方”和“录制地点”,描述的是不同实体之间不同的连接关系。当界面缺少录音层级的关系时,把一位吉他手挂到整张专辑上固然方便,却会误示他参与了每一首曲目。MusicBrainz 的关系体系让署名停留在证据所能支持的层级;当关系类型允许时,还可以记录日期、乐器、职责和顺序等属性。[2]
MBID 是操作柄,目录判断仍会演进
名称很难胜任数据库键。艺术家会重名,名称会改变,文字系统各不相同,标点也会漂移;发行版标题还可以与录音或作品标题完全相同。因此,MusicBrainz 为每个实体分配一个 36 字符的 UUID,称为 MusicBrainz Identifier,简称 MBID。实体类型依然是地址的一部分:即使屏幕在两者旁边显示相同文字,艺术家 MBID 和录音 MBID 也不能互换。[3]
有了 MBID,应用程序可以保存“正是这一项录音”,取代“这些字符串在当前文本搜索中排在最前面的结果”。Picard 可以把录音、发行版、艺术家以及其他 MBID 写入音频文件标签。以后即使显示名称或首选别名改变,播放器或目录仍能借助这些标识符找回实体之间的关系。[3][5]
标识符具有稳定性,同时仍服从目录修订。编辑发现两个条目描述同一实体时,MusicBrainz 可以合并它们;退役的 MBID 会重定向到保留下来的实体。这样既能合并已知重复项,又能保留下游文件中已有的标识符,比永久冻结重复项或删除现存引用都更实用。它也划出一条工程界线:使用方应当跟随重定向并保留实体类型,UUID 文本本身不保证原始记录永远是规范条目。[2][3]
单凭 MBID,模糊识别仍然存在。用户仍需从不确定的证据出发——文件名、已有标签、CD 目录表或声学指纹——找到一个合理的候选实体。只有在匹配经过核验之后,标识符的力量才显现出来。它是指向一次目录判断的持久指针,无法充当音乐真伪的神奇校验和。
编辑历史也是数据模型的一部分
任何人发现缺失的发行版或错误署名,都可以提出修正。许多新增项或小改动会自动生效;其他变更会保持开放,等待投票,受信任的自动编辑员则能批准范围更广的日常修改。编辑注释为审查者提供证据,也给后来的编辑者留下线索。数据库保留完整变更历史,各字段因而不会呈现为从一开始就定型且毫无争议的事实。[1][4]
这套做法有意放慢收录速度,低于把每一份看似可信的数据源直接导入目录的速度。MusicBrainz 自己的编辑指南指出,早期批量导入留下了大量需要人工修复的数据。现行模式要求贡献者遵循风格指南,区分客观证据与个人偏好,并审查合并等破坏性变更。[4]
Jess Hemerly 在加州大学伯克利分校所做的案例研究很有价值,因为她把 MusicBrainz 当作文化公地来考察,而没有停留在标签工具的层面。她的混合研究方法发现,编辑者的工作方式与信息专业人员相近:协商标准,为边缘案例编目,也有一部分贡献动力来自对准确性和一致性的执着。[8] 这也解释了项目最重要的运转基础为何不限于 PostgreSQL 或 Perl。数据模式、社会规则、证据与可见历史共同维系着整个项目。
代价确实存在。冷门发行版会等待很久才有人处理。两位谨慎的编辑也会对同一条指南作出不同解释。机器人放大错误假设的速度,可以超过人工审查。因此,应用程序应当把 MusicBrainz 视为一处持续维护的知识公地:整体精确,随时接受修正,同时绝不能等同于艺术家的权威版税账本或厂牌的私有权利系统。
Picard 把目录重新写回文件
许多用户通过 MusicBrainz Picard 第一次接触这个项目。这款开源桌面标签工具载入音频文件,检索候选发行版,把文件与其中的曲目对齐,展示旧元数据和拟写入的元数据,最后保存用户选定的结果。重要之处在于,Picard 提供数条识别路径,界面没有收缩成一个“修复一切”按钮。[5]
如果文件已经按专辑分组,并保留了有用标签,Cluster 和 Lookup 会利用这些信息搜索匹配的发行版。如果剩余元数据很少,Scan 会计算声学指纹,再借助 AcoustID 关联寻找录音。实体 CD 或受支持的抓轨日志可以提供光盘目录表,用户也可以手动搜索。每条路径都从不同证据起步,因而各有不同的失败方式。[5]
声学匹配不会自动锁定正确的发行版。同一项录音可以出现在原始发行版、重制版、合辑和套装里;反过来,相似的文字也会掩盖不同录音。Picard 文档要求用户在保存或提交指纹之前,核对国家、日期、厂牌、目录编号、条码、介质类型、封面和曲目分配。这个审查步骤,正是 MusicBrainz 区分实体所带来的实际收益:先识别音频,再选择文件真正代表的发行版本。[5]
对于个人音乐库,一套谨慎的操作流程朴素而有效。复制一个有代表性的专辑文件夹,保留原始标签,每次只对一个发行版执行聚类和查找。比较拟写入的发行版元数据与 MBID,再保存到副本,并用最终读取这些文件的播放器测试。等到命名脚本、多碟套装、合辑、古典作品和非拉丁文字别名都符合预期,再让这套流程触及更大范围的存档。
API 是公地的访问端点,容量自有上限
开发者可以用 JSON 或 XML 查询 https://musicbrainz.org/ws/2/。API 将操作分为三类:已知实体的 lookup、查找与另一实体相连项目的 browse,以及处理不确定文本的 search。artist-credits、releases 和 work-rels 等 includes 让客户端选择所需连接,无须一次接收整张关系图。Browse 响应支持 offset 和 limit;lookup 附带的关联实体数量设有上限,所以需要完整关联集合的客户端必须通过相应 browse endpoint 分页读取。[6]
公共服务清楚标出了资源限度。客户端必须发送带有联系信息且含义明确的 User-Agent;除非另有约定,请求速率应保持在每秒一次或以下。应用程序若为列表中的每一行分别发出请求、遇到每项错误都立即重试,或定时发起同步的批量刷新,就等于把自身架构成本转嫁给一家非营利服务机构。[6]
对于小型标签工具、收藏浏览器或数据补充任务,缓存配合克制的 API 使用方式通常已经足够。需要批量连接数据、在整个目录上执行低延迟搜索或获得可复现快照的服务,则应评估数据库转储。MusicBrainz 发布核心 PostgreSQL 转储、派生数据、编辑历史、校验和与签名;运营方可以运行本地服务器,也可以采用较轻量的复制工具。许可范围需要留意:核心转储采用 CC0,若干派生及历史数据集则使用单独的非商业性相同方式共享许可。[7]
这种划分清楚显示了项目对开放的成熟理解。开放数据不等于无限量的托管查询服务,开源服务器代码也不等于一套零运维成本的本地镜像。本地镜像需要负责 PostgreSQL、导入、索引、存储、更新、API 兼容性与监控;公共 API 则受到速率限制和可用性的约束。团队应当选择自己愿意承担的那组责任。
BBC 的内部 MusicBrainz 指南展示了规模更大的生产环境如何采用这套数据。指南描述了 BBC 保存艺术家与作品数据的自有副本,大约每小时刷新一次,使用 MBID 消除同名歧义,并为 BBC 系统作出少量本地编辑调整。[10] 值得关注的是这套系统安排,精确刷新间隔居于次要位置:大型使用方保留了上游实体区分,没有把上游名称压成扁平字符串,也没有把公共 endpoint 当作私有数据库。
MusicBrainz 适合放在哪里
MusicBrainz 很适合作为个人音乐库标签、音乐播放器、唱片目录工具、档案目录、文化研究及相关产品的基础;这些产品需要用开放标识符连接艺术家、录音、发行版与作品。当团队重视来源脉络和修正渠道,希望数据可以长期维护时,它相较于一次性元数据转储尤其有价值。[1][7]
当产品需要有保证的所有权份额、现行版税指示、特定地区的商业权利,或厂牌与艺术家的权威声明时,MusicBrainz 的适用度会降低。它可以记录关系和标识符,却无法把社区元数据变成权利清算依据。面对含混匹配时,产品仍需人工审查;对于 API 限流、本地缓存、重定向、许可和上游修正,也都要预先安排,MusicBrainz 无法替产品补上这些缺口。
这个项目最深的一层启示,是互操作早在 API 之前便已开始。曲目、录音、作品各自是不同实体,发行版与发行组也各有身份。为它们分别赋予身份后,软件就能连接各项数据,同时保留彼此差异。编辑与合并记录保持可见,目录便能持续改善,也坦然留下曾经出错的痕迹。MusicBrainz 能够运转,是因为它把音乐元数据同时视为一张技术关系图,以及一项由公众悉心维护的工作。
来源
- MusicBrainz,《About》——项目历史、社区维护范围、开放数据与开源软件。
- MusicBrainz,《MusicBrainz Database Schema》——实体定义、关系、编辑表与 MBID 重定向。
- MusicBrainz,《MusicBrainz Identifier》——36 字符 UUID、实体类型、文件标签用途及合并后的重定向行为。
- MusicBrainz,《How Editing Works》——贡献流程、风格指南、投票、自动编辑及导入质量问题的历史。
- MusicBrainz Picard 3.0 文档,《When files are grouped by album》——聚类、查找、发行版核验、曲目匹配、保存与提交 AcoustID。
- MusicBrainz,《MusicBrainz API》——
/ws/2/、lookup/browse/search 的语义、includes、分页限制、客户端标识与速率限制。 - MusicBrainz,《MusicBrainz Database Download》——PostgreSQL 转储、派生数据、编辑历史、完整性检查、复制方式及数据集许可。
- Jess Hemerly,《Making Metadata: The Case of MusicBrainz》,加州大学伯克利分校信息学院,2011——针对贡献、标准、治理和元数据劳动所做的独立混合方法研究。
- MetaBrainz Foundation,《MetaBrainz Summit 2024》——本文新德里贡献者照片的来源页面与人物说明。
- BBC,《Musicbrainz》内部用户指南——运用 MBID 消除歧义、保存本地数据副本、开展编辑工作及回馈上游的独立生产案例。