Strudelify

Besame mucho

Toussaint

KeyD minorTempo125 bpm
0:00/0:00
// Besame mucho — Toussaint
// 125 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 74 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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.

// chords · piano · "MIDI"
const piano = note(`<
  ~@12 A B@2 C D E F G ~@8 A B@2 C D E F G ~@16 A B@2 C D E F G D E F G D H I J K J K L M@2
>`.pickRestart({
  A: "[a3,d4,gb4]@12 [e4,g4]@11 ~", // D Em
  B: "[[f4,ab4]@11 ~ a4@10 ~@2 g4@11 ~@4 [g3,bb3,d4]@9, ~@11 gb4@11 bb3@14 ~@12, ~@23 d4@13 ~@12]/2", // Fm Gm
  C: "[g3,bb3]@5 ~@4 e4@13 ~@2, ~@6 [bb3,d4]@17 ~", D: "[a3,d4]@7 ~", E: "[ab3,b3,e4]@11 ~ [a3,db4,e4]@10 ~@2",
  F: "[d4,f4,a4]@19 ~@2 d4 ~@2", G: "[d4,f4,a4]@11 ~", H: "[ab3,b3,e4]@23 ~", I: "[a3,e4]@23 ~, db4@7 ~",
  J: "[f3,a3,d4]", K: "g4@11 ~@4 [g3,bb3,d4]@9", L: "[f3,a3,d4]@5 ~@9 g3@7 ~@3, ~@6 db3@5 ~, ~@13 e3@8 ~@3",
  M: "[~@5 b3@43, ~ f3@15, ~ a3@11]/2",
})).s("gm_piano").gain(0.26)

// chords · piano · "MIDI" · soft notes
const piano_soft = note("<~@15 A B ~@14 A B ~@22 A B ~@3 B ~@3 B ~@6 C D@2>".pickRestart({
  A: "d3@5 ~ f4@3 ~@15", B: "f3@11 ~", C: "~@6 a2@5 ~", D: "[~ d3@23]/2",
})).s("gm_piano").gain(0.15)

// bass · piano · "MIDI"
const bass = note(`<
  A@2 B C A@2 D E F G H I J K L M N O P Q A@2 D E F G H I J K L M N O P Q R S T U R S V W A@2 D E F G H I J K L M N O P
  O N O P O N X Y A L A L Z AA@2
>`.pickRestart({
  A: "d2@3 f2@3 a2@2", B: "d2@9 f2@8 ~ a2@6", C: "d2@3 f2@2 f2 a1@2", D: "g1@9 bb1@8 ~ d2@6", E: "g1@3 bb1@3 d2@2",
  F: "g2@7 ~@2 g2 ~@2 f2@7 ~@2 f2 ~@2", G: "e2@9 e2 ~@2 a1@6 db2@5 ~", H: "d2@6 ~@3 d2 ~@2 f2@6 a2@6",
  I: "a2@6 ~@3 a2 ~@2 a1@6 db2@5 ~", J: "d2@6 ~@3 d2 ~@2 a2@7 ~@2 d2 ~@2", K: "a1@7 ~@2 a1 ~@2 d2@6 a1@6",
  L: "g1@6 ~@3 g1 ~@2 bb1@6 ~@3 bb1 ~@2", M: "d2@6 ~@3 d2 ~@2 f2@6 g2@6", N: "d2@6 ~@3 d2 ~@2 a1@6 d2@6",
  O: "e2@6 ~@3 e2 ~@2 db2@6 a1@6", P: "d2@6 ~@3 d2 ~@2 a1@6 c2@6", Q: "d2@6 ~@3 d2 ~@2 a1@6 c2@5 ~",
  R: "g1@7 ~@2 g1 ~@2 bb1@6 d2@4 ~@2", S: "d2@8 ~ d2 ~@2 f2@6 a2@6", T: "a1@7 ~@2 a1 ~@2 db2@6 e2@6",
  U: "d2@6 ~@3 d2 ~@2 f2@6 d2@6", V: "e2@7 ~@2 e2 ~@2 bb1@5 ~ d2@6", W: "a1@6 ~@3 a1 ~@2 db2@6 e2@6",
  X: "e2@6 ~@3 e2 ~@2 e2@9 ~@3", Y: "a1@9 a1 ~@2 db2@6 e2@6", Z: "d2@5 ~@9 a1@4 ~@6", AA: "[~@5 d2@40 ~@3]/2",
})).s("gm_piano").gain(0.46)

