Strudelify

Hyper-Ballad

Bjork

KeyB♭ majorTempo136 bpm
0:00/0:00
// Hyper-Ballad — Bjork
// 136 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "strings" string ensemble 2 (copy of ch 13 "warmpad" pad warm, 0.073 beats late)
// note: Full arrangement: all 119 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(136/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · acoustic bass · "bas"
const bass = note(`<
  ~@7 A B C D B E F B G H I J K L M F N O P Q R S T U ~@4 V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP E A
  B C D B E F B G H I J K L M F N O P Q R S T U ~@4 V W X AQ AR AS AT@2 AU AE AV AW AX AY AZ BA AD BB BC BD BE BF BG BH
  BI ~@9
>`.pickRestart({
  A: "eb2@9 bb2@3 ~@3 bb2@2 ~ a2@2 ~ g2@3", B: "d2@9 bb2@2 ~@4 bb2@3 a2@2 ~ g2@3", C: "c2@8 ~ d3@2 ~@4 c3@3 bb2@6",
  D: "eb2@9 bb2@2 ~@4 bb2@2 ~ a2@3 g2@2 ~", E: "c2@9 d3@5 ~ c3@3 bb2@3 g2@2 ~", F: "eb2@9 bb2@3 ~@3 bb2@3 a2@2 ~ g2@3",
  G: "c2@9 d3@5 ~ c3@2 ~ bb2@2 ~ g2@3", H: "eb2@9 bb2@4 ~@2 bb2@3 a2@2 ~ g2@3", I: "d2@9 bb2@3 ~@3 bb2@3 a2@2 ~ g2@3",
  J: "c2@3 d3@2 eb3 d3@2", K: "eb2@9 d3@4 ~@2 c3@2 ~ bb2@2 ~ a2@2 ~", L: "d2@7 ~@2 bb2@3 ~@3 bb2@3 a2@2 ~ g2@3",
  M: "c2@3 d3@2 eb3 c3@2", N: "d2@9 d3@5 ~ c3@3 bb2@3 g2@3", O: "c2@9 bb2@6 a2@2 ~ bb2@3 g2@3",
  P: "eb2@9 bb2@6 g2@3 a2@3 bb2@2 ~", Q: "d2@8 ~ d3@3 ~@3 c3@3 bb2@6", R: "c2@9 bb2@4 ~@2 bb2@2 ~ a2@2 ~ g2@2 ~",
  S: "eb2@9 eb3@5 ~ d3@3 c3@3 bb2@3", T: "d2@9 d3@4 ~@2 c3@3 bb2@3 g2@3", U: "c2@5 ~@7", V: "eb2@3 g2@5",
  W: "f2@3 bb2@5", X: "g2@8 ~ g2@2 ~ a2@6 bb2@5 ~", Y: "f2@9 bb2@9 g2@3 f2@2 ~", Z: "eb2@8 ~ g2@9 bb2@2 ~@4",
  AA: "f2@9 bb2@7 ~@2 a2@5 ~", AB: "g2@9 bb2@2 ~ d3@4 ~@2 d3@5 ~", AC: "a2@8 ~ g2@9 f2@5 ~",
  AD: "eb2@9 g2@6 bb2@3 bb2@3 g2@2 ~", AE: "f2@9 ~ bb2@8 a2@5 ~", AF: "g2@9 d3@2 ~ d3@2 ~ d3@3 bb2@5 ~",
  AG: "f2@9 bb2@3 c3@5 ~ bb2@3 f2@2 ~", AH: "eb2@8 ~ g2@3 bb2@6 g2@5 ~", AI: "f2@9 bb2@2 ~ c3@5 ~ bb2@5 ~",
  AJ: "g2@7 ~@2 g2@2 ~ g2@4 ~@2 g2@6", AK: "a2@8 ~ a2@2 ~ a2@5 ~ a2@5 ~", AL: "eb2@8 ~ eb2@2 ~ eb2@4 ~@2 eb2@4 ~@2",
  AM: "d2@9 bb2@2 ~@4 bb2@3 a2@4 ~@2", AN: "c2@8 ~ c2@2 ~@4 c2@3 c2@5 ~", AO: "eb2@8 ~ eb2@2 ~ eb2@5 ~ eb2@4 ~@2",
  AP: "d2@9 bb2@2 ~@4 bb2@3 a2@5 ~", AQ: "f2@23 ~", AR: "eb2@8 ~ g2@9 ~@3 bb2@2 ~", AS: "f2@9 bb2@3 ~@6 a2@5 ~",
  AT: "[g2@17 ~ bb2@5 a2@10 g2@14 ~]/2", AU: "eb2@9 g2@10 ~ g2@2 ~@2", AV: "g2@17 ~ bb2@5 ~", AW: "f2@9 f2@8 ~ g2@6",
  AX: "eb2@9 ~ g2@13 ~", AY: "f2@9 ~ bb2@13 ~", AZ: "g2@16 ~ g2@6 ~", BA: "a2@8 g2@15 ~",
  BB: "f2@9 bb2@5 ~ c3@2 ~ d3@3 a2@3", BC: "g2@9 bb2@8 ~ c3@5 ~", BD: "f2@9 f2@3 f2@5 ~ g2@6",
  BE: "eb2@9 g2@8 ~ bb2@3 bb2@2 ~", BF: "f2@8 ~ bb2@3 c3@2 ~ d3@3 bb2@5 ~", BG: "g2@8 ~ g2@3", BH: "a2@8 g2@9 ~ f2@5 ~",
  BI: "eb2@3 ~",
})).s("gm_acoustic_bass").gain(0.18)

