写 JSON 乐谱,校验和声并离线渲染成 WAV
31.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add narrastory/retro-music-toolkit该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · model
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🟢 扫描:未发现敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。
写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 2 处,展示前 2 条)
- 发起网络请求docs/showcase.js:3
const response = await fetch("music.json"); - 写入剪贴板docs/showcase.js:85
await navigator.clipboard.writeText(track.prompt);
扫描于 2026/11/1(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
给智能体用的确定性 8/16 位游戏音乐工作台:写 JSON 乐谱、校验和声、离线渲染 WAV,不用模型,也不用 API key。
README
由 DeepSeek 最新模型翻译生成简体中文 · English
Retro Music Toolkit
给 AI 用的 8bit / 16bit 游戏音乐工作台
完全本地,零 API。同一份乐谱,永远导出同一段音频。
🎧 在线试听 · 快速开始 · 和音乐大模型的区别 · 技术细节
git clone https://github.com/narrastory/retro-music-toolkit.git
cd retro-music-toolkit/scripts/runtime && npm ci && npm run build
node dist/cli.js example --out song.json && node dist/cli.js render song.json --out song.wav
它替你做什么
🔒 完全本地,不需要任何模型或账号\
没有 API Key,没有 GPU,没有云端调用,没有按次计费。装好依赖之后断网也能跑。你的乐谱和音频从不离开本机。
🔁 结果可复现\
同一份 JSON 加同一个 seed,今天导出、明年导出、换一台电脑导出,都是同一段音频。鼓噪声、人性化抖动、随机琶音全部由 seed 决定,你可以把乐谱提交进 Git,像管代码一样管音乐。
✏️ 改一个音,不用重来\
第 9 小节的低音不对?
展开完整文档(README 剩余 1 节)
简体中文 · English
Retro Music Toolkit
给 AI 用的 8bit / 16bit 游戏音乐工作台
完全本地,零 API。同一份乐谱,永远导出同一段音频。
🎧 在线试听 · 快速开始 · 和音乐大模型的区别 · 技术细节
git clone https://github.com/narrastory/retro-music-toolkit.git
cd retro-music-toolkit/scripts/runtime && npm ci && npm run build
node dist/cli.js example --out song.json && node dist/cli.js render song.json --out song.wav
它替你做什么
🔒 完全本地,不需要任何模型或账号\
没有 API Key,没有 GPU,没有云端调用,没有按次计费。装好依赖之后断网也能跑。你的乐谱和音频从不离开本机。
🔁 结果可复现\
同一份 JSON 加同一个 seed,今天导出、明年导出、换一台电脑导出,都是同一段音频。鼓噪声、人性化抖动、随机琶音全部由 seed 决定,你可以把乐谱提交进 Git,像管代码一样管音乐。
✏️ 改一个音,不用重来\
第 9 小节的低音不对?patch 只改那一个音,其余全部原样保留,并返回逐项变更记录。不会因为改了一处,就把之前满意的段落一起丢掉。
🩺 写错了会告诉你哪里错\
强拍上的非和弦音、低音与和弦冲突、平行五度、没解决的大跳、循环接缝没回到主和弦——诊断会给出小节号和音符 ID,有的还直接附上修复值。
[!TIP]
想先听听效果?👉 在线试听页(4 首,可直接播放)所有示例都由仓库里的 JSON 乐谱离线渲染,没有经过任何模型生成。
60 秒看到效果
node dist/cli.js example --out song.json # 一份约 40 行、可直接运行的乐谱
node dist/cli.js render song.json --out song.wav
node dist/cli.js describe song.json # 用文字读出这首曲子的结构
describe 输出的是 AI 可以直接推理的结构摘要,不需要“听见”:
Starfall Causeway
genesis-inspired, modern voice, 120 BPM, 4/4, 16 bars (64 beats), loop export
- lead (fm-celestial-lead, melody): 60 notes, 3.8/bar, range B4–C6,
peak C6 at beat 38.00, 37% stepwise motion
- bass (fm-bass-round, bass): 64 notes, 4.0/bar, range F2–D3, peak D3 at beat 40.00
- drums (drums): 128 hits, 8.0/bar — hat×64, kick×32, snare×32 Sections: A-1: bar 1, 5.13 events/beat, median E4 — opening B-9: bar 9, 4.75 events/beat, median D4 — similar to previous
渲染报告的实测数据(Starfall Causeway,FM 版):
| 时长 | 集成响度 | 真峰值 | 削波样本 |
| 32.0 s | −21.59 LUFS | −6.18 dBFS | 0 |
和音乐生成大模型有什么不同
两者解决的不是同一个问题。
| | 音乐生成大模型 | Retro Music Toolkit |
| 输入 | 一段文字描述 | 一份 JSON 乐谱 |
| 运行环境 | 云端 API / 本地 GPU | 一台普通电脑,离线 |
| 成本 | 按次计费 | 零 |
| 复现 | 同一提示词,每次结果不同 | 同一乐谱,每次结果相同 |
| 修改 | 重新生成整段 | 定点改一个音 |
| 可解释 | 只拿到音频 | 拿到乐谱和诊断 |
| 素材来源 | 训练数据不可追溯 | 全部程序生成,零第三方采样 |
大模型擅长从零给你一个灵感;这个工具擅长把灵感变成能进游戏、能改、能复现的成品。 如果你已经有旋律构思,或者你在构建一个需要稳定输出的 AI Agent,后者才是你会每天用到的那个。
它适合谁
| ✅ 适合 | ❌ 不适合 |
| 构建作曲 / 游戏开发类 AI Agent,需要稳定、可校验的工具调用 | 只想输入一句话就拿到一首完整歌曲 |
| 独立游戏开发者,需要可循环、可反复修改的 BGM | 需要人声、真实乐器录音或现代流行制作 |
| 需要离线、无外部依赖、版权干净的环境 | 需要严格位精确的芯片仿真(NSF / VGM 回放) |
| 想把音乐当代码管理:版本控制、代码审查、CI | 不想接触任何结构化数据 |
[!IMPORTANT]
它不会替你作曲。 旋律由你(或你的 Agent)给出,它负责校验、约束、发声和反馈。hardware 模式是听感近似,不是 2A03 / YM2612 / BRR 的位精确仿真。示例只做过信号层面验证,没有主观听审——好不好听,请你自己判断。
能力
✍️ 写
- 跨小节延音(hold)与 clip 裁剪
- 动机发展:模进、倒影、逆行、增减值、装饰音
- 和声驱动:harmonize 生成伴奏,arpeggiate 生成琶音
- swing / humanize,由 seed 决定,可复现
🩺 诊断
- 和声:非和弦音、低音冲突、平行五/八度、调外音
- 循环:末句是否真正回到首句
- 编曲:旋律呼吸、音区拥挤、踩镲密度、段落对比
- describe 文字结构,roll / report 钢琴卷帘
🔊 发声
- NES / Genesis / SNES 三种风格,11 个内置音色
- hardware 模式:无滤波脉冲、三档占空比、16 级音量
- 单声部和弦轮换:三音和弦只占一个声部
- SNES 八抽头 FIR 回声,8 种鼓件 + 采样鼓组
📦 交付
- 44.1 / 48 kHz PCM16 WAV,loop 与 one-shot
- 真峰值(4× 过采样)与 BS.1770-4 响度
- 可选抖动、峰值限幅、循环交叉淡化
- compare 等响 A/B 导出
为 AI Agent 设计
- JSON 进,JSON 出:所有命令返回结构化结果,错误带机器可读的 code
- 有意义的退出码:0 成功,1 工具错误,2 乐谱不合法
- 省 token:支持 stdin / stdout、--compact、--bars 9-16 按小节取片段
- 能自证:校验错误附带修复值,patch 返回逐项 diff
cat song.json | node dist/cli.js validate - --compact
快速开始
[!NOTE]
需要 Node.js 22+。macOS、Linux、Windows 均受支持(CI 三平台逐次验证)。首次安装需要联网下载依赖与 Chromium,之后全程离线。
git clone https://github.com/narrastory/retro-music-toolkit.git
cd retro-music-toolkit/scripts/runtime
npm ci
npm run browser:install # 仅渲染需要;纯编译/诊断不需要 Chromium
npm run build # 同时给 CLI 补上可执行位(Windows 上自动跳过)
写、查、改、导出:
node dist/cli.js example --out song.json # 生成一份最小可运行乐谱
node dist/cli.js validate song.json # 完整编译检查
node dist/cli.js diagnose song.json # 编排与和声问题
node dist/cli.js render song.json --out v1.wav
node dist/cli.js patch song.json --patch changes.json --out v2.json
node dist/cli.js render v2.json --out v2.wav --dither
node dist/cli.js compare v1.wav v2.wav --out ab.wav # 两版等响对比
完整文档:快速开始 · 1.1 指南 · 乐谱格式 · Agent 入口 SKILL.md
技术细节
架构与实现
数据流:JSON → Zod 严格校验 → 语义 / 采样 / 和声检查 → pattern·clip 展开(含 swing、humanize、hold、裁剪、单声部和弦轮换)→ 整数 tick 事件 → 声部分配 → Tone.js 离线合成 → 限幅 / 抖动 / 分析 → PCM16 WAV。
| 文件 | 职责 |
| model.ts | Zod Schema、PPQ = 960、音高转换、结构化错误 |
| compiler.ts | 展开、时间变换、和弦轮换、声部分配、循环边界 |
| harmony.ts | 和弦解析、调性、和声与循环诊断 |
| motif.ts / voicing.ts | 动机算子、和弦排列与琶音 |
| browser-engine.ts | Tone.js 构图与调度、预热、裁切、接缝 |
| renderer.ts | Node → Chromium 桥接 |
| analysis.ts | 真峰值、LUFS、削波、边界症状 |
| report.ts | 钢琴卷帘 SVG、文字描述、HTML 报告 |
设计取舍
- 整数 tick,不是浮点秒。所有时间变换在编译期完成,因此循环长度、声部冲突、诊断窗口都基于实际发声时间。
- 鼓与旋律的声部语义不同。旋律按 maxVoices 分配、可抢占;鼓是独立 one-shot,不占声部。
- release 尾音与按音冲突分开报告。前者常见且无害,后者才需要改。
- 可复现性:鼓噪声、humanize、random 琶音全部由 seed 派生,禁止运行期 Math.random。浏览器 DSP 差异仍可能导致逐样本不一致,不宣称 bit-exact。
统计:约 7 500 行 TypeScript;运行时依赖 4 个(tone、zod、playwright、esbuild);115 项自动化测试(90 单元 + 23 真实音频 + 2 网页)。
命令一览
instruments 列出音色与推荐音域 validate SCORE.json 完整编译检查 compile SCORE.json --out F 展开后的整数 tick 事件 diagnose SCORE.json 编排 + 和声 + 循环诊断 render SCORE.json --out S.wav 离线渲染 patch SCORE.json --patch P 定点修改,返回变更日志 arrange CONFIG.json 生成编曲骨架 motif / harmonize / arpeggiate 动机发展、伴奏、琶音 vary / answer 变奏与回答声部 import-instrument 打包本地 WAV 为工程内音色 report / describe / roll 可视化与文字结构 audition 生成音色试听库 compare A.wav B.wav 等响 A/B 导出 analyze AUDIO.wav 测量任意 WAV schema / example / version
渲染选项:--solo --mode --bars --from/--to --seam --effects --match-rms --loop-diagnostics --loop-crossfade --dither --limiter
全局:--force --compact --stdout --help
作为库使用
import { readFile } from "node:fs/promises";
import {
compileScore,
renderScore,
patchScoreWithReport,
} from "./scripts/runtime/dist/index.js";
const input = JSON.parse(await readFile("song.json", "utf8"));
const compiled = compileScore(input);
console.log(compiled.events.length, compiled.diagnostics);
const { score, report } = patchScoreWithReport(input, {
operations: [{ op: "set-track", trackId: "arp", set: { gainDb: -18 } }],
});
console.log(report.changes); // 逐项 before / after
const { wav } = await renderScore(score, { solo: ["lead", "bass"] });
Agent 集成
SKILL.md 是给 Agent 看的入口文档,包含完整创作流程、约束与交付标准。宿主只需要能执行 shell:
| 工具意图 | 实现 |
| 列出音色 | INSTRUMENTS / cli instruments |
| 校验乐谱 | compileScore / cli validate |
| 渲染 | renderScore / cli render |
| 修改 | patchScoreWithReport / cli patch |
| 分析音频 | decodeWav + analyzeChannels / cli analyze |
目前没有随包提供 MCP server;直接用 CLI 或函数调用已能形成完整闭环。
路线
- tempo map / 渐快渐慢
- MIDI 导入导出
- MML / 简写记谱前端
- 跨和弦的声部进行优化
- MCP server
- 更省内存的采样调度
欢迎在 Issue 里说明你真正需要的场景。
致谢与许可
- 代码与 Schema 文档:MIT
- 背景教程与生成音频:见 NOTICE.md。references/source-guides/ 中的三份教程由使用者提供,版权归原作者,不适用 MIT。
- 依赖:Tone.js、Zod、Playwright、esbuild,各自遵循其许可证。
- 内置音色与鼓素材全部程序生成,不含任何商业游戏音色或扒带素材。
8bit 的限制不是缺点,是风格。把限制用对,就是编曲。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
narrastory/retro-music-toolkit
写 JSON 乐谱,校验和声并离线渲染成 WAV
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1