Strudelify

Midnight Special

Creedence Clearwater Revival

KeyC majorTempo136 bpm
0:00/0:00
// Midnight Special — Creedence Clearwater Revival
// 136 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 63 bars on a 16-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 · electric bass finger
const bass = note(`<
  ~ A B C D E F G H A B C D E I J K A L C D E I G H A L C D E F J K M N O P E I Q K A B C D E I Q K A B C D E F O P E F
  R S T ~
>`.pickRestart({
  A: "f2 ~ f2@2 a2 ~ a2 ~ a#2 ~ a#2@2 b2 ~ b2@2", B: "c3 ~ c3@2 f2@2 f2@2 d2 ~ d2@2 c#2 ~ c#2 ~",
  C: "c2 ~ c2@2 e2 ~ e2 ~ g2 ~ g2@2 e2 ~ e2@2", D: "c2 ~ c2@2 e2 ~ e2@2 f2 ~ f2@2 f#2 ~ f#2@2",
  E: "g2 ~ g2@2 g2 ~ g2@2 e2 ~ e2@2 d2 ~ d2@2", F: "g2 ~ g2 ~ b2 ~ b2 ~ c3 ~ c3 ~ d3 ~ d3 ~",
  G: "c2 ~ c2@2 c2 ~ c2@2 a1 ~ a1@2 g1 ~ g1@2", H: "c2 ~ c2@2 d2 ~ d2@2 d#2 ~ d#2@2 ~ e2!2 ~",
  I: "g2 ~ g2@2 b2 ~ b2@2 c3 ~ c3@2 d3 ~ d3 ~", J: "c2 ~ c2@2 c2 ~ c2@2 a1 ~ a1 ~ g1 ~ g1 ~",
  K: "c2 ~ c2@2 d2 ~ d2 ~ d#2 ~ d#2@2 e2 ~ e2 ~", L: "c3 ~ c3@2 f2 ~ f2@2 d2 ~ d2@2 c#2 ~ c#2 ~",
  M: "f2 ~ f2@2 f2 ~ f2@2 d2 ~ d2@2 c2 ~ c2 ~", N: "f2 ~ f2@2 f2 ~ f2 ~ d2 ~ d2@2 c#2 ~ c#2 ~",
  O: "c2 ~ c2@2 c2 ~ c2@2 a1 ~ a1@2 g1 ~ g1 ~", P: "c2 ~ c2@2 e2 ~ e2 ~ f2 ~ f2@2 f#2 ~ f#2@2",
  Q: "c2 ~ c2 ~ c2 ~ c2@2 a1 ~ a1 ~ g1 ~ g1 ~", R: "c2 ~ c2@2 c3 ~ c3@2 a2 ~ a2@2 g#2 ~ g#2@2",
  S: "c2 ~ c2@2 e2 ~ e2@2 g2 ~ g2@2 f#2 ~ f#2@2", T: "c2 ~@15",
})).s("gm_electric_bass_finger").gain(0.37)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A@2 B@4 C D@5 E@8 F G@2 H@8 I@4 J@5 K@2 L M@4 N@3 O@2 P Q R S@2 T@2 U V@2
>`.pickRestart({
  A: "[~@26 c4@3 ~ c4@2, a3@10 f3@3 f3@3, f2 f2, ~@2 c3@7 c3@2 a3@5, ~@6 f3@4 c4@16 ~@3 g3@3]/2",
  B: "[~@11 g3@2 ~ e3 ~@16 g3, c3@8 [c3,g4]@7 g3@3 g3@3 g3 d3@2 g2@5 g3 d3@2, c4@10 c4@6 c4@10 [g3,c4]@5 ~ g2@14 g3@4 d3@2 g4@12, g3@6 g3@8 g3@8 e4@9 ~@7 b3@26, ~@2 e3@2 ~@6 e3@4 ~ d4@11 g3 d3@2 d4@3]/4", // C5
  C: "b2 ~@13 g3@2, ~ c3@5 ~@2, ~ e3@3, ~@3 g3@4 ~, ~@5 c4@3",
  D: "[~@4 g3@2 c4@4 ~@10 c4@6 f3@4 ~@6 f3@2 ~@4 a3@4 ~@2 c4@3 ~@9 e3@2 ~@2 g4@2 ~@2 g3@2 ~@6 e3@2 g3@2, [c3,g4]@16 f2@16 [f2,f4]@15 ~@5 g3@2 e3@6 ~@2 g3@5 ~@3 [g3,c4]@4 [g3,c4,e4]@4 ~@2, c4@6 ~@8 f3@6 f3@4 ~@6 f3@6 ~@2 [f3,c4]@9 ~@5 c4@6 [g3,c4]@5 ~ c4@6 ~@10, g3@4 ~@6 [g3,c4]@6 ~@10 c4@12 ~@8 g3@6 g4@11 ~@3 e3@6 e3@4 ~@4, ~@2 e3@6 ~@4 e3@4 ~@18 c3@6 ~@8 c3@15 ~ c3@14 ~@2]/5", // C5 F C5 C F5 C5
  E: "[~@18 d3@2 g4@2 ~@2 g3@2 ~@2 d3@2 ~@26 g3@2 ~@2 e3@2 ~@6 f3@2 ~@18 f3@2 ~@10 g3@2 ~@14 g3@2 ~@6 e3@2 g3 ~, g2@16 g2@15 ~@3 e3@6 ~@4 e3@6 e3@2 g3@2 e3@6 ~@2 f3@5 ~@3 c4@8 f3@6 f3@4 ~@2 [f3,c4]@4 g3@6 ~@2 e4@8 g3@6 ~@2 e4@9 ~, [g3,d4]@4 g3@6 g3@4 g3@6 g3@4 ~@2 [g3,d4]@5 ~ c4@4 ~@2 c4@14 g4@11 ~@3 c3@4 f3@6 c3@4 ~@2 c3@4 c3@6 c3@4 c3@6 g3@6 c3@4 c3@15 ~, ~@2 d3@4 b3@15 ~@9 g3@5 ~ g3@10 g3@6 c4@6 [g3,c4,e4]@5 ~ a3@10 a3@6 ~@4 f4@12 c4@10 [c4,d4]@6 c4@8 e3@4 ~@4, ~@8 d3@4 d3@6 ~@4 d3@6 ~@4 c3@16 c3@15 ~ f2@16 f2@16 ~@2 e3@14 ~@2 e3@4 g3@4 [g3,c4]@5 ~]/8", // F5 G5 C Csus2 C5
  F: "~@2 g3 ~@4 g3, [g2,d4], g3@2 ~ b3@5, ~ d3@3 d3@2 d3@2, ~@3 g3@2 g3@2 ~", // G5
  G: "[~@2 g3 ~@12 g3, [g2,g4]@8 ~ e3@3 ~@2 e3@2, g3@2 ~ [g3,b3]@2 b3@3 c4@3 c4@5, ~ d3@3 d3@2 d3@2 c3@8, ~@5 g3@2 g3@3 ~@3 g3@2 ~]/2", // G
  H: "[~@2 g3 ~@3 e3 ~@19 g3 ~@7 g3 ~@3 e3 ~@3 g3 g3@2 ~@5 g3 g3@2 ~@5 g3 ~@4 g3, [c3,g4]@15 ~ f2@14 f3@6 ~@2 [f3,c4]@8 g3@6 ~@2 e4@16 e4@9 ~ d4@22 d4@8 g3@6 ~@2 g3@4 g3@4 ~@2, c4@6 e4@9 ~@3 c3@4 f3@6 c3@4 [f2,f4]@16 ~@2 e3@12 g3@4 e3@4 g3@2 e3@4 ~@2 g3@6 ~@2 b3@20 b3@6 c4@6 c4@10, g3@4 ~@2 [g3,c4]@4 [g3,c4]@6 a3@10 a3@6 ~@2 c3@6 ~@4 c3@4 c3@8 c3@4 c3@4 c3@15 ~ g2@14 g3@4 d3@6 ~@4 d3@4 c3@16, ~@2 e3@6 e3@4 ~@2 f3@6 ~@2 c4@10 ~@10 a3@6 c4@10 c4@16 [g3,c4]@5 ~@3 d3@6 ~@2 g3@2 d3@4 [g2,g4]@16 ~@2 e3@6 e3@4 e3@4]/8", // C5 F5 F C5 G
  I: "[~@2 g3 ~@7 f3 f3@2 ~@5 f3 ~@7 g3 ~@4 g3, [c3,g4]@7 f3@3 ~ a3@10 a3@2 g3@3 ~ e4@5, c4@3 e4@5 c4@5 c4@6 [f3,c4]@5 c4@4 e3 c4@3, g3@2 ~ [g3,c4]@2 g3@3 ~ c3@3 ~@2 c3@2 [f2,f4]@8 ~ e3@2 g3@3 e3@2, ~ e3@3 e3@2 e3@2 f2@7 f3@2 c3@3 ~@2 c3@2 c3@8]/4", // C5 F5 C5 F
  J: "[~@2 g3 ~@7 g3 g3@2 ~@5 g3 ~@7 g3 ~@7 g3 g3@2 ~@2 f3, [c3,g4]@8 g2@7 g3@2 d3@2 g3@3 d3 g3@3 ~ e4@4 g3@3 ~@3 [g3,c4]@3, c4@3 e4@5 d4@5 d4@6 d4@5 ~ e3@2 g3@3 c3@2 c3@8, g3@2 ~ [g3,c4]@2 g3@2 g3@3 ~ b3@9 d3 b3@3 c4@4 e3@4 ~ e3@3 ~@2 e3@2, ~ e3@3 e3@2 e3@2 ~ d3@3 ~@2 d3@2 [g2,g4]@8 c3@5 c4@3 ~@3 e4@5]/5", // C5 G
  K: "[~@2 f3 f3@2 ~@3 f4 ~@6 g3, [f2,c4]@17 ~@11 c3@4, f3@4 ~@2 a3@11 ~@5 c4@10, ~ c3@3 ~ f3@2 f3@3 f3@3 a3@3, ~@3 c3 f2@4]/2", // F5
  L: "~@7 g3, [c3,c4]@3 e4@5, ~ e3@7, ~@2 g3@5 ~, ~@5 c4@3", // C
  M: "[~@2 g3 [g3,c4]@2 ~@13 g3 [g3,b3]@2 ~@5 g3 ~@4 g3, c3@4 ~@3 g3@3 ~ d4@12 g3@3 ~ g3@3 c3@2, c4@3 e4@5 ~ d3@2 g3@3 d3@2 [g2,g4]@8 ~ e3@3 e3@4, g3@2 ~@3 c4@3 b3@5 b3@6 ~@2 b3@3 c4@3 [c4,g4]@5, g4 e3@10 ~ e3@4 g2@14 g3@4 d3@6 ~@4 d3@4 c3@10 e4@6]/4", // C5 G C5
  N: "[~@2 g3 ~@7 f3 f3@2 ~@3 f4 ~@6 g3, c3@7 f3@3 ~ c4@5 f2@6 c3@2, c4@4 e3@2 e3@2 f2@7 f3@3 f3@6, ~@2 e3@4 g3@4 [g3,c4]@6 a3@10 a3@7 ~@5 c4@10, ~@6 e4@10 ~@2 c3@6 ~@4 c3@5 ~ c3@6 ~@2 a3@6]/3", // C5
  O: "[~@3 [g3,c4]@2 ~@5 g3 [g3,c4]@2 ~@2 g3, c3@4 ~@3 g3@3 ~@3 [c4,e4]@3, c4@3 g4@5 ~ e3@3 ~ g3 e3@2, g3@2 ~@3 [c4,e4]@3 c4@3 g4@5, ~ e3@7 c3@8]/2", // C5 C
  P: "~@2 g3 ~@4 g3, g2, d4@3 d4@5, g3@2 ~ g3@3 d3@2, ~ d3@3 ~ b3@3",
  Q: "~@2 g3 ~@3 d3@2, [g2,g4], ~ d3@3 d3@2 ~@2, ~@3 [g3,b3]@2 [b3,d4]@3, ~@5 g3@2 ~", // G Bm
  R: "~@3 c4@2 ~@2 g3, c3@4 ~ [c4,e4]@3, c4@3 g4@5, g3@2 ~ g3@4 ~, ~ e3@5 e3@2", // C
  S: "[~@2 g3 ~@7 g3 ~@4 g3, c3 g2, c4@5 c4@3 b3@4 d3 b3@3, g3@2 ~ [g3,e4]@2 g3@2 g3@3 ~ d4@5, ~ e3@3 e3@2 e3@2 ~ d3@2 g3@3 d3@2]/2", // C
  T: "[~@2 g3 g3@2 ~@5 g3 [g3,c4]@2 ~@2 [e3,g3], [g2,g4]@7 g3@3 ~@3 [c4,e4]@3, g3@2 ~ d4@5 ~ e3@6 ~, ~ d3@3 ~ b3@3 c4@3 g4@5, ~@3 d3 c3@2 ~ c3]/2", // C5 Em G C
  U: "~@2 g3 ~@4 c4, c3!2, c4@3 c4@4 ~, g3 ~@2 g3, ~@2 e3@7 ~ e3@6", V: "[[c3,g3,c4,e4]@25 ~@7]/2",
})).s("gm_electric_guitar_clean").gain(0.36)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~ A@2 B@2 C D E F G@2 D ~@3 H ~ I ~ I ~@3 J ~ K@2 L ~ M N ~ O P I ~ O N ~@2 H I Q R S T N ~ U P I V H M W X Y ~ N Z AA
  ~@2
>`.pickRestart({
  A: "[~@7 f3@3 ~@2 c3@4]/2", B: "[~@2 e3@3 ~@3]/2", C: "~@3 d3@5 d3@4 ~@4", D: "~@4 g3 ~@3", E: "~@3 c3",
  F: "~@2 e3 ~, ~@3 g3@2 ~@3", G: "[~@4 f3 ~ c3@3 ~@3 c3@2 c3@2, ~@3 c3@3 ~@10]/2", H: "~@2 e3 ~", I: "~@2 c3 ~",
  J: "~@4 g3@2 ~@2 e3@3 ~@5, ~@3 g3@2 ~@3", K: "~@2 f3 ~ c3@2 ~@2", L: "~@3 g3@4 ~", M: "~@2 d3 ~",
  N: "~@5 g3@2 ~, ~@2 d3 ~", O: "~@5 c4@3", P: "~@5 f3@2 ~, ~@2 c3 ~", Q: "~ c3@3 ~ f3@3, ~@2 c3 ~", R: "g3 ~ c3!2",
  S: "~@5 g3@2 ~, ~ c3", T: "~@2 g3 ~ d3@2 ~@2", U: "g3 ~@3", V: "~@2 g3 ~@3 c3@2, ~@2 c3 ~, ~@5 g3@2 ~",
  W: "g3@2 ~@5 g3", X: "~@2 g3 ~ c3@4", Y: "~@5 e4@3", Z: "~@5 g3@2 ~, ~@2 c3 ~", AA: "~@3 g3@3 ~@2",
})).s("gm_electric_guitar_clean").gain(0.15)