// chords · epiano1 · "e-piano"
const epiano1 = note("<~@69 A B C D E@2 ~@44>".pickRestart({
  A: "bb3@19 ~@5, eb4@17 ~@7", B: "bb3@19 ~@5, d4@2 ~", C: "[bb3,c4]@19 ~@5",
  D: "[bb3,eb4]@3 ~@6 [bb3,d4]@4 ~@5 c4@4 ~@2", E: "[bb3@2 ~@6 g3 ~@7, ~@23 c4@3 ~@22]/2",
})).s("gm_epiano1").gain(0.13).pan(0.3)

// bass · church organ · "organ"
const bass_2 = note("<~@31 A@2 B C D ~@21 E F@2 G@2 H@2 I J@2 K L@2 M N O P Q R S T U V W X Y@3 ~@34>".pickRestart({
  A: "[eb2@23 d2@25]/2", B: "c2@23 ~", C: "bb1@9 ~ a1@8 g1@6", D: "eb1@5 ~@3", E: "~@14 c2@3 ~ d2@3 eb2@3",
  F: "[f2@6 g2@3 d2@9 eb2@5 c2@6 d2@4 c2@15]/2", G: "[g1@5 a1@3 bb1@9 c2@6 d2@25]/2",
  H: "[~@6 g2@3 f2@3 g2@2 f2@4 eb2@3 d2@2 eb2@4 d2@3 c2@3 bb1@10 ~@5]/2", I: "c2 bb1 a1 g1@5",
  J: "[~@6 f1@2 g1@3 a1@6 bb1@6 c2@18 ~ eb2@6]/2", K: "d2@3 eb2 f2@2 g2 a2",
  L: "[d2@9 c2@14 eb2@5 bb1@4 ~ a1@9 g1@5 ~]/2", M: "bb1@2 c2 d2@5", N: "g2@4 f2@4 ~ g2@6 bb2@3 g2@3 f2@2 ~",
  O: "eb2@3 ~", P: "f2@5 g2@3 ~ d2@9 eb2@6", Q: "c2", R: "eb2@3 d2@2 c2@3 bb1@3 c2@6 ~ d2@6", S: "f2@9 d2@9 bb1@5 ~",
  T: "g1@3 ~", U: "g1 a1 bb1 c2@3 eb2@2", V: "d2@8 ~ f2@9 g2@6", W: "d2@9 c2@10 ~@5", X: "~@7 f2",
  Y: "[g2@3 a2@3 ~@18 [eb2,g2]@5 ~ [d2,f2]@3 ~@6 bb2@17 ~ a2@8 ~ g2@4 ~@2, ~@6 bb1@18 ~@9 [c2,f2]@37 ~@2, ~@6 f2@16 ~@11 bb1@15 ~@24, ~@9 bb2@17 ~@46]/3", // Eb Dm F5
})).s("gm_church_organ").gain(0.2).pan(0.7)

