合成器MIDI控制工具

通过自然语言控制硬件合成器的MIDI控制平面,支持Arturia MicroFreak和Roland SE-02等多款合成器。

  • by truthanb
  • TypeScript
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 truthanb/mcp-patchwork

使用说明

拼凑物

告诉你的合成器你想要什么

适用于合成器的LLM友好MIDI控制平面。自然语言→ 通过MCP(模型上下文协议)进行声音设计。

为什么存在补丁

补丁工作最初是一个个人的副项目。

我拥有一些硬件合成器,但我不会经常使用它们。每次我在休息后拿出一个,我都必须重新加载一个完全不同的心理模型:不同的布局、不同的调制方案、不同的参数名称。即使我大致知道我想要什么样的声音,到达那里也可能需要比预期更长的时间。

Patchwork背后的想法很简单:

与其记住合成器是如何工作的,不如描述你想要什么,让系统让你进入球场。

比如:

  • “柔软的进化垫”
  • “更深、更有力的低音”
  • “运动更多,亮度更低”

补丁使用模型上下文协议(MCP)作为LLM和真实硬件之间的控制层。该模型根据音乐意图进行推理,而特定于合成器的驱动程序将该意图转换为确定性MIDI(CC、NRPN、SysEx)消息。

这不是声音设计知识的替代品,也不是完美无瑕的。它不会完美地重现著名的补丁或保证特定的结果。它的优点是减少摩擦——靠得足够近,你可以开始玩和调整,而不是翻阅手册。

修补工作有意专注于:

  • 意图驱动控制
  • 的确定性行为
  • 真正的硬件集成
  • 对MIDI细节进行清晰的抽象

它没有 生成音频、自主表演或尝试“为你制作音乐”

特性

  • 8个MCP工具:完整的合成控制,包括预设检查和调制路由
  • 多合成支持:Arturia MicroFreak和Roland SE-02的司机
  • 高级参数控制:NRPN支持兼容合成器上的14位精度
  • 全调制矩阵:完整的mod路由控制(MicroFreak:5个源×7个目的地)
  • SysEx预设读数:转储并检查硬件预设(MicroFreak:4个存储体中的512个插槽)
  • 动态资源:作为MCP资源公开的Synth功能(参数映射、MIDI参考)
  • 类型安全:具有严格验证的完整TypeScript实现
  • 硬件优先:直接MIDI通信,无需DAW

安装

npm install -g mcp-patchwork
# or clone and build locally:
git clone https://github.com/truthanb/mcp-patchwork
cd patchwork
npm install
npm run build

MCP配置

在MCP客户端的设置文件中配置服务器:

克劳德桌面版

编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "patchwork": {
      "command": "npx",
      "args": ["-y", "mcp-patchwork"]
    }
  }
}

或者,如果在本地安装:

{
  "mcpServers": {
    "patchwork": {
      "command": "node",
      "args": ["dist/mcp/server.js"],
      "cwd": "/path/to/patchwork"
    }
  }
}

VS代码(副本)

编辑 ~/Library/Application Support/Code/User/mcp.json (macOS)或 %APPDATA%\Code\User\mcp.json (Windows):

{
  "mcpServers": {
    "patchwork": {
      "command": "npx",
      "args": ["-y", "mcp-patchwork"]
    }
  }
}

其他MCP客户端

任何兼容MCP的客户端都可以使用stdio传输进行连接:

{
  "command": "npx",
  "args": ["-y", "mcp-patchwork"]
}

配置后,重新启动MCP客户端。连接MicroFreak后,拼接工具应自动出现。

快速开始

通过MIDI连接合成器,并使用自然语言通过任何MCP客户端进行控制:

"Create a warm bass sound with slow filter modulation"
"Make a plucky lead with fast decay"  
"Set up a pad with LFO on the filter"

或者直接使用工具:

// List connected synths
await list_synths();  // Returns available MicroFreak and/or SE-02

// Create a kick drum on MicroFreak
await init();  // Reset to clean state
await set_synth_feature("oscillatorType", "Modal");
await set_param("env.amp.decay", 0.15);
await set_param("filter.cutoff", 0.3);
await set_modulation("Envelope", "Pitch", -0.35);
await set_modulation("Envelope", "Cutoff", 0.5);

// Create a bass on SE-02
await set_param("osc1.waveform", 0.0);  // Sawtooth
await set_param("filter.cutoff", 0.3);
await set_param("filter.resonance", 0.6);
await set_param("env.amp.decay", 0.4);

