simonflore/opennord

GitHub: simonflore/opennord

OpenNord 是一款开源的 Nord 键盘浏览器端伴侣工具,用于读取、整理和传输 Nord Stage 系列乐器的 program 与采样,无需官方桌面应用。

Stars: 3 | Forks: 0

# OpenNord **Nord® 键盘的开源伴侣** —— 从 **Nord Stage** 系列开始。读取并整理你的 program,在屏幕上或通过 MIDI 键盘播放你的采样,并直接通过 USB 与你的 Nord 通信 —— 无需桌面应用程序。 OpenNord 是**免费且开源的** (AGPL-3.0)。它的存在是因为所有使其成为可能的东西 —— Nord 文件格式的知识、解码器 —— 都是由社区公开构建的。这为这些工作提供了一个超越任何个人的归宿,也为下一位贡献者提供了一个参与进来的地方。 ## 目前的功能 - **读取 program。** 拖入一个 Stage 2 / 3 / 4 文件 (`.ns2p` / `.ns3f` / `.ns4p`) 并查看其中的内容 —— 钢琴/采样、风琴、合成器、效果器。无需键盘或 Sound Manager。每一代 Nord 都共享相同的 CBIN 容器,因此读取操作都是通过一个专为跨产品线扩展而构建的 model-codec 注册表来运行的 ([`docs/MULTI-MODEL.md`](docs/MULTI-MODEL.md))。 - **整理媒体库。** 将 OpenNord 指向一个文件夹(或导入单个文件),它会构建一个可搜索、移动优先的**媒体库** —— 即主屏幕 —— 分为 **Programs · Samples · Presets**,并带有主从视图。目前的搜索是一个零配置的关键词排名器(一个 LLM 排名器可以无缝接入同一接口)。 - **播放你的采样。** 采样工作坊可读取 `.nsmp`/`.nsmp3`/`.nsmp4` —— 键位映射、循环点、根音 —— 并让你**在屏幕键盘上试听,或(在桌面上)通过 MIDI 控制器弹奏它们**:这是一个轻量级的 rompler —— 支持调音、复音、力度 + 延音 —— 用于在没有连接 Nord 的情况下测试声音。支持跨代转换,并可将任何采样导出为 WAV(或全部导出为 zip)。导入的 `.nsmp` 采样会作为你自己的本地采样库持久保存。 - **与你的 Nord 通信。** 通过逆向工程的 **USB** 协议从键盘提取 program 并写回,已在真实硬件上得到验证 —— 这是一个供应商特定的 bulk 协议,*而不是* MIDI SysEx ([`docs/PROTOCOL-RE.md`](docs/PROTOCOL-RE.md))。一个只读的**“检查我的 Nord”** 探针会枚举所有已连接的 Clavia 设备,并报告 OpenNord 支持的功能。数据传输仅限 **桌面端** (WebUSB / node-usb) 和 **原生 iPad (M1+, DriverKit)** —— iPhone 和 PWA 无法访问供应商特定的 USB ([`docs/SYSEX-SPIKE.md`](docs/SYSEX-SPIKE.md))。 社区 patch 分享和 AI(解释一个 patch,或根据描述生成一个)已经完成设计,但尚未构建 —— 请参阅 [`docs/ROADMAP.md`](docs/ROADMAP.md)。 ## 它为何能够存在 很多事情已经完成了 —— 请参阅 [`ATTRIBUTION.md`](ATTRIBUTION.md)。Stage 2/3 格式是公开记录的 (ns3-program-viewer),而 Stage 4 格式已被*部分*解码 (ns4decode)。OpenNord 在此基础上构建,并添加了以前不存在的东西:**将 Stage 4 传输到当前的 Nord**(即此处逆向工程的 USB 协议),结合开放的解析、移动优先的媒体库和采样播放,全部集中在一个工具中。 ## 快速开始 ``` npm install npm run dev # web app npm test # parser/decoder tests (vitest) npm run typecheck # tsc --noEmit ┐ npm run lint # eslint + stylelint ┘ CI gates — keep both green npm run build # production build npm run fixtures:scan # auto-RE harness over the local corpus (gitignored) npm run cap:sync # wrap for iOS (Capacitor) once you add the ios/ platform ``` 在这个 repo 中与 AI agent 协作?请参阅 [`CLAUDE.md`](CLAUDE.md) 了解 解码层映射、命令以及法律护栏。 ## 布局 | 路径 | 说明 | |---|---| | `src/lib/clavia/` | 共享的、与型号无关的层:CBIN 容器、校验和、名称/插槽/类别、文件标识符 + `ModelCodec` 注册表 | | `src/lib/ns4/` | Stage 4 `.ns4p` 正文编解码器 —— model + parser + bit/byte 解码(已解码 + 验证,核心部分) | | `src/lib/ns3/`, `src/lib/ns2/` | Stage 3 / Stage 2 正文解码器 + 出厂库目录(多模型,[`docs/MULTI-MODEL.md`](docs/MULTI-MODEL.md)) | | `src/lib/device/` | WebUSB 设备层 —— transport → session → transfer(读/写)、备份、硬件探针 | | `src/lib/folder/` | 本地文件夹库:将 `.ns*` 文件扫描/分类/索引到媒体库中 | | `src/lib/library/` | 统一的媒体库模型 + 导入存储 | | `src/lib/ai/` | 搜索排名器 —— 目前的零配置关键词排名,在同一接口后支持 LLM 插拔 | | `src/lib/midi/` | **实时 MIDI** —— CC/NRPN 控制 + 演奏已加载采样的音符输入(应用内 rompler);*不是* 传输路径(那是 `device/` 中的供应商 USB) | | `scripts/` | USB 协议工具(`nord*.c`, libusb)+ 逆向工程工具 (Ghidra dumpers) | | `docs/` | 架构、路线图、格式说明、USB 协议、多模型、法律立场 | ## 法律声明 不隶属于、不受认可于、也不与 Clavia DMI AB / Nord Keyboards 有任何关联。"Nord" 和 "Nord Stage" 是其所有者的商标,此处仅用于描述兼容性。OpenNord 仅分享**用户创建的 program**,绝不分享 Nord 的采样/媒体库内容。请参阅 [`docs/LEGAL.md`](docs/LEGAL.md)。 ## 许可证 [AGPL-3.0-or-later](LICENSE)。免费使用,免费学习,自由改进 —— 并且改进保持开源。
标签:MIDI, MITM代理, USB通信, 文件解析, 自动化攻击, 音乐设备管理, 音频处理