关于 strudel
为 Strudel 编写和调整音乐的技能。它帮助用户将音乐构想转为可在浏览器运行的模式,并提供代码和可分享的播放链接。
主要功能
- 01鼓点、贝斯线、旋律与编曲指导
- 02迷你记谱、叠层与节奏技巧
- 03音效与模式变换
- 04流派参考与示例模板
- 05Strudel URL 编码与调试
适用场景
- 01编写鼓点或完整编曲
- 02生成不断变化的算法音乐
- 03添加音效并调整模式
- 04分享可播放的 Strudel 模式
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ bfollington/ terma --skill strudel安装后在 Claude Code 中输入/strudel确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/patterns/acid-bass.jsambient-pad.jsbreakbeat.jsgenerative-melody.jspolyrhythm.jstechno-drums.jsreferences/genre-styles.mdstrudel-reference.mdscripts/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. 向用户提供输出
用户总是希望在浏览器中运行代码。请同时提供:
- 原始代码——供用户复制并粘贴到 https://strudel.cc/
- 编码后的 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- 复杂节奏结构