// chords · piano · "MIDI"
const piano_2 = note(`<
  A@4 B@2 C@2 D E F G H I J@2 K@2 L@2 B@2 C@2 D E F G H I J@2 K@2 L@2 M N O@2 M N P@2 B@2 C@2 D E F G H I J@2 K@2 L Q
  K@2 L Q R@2 S F T@2 U@2 V@2
>`.pickRestart({
  A: "[d3@3 ~@3 f4@3 f4 ~@4 a4 d4@3 ~@9 d4@2 ~ [a3,c4]@3 a3@5 ~ a3@3 b3@3 b3 ~@2 d3@3 ~@3 f4@3 ~@3 d4@3 d4@3 ~@6 d3 ~@3 d4@2 [a3,c4,f4]@3 b3@5 ~@7 f4@3, ~@4 d3@17 f4@5 ~ f4@6 f4@12 f4@8 d4@7 ~@6 d4@9 ~@13 b3@5 b3 ~@2, ~@5 d4@10 f4@6 a4@24 a4@11 ~ [f4,a4]@6 [f4,a4]@6 a4@27, ~@5 a3@7 a3@6 d4@9 ~@6 b3@9 a3@6 ~@4 a3@8 a3@6 a3@3 f4@6 f4@3 ~@3 f4@12 ~@3, ~@9 a4@5 ~@4 a3@6 d3@24 ~@4 d3@20 a3@6 ~@3 a3@9 [d3,a3]@6]/4", // Am F D5
  B: "[d3@3 ~@3 f4@3 f4 ~@4 a4 d4@3 ~@9 d4@2 ~ [a3,c4]@3 a3@5 ~ a3@3 b3@3 [b3,f4] ~@2, ~@4 d3@17 f4@5 ~ f4@6 f4@12 ~@3, ~@5 d4@10 f4@6 a4@24 a4@3, ~@5 a3@7 a3@6 d4@9 ~@6 b3@9 a3@6, ~@9 a4@5 ~@4 a3@6 d3@24]/2", // Am Bdim
  C: "[g2@3 ~@3 d4@3 ~@9 f3@3 f3@3 g2@5 ~ [d3,f3,bb3,f4]@3 [e4,g4]@6 ~@3 f3@2 ~ [bb3,e4]@3, ~@3 g2@8 ~ g2@12 ~@6 g2@18, ~@4 d3@11 bb3@5 ~ bb3@9 ~@3 bb3@9 d3@5 ~, ~@5 f3@13 d3@6 ~@9 d3 ~@5 e4@5 ~@4, ~@5 bb3@4 [bb3,d4,g4]@6 d4@13 ~@11 g4@8 ~]/2", // Bb Em Bbdim Gm
  D: "[bb3,d4]@3 bb3 ~@5 [bb3,d4]@3 [f3,bb3]@6 ~@3 [d4,g4]@2 ~, [d3,g3]!2 d3@2, ~ [d4,g4]@2 g4@4 ~, ~@18 [f3,bb3]@5 ~", // Bb Bb5 G5 Bb5
  E: "[e3,bb3,d4]@5 ~ [bb3,d4]@3 [d4,g4]@3 [g3,db4,e4,a4]@6 e4@3 [e4,a4]@3, ~@6 e3@6 ~@6 [g3,db4]@5 ~, ~@9 bb3 ~@14", // Em7b5 Bb G5 A7 A5 Gdim
  F: "d3@3 ~@3 f4@3 f4 ~@4 a4 d4@3 ~@3 [f4,a4]@3, ~ d3@5, ~@5 d4@10 f4@6 ~@3, ~@5 a3@7 a3@6 [a3,d4]@6, ~@9 a4@5 ~@10", // F D5
  G: "[g3,db4]@6 db4@3 [e4,a4]@6 a4 ~@2 e3 ~@2 [db4,e4,a4]@2 ~, e3@18 [a2,g3]@5 ~, ~@2 g3@2 ~ e4@2 ~, ~@9 db4@8 ~@7", // Gdim A5 A A7
  H: "d3@2 ~@4 gb4@3 [gb4,a4]@3 g4@3 g4@5 ~ [e4,g4]@3, ~@3 d3@16 ~@5, ~ a3@2 ~@3, ~@5 d4@7 e4@9 ~@3", // Gbm Em
  I: "e4 f4@2 ab4@5 ~ [f4,ab4]@2 ~ [gb4,a4]@7 ~@5, ab4@2 ~ f4 ~@20", // Fm Gbm
  J: "[d3@3 ~@2 d4@4 [bb3,d4]@5 ~ [f3,bb3]@2 ~ bb3@3 d4 ~@2 [g2,d3] ~@3 bb3@2 [d3,f3,bb3,f4] ~@8 g4 bb3@2 [d3,bb3]@4 ~@2, g2 ~, ~@3 d3@15 [d3,f3]@6 ~@10 f3@8 f3 ~@5, ~ f3@3 ~ d4@2 bb3@2 ~@2 [bb3,e4,g4]@2 ~@3, ~@4 bb3@5 g4@22 ~@8 e4@3 ~@6]/2", // Bb Bb5 G5 Bb Gm Dm Edim
  K: "[~@5 f4@4 [d4,f4]@6 [d4,f4]@3 ~@9 [ab4,b4]@5 ~@2 ab4@2 [g3,db4]@4 [db4,e4]@5 ~ db4@2, d3@18 d3@5 e3@12 ~@13, ~@4 a3@8 ~@9 d4@3 [b3,d4]@12 ~@9 e4@2 ~, ~@4 d4@5 a4@9 ~@4 b2@13 ~@13]/2", // Dm Abm Gdim Dbm Bm
  L: "d3@3 ~@3 f4@3 ~@5 a4 d4@3 ~@3 [f4,a4]@3, ~ d3@5, ~@5 d4@10 ~@9, ~@5 a3@7 a3@6 [a3,d4]@6, ~@9 [f4,a4]@5 ~ f4@6 ~@3", // F D5 F
  M: "[d3,g3,bb3]@3 ~@2 [bb3,d4]@4 ~ [d3,g3]@2 ~@3 [g3,bb3]@3 [g2,d3,g3,bb3]@3 [d4,g4]@2 ~, g2@3 ~, ~@4 [d3,g3]@5 [bb3,d4,g4]@5 ~ [d4,g4]@6 ~@3, ~@2 d3 ~", // Gm Bb G5 Gm G5 Gm G5
  N: "[d3,a3,d4]@3 ~@2 [d4,f4]@4 d4@3 d4@3 d4@3 d4@3 [d4,f4]@2 ~, a2@23 ~, ~@4 [d3,a3]@5 [d3,a3]@8 ~ [d3,a3]@5 ~, ~@9 [f4,a4]@6 [f4,a4]@6 a4 ~@2", // D5 Dm D5 F
  O: "[[e3,g3]@4 ~@2 g4@3 ~@3 e3 ~@8 g3@2 ~ [d3,a3]@4 ~@2 [f4,a4]@3 ~@3 [d3,a3]@3 a3@3 [a2,d3,a3]@2 ~@2 e2@2, ~@4 g3@11 [db4,g4]@6 db4 ~@7 [d3,a3]@7 ~@9 d3@2 ~, ~@4 e3@8 ~@6 a2@23 ~@5 a2 ~, ~@5 db4@4 [db4,g4,a4]@6 a4@14 d4@4 a4@12 ~@3, ~@33 [d4,f4]@5 ~ [d4,f4]@6 ~@3]/2", // Em D5 F D5 Dbdim D5 A7 Dm
  P: "[[b3,d4,ab4]@6 ~ b3@2 [d4,ab4,b4]@2 ~ [f3,ab3,d4,f4]@6 f4@2 ~ [f4,bb4]@2 ~@2 db4@3 ~@2 a4@3 ~@3 g3@3 ~ g3@2 e3 ~@2 [e4,a4] ~@2, e3@11 ~ bb2@11 e3@4 ~ [e3,g3]@8 e3@6 ~@6, ~@6 [d4,ab4]@3 b3 ~@2 bb4@8 ~@3 a2@19 a2@6, ~@18 [f3,ab3,d4]@6 g3@3 ~@2 db4@11 db4@8, ~@29 e4@4 [e4,a4]@6 [e4,a4]@6 ~@3]/2", // Abdim Ddim Bb5 A5 Em Ddim A5
  Q: "~@3 [ab4,b4]@5 ~@2 ab4@2 [g3,db4]@4 [db4,e4]@5 ~ db4@2, [b3,d4]@12 ~@9 e4@2 ~", // Abm Gdim Dbm Bm
  R: "[~@5 f4@4 [d4,f4]@6 [d4,f4]@3 ~@9 [ab4,b4]@5 ~@2 ab4@2 ~@3 [ab4,b4]@5 ~ ab4@2 ~, d3@18 d3@5 e3@12 ~ [e3,b3,d4]@12, ~@4 a3@8 ~@9 d4@3 [b3,d4]@12 ~@12, ~@4 d4@5 a4@9 ~@4 b2@13 ~@13]/2", // Dm Abm E7 Bm
  S: "[g3,db4]@3 [db4,e4]@5 ~ db4@3 db4@4 ~@2 a3@6, ~@9 e4@7 ~@8", // Gdim Dbm
  T: "[d3@3 ~@2 d4@4 [bb3,d4]@5 ~ [f3,bb3]@2 ~ bb3@3 d4 ~@2 d3 ~@5 f4@3 f4 ~@4 a4 d4@3 ~@3 [f4,a4]@3, g2@24 ~@9 a4@5 ~@10, ~@3 d3@15 [d3,f3]@6 ~@4 d3@20, ~@3 f3@9 ~@3 d4@6 bb3@6 ~@2 d4@10 f4@6 ~@3, ~@4 bb3@5 g4@15 ~@5 a3@7 a3@6 [a3,d4]@6]/2", // Bb Bb5 F Dm D5
  U: "[d3@3 ~@2 d4@4 [bb3,d4]@5 ~ [f3,bb3]@2 ~ bb3@3 d4 ~@2 a3@4 ~@11 db4@7 ~@2, g2 ~, ~@3 d3@15 [d3,f3]@6 d3 ~@12 [e3,g3]@8 ~@3, ~ f3@3 ~ d4@2 bb3@2 ~@7, ~@4 bb3@5 g4@15 ~@24]/2", // Bb Bb5 Dm Em
  V: "[~@5 [b3,d4]@33 ~@10, ~@3 f3@35 ~@10, ~@2 a3@17 ~@5]/2", // Bm
})).s("gm_piano").gain(0.26)

