简体中文 | English · 官网 · 网页版 · 下载桌面版
乐谱格式转换工具,支持 Guitar Pro、MusicXML、MIDI、歌曲 JSON 等格式互转,以及 PDF、PNG 导出。
桌面版在本机完成转换;完整 Web 版由配套服务器处理文件,本机部署时文件不会上传到外部服务;静态 Web 版在浏览器内完成转换,不上传文件。前端使用 React + Vite,Web 服务使用 Bun,桌面版使用 Tauri;共用 TypeScript 转换核心,无数据库。
支持的格式 · 快速开始 · 歌曲 JSON 转 Guitar Pro · HTTP 接口 · 开发与验证 · 已知限制
| 类型 | 输入 | 输出 |
|---|---|---|
| Guitar Pro | .gp .gpx .gp3 .gp4 .gp5 |
.gp(GP7/8) .gpx(GP6) .gp5(GP5 v5.00) |
| MusicXML | .musicxml .xml .mxl |
.musicxml .xml .mxl |
| MIDI | .mid .midi |
.mid |
| JSON | LL 原始歌曲详情、二维 GP 时间线、alphaTab 乐谱模型 | alphaTab 乐谱模型 .json |
| alphaTex | .atex |
.atex |
| MuseScore / 文档 / 图片 | — | .mscz .pdf .png、PNG 长图 |
单文件上限 50 MB。.json 输出统一为 alphaTab 乐谱模型,不会写回 LL 或二维时间线结构;alphaTex 是可手写的文本谱格式,语法错误会提示行列。
可按需选择音轨,并配置以下导出选项:
| 目标 | 选项 |
|---|---|
| 全部格式 | 只导出选中的音轨 |
| MusicXML / PDF / PNG | 六线谱或五线谱 |
| 纸张大小、谱面缩放;谱表类型也可跟随原谱 | |
| PNG / PNG 长图 | DPI、裁边;谱表类型也可跟随原谱 |
| MIDI | 展开反复记号 |
| GP / GPX / GP5 / MusicXML / PDF / PNG | 歌词并轨,将人声轨歌词按时间对齐到其他音轨 |
PNG 单页返回图片,多页自动打包为 ZIP;PNG 长图将各页纵向拼接,超过 1 亿像素时会报错,可降低 DPI 后重试。
直接打开 ScoreTranslate 网页版,无需安装,文件在浏览器内转换,不上传服务器。支持 Guitar Pro(含 GPX)、MusicXML、JSON 与 alphaTex 互转、选轨和歌词并轨。MIDI 输入及 MIDI / PDF / PNG / MSCZ 输出请使用桌面版或完整 Web 服务。
从 Releases 下载对应平台的文件:
| 平台 | 安装包 / 运行要求 |
|---|---|
| macOS Apple Silicon / Intel | 对应架构的 DMG,macOS 13 及以上 |
| Windows x64 | ScoreTranslate_<版本>_x64-setup.exe 安装版,或 ScoreTranslate_<版本>_x64-portable.exe 免安装版;免安装版需系统已有 WebView2 Runtime |
桌面版无需安装 Bun 或 Node.js,也不启动本地 HTTP 服务。MuseScore 4 按转换需求单独安装。未安装时,Guitar Pro / MusicXML / JSON / alphaTex 之间互转和读取音轨仍可用;MIDI 输入,以及 MIDI / PDF / PNG / MSCZ 输出需要 MuseScore。
应用未做正式开发者签名与公证。首次打开如被系统拦截:
- macOS:在「系统设置 → 隐私与安全性」选择「仍要打开」。
- Windows:在 SmartScreen 提示中选择「更多信息 → 仍要运行」。
安装 Bun 和 MuseScore 4,在项目目录执行:
bun install
bun run dev打开 http://localhost:3000。开发模式由 Vite 提供页面,/api 代理到本机 3001 端口的 Bun API。
bun run build
bun run startBun 同时提供 dist/ 静态页面和转换 API,默认监听 127.0.0.1:3000。远程部署时显式设置 HOSTNAME / PORT,并配置 HTTPS 反向代理。MuseScore 安装在服务器上,用户浏览器无需安装;仅部署 dist/ 静态文件不能提供完整转换能力。
仓库的 vercel.json 已配置 Vite 静态部署。在 Vercel 导入 Git 仓库,Root Directory 选择项目根目录即可,安装、构建和输出目录分别为:
| 配置 | 值 |
|---|---|
| Framework Preset | Vite |
| Install Command | bun install --frozen-lockfile |
| Build Command | bun run build:static |
| Output Directory | dist |
无需配置环境变量、启动 Bun 服务或安装 MuseScore。build:static 在构建时设置 VITE_STATIC_MODE=1,转换与音轨读取复用浏览器 Web Worker,不请求 /api/*。其他静态托管平台也可部署这个命令生成的 dist/。
静态版支持 Guitar Pro(gp / gpx / gp3–5)、MusicXML(musicxml / xml / mxl)、JSON、alphaTex 之间互转,保留选轨、歌词并轨及歌曲 JSON 的速度和八度设置。MIDI 输入以及 MIDI / PDF / PNG(含长图)/ MSCZ 输出不可用,页面会隐藏相关选项。文件上限仍为 50 MB,实际可处理大小受浏览器和设备内存限制。
本地预览静态部署(仅启动静态文件服务,不启动转换 API):
bun run build:static
bun x --no-install vite preview --host 127.0.0.1 --port 4173打开 http://127.0.0.1:4173。静态部署不提供 HTTP 转换接口;需要完整格式或 HTTP API 时,使用上面的 Bun 服务部署。bun run dev / bun run build 默认仍使用 Web API,桌面版始终保留原生 MuseScore 功能;从静态预览切回完整 Web 服务前,重新执行 bun run build。
Web 和桌面版共用以下默认查找位置:
| 系统 | 默认路径 |
|---|---|
| macOS | /Applications/MuseScore 4.app/Contents/MacOS/mscore |
| Windows | %ProgramFiles%\MuseScore 4\bin\MuseScore4.exe |
| 其他系统 | 在 PATH 中查找 mscore |
安装在其他位置时,在启动服务或应用的环境中设置 MSCORE_PATH,指向 MuseScore 4 可执行文件。例如在 macOS / Linux 终端中:
export MSCORE_PATH="/your/path/to/mscore"上传歌曲 JSON,目标选择 Guitar Pro (.gp) 生成 GP7/8 文件,或选择 Guitar Pro 6 (.gpx) 生成 GP6 文件。支持两种歌曲输入:
| 输入 | 元数据与速度 | 音高设置 |
|---|---|---|
LL 原始歌曲详情 lyrics-*.json |
自动读取标题、作者与 BPM;目前仅支持 4/4 拍 | 默认 note=1, upOctave=0 对应 C4(MIDI 60),不叠加 tone/leadNote |
二维 GP 时间线 *.gp.json |
不含速度元数据,默认 120 BPM;请填写原曲速度 | 已包含 MIDI 音高,不再应用八度设置 |
仅含文件索引的 song.json 不受支持。在界面「歌曲速度 BPM」或 HTTP 字段 jsonTempo 中可覆盖两种输入的速度(20–400 BPM)。如果原始详情试听相差八度,可在「原始谱八度」选择 C3 / C4 / C5,对应 HTTP jsonMiddleC=48/60/72。
转换保留独立音轨、歌词、和弦与段落,跨小节及重叠长音用连音线保留时长;可继续使用选轨和歌词并轨。导出前会补齐调弦、弦号与品位,若无法容纳全部音符或必须改变音高,转换会报错。
设备音色、自动伴奏与扩展控制事件不转换,各旋律轨先使用钢琴音色。力度折合 GP 支持的记谱档位,歌词首尾空白由导入器规范化。跨软件播放差异见已知限制。
以下接口由完整 Web(Bun)版提供,先启动开发或生产服务;静态版不提供这些接口。
POST /api/convert 接收 multipart 表单,必填字段为 file 和 target:
curl -f -O -J \
-F "file=@score.gp5" \
-F "target=pdf" \
http://localhost:3000/api/converttarget 可选值:mid、musicxml、xml、mxl、gp、gpx、gp5、json、atex、mscz、pdf、png、png-long。
成功返回文件流,文件名见 Content-Disposition,也可对 X-Filename 响应头进行 URL 解码获取;PNG 多页时实际返回 .zip。失败返回非 2xx 状态和 JSON {"error":"..."}。
可选表单字段如下;只对适用的输入或目标生效:
| 字段 | 取值 | 用途 |
|---|---|---|
tracks |
从 0 开始的音轨下标,逗号分隔,如 0,2 |
全部目标;缺省导出全部,下标由 /api/tracks 获取 |
dpi |
50–1200 | PNG 分辨率;普通 PNG 默认 360,长图默认 150 |
trim |
0–500 | PNG 裁边后保留的像素边距 |
paper |
a4 / letter |
PDF 纸张大小;缺省沿用原谱 |
scale |
50–200 | PDF 谱面缩放百分比;100 为原始大小 |
staffMode |
tab / standard |
MusicXML / PDF / PNG 的六线谱或五线谱;PDF / PNG 缺省跟随原谱,Guitar Pro / JSON / alphaTex 输入转 MusicXML 缺省为六线谱,MusicXML 系输入缺省保留原谱 |
unrollRepeats |
1 |
MIDI 展开反复 |
mergeLyrics |
1 |
GP / GPX / GP5 / MusicXML / PDF / PNG 歌词并轨 |
jsonTempo |
20–400 | 覆盖歌曲 JSON 的 BPM |
jsonMiddleC |
0–120 中的 C 音 MIDI 值(12 的倍数) | LL 原始详情的八度基准,默认 60;常用 48 / 60 / 72,二维时间线不受影响 |
数值字段会四舍五入并限制在上述范围内;空值或无法解析的数值、无效枚举值会忽略。jsonMiddleC 经范围处理后若不是 C 音,LL 导入会报错。
POST /api/tracks 接收 file 字段,返回 {"tracks":["音轨名", "..."]},数组顺序对应 tracks 的下标:
curl -f -F "file=@score.gp5" http://localhost:3000/api/tracksGET /api/status 返回 {"path":"MuseScore 可执行文件路径","major":4};未检测到版本时 major 为 null。
bun run build # TypeScript 检查 + Vite 静态构建
bun run build:static # 纯浏览器转换构建,适用于 Vercel 等静态托管
bun run verify # Web HTTP 真实文件回归,需要 MuseScore 4
bun run verify --native # 同一组用例验证 Rust 路径,自动构建原生校验入口
bun tauri dev # 桌面开发窗口,需要 Rust 工具链
bun tauri build # 构建当前平台桌面包,需要 Rust 工具链桌面构建需安装 Rust 及对应平台的 Tauri 构建依赖,先执行 bun install。产物位于 src-tauri/target/release/bundle/,macOS DMG 在 dmg/,Windows 安装包在 nsis/。
desktop GitHub Actions 工作流支持手动构建 macOS Apple Silicon、macOS Intel 和 Windows x64 产物;发布 Release 时自动构建并上传安装包及 Windows 免安装版。手动运行只保存 Actions 产物。发布前同步更新项目版本号,Release 标签使用对应的 v<版本>。
回归覆盖全部输出格式、选轨、歌曲 JSON / alphaTab JSON / alphaTex、MusicXML 直连与原文互转、MIDI 桥接、多页 PNG 与长图、GP5 / GPX 双解析器回读(GPX 额外比对起止 tick、歌词、变拍和选轨)及错误输入。TAB → 五线谱 → TAB 回读覆盖四/六/七弦、特殊调弦、变调夹和双谱表,并核对 alphaTab 与 MuseScore 读取的音高;直连路径断言不调用 MuseScore。使用真实文件与转换引擎。
二维 GP 时间线转 GP 后,还可运行专项回读,比较音高、起止 tick、歌词、和弦及调弦弦品;检查完整音轨时不要启用选轨或歌词并轨:
bun scripts/verify-song-gp.ts /path/to/source.gp.json /path/to/output.gp| 路径 | 职责 |
|---|---|
lib/convert.ts |
共用转换核心、路由与音轨过滤 |
lib/song-json.ts |
LL / 二维 GP 时间线 JSON 输入适配 |
lib/gpx-writer.ts |
GP6 XML 适配、BCFS 扇区容器与 BCFZ 压缩写出 |
lib/gp5-writer.ts |
GP5 二进制写出、调弦与弦品指派 |
lib/gp-to-musicxml.ts |
保留 TAB 谱表与弦品信息的 MusicXML 序列化器 |
lib/formats.ts / lib/request.ts |
格式定义、导出参数与上传校验 |
src/App.tsx |
上传、格式与选项选择、下载界面 |
src/platform.ts / src/worker-client.ts / src/convert.worker.ts |
Web HTTP / 静态浏览器 / 桌面 IPC 入口与后台转换 |
server/ |
Bun HTTP 服务、转换 / 音轨接口与 MuseScore / PNG 适配 |
src-tauri/ |
静态前端打包、Rust 原生命令与 MuseScore / PNG / ZIP 适配 |
scripts/ |
开发启动与真实文件校验 |
Guitar Pro 与 MusicXML 系输入通过 alphaTab 直接解析,读取音轨和导出 GP / GPX / GP5 / JSON / alphaTex 不经过 MuseScore。JSON / alphaTex 转 MusicXML / XML / MXL 直接复用解析后的 Score,省去中间 GP 写出与回读;其余目标沿用 GP 链路。
MusicXML / XML / MXL 之间互转时,若未选轨、未开启歌词并轨且未指定谱表类型,保留原始 XML 字节,只复制或打包、解包;需要修改时再经过模型与自研序列化器。TAB 谱表保留调弦和弦品,纯五线谱以实际音高写出。MIDI 输入先由 MuseScore 桥接为 MusicXML;MIDI / PDF / PNG / MSCZ 目标仍由 MuseScore 导出。
PDF 选择「跟随原谱」时,若 MuseScore 无法直接从 Guitar Pro 生成 PDF,会经 MusicXML 重试,保留原谱五线谱 / 六线谱显示设置。桌面版在 Worker 中执行共用核心,Rust 负责 MuseScore 与文件操作。
- 旧格式只读:
.gp3/.gp4仅支持输入;.gp输出为 GP7/8,.gpx输出为 GP6,.gp5输出为 GP5 v5.00。 - GPX 首版边界:多谱表按谱表拆成独立音轨,名称增加
(1)、(2)后缀,以保留各自调弦和变调夹;UTF-8 标题、歌词和和弦保留。使用 BCFS 容器及 BCFZ 压缩,每个内部文件上限 986 个扇区(约 3.85 MiB,按未压缩大小计),超限会明确报错。GP7/8 的音频伴奏、RSE 音色/效果链与轨内音色切换不保留;尚未在 Guitar Pro 6 桌面端人工试听。 - GP5 有格式与编码限制:自研写出器保留音符、节奏、连音线、连音、力度、拍号调号、反复、调弦、变调夹及推弦、击勾弦、滑音、泛音、闷音、颤音等演奏效果;不保留和弦图,GP5 无法表达的效果会降级或跳过。非 ASCII 标题、歌词等文本降级为
?,中文歌词建议导出 MusicXML / PDF / PNG。MIDI 或钢琴 MusicXML 转 GP5 时会自动选择调弦并指派弦品,超出音域的音符可能按八度折叠;歌曲 JSON 路径会在音高改变时直接报错。 - 纯五线谱不保留 TAB 把位:五线谱输出不写依赖 TAB 调弦的弦号和品位,避免再次回读时误算音高。转回 TAB 会按音高重新指派弦品,可能与原把位不同;需要保留原调弦、变调夹和把位时选择 TAB 或跟随原谱保留 TAB。
- MIDI 与识别谱需要人工校正:MIDI 不携带声部、连音线、临时记号拼写等谱面信息,MuseScore 需通过量化推断;演奏录制的 MIDI、自动识别草稿中的时值与记谱仍需对照原谱整理。
- 歌曲 JSON 的跨软件播放仍需确认:历史样本《普通朋友》的 alphaTab 回读保留了全部 957 个音符的音高与起止时间,但 MuseScore 4 回读时会将结尾一处连音长音拆成两次起音。Guitar Pro 桌面端的实际发声与连音效果尚未人工试听确认。