mcpField
S
strudel

strudel

github.com/bfollington创意与媒体52143 次安装1 天前更新
代码仓库

关于 strudel

为 Strudel 编写和调整音乐的技能。它帮助用户将音乐构想转为可在浏览器运行的模式,并提供代码和可分享的播放链接。

主要功能

  1. 01鼓点、贝斯线、旋律与编曲指导
  2. 02迷你记谱、叠层与节奏技巧
  3. 03音效与模式变换
  4. 04流派参考与示例模板
  5. 05Strudel URL 编码与调试

适用场景

  1. 01编写鼓点或完整编曲
  2. 02生成不断变化的算法音乐
  3. 03添加音效并调整模式
  4. 04分享可播放的 Strudel 模式

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/bfollington/terma --skill strudel

安装后在 Claude Code 中输入/strudel确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/patterns/
acid-bass.js
ambient-pad.js
breakbeat.js
generative-melody.js
polyrhythm.js
techno-drums.js
references/
genre-styles.md
strudel-reference.md
scripts/
strudel_url.py

详细介绍

Strudel

概述

Strudel 是一种基于浏览器的实时编程环境,可将 TidalCycles 的模式语言移植到 JavaScript。它通过纯函数式编程创建音乐模式,内容可以包含鼓点、旋律、合成音和效果。模式是不可变的查询函数,可将时间跨度转换为事件流,并支持迷你记谱法 DSL、欧几里得节奏和丰富的音频处理功能。

何时使用此技能

在以下情况使用此技能:

  • 创作鼓点模式、旋律、贝斯线或完整作品
  • 生成算法音乐或生成式音乐
  • 应用滤波器、混响、延迟或失真等效果
  • 调试 Strudel 代码或解释模式的行为
  • 将 Strudel 代码编码为可分享的 URL

核心工作流

1. 理解用户的音乐意图

当用户请求创作模式时,确认:

  • 流派/风格(techno、ambient、jazz 等)
  • 艺术家参考(Lorn、Clams Casino、Aphex Twin 等)
  • 速度(BPM 或每分钟循环数)
  • 所需元素(仅鼓点、鼓点 + 贝斯、完整编曲)
  • 复杂程度(简单循环,还是生成式/不断变化)

针对特定流派/艺术家的技巧,请参考 references/genre-styles.md,其中提供:

  • 常见流派和艺术家的声音特征
  • Strudel 实现模式
  • 每种风格的具体代码示例
  • 典型的速度范围、效果和结构元素
2. 编写模式

使用 Strudel 的函数式、组合式方法构建模式:

基本结构:

// Simple drum pattern
s("bd hh sd hh")

// With tempo
s("bd hh sd hh").cpm(120)

// Layered with stack
stack(
  s("bd(3,8)"),           // Kick drum
  s("hh*8"),              // Hi-hats
  s("~ sd ~ sd")          // Snare on backbeat
).cpm(120)

关键模式:

  • 使用迷你记谱法("bd hh sd")简洁地指定节奏
  • 使用 stack() 叠加多个模式
  • 使用 .cpm() 设置每分钟循环数形式的速度
  • 使用欧几里得节奏 (pulses, steps) 创建有趣的节奏分布
  • 使用 lambda 函数进行变换:.off(1/8, x => x.add(7))
3. 向用户提供输出

用户总是希望在浏览器中运行代码。请同时提供:

  1. 原始代码——供用户复制并粘贴到 https://strudel.cc/
  2. 编码后的 URL——使用 scripts/strudel_url.py 生成,以便立即播放

何时对 URL 进行编码:

  • 初次创作:从头创建新模式时,始终提供编码后的 URL
  • 迭代/调整:除非用户提出要求,否则跳过编码
  • 最终版本:完成后,可询问是否需要编码

编码 URL:

python3 scripts/strudel_url.py encode 's("bd hh sd hh").cpm(120)'

这会生成一个可点击的链接,例如:

https://strudel.cc/#cygiYmQgaGggc2QgaGgiKS5jcG0oMTIwKQ%3D%3D

将 URL 作为可点击链接提供,方便用户立即打开。

4. 迭代和调整

用户测试模式后,可能会请求修改:

  • 调整速度:.cpm(130)、.slow(2) 或 .fast(2)
  • 添加效果:.room(.5)、.lpf(1000)、.delay(.25)
  • 添加变化:.sometimes(x => x.speed(2))、.every(4, rev)
  • 更改声音:替换采样名称或添加合成参数

提供更新后的代码,供用户复制并粘贴。迭代期间除非用户提出要求,否则跳过 URL 编码。

常用模式模板