// chords · piano · "MIDI" · soft notes
const piano_soft_2 = note(`<
  ~ A ~@3 A B@2 C ~@2 D E ~@2 F G H ~@3 A B@2 C ~@2 D E ~@2 F G H ~@2 I ~ J ~ I ~@2 K ~ A B@2 C ~@2 D E ~@2 F G H ~ H G
  H ~ H G L M ~@7
>`.pickRestart({
  A: "a3@5 ~@19", B: "[d3 ~@14 g4@15 ~@15 f3@2 ~]/2", C: "g2@12 d4 ~@5 d4@2 ~@4", D: "e4 ~@3", E: "~@2 a4 ~@5",
  F: "f3@3 ~ f3 ~@19", G: "a3@3 ~@3 a4@3 ~@12 a3@2 ~", H: "~ ab4@2 ~@6 b4@2 ~ e4@3 ~ g3@5 ~ g3@2, ~@11 a2@13",
  I: "~@2 g4 ~@5", J: "db4@3 ~@12 g3 ~@8", K: "~ e4@2 ~@15 g3 ~@2 g3@2 ~", L: "~ ab4@2 ~@6 b4@3 ab4@2 ~@7 b4@3",
  M: "e4@3 g3@5 ~ g3@7 ~@8, a2@13 ~@11",
})).s("gm_piano").gain(0.15)

