使用说明
Strudel控制台
英语 |韩语
基于Strudel的TUI音乐作曲工具+MCP服务器。 您可以在终端上实时编码,也可以通过Claude Code等AI代理创建音乐。
安装和运行
npm install
npm run build
TUI模式(基本)
npm start
# 또는
npm run tui
MCP服务器模式
npm run mcp
Claude Code的 settings.json在注册:
{
"mcpServers": {
"strudel-console": {
"command": "node",
"args": ["--experimental-specifier-resolution=node", "/path/to/strudel-console/dist/mcp/server.js"]
}
}
}
MCP服务器规格
运输: 标准 |协议:MCP |版本: 0.1.0
“工具”(Tools)
回放
“工具”“说明”“参数”
|------|------|----------|
| evaluate |评估Strudel模式代码并立即开始播放| code (string,必需)|
| start 开始/恢复当前模式播放-|
| stop 停止播放-|
| toggle |播放/停止切换-|
| set_bpm | BPM设置(默认120)| bpm (number,正)|
| get_state 查询当前状态(是否播放、代码、错误等)-|
样品
“工具”“说明”“参数”
|------|------|----------|
| load_samples |样本/银行加载| source (字符串)-- github:user/repo、本地路径或URL|
模式
“工具”“说明”“参数”
|------|------|----------|
| save_pattern |模式 ~/.strudel-console/patterns/保存到| name (字符串), code (字符串), bpm (number,可选)|
| load_pattern |装入保存的模式| name (字符串)|
| list_patterns 查询保存的模式列表-|
多轨道
“工具”“说明”“参数”
|------|------|----------|
| add_track 添加新曲目。所有活动轨道 stack()同时播放到| name (string,选择) code (string,选择)|
| evaluate_track |更新轨道上的模式代码并重新编译| code (字符串), track_index (int、1-based、选择-跳过时的活动轨道)|
| remove_track |删除音轨| track_index (int,从1开始)|
| mute_track |音轨缪特切换| track_index (int,从1开始)|
| solo_track 音轨独奏切换。如果有独唱曲目,则只播放独唱| track_index (int,从1开始)|
| set_track_gain |设置音轨音量| track_index (int,1-基), gain (数字,0.0–1.0)|
| list_tracks |完整曲目列表+状态(名称、缪特、独奏、增益、代码)--|
混音器
“工具”“说明”“参数”
|------|------|----------|
| set_master_gain |设置主输出卷(应用前一轨)| gain (数字,0.0–1.0)|
| list_effect_presets 查询效果预设列表-|
可用的效果预设:
预设效果链
|--------|------------|
| clean |(无)|
| lofi | .lpf(800).gain(0.8) |
| ambient | .room(0.6).delay(0.4).gain(0.7) |
| dark | .lpf(400).room(0.3).gain(0.9) |
| bright | .hpf(300).lpf(8000).gain(0.9) |
| tape | .lpf(3000).room(0.2).delay(0.15).gain(0.85) |
渲染
“工具”“说明”“参数”
|------|------|----------|
| render_to_file |将图案渲染为WAV文件(OfflineAudioContext)| code (string,选择) cycles (int,1–64,默认为8), bpm (number,选择) filename (string,选择)|
输出路径: ~/.strudel-console/renders/
AI组成
“工具”“说明”“参数”
|------|------|----------|
| analyze_pattern |分析图案的音乐属性(键、尺度、音域、密度)| code (字符串), cycles (int,1–16,默认4)|
| load_genre_preset |加载类型预设-自动设置轨道+BPM后开始播放| genre (字符串)|
| list_genre_presets |类型预设列表+查询说明--|
可用的类型预设:
| 类型 | BPM | 音轨数量 | 说明 |
|---|---|---|---|
lofi |
75 | 4 | 用爵士和弦舒缓低保真节拍 |
techno |
130 | 4 | 用酸贝斯线在地板上驾驶四人 |
ambient |
60 | 3 | 带混响的缓慢演变的垫子 |
house |
124 | 5 | 带有风琴刺的经典房屋凹槽 |
dnb |
174 | 3 | 快速节奏,低音起伏 |
jazz |
110 | 3 | 具有ii-V-I进程的挥杆感觉 |
资源(Resources)
URI说明
|-----|------|
| strudel-console://guide | Strudel阵列创建指南(小型说明、效果、多轨工作流)|
| strudel-console://music-theory 音乐理论参考(尺度、代码进度、节奏模式、间隔)
工作流示例
1.播放单个图案
evaluate({ code: 'note("c4 e4 g4 b4").sound("sine")' })
set_bpm({ bpm: 90 })
stop()
2.多音轨作曲
add_track({ name: "drums", code: 's("bd sd hh sd")' })
add_track({ name: "bass", code: 'note("c2 e2 g2 e2").sound("sawtooth").lpf(400)' })
evaluate_track({ code: 's("bd sd [~ bd] sd")', track_index: 1 })
mute_track({ track_index: 2 }) // 베이스 뮤트
set_track_gain({ track_index: 1, gain: 0.8 })
3.类型预设→自定义
load_genre_preset({ genre: "lofi" }) // 4트랙 + 75 BPM 세팅
list_tracks() // 현재 트랙 확인
evaluate_track({ code: 's("bd ~ [bd sd] ~")', track_index: 1 }) // 드럼 수정
set_master_gain({ gain: 0.7 })
4.分析→渲染
analyze_pattern({ code: 'note("c4 e4 g4 b4").sound("sine")', cycles: 4 })
render_to_file({ code: 'note("c4 e4 g4 b4").sound("sine")', cycles: 16, bpm: 90, filename: "melody" })
错误处理
所有工具失败时 isError: true返回错误消息。
| 情况 | 错误示例 |
|---|---|
Strudel语法无效 Error: unexpected token ... |
|
| 不存在的音轨索引 | Error: track 5 does not exist |
| 不存在的类型 | Unknown genre. Available: lofi, techno, ambient, house, dnb, jazz |
| 没有要渲染的图案 | Error: no pattern to render. Provide code or set up tracks. |
| 不存在的模式名称 | Error: pattern not found: ... |
技术堆栈
- 引擎:@strudel/*v1.1.0+node-web-audio-api(IRCAM Rust绑定)
- 主控程序:@modelcontextprotocol/sdk(stdio传输)
- 文本用户界面:墨水5.x+反应18
- 语言:TypeScript(ESM)
许可证
这个项目 GNU Affero通用公共许可证v3.0或更高版本 以下分发。
果馅饼 基于(AGPL-3.0-or-later)的衍生作品。