内容
# StudioOneMcp
**使用LLM控制PreSonus Studio One** — 一个MCP(模型上下文协议)服务器,将Studio One转变为一个AI可控的DAW乐器。旨在用于**制作**工作流程(编辑、MIDI操作、混音、效果、导出),长期愿景是实现AI辅助的**现场**控制。
> 社区项目,持续开发中。非PreSonus官方项目或合作。
---
## 如何控制Studio One
Studio One没有公开的远程控制API,因此StudioOneMcp通过四个互补的**推送**路径来驱动它 — 每个路径都在Studio One 7(macOS)上经过验证:
| 路径 | 功能 | 需求 |
|---|---|---|
| **MIDI → 命令调度** ⭐ | 用户控制表面(`StudioOneMCP Pads`)将MIDI CC/音符映射到Studio One **命令和宏**。MCP在虚拟端口上发送MIDI → 命令触发。可靠,无需Accessibility。 | 虚拟端口 + 绑定到 *接收自* 的表面 |
| **MCU MIDI** | 通过内置的Mackie Control Universal表面进行推子、声像、静音、独奏、运输控制 | 虚拟端口 + MCU表面 |
| **菜单/键盘自动化** | 通过macOS系统事件点击Studio One菜单项并发送快捷键;通过编辑▸撤销标签验证操作 | macOS Accessibility |
| **宏生成** | 编写带有命令序列的`.studioonemacro`文件,无需快捷键 | 无 |
⭐ **MIDI → 命令路径是核心。** 已确认有效:MCP在`StudioOneMCP`虚拟端口上发送CC,Studio One触发映射命令(例如*添加音频轨道*,通过编辑▸撤销标签验证)。每个Studio One命令和安装的宏都可以通过此方式访问 — 请参见下面的目录。
---
## 功能目录
Studio One的命令表面被枚举到 [`docs/function-catalog.json`](docs/function-catalog.json):
- **194个内置命令** (编辑、事件、音频、运输、轨道、歌曲、文件、视图 — 顶级)
- **221个宏** (安装的宏库 — 量化、人性化、速度、发音、和弦、节奏、添加EQ/压缩器、导出等)
- **= 415个功能** ,可映射到MIDI(音符/CC × 16通道 ≈ 2000个槽)
将所有415个功能映射到MIDI并将它们公开为命名MCP工具是当前的构建 — 请参见 [问题](../../issues)。
---
## 设置
### 1. 安装
```bash
git clone https://github.com/tiwadara/StudioOneMcp
cd StudioOneMcp
python -m venv .venv && ./.venv/bin/pip install -e ".[dev]"
```
### 2. 虚拟MIDI端口
StudioOneMcp打开一个名为 **`StudioOneMCP`** 的虚拟端口(固定唯一ID,以便Studio One每次启动都重新绑定)。只需运行服务器 — 端口就会出现。(在Windows/Linux上,使用诸如loopMIDI / `snd-virmidi`之类的环回端口,命名为`StudioOneMCP`。)
### 3. 安装控制表面(MIDI → 命令)
将 `studio-one-devices/StudioOneMCPPads/` 复制到您的Studio One **用户设备**文件夹:
```
~/Library/Application Support/PreSonus/Studio One 7/User Devices/StudioOneMCPPads/
```
然后在 **Studio One ▸ 设置 ▸ 外部设备 ▸ 添加…** 中选择 **StudioOneMCP ▸ StudioOneMCP Pads**,并设置 **接收自 = `StudioOneMCP`** 。保持 **发送至** 为空(表面仅接收)。重启Studio One使其扫描设备。
### 4. (可选)MCU表面用于推子/运输
外部设备 ▸ 添加 ▸ **Mackie Control Universal** ▸ 接收自 = `StudioOneMCP`。
### 5. (可选)菜单/键盘自动化所需的Accessibility
系统设置 ▸ 隐私和安全 ▸ **无障碍** → 启用您的MCP主机应用程序。
### 6. 添加到您的MCP客户端(例如Claude Desktop)
```json
{
"mcpServers": {
"studio-one": { "command": "studio-one-mcp", "args": ["--port-name", "StudioOneMCP"] }
}
}
```
---
## 可用工具(当前)
- **`studio_one_run_command(name)`** ⭐ — 通过名称触发 **224个内置Studio One命令** (编辑、轨道、事件、音频、歌曲、运输、缩放、显示、排列等)。不区分大小写,接受唯一的部分匹配。例:`"Duplicate"`、`"Split Range"`、`"Find Track"`、`"Bounce Selection"`。 **验证有效。**
- **`studio_one_list_commands(filter)`** — 发现命令名称。
- **运输:** 播放 · 停止 · 记录 · 回绕 · 快进 · 切换循环 · 保存 · 撤销 · 重做
- **混音器(MCU):** 设置推子 · 切换静音 · 切换独奏 · 切换录音臂 · 选择通道 · 设置声像
- **自动化:** 添加轨道 · 新歌曲 · 保存为 · 切换混音器/浏览器/编辑器 · 缩放 · 分割 · …
- **宏:** 生成`.studioonemacro`序列
> **注意:** 224个映射命令是Studio One **内置**命令(从控制表面调度)。用户 **宏** (`docs/macros-todo.json`中的139个) **不** 从表面调度 — 它们需要键盘/命令栏触发,跟踪在 [#3](../../issues/3)。
---
## 架构
```
LLM / MCP 客户端
│ JSON-RPC(stdio)
▼
MCP 服务器(server.py) ── 工具注册,参数验证
│
├─ MidiBridge(midi_bridge.py) ─┐
│ MCU + CC 命令调度 │ 虚拟端口 "StudioOneMCP"
├─ CoreMIDI 引脚(coremidi.py) ──┘ (固定唯一ID) ──► Studio One
│ 表面:StudioOneMCP Pads(命令),MCU(混音器)
├─ 自动化(keystrokes.py) ──► 系统事件(菜单 / 快捷键)
└─ 宏编写器(macro_writer.py) ──► ~/Documents/Studio One/Macros
```
---
## 路线图
在 [GitHub 问题](../../issues) 中跟踪。亮点:
- 将垫表面扩展到完整的MIDI → 功能映射(全部415个)
- 命名MCP工具以触发任何功能(“量化到1/16”,“添加EQ + 压缩器”,“导出分轨”)
- **愿景:** 用于自主混音的AI DAW控制器 — 歌曲、推子、效果、过渡
- 反馈/感知(MCU仪表盘,状态模型)用于级联感知决策
## 开发
```bash
pytest ; ruff check src tests ; mypy src
```
## 许可证
MIT