导入流水线
导入把一个文件夹转成目录项,不修改文件的任何一个字节。本页说明使用指南所述流程背后的流水线。
监视文件夹由平台文件系统事件监控,经过防抖,并在更改时重新扫描;扫描会与现有候选列表对齐,而不是从头开始。扫描器会把文件夹分类为一个发行(音频直接在其中,或像 CD1/CD2 这样的碟形子文件夹),或把它作为合集递归进入。文件按扩展名分类为音频、图像和文档,然后探测音频:真正重要的 codec 是 FFmpeg 在字节中找到的,而不是文件扩展名。包含 partial-download marker 的文件夹会被排除,直到下载完成。
CUE sheet 会把一个音频镜像转成曲目列表。解析器处理 pregap 和 postgap、每轨 performers 和 ISRC,以及单文件镜像和每轨一文件 CUE 布局。曲目边界会从 CUE frames(1/75 秒)转换为精确采样位置,之后成为播放使用的字节窗口和采样窗口。
每个候选人都存储一个可编辑的元数据草稿和可选的来源。 草稿可以是空白的,直接填充,从外部发布填充,或从存储的文件标签快照填充。 来源记录当前草稿开始的地方;后续编辑不会删除它。
顶部的元数据插槽显示草稿、在线查找 浏览器或文件标签 浏览器。 打开或关闭浏览器不会重写草稿。 应用 替换源在一个数据库事务中替换草稿、其来源和选定的源封面,同时保留文件角色、CUE 绑定、磁盘分配和其他映射决定。
在线查找 无法确定
Section titled “在线查找 无法确定”在线查找 是唯一运行识别的路径,它从 rip 日志或 CUE 表中计算 碟片 ID, 使用 OCR 识别条形码和目录文本,查询 MusicBrainz 和 Discogs, 并匹配结果。 嵌入式音频标签不是在线识别证据。
默认元数据来源有三个值。无创建空白草稿且不启动元数据工作。文件标签读取并应用标签快照。在线查找打开在线工作流程。默认在线查找模式可选择自动或手动搜索:自动会将证据提取、提供商查询和匹配加入队列,手动搜索不会启动识别。为任何候选项打开在线查找都会使用所选模式;自动不会重新启动正在进行或已经完成的任务。
文件标签 为什么?
Section titled “文件标签 为什么?”文件标签 会懒惰地读取嵌入的音频标签和 CUE 元数据,除非它是新发现的候选的配置默认值。 预览存储了一个快照,其中包含候选的扫描生成、文件编辑修订和观察到的音频文件。 应用 将其替换为该快照的草稿。
直接输入不执行元数据 I/O。 空白草稿的发布和跟踪字段可以立即编辑,并且在必需的字段和映射验证后可以导入。 候选列表不会将缺失的来源视为错误或请求注意。
MusicBrainz 以匿名方式查询,并严格保持每秒一个请求的节奏。Discogs 使用用户保存在 keyring 中的个人 token 认证,在其速率限制内控制节奏并重试;被拒绝的 token 会如实报告,因此 UI 可以标记它,而不是让搜索安静失败。响应按会话缓存,获胜来源的原始 JSON 会归档进数据库,以便将来重新解释。
确认导入会按顺序运行:
- 解码验证:每一轨从头到尾解码;无法完整解码的抓轨会在写入任何内容前导入失败(一个 config flag 可以禁用此项)。
- 响度分析:在同一次解码遍历中测量每轨和每专辑的 integrated loudness 与 true peak,并存储以供 replay-gain 使用。
- 封面选择:所选图像(远程、文件夹图片或内嵌图像)重新渲染为显示缩略图;如果原图来自文件夹,它会保留在发行文件中。
- 原子写入:release、tracks、credits、identities、formats、segments、files 和 cover 在一个 transaction 中提交。不存在半导入状态。
发行落库时原位引用用户文件。如果用户选择云端托管,上传会在提交后作为存储转换发生,并且文件原始字节始终是真相来源;用户交给 bae 的任何内容都不会被删除或改动。
每个发行都会记录其导入文件夹结构的 content hash(相对路径和大小,与位置无关)。重新扫描用它标记已在资料库中的文件夹,同一抓轨的重新导入也用它找到并替换先前发行,而不是复制一份。