使用 assets/patterns/ 中的模板作为起点:

  • techno-drums.js - 使用欧几里得模式的 4/4 techno
  • acid-bass.js - 带滤波器扫频的 TB-303 风格贝斯线
  • ambient-pad.js - 带有缓慢和弦进行的丰润铺底音色
  • generative-melody.js - 使用音阶和欧几里得节奏的算法旋律
  • breakbeat.js - Amen break 切片与处理
  • polyrhythm.js - 多种拍号的叠加

用户请求类似风格时,请参考这些模板。

语法速查

迷你记谱法:

  • "a b c" - 序列(均匀分布)
  • "<a b c>" - 慢速轮播(每个周期播放一个)
  • "[a b]" - 细分(速度更快)
  • "a,b,c" - 并行/和弦
  • "a*4" - 加速(4 倍)
  • "a/2" - 减速(2 倍)
  • "a(3,8)" - 欧几里得节奏(8 个步进中有 3 个脉冲)
  • "~" - 休止/静音
  • "a?" - 50% 概率

常用函数:

  • s() 或 .sound() - 采样选择
  • note() 或 .note() - 音高(音名或 MIDI 数值)
  • .scale() - 应用音阶(例如 "C:minor")
  • stack() - 叠加模式
  • .fast() / .slow() - 速度控制
  • .rev() - 反转
  • .sometimes() - 以 50% 的概率应用变换
  • .every(n, fn) - 每隔 n 个周期应用一次变换

效果:

  • .lpf() - 低通滤波器(截止频率)
  • .hpf() - 高通滤波器
  • .room() - 混响(0-1)
  • .delay() - 延迟效果(0-1)
  • .gain() - 音量
  • .pan() - 立体声位置(0=左,1=右)

如需完整语法,请查阅 references/strudel-reference.md,其中包含:

  • 完整的迷你记谱法语法
  • 所有模式变换(欧几里得、时间型、随机型)
  • 音频效果和合成参数
  • 信号函数(正弦、柏林噪声、锯齿波等)
  • 模式对齐策略
  • 实用的编曲示例

需要时使用 grep 搜索此文件:

grep -i "euclidean" references/strudel-reference.md
grep -i "filter" references/strudel-reference.md
grep -i "delay" references/strudel-reference.md

常见问题排查

模式无法播放:

  • 确保模式以适当的音频输出结尾(.s()、.sound() 或 .note())
  • 检查采样是否已加载(默认采样无需加载即可使用)
  • 检查语法:括号、引号是否成对

时间问题:

  • 使用 .cpm() 或 setcpm() 显式设置速度
  • 检查是否存在相互冲突的 .fast() / .slow() 调用
  • 确认欧几里得节奏中的(脉冲数,步进数)取值有效

滤波器不起作用:

  • 确保截止频率处于有效范围内(20-20000 Hz)
  • 检查滤波器包络参数(.lpa()、.lpd()、.lps()、.lpr())
  • 使用 .lpenv() 设置滤波器包络深度

代码过于复杂:

  • 拆分为更小的模式,逐一测试
  • 使用变量:let drums = s("bd hh")
  • 叠加已测试的模式:stack(drums, bass, melody)

资源

scripts/strudel_url.py

用于编码/解码 Strudel URL 的 Python 脚本。

编码:

python3 scripts/strudel_url.py encode '<strudel-code>'

解码:

python3 scripts/strudel_url.py decode '<strudel-url>'

创建或修改模式后,请务必对 URL 进行编码,以提供可点击的链接。

references/strudel-reference.md

全面的技术参考,包含:

  • 完整的迷你记谱法语法
  • 所有模式操作和变换
  • 音频效果和合成
  • 信号和连续模式
  • 编曲示例
  • 最佳实践

当用户需要详细的语法说明或高级技巧时,请加载此文件。

references/genre-styles.md

流派和艺术家风格指南,包含:

  • 暗氛围嘻哈(Lorn、Clams Casino)
  • Techno(通用、Dub Techno)
  • Drum & Bass / Jungle(Jungle、Liquid DnB)
  • Trap / 嘻哈(Trap、Boom Bap)
  • 氛围/实验音乐(暗氛围、IDM/Glitch)
  • House(Deep House、Acid House)

每个条目都介绍了声音特征和 Strudel 实现技巧。用户提及特定流派或艺术家时,请加载此文件。

需要时搜索此文件:

grep -i "lorn" references/genre-styles.md
grep -i "techno" references/genre-styles.md
grep -i "ambient" references/genre-styles.md
assets/patterns/

常见音乐风格的示例模式模板。可复制并调整这些模板作为起点:

  • techno-drums.js - 电子鼓模式
  • acid-bass.js - 共振贝斯线
  • ambient-pad.js - 氛围纹理
  • generative-melody.js - 算法生成的旋律
  • breakbeat.js - 采样处理
  • polyrhythm.js - 复杂节奏结构

评论

支持 Markdown