// chords · piano · "MIDI"
const piano_3 = note("<~@21 A B@2 C@4 D@4 E F@2 ~@10 A B@2 C@4 D@4 E F@2 G@2 F@2 G@2 ~ H I J ~ J K ~@2>".pickRestart({
  A: "~@15 e4@4 f4@5", B: "[a4@4 ~ g4@32 ~@11]/2",
  C: "[g4@9 ~@3 f3@11 [e3,bb4]@12 [a3,a4,db5]@12 ~ d4@22 ~@2 db4@21 ~@3, bb4@11 ~@37, d4@20 ~@51 a3@22 ~@3, ~@11 f4@11 ~@25 [f4,a4,d5]@23 ~@26]/4", // Edim A Dm
  D: "[gb4@12 g4@11 ab4@12 ~@4 c5@5 bb4@3 a4@5 ~ g4@24 ~@19, d5@35 a4@11 ~@50]/4", E: "d4@23 ~",
  F: "[~@11 g4@12 f4@23 ~@2]/2", G: "[e4@11 g4@12 ~ d4@23 ~, ~@23 f4@23 ~@2]/2", H: "g4 f4", I: "d4@7 ~",
  J: "[e4,g4]@23 ~", K: "f4 ~@7",
})).s("gm_piano").gain(0.1)

// chords · piano · "MIDI" · soft notes
const piano_soft_3 = note("<~@20 A@2 ~@2 B@2 ~@6 C@2 ~@10 A@2 ~@2 B@2 ~@7 D ~@3 D ~@3 E ~@8>".pickRestart({
  A: "[d4@3 ~]/2", B: "[~@23 e4@12 e4@12 ~, ~@22 d5@13 ~@13]/2", C: "[~@23 e4@12 ~@13]/2", D: "e4 ~", E: "e4",
})).s("gm_piano").gain(0.05)