支持的硬件

Arturia MicroFreak

  • 类型:带模拟滤波器的数字混合合成器
  • 振荡器:22种振荡器类型(波表、物理建模、模态、颗粒等)
  • 调制:5个来源×7个目的地=35个mod矩阵路由
  • 预设:4个存储体中有512个插槽(完全支持SysEx读/写)
  • 控制:MIDI CC+14位NRPN,用于平滑调制量
  • 特别功能:循环包络、混响模式、压力灵敏度

罗兰SE-02

  • 类型:精品模拟单合成(SH-101传承)
  • 振荡器:3个真正的模拟振荡器,具有多种波形
  • 过滤器:4极模拟低通滤波器
  • 调制:交叉调制、带延迟的LFO、综合路由
  • 控制:所有参数的MIDI CC
  • 特别功能:内置延迟、子振荡器、噪声发生器、振荡器同步

可扩展性

这 SynthAdapter 界面允许添加新的合成器。每位司机提供:

  • 参数映射(标准化0.0-1.0值到硬件MIDI)
  • Synth特定功能(振荡器类型、滤波器模式等)
  • 能力描述(可用参数、调制路由)
  • 可选SysEx协议实现(预设转储/加载)

MCP工具

工具 用途 MicroFreak SE-02
list_synths 列出连接的合成器及其功能 ✅ ✅
describe_synth 获取详细功能(振荡器、参数、模矩阵) ✅ ✅
set_param 设置归一化参数(0.0-1.0) ✅ ✅
set_synth_feature 设置振荡器/滤波器类型和模式 ✅ ✅
set_modulation 路由mod源→ 目的地(-1.0到1.0) ✅ ⚠️
init 将合成器重置为基线(零模组,中性封套) ✅ ✅
load_preset 从插槽加载预设(MicroFreak为1-512) ✅ ⚠️
dump_preset 通过SysEx读取完整的预设数据 ✅ ⚠️

传说: ✅ 完全支持|⚠️ 有限/不适用|❌ 不支持

备注:

  • SE-02调制SE-02具有通过专用CC控制的固定调制路由,而不是灵活的调制矩阵
  • SE-02预设:SE-02支持128个预设的程序更改,但不支持与MicroFreak相同的SysEx预设转储

MCP资源

资源 描述
synth://<id>/params 带有描述和提示的JSON参数映射
synth://<id>/midi-reference 完整的MIDI CC/NRPN参考示例

测试

npm test  # 20 tests: CC/NRPN conversion, normalization, clamping

建筑

拼凑物 =MCP服务器+合成适配器抽象+硬件MIDI

  • MCP层 (src/mcp/):8个工具+2个资源,stdio传输
  • 合成抽象 (src/synth/):通用参数接口,驱动程序-抽象API
  • MIDI层 (src/midi/):CC+NRPN+SysEx消息构建、硬件端口管理
  • 驾驶员 (src/drivers/):
    • MicroFreak (microfreak/):22种振荡器类型,全模矩阵(5×7),NRPN参数映射,SysEx预设协议
    • SE-02 (se02/):模拟架构建模、全面的CC映射、振荡器同步、交叉调制

添加新驱动程序

要添加对新合成器的支持:

  1. 实施 SynthAdapter 接口在 src/drivers/yoursynth/driver.ts
  2. 定义参数映射(规范参数→ 硬件MIDI CC/NRPN)
  3. 指定合成器的特定功能(振荡器类型、滤波器模式等)
  4. 可选地实现SysEx协议以进行预设转储/加载
  5. 在中注册驾驶员 src/synth/manager.ts

看 MicroFreak驱动程序 和 SE-02驱动器 以供参考实施。

状态

  • ✅ MCP工具套件(8个工具,2个资源)
  • ✅ 支持全功能的MicroFreak驱动程序
  • ✅ SE-02驱动器,具有全面的参数控制
  • ✅ MicroFreak的SysEx预设读数(4个存储体512个预设)
  • ✅ SysEx响应的MIDI输入处理
  • ✅ 使用Zod验证进行类型安全参数处理
  • ✅ 热插拔合成检测
  • ✅ 多合成器支持(可以同时连接多个合成器)

出版

要将新版本发布到npm:

npm run build
npm test
npm version patch  # or minor/major
npm publish

文档

将军

MicroFreak

SE-02