// chords · electric guitar clean
const electric_guitar_clean_3 = note(`<
  ~ A B C D E F G H I J K L E F M N O P Q R S T K L U V Q R W X Y Z AA AB C D AC AD AE AF I J AG AH AI AJ Q R AK AL AG
  AH W X AM AH AN AO AP AQ ~@2
>`.pickRestart({
  A: "~@2 [a3,c4,f4] ~@5 [a3,c4,f4] ~@7", B: "[a3,c4,f4] ~@5 [a3,c4,f4] ~@9", C: "~@2 [c4,g4] ~@5 [c4,g4] ~@5 g3 ~",
  D: "[c4,g4]@2 [c4,g4] ~@3 [c4,g4] ~@3 [c3,g3] ~ [c4,g4] ~@3", E: "~@2 [d4,g4] ~@5 [d4,g4] ~@6 g2",
  F: "[d4,g4] ~@5 [d4,g4] ~@3 g2@2 [g3,d4]@2 ~@2", G: "~@2 [g3,e4] ~ [g3,e4] ~@3 [g3,e4] ~@3 [g3,e4]@2 ~@2",
  H: "[g3,e4]@2 [g3,e4] ~@3 [g3,e4] ~@5 [g3,e4]@2 ~@2", I: "~@2 [a3,c4,f4,a4] ~@3 f2 ~ [a3,c4,f4,a4] ~@5 f2 ~",
  J: "[a3,c4,f4] ~ [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 f2 ~ [a3,c4,f4] ~@3", // F
  K: "~@2 [g3,c4,e4,g4] ~@3 c3 ~ [g3,c4,e4,g4] ~@5 c3 ~", // C
  L: "[g3,c4,e4] ~ [g3,c4,e4] ~@3 [g3,c4,e4] ~@3 c3 ~ [g3,c4,e4] ~@3", M: "~@2 [g3,c4,e4] ~@7 c3 ~ [a3,c4,f4]@2 ~@2",
  N: "[g3,c4,e4]@2 ~@8 c3 ~ [g3,c4,e4]@2 ~@2", O: "~@2 [a3,f4] ~ [a3,f4] ~@3 [a3,f4] ~@3 [a3,f4]@2 ~@2",
  P: "[a3,f4]@2 [a3,f4] ~@3 [a3,f4] ~@5 [a3,f4]@2 ~@2", Q: "~@2 [g3,c4,e4] ~@5 [g3,c4,e4] ~@7",
  R: "[g3,c4,e4] ~@5 [g3,c4,e4] ~@9", S: "~@2 [b3,d4,g4,b4] ~@3 g2 ~ [b3,d4,g4,b4] ~@5 g2 ~",
  T: "[b3,d4,g4] ~ [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 g2 ~ [b3,d4,g4] ~@3", U: "~@2 [c4,f4] ~@5 [c4,f4] ~@6 f2",
  V: "[c4,f4] ~@5 [c4,f4] ~@3 f2@2 [f3,c4]@2 ~@2", W: "~@2 [g3,b3,d4] ~@5 [g3,b3,d4] ~@7",
  X: "[g3,b3,d4] ~@5 [g3,b3,d4] ~@9", Y: "~@2 [c4,e4,g4] ~@3 c3 ~ [c4,e4,g4] ~@5 c3 ~",
  Z: "[c4,e4,g4]@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@4 g3 [c4,e4,g4]@2 [c4,e4,g4] ~, ~@5 c3 ~@2", // C
  AA: "~@2 [c4,f4,a4] ~@3 f2 ~ [c4,f4,a4] ~@5 f2 ~", // F
  AB: "[c4,f4,a4]@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@4 a3 [c4,f4,a4]@2 [c4,f4,a4] ~, ~@5 f2 ~@2", // F
  AC: "~@2 [g3,b3,d4]@2 [g3,c4,e4] ~ [g3,c4,e4]@2 [g3,b3,d4] ~ [g3,b3,d4] ~ [g3,c4,e4] ~ [g3,c4,e4] ~", // G C G C
  AD: "[g3,b3,d4] ~ [g3,c4,e4]@2 ~@2 [g3,b3,d4]@5 ~@5", AE: "~@2 [c4,e4] ~@5 [c4,e4] ~@6 c3",
  AF: "[c4,e4] ~@5 [c4,e4] ~@3 c3@2 [e3,c4]@2 ~@2", AG: "~@4 [g3,c4,e4] ~@5 [g3,c4,e4] ~@5",
  AH: "[g3,c4,e4] ~@5 [g3,c4,e4] ~@5 [g3,c4,e4] ~@3", AI: "~@4 [g3,b3,d4] ~@5 [g3,b3,d4] ~@5",
  AJ: "[g3,b3,d4] ~@5 [g3,b3,d4] ~@5 [g3,b3,d4] ~@3", AK: "~@2 [a3,c4,f4] ~@7 f3 ~ [a#3,d4,f4]@2 ~@2",
  AL: "[a3,c4,f4]@2 ~@8 f3 ~ [a3,c4,f4]@2 ~@2", AM: "~@2 [g3,c4,e4] ~@7 [g3,c4,e4] ~@5",
  AN: "~@2 [g3,b3,d4] ~@7 g2 ~ [g3,c4,e4]@2 ~@2", AO: "[g3,b3,d4]@2 ~@8 g2 ~ [g3,b3,d4]@2 ~@2",
  AP: "~@2 [g3,c4,e4,g4] ~@3 c3 ~ [g3,c4,e4,g4] ~@2 c3 [g3,c4,e4,g4] ~@3", // C
  AQ: "~@2 [g3,c4,e4,g4] ~ [g3,c4,e4,g4] ~ [g3,c4,e4,g4] ~ [g3,c4,e4,g4] ~ [g3,c4,e4,g4] ~ [g3,c4,e4,g4] ~ [g3,c4,e4,g4] ~", // C
})).s("gm_electric_guitar_clean").gain(0.23)

