Community图像github.com

kanlac/sheet-music-pdf-convert

将乐谱 PDF(来自打谱软件、扫描或拍摄)转换为可编辑的 MusicXML 文件,可在 MuseScore、Dorico、Sibelius 或 Finale 中打开。适用于用户希望编辑、移调、重排或回放仅有 PDF 格式的总谱时。

sheet-music-pdf-convert 是什么?

该技能可将乐谱 PDF 转换为可编辑的 MusicXML 文件,支持从打谱软件、扫描或照片等多种来源的 PDF。它首先使用内置脚本识别 PDF 类型(矢量、扫描、混合等),然后根据类型选择最佳转换路线:对于从打谱软件导出的矢量 PDF,推荐使用 Tutti Studio 在线服务以获得高精度;对于扫描或照片,则使用本地 Audiveris OMR 引擎。转换完成后,它会自动审查结果,标记可疑的小节,并生成带标记的原 PDF 副本和 MUSICXML,同时明确告知用户哪些部分可能存在问题。该技能还强调避免常见错误(如人工转录、误判 PDF 类型、未检查结果等),并提供清晰的用户指引。支持 Claude Code、Cursor、Codex 等 AI 代理平台。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kanlac/tutti-pdf-converter/tree/HEAD/plugins/sheet-music-pdf-convert/skills/sheet-music-pdf-convert

Installed? Explore more 图像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

乐谱 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 自身注意到有问题的位置:在我们的测试中,大多数包含错误音符的小节并没有被标记,因此必须直白地告诉用户其余部分也需要检查。然后,分别说明:

  1. 导出了哪些页面或乐章,以及哪些没有导出;
  2. 可疑的位置(按 PDF 页面,并且仅在审查结果能将页面与小节对应时,才按小节说明);
  3. 音符尚未与 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 一次 → 如果大部分内容不可读,建议重新拍摄,而不是使用更多工具。

相关技能