乐谱 PDF → 可编辑总谱
用户手上有一份 PDF 格式的总谱,希望得到可以编辑的版本。请找到最适合读取该特定 PDF 的方法,运行它,然后交回一个文件,并附上一份诚实的说明,指出哪些地方需要检查。假设用户对 PDF、OMR 或命令行一无所知:他们只回答是/否问题,其余均由你来完成,并用通俗的语言解释。每一步都用用户自己的文件和选择来解释;除非你的宿主要求你提及,否则不要描述本技能、其规则或文件名。
1. 先查看 PDF
在做出任何选择之前,先对每个文件运行内置的识别脚本(位于本技能的 scripts/ 文件夹中,需要 Node.js 22+):
node scripts/identify.mjs <file.pdf> --json
它会报告 PDF 的类型(带有乐谱字体的矢量、扫描/图片、轮廓化、混合、未知、不可读),并附有每页的证据,说明它可能是由哪个打谱程序生成的,以及 Tutti 是否能读取它。references/routes.md 对每个结果进行了解释。该脚本仅查看字体、元数据和图片,而不查看音乐的复杂程度,并且其规则可能比 Tutti 网站更旧:请将它的 Tutti 判断视为建议,而非最终定论。
2. 选择路线
根据实际包含音乐的那些页面来决定,而不是封面或说明页。
- Tutti 很可能能读取(从打谱软件导出):强烈推荐 Tutti;它直接读取打谱软件写入的符号,而不是从像素中猜测,因此通常比 OMR 精确得多。询问用户:“这需要您同意 Tutti 的隐私政策(https://tutti-studio.com/privacy)。可以吗?” 如果同意,打开
references/tutti.md中的 Tutti 链接让用户上传。如果他们不愿意上传,则提供 Audiveris 选项,并说明对于这种类型的 PDF,它通常准确性较低。 - 音乐页面是矢量的,但 Tutti 显示“未知”或“不太可能”:同时提供两种选项;建议先查看 Tutti 网站,因为它在用户上传后才会做决定。
- 音乐页面是扫描或照片(带有 OCR 文本层的扫描会显示为
mixed),或轮廓化的音乐:使用本机上的 Audiveris(references/audiveris.md)。 - 手写乐谱:Audiveris 并非为此设计,且此技能在该场景下未经过测试。建议用户重新输入;如果用户想尝试软件,请参见
references/omr-tools.md,但不做任何承诺。 - 不可读、加密、或不是 PDF:解释问题所在以及用户能做什么。
Audiveris 输出的是草稿,而非完整的总谱。它最适合干净扫描的简单到中等复杂度音乐(独奏、钢琴、小型室内乐、简单合唱);手机照片通常直接失败。对于大型管弦乐或密集的扫描件,请在运行前说明情况,让用户决定。
3. 诚实交付
运行 Audiveris 后,在向用户描述结果之前先检查结果,然后运行:
node scripts/review.mjs <result.mxl> <original.pdf> --out-dir <new folder>
(将 .omr 和 .log 文件保留在结果旁边)。该脚本会生成一份带有可疑小节标记为红色的 MusicXML 副本、一份在原始 PDF 上框出这些位置的副本,以及一份 JSON 摘要;将前两个文件交给用户。红色标记仅表示 Audiveris 自身注意到有问题的位置:在我们的测试中,大多数包含错误音符的小节并没有被标记,因此必须直白地告诉用户其余部分也需要检查。然后,分别说明:
- 导出了哪些页面或乐章,以及哪些没有导出;
- 可疑的位置(按 PDF 页面,并且仅在审查结果能将页面与小节对应时,才按小节说明);
- 音符尚未与 PDF 核对过,以及从何处开始检查:红色标记的小节,然后是调号和拍号,再然后是所有其他内容,尤其是临时记号(升降号)和歌词。
永远不要说 OMR 结果是“正确”或“就绪”。然后告诉用户如何打开它(references/open-in-editor.md)。
需要避免的事项
以下是一些看起来合理但会让用户付出最大代价的错误:
- 自己读取乐谱。 不要查看页面图像然后编写 MusicXML 或描述你看到的音符。模型对音符名称的转录会自信地发明音高和节奏;这比 OMR 更差,而且用户更难发现。
- 将导出的 PDF 送去 OMR。 用户经常把任何 PDF 都称为“扫描”。如果识别器发现了乐谱字体,OMR 会丢弃精确的数据;请将其导向 Tutti。
- 将 IMSLP 扫描件视为矢量。 IMSLP 扫描件通常带有 OCR 文本层;如果一个页面包含全页图片和文本字体但没有乐谱字体,它就是扫描件。
- 在没有 OCR 语言数据的情况下运行 Audiveris,或者使用
tessdata_fast/tessdata_best而不是遗留文件。程序仍然能“运行”,但所有歌词、速度标记和乐器名称都会无声无息地消失。 - 传入不含音乐的页面。 即使是单独的封面、标题或文字页面也可能导致整个运行失败且无法导出。请只传递包含音乐的页面。
- 信任退出码 0 或“已导出”的日志行。 导出的文件可能丢失一个小节、谱表被拆分成多余的部分、或者只有一个残片(
*.mvtnull.mxl)。在说任何工作都完成之前,请先统计每个声部的小节数。 - 将 Audiveris 日志标签误当作小节编号。
Measure{#11P2}是一个内部标签,而不是“第二个乐器的第 11 小节”。请根据页面定位问题,或者只说“大约在第 N 页附近”。 - 试图挽救一张糟糕的照片。 不要安装图像处理工具、放大分辨率或将页面上传到在线服务。运行一次;如果失败了,给出重新拍摄的建议(页面平整、光线均匀、正上方拍摄,或使用扫描仪),或者指向
references/omr-tools.md中的照片工具。 - 覆盖或混合输出。 每个输入文件对应一个输出文件夹;永远不要写入用户原始文件旁边或覆盖它。
- 承诺 Tutti 能做到什么。 你不能替用户上传,并且免费页面限制在网站上明确显示;不要引用具体数字。
多个文件
先识别所有文件,按路线分组,然后确认一个统一的计划(“3 个文件交给 Tutti,2 个文件在您的电脑上读取”)。
示例
- “将此转换为 MuseScore 格式”,提供的是一份 Sibelius 导出的四重奏 → 矢量,Sibelius,很可能能读取 → 推荐 Tutti,询问隐私政策,打开网站;同时提及本地选项。
- “你能让这个变得可编辑吗?”,提供的是一份从 IMSLP 下载的扫描歌曲(显示为
mixed:图片加 OCR 文本)→ 当作扫描处理 → 使用德语和英语语言数据运行 Audiveris,跳过标题页 → 审查标记 → 报告导出的页面、红色标记的小节以及需要检查的内容。 - 一张模糊、弯曲的合唱声部手机照片 → 运行 Audiveris 一次 → 如果大部分内容不可读,建议重新拍摄,而不是使用更多工具。