// other · acoustic guitar nylon · "guitar"
const acoustic_guitar_nylon = note(`<
  ~@2 A B C@3 ~@3 D@2 E@2 F G ~ H I ~@2 J K L M N ~ O P Q R ~@19 S T@2 U V@2 W ~@27 X Y Z AA AB AC@2 AD AE AF AG AH AI
  AJ AK AL@2 ~@18
>`.pickRestart({
  A: "~@2 a4@2 bb4@4 ~ d5@4 d5@3 c5@3 bb4@5, ~@9 eb4@13 ~@2", B: "[c4,a4]@7 [d4,bb4]@17",
  C: "[~@14 a4@14 [bb3,g4]@6 ~@3 [c4,f4]@28 ~@7, ~@5 bb4@8 ~@59, ~@6 f4@14 ~@8 f4 ~@43]/3", // Eb F5
  D: "[~@3 g4@2 ~ a4@2 ~ bb4@4 ~@2 a4@2 ~ g4@2 ~ a4@5 ~ g4@10 ~@11]/2",
  E: "[~@8 f4 ~ g4@2 a4@3 bb4@2 c5 g4@2 ~@4 eb4@8 ~@16, ~@7 f4@2 ~@7]/2", F: "~@17 d4 eb4@2 f4@2 bb4 ~",
  G: "g4@3 a4 ~@2 g4@2 ~@5 c5@2 ~ f4@3 ~ eb4@4, ~@3 a4@2 ~@3", H: "~@17 f4 bb4@3 g4@2 ~",
  I: "eb5@2 ~ d5@2 ~ bb4@2 ~ a4@5 ~ bb4@2 ~ g4@6", J: "~@21 g4 c5@2", K: "eb5@5 ~ d5 ~@2 f5@4 ~@2 d5@3 f4@3 a4@2 ~",
  L: "g4 ~@3", M: "~@18 bb4@2 ~ eb4@3", N: "d4@3 eb4@3 c4 ~@2 eb4@6 d4@5 ~@4", O: "~@16 c4@2 d4@3 eb4@2 ~",
  P: "f4@3 g4@2 ~ bb4@5 ~ a4@2 ~ bb4@2 ~ d5@3 ~ d5 ~", Q: "eb5@4 ~@3 eb5@2 d5 ~@2 eb5@3 d5@2 ~ c5@2 ~ bb4@2 ~",
  R: "c5@7 ~@17", S: "~@6 g4 a4",
  T: "[~@3 c5@3 ~@3 g4@2 ~ a4@3 bb4@3 g4@3 a4@6 bb4@3 f4@14 ~ d4@3, bb4@5 ~ d5@10 ~@32]/2",
  U: "bb4 a4 eb4 g4@2 ~ g4 a4",
  V: "[~@3 c5@3 ~@3 g4@2 ~ a4@3 bb4@3 g4@3 a4@6 bb4@3 c5@14 ~ d4@3, bb4@5 ~ d5@10 ~@32]/2",
  W: "bb4@3 a4@3 eb4@3 g4@10 ~@5", X: "~@5 g4 a4 bb4", Y: "c5@8 d5@7 eb5@3 f5@3 g5@2 ~", Z: "eb5@6 ~@3 d5@7 ~@2 c5@5 ~",
  AA: "c5@4 bb4@4 ~ a4@3 g4@10 ~@2", AB: "~@4 a4 bb4 c5 d5", AC: "[eb5@5 f5@3 g5@9 ~ eb5@5 d5@6 eb5@3 c5@9 bb4@6 ~]/2",
  AD: "a4@5 bb4@3 ~ g4@15", AE: "f4@3 g4@3 f4@3 g4@3 a4@3 bb4@3 a4@2 g4@4", AF: "bb4@5 ~ a4@3 bb4@3 c5@5 ~ d5@3 eb5@3",
  AG: "d5 c5@2 ~", AH: "f5 g5 eb5 d5 eb5@2 c5@2", AI: "bb4 c5 d5 a4@3 bb4@2",
  AJ: "g4@5 a4@3 ~@4 c5@3 d5@3 c5@3 f5@3, ~@4 bb4@5 ~@3", AK: "eb5@4 ~ d5@3 c5@3 ~ g5@4 ~ f5@3 eb5@3 ~",
  AL: "[d5@4 c5@4 ~ bb4@3 c5@3 d5@2 ~ f5@3 g5@2 ~ bb5@3 [a4,a5]@5 ~ [g4,g5]@5 ~ [f4,f5]@5 ~@4, ~@23 bb4@3 ~@22]/2", // A G F
})).s("gm_acoustic_guitar_nylon").gain(0.19).pan(0.2)

