strudel save
001 描述一个ai生成的数字妖怪漂浮在数字自然空间里:
// 速度:128 BPM,4 拍一循环
setcpm(128/4) // 等效于 setcps(128/60/4);用 cpm 写 BPM 更直观
// 深踢(低通+一点点房间感)
const kick =
s("bd ~ ~ ~")
.gain(1).lpf(200).room(0.02)
.orbit(1)
// 低频贝斯(正弦+低通)
const bass =
note("c2 ~ c2 ~ <a1 ~ g1 ~>").sound("sine")
.attack(0.01).decay(0.2).sustain(0.5).release(0.2)
.lpf(180).lpq(0.7).gain(0.6)
.orbit(1)
// 16 分帽与开放镲,cut 互斩;高通+轻微随机稀释
const hats =
stack(
sound("pink").struct("x*16") // 粉噪当帽
.hpf(8000).clip(0.03).sustain(0).gain(0.22),
s("oh ~ oh ~").cut(1) // 与其它同组采样互相切断
.hpf(6000).decay(0.08).sustain(0).gain(0.18)
)
.degradeBy(0.15)
.room(0.1).orbit(2)
// 数字点击/铃(三角波),带延迟道具
const blips =
n("0 7 ~ <3 10>").scale("c:minor").sound("triangle")
.octave(5).gain(0.18).clip(0.12)
.delay(0.3).delaytime(3/16).delayfeedback(0.35)
.hpf(1500).room(0.2).orbit(2)
// 数字自然的铺底(锯齿垫+大混响)
const pad =
note("<c3 g2 eb3> <c3 a2 f3>").slow(2)
.sound("sawtooth")
.lpf(1200).lpq(0.9)
.attack(0.6).sustain(0.7).release(2.8)
.room(0.65).roomsize(8).gain(0.35)
.orbit(3)
.jux(rev) // 右声道反向,营造漂浮/镜像感
// “数字妖怪”的声带(vowel 滤波随时间变形)
const yokai =
note("c4 ~ c5 ~ <g4 ~ a4 ~>").sound("sine")
.vowel("<a e i o u>").gain(0.22)
.clip(2).room(0.5).orbit(3)
.every(8, x => x.rev())
// 低电噪纹理
const texture =
s("crackle*2").density(0.02)
.gain(0.1).room(0.4).orbit(3)
stack(kick, bass, hats, blips, pad, yokai, texture)
002 相较于001稍微空灵俏皮一些:
// Airy + Playful Ambient Techno with a "middle" groove switch
setcpm(120/4)
// --- Kick:平时稀疏;每4循环里的第3循环 → 4 on the floor ---
const kick =
s("bd ~ ~ ~")
.gain(0.9).lpf(220).room(0.04).orbit(1)
.when("<0 0 1 0>/4", p => p.struct("x x x x"))
// --- Bass:暖、少惊悚;中段更紧凑一点 ---
const bass =
note("c2 ~ c2 ~ a1 ~ g1 ~").sound("sine")
.attack(0.01).decay(0.2).sustain(0.55).release(0.3)
.lpf(200).lpq(0.8).gain(0.52).room(0.25).orbit(1)
.when("<0 0 1 0>/4", p => p.struct("x ~ x ~ x ~ x ~"))
// --- Hats:空气感的16分+偶尔开镲;中段更整齐一点 ---
const hats =
stack(
sound("pink").struct("x*16").hpf(9000).clip(0.02).sustain(0).gain(0.18),
s("oh ~ ~ oh ~ ~ ~ ~").hpf(6500).decay(0.09).sustain(0).gain(0.14).cut(1)
)
.degradeBy(0.18).room(0.12).orbit(2)
.firstOf(4, x => x.degradeBy(0.05))
// --- Chimes(俏皮风铃):高通+延迟;中段稍微加速、亮一点 ---
const chimes =
n("<0 7 9 12> 4 7 ~ 2").scale("c:major").sound("triangle")
.octave(5).gain(0.15).clip(0.10)
.delay(0.25).delaytime(3/16).delayfeedback(0.38)
.hpf(1400).room(0.30).orbit(2)
.when("<0 0 1 0>/4", x => x.fast(2).gain(0.18))
// --- Pad(空灵主景):开放和弦+大混响 ---
const pad =
note("<c3 g2 d3> <c3 a2 e3>").slow(2)
.sound("sawtooth").lpf(1200).lpq(0.9)
.attack(0.5).sustain(0.75).release(3.0)
.room(0.72).gain(0.34).orbit(3)
.jux(rev)
// --- Yokai(数字妖怪声带):明亮的人声共鸣、远景化 ---
const yokai =
note("c4 ~ e4 ~ <g4 ~ a4 ~>").sound("sine")
.vowel("<a e i o u>").gain(0.16)
.hpf(450).room(0.60).orbit(3)
.every(8, x => x.rev())
// --- 空气底纹:极慢粉噪,托空间 ---
const airtex =
s("pink").density(0.01).gain(0.05).lpf(1200).room(0.40).orbit(3)
stack(kick, bass, hats, pad, chimes, yokai, airtex)
emokaiStep 001:
// --- Digital Yokai Walk (Slower tempo, walking groove) ---
// 稍慢 → 类似散步的节奏
setcpm(110/4) // 110 BPM,偏悠闲
// 稳定底鼓(心跳/步伐)
const kick =
s("bd ~ bd ~")
.gain(0.95).lpf(240).room(0.05).orbit(1)
// 脚步贝斯:抬脚/落脚感
const bass =
note("<c2 d2 f2 g2>").sound("sine")
.attack(0.01).decay(0.15).sustain(0.45).release(0.2)
.lpf(200).gain(0.5).room(0.2).orbit(1)
// 反拍开镲+空气感
const hats =
stack(
s("~ oh ~ oh").hpf(7000).decay(0.07).sustain(0).gain(0.15),
sound("pink").struct("x*8").hpf(8000).gain(0.1)
).room(0.1).orbit(2)
// 轻木咔哒:点缀步伐
const clack =
s("rim ~ rim ~")
.gain(0.12).hpf(1500)
.orbit(2)
// 主旋律:高音明亮,五声音阶(日式奇幻)
const lead =
n("<0 2 5 7 9>").scale("c:major")
.sound("superfm")
.octave(6)
.struct("x x") // 悠闲的点子
.gain(0.18).hpf(600)
.delay(0.3).delaytime(1/8).delayfeedback(0.3)
.room(0.25).orbit(3)
stack(kick, bass, hats, clack, lead)
emokai 002:
// --- Digital Snowy Mountain Walk (Bread Yokai) ---
// 节奏和前一首类似,带雪山的清凉氛围 + 面包咀嚼的俏皮感
setcpm(110/4)
// 底鼓:稳步散步(心跳)
const kick =
s("bd ~ bd ~")
.gain(0.92).lpf(230).room(0.05).orbit(1)
// 低音:脚步在雪地里的起落
const bass =
note("<c2 f2 g2>").sound("sine")
.attack(0.02).decay(0.15).sustain(0.45).release(0.25)
.lpf(180).gain(0.5).room(0.22).orbit(1)
// 雪山空气:高频噪声,像冷风吹过
const snowAir =
sound("pink").struct("x*8")
.gain(0.07).hpf(7000).room(0.3).orbit(2)
// 面包咀嚼:木块声模仿“咔哧”
const chew =
s("rim ~ rim ~ rim ~ ~ ~") .gain(0.14).hpf(1600)
.delay(0.22).delaytime(3/16).delayfeedback(0.2)
.orbit(2)
// 主旋律:像山间风笛/口哨
const lead =
n("<0 2 5 7>").scale("c:major")
.sound("triangle") // 柔和明亮
.octave(6)
.struct("x x")
.gain(0.16)
.hpf(500).room(0.35)
.delay(0.3).delaytime(1/8).delayfeedback(0.28)
.orbit(3)
stack(kick, bass, snowAir, chew, lead)