// chords · piano · "MIDI"
const piano_4 = note(`<
  A B A B ~@6 A C D ~@2 E ~@2 A F ~@6 A C D ~@2 G H ~ A F ~@14 A C D ~@2 G H ~ A I H ~ A I J@2 K L@4 M N@2
>`.pickRestart({
  A: "d3@2 ~@13 a3@3 d3 ~@5, ~@2 d3@7 ~@3, ~@5 f3@14 ~@5, ~@2 a3@3 ~@3, ~@3 d4@3 ~@2",
  B: "~@6 c4 ~@2 [f3,a3,b3]@13 ~@2, a2@5 a3@2 ~@17, ~@4 f3@3 ~@17", // Bm7b5
  C: "~@6 a3@3 ~@6 e3 ~@2 a2@6, a2@5 e3@10 ~@9, ~ db3@3 ~@2, ~@9 a3@10 ~@5", D: "d3@7 ~@5",
  E: "~@6 f4@4 e4@13 ~, ~ bb3 ~@4, ~@5 d4@3 ~@16", F: "~@6 c4 ~@2 [f3,a3,d4]@13 ~@2, a2@5 a3@2 ~@17, ~@4 f3@3 ~@17",
  G: "~@6 f4@4 ~@8 d4@3 bb3@2 ~, ~ bb3 ~@4, ~@5 d4@3 ~@2 e4@13 ~", H: "[f3,a3]@3 ~",
  I: "[e3,ab3,d4]@9 ~@3 a3@11 ~, ~@9 db3@14 ~, ~@11 e3@12 ~", // E7
  J: "[[f3,a3]@9 ~@3 e4@11 ~, ~@22 e3@25 ~, ~@23 [ab3,b3]@24 ~]/2", K: "[db3,e3,g3]@7 ~@2 [db3,e3,g3]@13 ~@2",
  L: "[~ d4@6 ~@17 e4@7 ~@11 bb3@5 ~, a3@23 bb3@18 ~@7, f3@16 ~@2 f3@6 ~@9 e4@14 ~, ~@9 d4@13 g3@25 ~]/2",
  M: "[f3,a3,d4]@5 ~@8 [db4,e4]@9 ~@2, ~@11 g3@10 ~@3", N: "[~@5 d4@43, ~ f3@15, ~ b3@11]/2",
})).s("gm_piano").gain(0.2)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x ~@4]!71 [x ~@6 x ~@4] [~@5 x ~@18] ~>").gain(0.46)

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~@2 B ~@7
>`.pickRestart({
  A: "~@3 x", B: "~@12 x ~@2 x!4 ~@5",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x ~ x ~ x]!71 ~@3>").gain(0.31)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~@2 A ~@7
>`.pickRestart({
  A: "~@3 x",
})).gain(0.31)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~@10
>`.pickRestart({
  A: "~ x",
})).gain(0.46)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@15 A ~@7 A ~@38 A ~ A ~ B C ~>".pickRestart({
  A: "x", B: "x ~@6 x ~@4", C: "~@5 x ~@18",
})).gain(0.31)

// drums · high tom
const high_tom = s("ht").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A@2 ~ A@4 ~@3
>`.pickRestart({
  A: "~ x",
})).gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A@2 B A@4 C ~@2
>`.pickRestart({
  A: "x!7 ~", B: "x!5 ~ x!2", C: "x",
})).gain(0.26)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A@2 B A@4 ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2",
})).gain(0.15)

// drums · bongos
const bongos = s("bongo:4").struct("<[~ x ~ x]!71 ~@3>").gain(1.21)

// drums · congas
const congas = s("conga:13").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A@2 B A@4 ~@3
>`.pickRestart({
  A: "~ x ~ x ~@3 x", B: "~@3 x ~@5 x ~@7 x ~@6",
})).gain(1.15)

// drums · congas
const congas_2 = s("conga:18").struct("<[~@5 x ~@2]!71 ~ [~@6 x!6 ~ x!7 ~ x!3] [x!2 ~ x!9 ~ x ~@10]>").gain(1.15)

// drums · congas
const congas_3 = s("conga:33").struct("<[~ x]!71 ~@3>").gain(1.15)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A@2 B A@4 ~@3
>`.pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@5 x ~@2",
})).gain(1.82)

// drums · shaker
const shaker = s("sh").struct(`<
  A B C D C D C D C D C D C D C D C D C D C D C D C D C B C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C
  D C D C D C@2 B C@4 ~@3
>`.pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@5 x", C: "~@9 x ~@5 x!4 ~@2 x ~@2", D: "~@3 x ~@11 x!4 ~@2 x ~@2",
// … 18 more lines