// chords · orchestral harp · "harp"
const orchestral_harp = note("<A B@2 C D@3 ~@112>".pickRestart({
  A: "~@13 a3@4 c4@3 d4@4, ~@5 g3@3 ~@4",
  B: "[g4@2 ~@2 a4@3 ~ c5@4 d5@14 a4@2 bb4@4 ~ d5@7 c5@3 bb4@5, ~@32 eb4@13 ~@3, ~@32 bb3@11 ~@5]/2",
  C: "[f3,c4,a4]@7 [d4,bb4]@17, ~@7 eb3@15 ~@2", // F Gm
  D: "[~@6 f3@6 ~@2 a4@14 [eb3,bb3,g4]@7 ~@2 [c4,f4]@28 ~@7, ~@5 bb4@8 [c3,eb4]@10 ~@49, ~@6 f4@14 ~@17 a3@18 ~@17]/3", // Eb F5 Cm
})).s("gm_orchestral_harp").gain(0.22).pan(0.7)

// other · dulcimer
const dulcimer = note("<~@50 A B@2 C D@2 E ~@62>".pickRestart({
  A: "~@6 g4 a4", B: "[~@3 c5@3 ~@3 g4@2 ~ a4@3 bb4@3 g4@3 a4@6 bb4@3 f4@14 ~ d4@3, bb4@5 ~ d5@10 ~@32]/2",
  C: "bb4 a4 eb4 g4@2 ~ g4 a4",
  D: "[~@3 c5@3 ~@3 g4@2 ~ a4@3 bb4@3 g4@3 a4@6 bb4@3 c5@14 ~ d4@3, bb4@5 ~ d5@10 ~@32]/2",
  E: "bb4@3 a4@3 eb4@3 g4@10 ~@5",
})).s("gm_dulcimer").gain(0.32).pan(0.6)