// other · alto sax
const alto_sax = note("<~ A@6 B@2 C@8 ~@7 D E@4 F@4 G@8 ~@7 H I@6 J K@3 L@3 ~>".pickRestart({
  A: "[g4@4 f4@15 ~ g4@2 g4@2 f4@2 f4@4 e4@21 ~ e4@2 e4 ~ f4@2 e4@4 g4@4 g4@16 ~@2 f4@2 e4@2 g4@2 f4@2 g4 f4@2 ~]/6",
  B: "[g4@2 f4@3 e4@14 ~ g4@2 g4@2 g4@3 ~ f4@3 ~]/2",
  C: "[f4@3 ~ f4@16 g4@2 g4 ~ f4 ~ f4@4 e4@21 ~ e4@2 e4 ~ f4@2 e4@3 ~ g4@4 g4@17 ~ g4@2 g4 ~ g4@2 f4@3 ~ e4@20 ~@14]/8",
  D: "~@4 g4@2 g4@2 g4@3 ~ f4@3 ~", E: "[f4@3 f4@16 ~ g4@2 g4 ~ f4@2 f4@3 ~ e4@21 ~ e4@2 e4 ~ f4@2 e4@3 ~ g4@2]/4",
  F: "[~@2 g4@17 ~ g4@2 g4 ~ g4@2 f4@3 ~ e4@21 ~ g4@2 g4 ~ g4@3 ~ f4@3 ~]/4",
  G: "[f4@3 f4@16 ~ g4@2 g4 ~ f4@2 f4@4 e4@21 ~ e4@2 e4@2 f4@2 e4@4 g4@4 g4@17 ~ g4@2 g4 ~ g4@2 f4@3 e4@21 ~@14]/8",
  H: "~@4 g4@2 g4@2 g4@2 f4@3 f4@3",
  I: "[~@2 f4@18 g4@2 g4 ~ f4@2 f4@3 ~ e4@21 ~ e4 ~ e4@2 f4@2 e4@3 ~ g4@4 f4@17 ~ g4@2 f4@2 g4@2 f4@2 g4@2 f4@2, ~@62 f4 ~@33]/6",
  J: "e4@7 f4", K: "[g4@4 g4@2 g4@2 g4@2 f4@3 ~@6 e4 ~@16 g4@2 f4@2 g4@2 f4@2 g4@2 f4@2, ~@7 f4@11 ~@6]/3",
  L: "[g4@2 f4@3 e4@29 ~@14]/3",
})).s("gm_alto_sax").gain(0.46)

