这个项目是什么
写谱的人经常要在不同软件之间倒腾文件:Guitar Pro 的 gp5、MuseScore 的 mscz、MusicXML、MIDI,还有各种谱站导出的 JSON。ScoreTranslate 就是用来在这些格式之间互转的工具,输入支持 Guitar Pro(.gp .gpx .gp3 .gp4 .gp5)、MusicXML、MIDI、歌曲 JSON 与 alphaTex,输出可以到 Guitar Pro、MusicXML、MIDI、JSON、alphaTex,也能导出 MuseScore、PDF、PNG 和 PNG 长图。单文件上限 50 MB。
它强调的一点是转换都在本机完成:桌面版直接跑在本地,完整 Web 版由自己部署的 Bun 服务处理文件,纯静态 Web 版则在浏览器里用 Web Worker 转换,不会把谱子传到外部服务。
三种形态,一套核心
项目有桌面版(Tauri)、完整 Web 版(Bun 服务加 Vite 前端)和纯静态 Web 版三种发布形态,共用同一套 TypeScript 转换核心 lib/convert.ts。桌面版不启动本地 HTTP 服务,Rust 侧只负责调用 MuseScore 和文件操作。
Guitar Pro 与 MusicXML 系输入由 alphaTab 直接解析,读取音轨、导出 GP / GPX / GP5 / JSON / alphaTex 都不经过 MuseScore。真正需要 MuseScore 的是 MIDI 输入,以及 MIDI、PDF、PNG、MSCZ 输出。静态版因此只保留前一类能力,页面上会隐藏依赖 MuseScore 的选项。
README 里比较特别的是几个自研模块:lib/gp5-writer.ts 直接写 GP5 二进制,负责调弦与弦品指派;lib/gp-to-musicxml.ts 是自己写的 MusicXML 序列化器,能保留 TAB 谱表的调弦和弦品;lib/gpx-writer.ts 则处理 GP6 XML、BCFS 扇区容器和 BCFZ 压缩写出。
使用方法
本地跑 Web 版需要 Bun 和 MuseScore 4:
bun install
bun run dev
打开 http://localhost:3000,开发模式下页面由 Vite 提供,/api 代理到本机 3001 端口的 Bun API。生产部署用 bun run build 和 bun run start,Bun 同时提供 dist/ 静态页面和转换接口。只想部署静态版则执行 bun run build:static,生成的 dist 可以放到 Vercel 等静态托管平台。
完整 Web 版提供 HTTP 接口,比如把 gp5 转成 PDF:
curl -f -O -J \
-F "file=@score.gp5" \
-F "target=pdf" \
http://localhost:3000/api/convert
target 可选 mid、musicxml、xml、mxl、gp、gpx、gp5、json、atex、mscz、pdf、png、png-long。另有 POST /api/tracks 读取音轨列表,配合 tracks 参数可以只导出选中的音轨;GET /api/status 用来检查 MuseScore 是否被正确找到。
踩坑与思考
README 的「已知限制」写得挺实在。旧格式只能读:.gp3、.gp4 仅支持输入,.gp 输出为 GP7/8,.gp5 输出为 GP5 v5.00。GP5 写出器不保留和弦图,非 ASCII 的标题、歌词会降级成 ?,中文歌词建议改导 MusicXML、PDF 或 PNG。纯五线谱输出不写弦号和品位,转回 TAB 时会重新指派把位,需要保留原调弦和把位就选 TAB 或跟随原谱。
MIDI 不携带声部、连音线、临时记号拼写这些谱面信息,MuseScore 只能靠量化推断,演奏录制的 MIDI 和自动识别的草稿仍然要对照原谱整理。
还有一处跨软件差异:README 提到《普通朋友》样本的 957 个音符在 alphaTab 回读时音高与起止时间都保留了,但 MuseScore 4 会把结尾一处连音长音拆成两次起音,Guitar Pro 桌面端的实际发声也还没人工试听确认。格式对得上,不代表每个软件听到的都一样,这大概是做乐谱转换最麻烦的地方。
仓库地址:tpnet/ScoreTranslate