// chords · pad warm · "warmpad"
const pad_warm = note("<~@30 A@3 B C@6 D@7 E@5 ~@32 F@6 G@7 H@8 I@8 J@6>".pickRestart({
  A: "[~@23 eb3@23 ~ d3@25]/3", B: "c3@23 bb2",
  C: "[~@9 a2@8 g2@6 ~ bb4@23 [d4,f4,a4]@23 ~@26 eb4@22 ~ [g4,bb4]@23 ~ [g4,a4], ~@23 [eb4,g4]@23 ~@25 [c4,f4,g4]@46 ~@2 eb4@24 ~, ~@8 eb2@5 ~@35]/6", // Dm Gm Gsus2 Eb Csus4
  D: "[~@23 [d4,a4]@24 [c4,d4,a4]@22 ~@2 eb4@22 ~@2 [d4,f4,a4]@24 ~ eb4@23 d4@23 ~ [g4,bb4], ~@23 [f4,g4]@22 ~@2 [e4,g4] ~@22 [g4,bb4]@24 ~ c4@71 ~@2, ~@119 g4@47 ~@2, ~@119 f4@43 ~@6]/7", // D5 D7 Dm Gm Fsus2 Em Gm
  E: "[eb4@22 ~ [c4,d4,g4,a4]@22 ~@2 [c4,f4,g4]@23 ~ [c4,f4,a4]@27 ~@22]/5", // Csus2 Csus4 F
  F: "[~@24 bb4@23 [d4,f4,a4]@23 ~@26 eb4@22 ~ [g4,bb4]@23 ~ [g4,a4], ~@23 [eb4,g4]@23 ~@25 [c4,f4,g4]@46 ~@2 eb4@24 ~]/6", // Dm Gm Gsus2 Eb Csus4
  G: "[~@23 [d4,a4]@24 [c4,d4,a4]@22 ~@2 eb4@22 ~@2 [d4,f4,a4]@24 eb4@23 ~ d4@23 ~ [g4,bb4], ~@23 [f4,g4]@22 ~@2 [e4,g4] ~@22 [g4,bb4]@24 ~ c4@71 ~@2, ~@119 g4@47 ~@2, ~@119 f4@43 ~@6]/7", // D5 D7 Dm Gm Fsus2 Em Gm
  H: "[eb4@22 ~ [c4,d4,g4,a4]@22 ~@2 [c4,f4,g4]@23 ~ [c4,f4,a4]@22 ~@2 eb4@22 ~@2 [d4,f4,a4]@24 [eb4,f4,g4]@23 ~ d4@23 ~ [g4,bb4], ~@94 [g4,bb4]@24 ~ c4@71 ~@2, ~@167 f4@21 ~@4]/8", // Csus2 Csus4 F Dm Eb Gm
  I: "[eb4@22 ~ [c4,d4,g4,a4]@22 ~@2 [c4,f4,g4]@23 ~ [c4,f4,a4]@23 ~ eb4@22 ~@2 [d4,f4,a4]@24 [eb4,f4,g4]@23 ~ d4@23 ~ [g4,bb4], ~@94 [g4,bb4]@24 ~ c4@71 ~@2, ~@167 f4@21 ~@4]/8", // Csus2 Csus4 F Dm Eb Gm
  J: "[eb4@22 ~ [c4,d4,g4,a4]@22 ~@2 [c4,f4,g4]@23 ~ a4@24 ~ g4@46 ~@2, ~@71 [c4,f4]@71 ~@2]/6", // Csus2 Csus4 F5
})).s("gm_pad_warm").gain(0.22).pan(0.1)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A B C D B C E B C F B C G B C G B C F B C D B C H C ~@3 C@7 I C@6 I B J C H B C D B C D B C D B C D B K D B C D
  B@2 D B C D B C D C ~@3 C@7 I C@6 I B C@6 I J C ~@9