// drums · kick
const kick = s("bd").struct("<~ A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@2 C A@4 B A@3 B D ~>".pickRestart({
  A: "x!2", B: "x!4", C: "x ~@3 x ~@2 x", D: "x",
})).gain(0.4)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A ~ A@3 ~@3 A ~ A ~ A ~@11 A ~ A ~ A ~@3 A ~ A ~ A ~@11 A ~ A ~ A ~@3 A ~@4
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.27)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@7 B ~@7 B ~@7 C ~@7 B ~@7 A ~@7 B ~@3 A ~@2>".pickRestart({
  A: "x!4 ~@3 x", B: "~@12 x!4", C: "~@12 x!3 ~",
})).gain(0.47)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@7 B ~@7 C ~@7 B ~@7 C ~@7 A ~@7 C ~@3 A ~@2>".pickRestart({
  A: "x ~ x ~ x ~ x ~@6 x ~@2", B: "~@8 x!4 ~@4", C: "~@9 x ~ x ~@4",
})).gain(0.47)

// drums · open hat
const open_hat = s("oh").struct("<~@5 A ~@3 A ~ A ~@3 A ~@6 B ~@4 A ~@5 A ~ A ~ A ~@13 A ~@7 A ~@3>".pickRestart({
  A: "~@7 x", B: "~@7 x ~@8",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@16 A ~@7 A ~@7 A ~@7 A ~@15 A ~@6>".pickRestart({
  A: "~@4 x!4 ~@8",
})).gain(0.53)

// drums · crash
const crash = s("cr").struct("<~ A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~>".pickRestart({
  A: "x",
})).gain(0.47)

// drums · ride
const ride = s("rd").struct("<~@17 [x!8]!7 ~@17 [x!8]!7 ~@15>").gain(0.47)

// drums · tambourine
const tambourine = s("tb").struct("<~@17 [~@3 x]!7 ~@17 [~@3 x]!7 ~@15>").gain(0.6)

stack(
  bass, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_clean_3, alto_sax, kick, snare, snare_soft,
  low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride, tambourine
)

More by Creedence Clearwater Revival