>`.pickRestart({
  A: "~@5 x ~ x", B: "x ~@2 x ~@4", C: "x", D: "x!2 ~@2", E: "x ~ x ~@2 x ~@2", F: "x ~ x ~@2 x ~ x", G: "x ~ x ~@4 x",
  H: "x ~ x ~@2 x!2 ~", I: "x ~@6 x", J: "x ~@2 x ~ x!2 ~", K: "x ~@4 x ~ x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A B@2 C B@2 C B@2 C B@2 C B@2 D B@2 C B@2 C B@2 E ~@11 F G@6 H I J K L B@2 M ~@2 F ~@2 C ~@2 F ~@2 C N@2 C N@2 C O
  P C Q N C ~@11 F G@6 H I G@6 R S ~@10
>`.pickRestart({
  A: "~@3 x!2 ~@3", B: "~ x", C: "~@3 x ~ x!2 ~", D: "~@9 x ~@3 x ~ x ~@2 x ~@5", E: "~@4 x ~@4 x ~@5 x ~@2 x ~@5",
  F: "~@5 x!3", G: "~@3 x", H: "~@8 x!2 ~@2", I: "~@3 x ~@4 x!2 ~@2", J: "~@2 x!2", K: "~@4 x ~@2 x",
  L: "x ~@2 x ~ x ~@2", M: "~ x ~ x ~ x!2 ~", N: "~@5 x!2 ~", O: "~@10 x ~@4 x ~@2 x ~@2 x ~@2",
  P: "~@10 x ~@4 x ~@2 x ~@5", Q: "~@6 x ~ x!2 ~@2", R: "~@16 x ~ x ~@2 x ~@2", S: "~@6 x ~@5 x ~@3 x ~ x ~@2 x ~@2",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@35 A@3 ~ A@3 B C@3 D C@3 E ~@34 A@3 ~ A@3 B C@3 D C@3 E C@3 D C@2 F G ~@10
>`.pickRestart({
  A: "~@5 x!3", B: "~@10 x ~ x!2 ~@10", C: "x ~@2 x ~ x!3", D: "x ~@2 x ~@4", E: "x!2 ~ x ~ x!3", F: "x ~@2 x!3 ~@2",
  G: "x",
})).gain(0.32)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@35 A@3 ~ A@3 ~ A@3 ~ A@4 ~@34 A@3 ~ A@3 ~ A@3 ~ A@7 ~ A@2 ~@12>".pickRestart({
  A: "~@2 x",
})).gain(0.16)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B ~ A C ~ A B ~ A B ~ A B@2 A D ~ A B ~ A B ~@19 B ~ A ~@2 A B E F@4 B E G F H F B ~ A B ~ A B ~ A B ~ A B ~@19
  B ~@7 B ~@10
>`.pickRestart({
  A: "~@3 x", B: "x", C: "x ~@4 x ~@2", D: "x ~@2 x", E: "~ x!3", F: "x!4", G: "x ~ x!3 ~ x ~",
  H: "x ~@5 x ~@5 x ~@2 x!2 ~ x ~@5",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@49 A B ~@2 C ~@45 A B ~@6 D ~@11>".pickRestart({
  A: "x!5 ~@3", B: "x", C: "~@16 x ~ x ~@2 x ~@2", D: "x!4 ~@4",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@6 A B@8 C D B@2 D B@7 E D B@2 ~@3 F G ~@2 H ~ B ~ B ~@3 I G ~ B J B ~ D@2 B A D B@4 K D B@4 K B@3 L B@3 D B@4 G ~@6
  H ~ B ~ B ~@3 I G ~ B J ~@3 I G ~ B M G ~@9
>`.pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@3 x ~@3 x", D: "x ~@6 x", E: "~@4 x!2 ~ x", F: "~@6 x!2", G: "x", H: "~@15 x!2 ~ x ~@5",
  I: "~@15 x!2 ~ x ~@2 x ~@2", J: "~@16 x ~ x ~@2 x ~@2", K: "~@2 x ~@4 x", L: "x ~@2 x ~@2 x!2", M: "~@8 x!2 ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@7 A ~@23 A ~@6 B A ~ A ~ A ~@3 A ~@3 A ~@4 B ~@6 A ~@24 B A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@13
>`.pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.24)

// drums · ride
const ride = s("rd").struct(`<
  ~@7 A@2 B A@2 C A@2 D A@2 E A@2 B A@2 F A@2 G A@2 H I ~@8 J ~@10 K L B A@2 B I ~@11 A@2 B I A B A@2 B A@2 B I ~@8 J
  ~@28
>`.pickRestart({
  A: "x!4", B: "x ~@2 x ~@2 x ~@2 x ~ x", C: "x ~@2 x ~@2 x ~@4 x", D: "x ~@2 x ~@5 x ~ x",
  E: "x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~", F: "x ~@5 x ~@5 x ~@2 x ~@6 x ~", G: "x ~@2 x ~@7 x",
  H: "x ~ x ~ x!3 ~", I: "x", J: "~@3 x", K: "x ~ x!3 ~ x ~", L: "x ~ x ~ x ~ x!2",
})).gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct("<~@35 A@3 B A@3 B A@7 C ~@34 A@3 B A@3 B A@7 C A@7 C ~@10>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "~ x!7",
})).gain(0.32)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@35 A@3 B A@3 B A@6 B@2 ~@34 A@3 B A@3 B A@6 B@2 A@6 B@2 ~@10>".pickRestart({
  A: "~@5 x ~@2 x ~@2 x", B: "~@5 x ~@2 x ~@3",
})).gain(0.16)

// drums · shaker
const shaker = s("sh").struct("<~@54 [~ x ~ x] [~@2 x ~@2 x!2 ~]!2 ~@62>").gain(0.4)

// drums · triangle
const triangle = s("triangles:35").struct("<~@38 [~@6 x!2] x ~ x [~@6 x!2] x ~@75>").gain(3.48)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@43 [~@7 x]!8 ~@42 [~@7 x]!16 x ~@9>").gain(1.04)
// … 5 more lines

More by Bjork