Strudelify
KeyA minorTempo120 bpm
0:00/0:00
// Cherry — The Smashing Pumpkins
// 120 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 69 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@4 B@2 C D@2 E F G H@4 I J@6 K L M N O@2 P@2 Q@2 R@3 S@3 T U V@8 W X Y Z AA@5 AB AC@2 AD@2 AE@2 AF@2 ~@2
>`.pickRestart({
  A: "[~@27 a3@8 ~ [c4,e4]@8 a3@4 ~ e4@6 ~@2 [c4,e4]@3 ~ g3@7 ~@2 [b3,d4]@8 f3@4 ~ c4@6 ~@2 [a3,c4]@4 ~@9 [c4,e4]@8 a3@4 ~ [c4,e4]@6 ~@2 [c4,e4]@3, ~@48 c4@6 ~@28 a3@6 ~@7 a3@14 ~@19]/4", // C Bm Am C
  B: "[~ g3@7 ~@2 [b3,d4]@7 ~@2 f3@3 ~ [a3,c4]@5 ~@3 [a3,c4]@3 ~@2 a3@7 ~ [c4,e4]@7 a3@5 [c4,e4]@6 ~@2]/2", // Bm Am C
  C: "~ e4@4 g3@7 ~@2 [b3,d4]@7 ~@2 f3@4 ~ a3@4, c4@4 ~@23 c4@5", // Bm
  D: "[~@4 [a3,c4]@3 ~@2 a3@8 ~ e4@8 a3@4 [c4,e4]@6 ~@3 c4@4 g3@8 ~ [b3,d4]@7 ~ f3@4, ~@17 c4@8 ~@13 e4@4 ~@22]/2", // Am C Bm
  E: "~ [a3,c4]@6 ~@2 [a3,c4]@3 ~@2 a3@7 ~ [c4,e4]@8 a3@2", // Am C
  F: "~@2 [c4,e4]@5 ~@4 e4@4 g3@7 ~ [b3,d4]@8 ~, ~@5 c4@2 ~@9", // C Bm
  G: "f3@4 ~ c4@6 ~ [a3,c4]@3 ~@2 a3@7 ~ [c4,e4]@7, ~@2 a3@3 ~@11", // Am C
  H: "[~ a3@4 ~ c4@6 ~@2 [c4,e4]@5 g3@8 [b3,d4]@8 ~ f3@4 ~ c4@5 ~@2 [a3,c4]@4 ~ a3@7 ~ [c4,e4]@7 ~ a3@3 ~ [c4,e4]@5 ~@4 c4@3 ~ g3@7 ~ [b3,d4]@8 ~ f3@4 [a3,c4]@5 ~@3 [a3,c4]@4 ~ a3@7 ~, ~@5 e4@6 ~@29 a3@5 ~@36 e4@4 ~@43]/4", // C Bm Am C Bm Am
  I: "[c4,e4]@7 ~ a3@4 [c4,e4]@5 ~@3 [c4,e4]@4 g3@8", // C
  J: "[~ [b3,d4]@8 ~ f3@4 ~ [a3,c4]@5 ~@3 [a3,c4]@3 ~ a3@8 ~ [c4,e4]@8 a3@3 ~ [c4,e4]@6 ~@2 [c4,e4]@4 g3@7 ~@2 [b3,d4]@7 f3@4 ~ [a3,c4]@4 ~@4 c4@3 ~ a3@7 ~ [c4,e4]@7 ~ a3@4 ~ e4@6 ~@2 [c4,e4]@4 g3@8 [b3,d4]@8 ~ f3@4 [a3,c4]@4 ~@4 c4@3 ~ a3@7 ~ [c4,e4]@8 a3@3 ~ c4@6 ~@2 [c4,e4]@4 ~, ~@88 a3@4 ~@21 c4@6 ~@35 a3@3 ~@21 e4@6 ~@8]/6", // Bm Am C Bm Am C Bm Am …
  K: "g3@7 ~ [b3,d4]@8 f3@4 [a3,c4]@5 ~@3 [a3,c4]@3 ~", // Bm Am
  L: "~ a3@7 ~ [c4,e4]@8 a3@4 ~ e4@5 ~@2 [c4,e4]@3, ~@21 c4@5 ~@6", // C
  M: "~@2 g3@7 [b3,d4]@9 f3@4 ~ c4@2 ~@2 [a3,c4]@2 ~ [a3,c4]@2, ~@22 a3@3 ~@7", // Bm Am
  N: "~@3 [c4,e4]@6 ~@2 [c4,e4]@6 ~@2 [c4,e4]@3 ~ [c4,e4]@2 ~@3 c4@2 ~@2, ~@27 e4@2 ~@3", // C
  O: "[d4@6 ~@2 d4@2 ~@3 d4@2 ~@2 c4@5 ~@3 c4@2 ~@2 c4@2 ~@2 c4@2 ~@3 c4@6 ~@2 c4@5 ~@6 e4@2 ~@3 e4@2, b3@15 ~@2 a3@20 e4@5 ~@3 e4@5 ~@3 e4@3 ~@8, ~@27 c4@5]/2",
  P: "[~@9 d4@3 ~ d4@2 ~@3 c4@5 ~@3 c4@2 ~@3 c4@2 ~ c4@2 ~@3 [c4,e4]@5 ~@3 c4@5 ~@2 e4@3 ~ e4@2 ~@3 e4, ~ d4@5 ~@40 e4@5 ~@13, ~ b3@7 ~ a3@10 ~@8 c4@5]/2", // C
  Q: "[~@10 d4@2 ~@2 d4@2 ~@10 c4@2 ~@2 c4@2 ~@2 c4 ~@3 [c4,e4]@6 ~@3 c4@4 ~@3 [c4,e4]@2 ~@3 e4@2 ~ e4@2, ~@2 d4@5 ~@12 a3@19 ~@20 c4@6, ~@3 b3@14 ~ c4@6 ~@22 e4@5 ~@13]/2", // C
  R: "[~@3 [b3,d4]@33 ~@7 a3@7 ~ [c4,e4]@7 a3@4 ~ [c4,e4]@6 ~@2 [c4,e4]@4 g3@9 [b3,d4]@7 ~ d3@3 ~]/3", // Bm C Bm
  S: "[d3@2 ~@3 d3@2 ~@2 d3@4 a3@7 ~@2 [c4,e4]@7 a3@5 [c4,e4]@6 ~@2 [c4,e4]@4 g3@7 ~ [b3,d4]@7 ~@2 d3@2 ~@2 d3@2 ~@2 d3@2 ~@2 d3@3 ~@2 a3@7 ~ [c4,e4]@8]/3", // C Bm C
  T: "a3@4 [c4,e4]@7 ~@2 [c4,e4]@4 g3@7 ~ [b3,d4]@7", U: "~@2 d3@3 ~ d3@2 ~@3 d3@2 ~@2 d3@4 a3@7 ~ [c4,e4]@5",
  V: "[~@3 a3@4 ~ [c4,e4]@6 ~@2 c4@4 g3@7 ~ [b3,d4]@8 d3@2 ~@3 d3@2 ~@2 d3@3 ~ d3@4 a3@8 [c4,e4]@8 a3@4 [c4,e4]@6 ~@2 [c4,e4]@4 g3@8 ~ d4@8 d3@2 ~@3 d3@2 ~ d3@3 ~ d3@4 a3@7 ~ [c4,e4]@7 ~ a3@3 ~ c4@5 ~@3 c4@3 g3@7 ~@2 b3@7 ~ d3@3 ~ d3@3 ~ d3@2 ~@2 d3@4 ~ a3@7 ~ c4@7 a3@4 ~ c4@5 ~@3 e4@3 ~ g3@6 ~@2 d4@7 ~ d3@2 ~@2 d3@2 ~@3 d3 ~@3 d3@3 ~ a3@8, ~@15 e4@4 ~@74 b3@8 ~@36 e4@6 ~@2 e4@4 ~@8 d4@7 ~@26 e4@7 ~@5 e4@5 ~@3 c4@4 ~@8 b3@7 ~@27]/8", // C Bm C
  W: "[c4,e4]@7 ~ a3@5 [c4,e4]@6 ~@2 [c4,e4]@4 g3@7", X: "~ [b3,d4]@8 d3@3 ~@2 d3@2 ~@3 d3@2 ~ d3@3 ~@2 a3@5",
  Y: "~@2 [c4,e4]@8 a3@4 ~ e4@5 ~@2 [c4,e4]@4 ~ g3@5, ~@7 c4@3 ~@6", Z: "~@2 [b3,d4]@9 f3@5 a3@6 ~@2 a3@4 ~@4",
  AA: "[~ a3@4 [c4,e4]@7 ~ a3@4 [c4,e4]@6 ~@3 [c4,e4]@4 g3@6 ~@2 [b3,d4]@7 ~ f3@3 ~ [a3,c4]@6 ~@2 [a3,c4]@4 ~ a3@8 [c4,e4]@7 ~ a3@4 [c4,e4]@6 ~@2 [c4,e4]@4 g3@7 ~ [b3,d4]@7 ~ f3@3 ~@2 c4@5 ~@2 [a3,c4]@3 ~ a3@7 ~ [c4,e4]@7 ~ a3@4 [c4,e4]@6 ~@2 [c4,e4]@5, ~@115 a3@6 ~@39]/5", // C Bm Am C Bm Am C
  AB: "g3@7 [b3,d4]@8 ~ f3@4 [a3,c4]@3 ~ [a3,c4]@2 ~@2 [a3,c4]@2 ~@2", // Bm Am
  AC: "[~ [b3,c4]@3 ~@4 [c4,e4]@6 ~@3 c4@3 ~ c4@2 ~@2 c4@3 ~ d4@6 ~@2 d4@2 ~@2 d4@2 ~@2 c4@5 ~@3 c4@2 ~@2 c4@2 ~@5, e4@6 ~@10 e4@3 ~ e4@2 ~@2 e4@3 ~@2 b3@13 ~@22, ~@29 a3 ~@15 a3@19]/2", // Cmaj7 C
  AD: "[~ [c4,e4]@6 ~@2 e4@4 ~@3 e4@6 ~@3 e4@2 ~@2 d4@5 ~@3 d4@2 ~@2 d4@2 ~@2 [a3,c4]@7 ~ [a3,c4]@2 ~@2 a3@5 e4@2, ~@9 c4@19 ~ b3@14 ~@14 c4@3 ~@4]/2", // C Am
  AE: "[~@2 [c4,e4]@6 ~@2 [c4,e4]@5 ~@2 e4@3 ~ e4@2 ~@2 e4@2 ~@2 d4@5 ~@3 d4@2 ~@2 d4 ~@3 [a3,c4]@6 ~ [a3,c4]@2 ~@2 c4@2 ~ c4@2 ~@3, ~@17 c4@9 ~@3 b3@14 ~@13 a3@6 ~@2]/2", // C Am
  AF: "[[c4,e4]@5 ~@3 c4@5 ~@2 e4@2 ~@2 e4@2 ~ e4@2 ~@2 b3@22 ~@16, ~@7 e4@5 ~@3 c4@8 ~@3 d4@11 ~@27]/2", // C
})).s("gm_acoustic_guitar_steel").gain(0.26)

// bass · electric bass finger
const bass = note(`<
  A@4 B@2 C D@2 E F G H I J K L@8 M@4 N O P Q@2 R@3 S T@2 U V@3 W@2 X@2 Y@8 Z@4 AA@2 AB@2 AC@2 AD@3 ~
>`.pickRestart({
  A: "[~@25 a1@22 ~ a1@7 ~@2 a1@4 g1@15 ~@3 f1@10 ~ f1@4 ~ a1@15 ~@3 a1@13 ~@2]/4",
  B: "[~@2 g1@15 ~ f1@11 ~@2 f1@4 ~ a1@15 ~@2 a1@2 ~ a1@7 ~]/2", C: "~ a1@4 g1@15 ~@3 f1@2 ~@2 f1@5",
  D: "[~@4 f1@3 ~@2 a1@7 ~ a1@12 ~@2 a1@6 ~ a1@4 ~ g1@16 ~ f1@3 ~]/2", E: "f1@4 ~ f1@2 a1@7 ~ a1",
  F: "~@2 a1@8 ~ a1@3 ~@2 g1@14 ~@2", G: "f1@2 ~@2 f1@7 ~@2 f1@3 ~ a1@14 ~", H: "~ a1@3 ~ a1@7 ~@2 a1@3 ~ g1@14",
  I: "~@3 f1@3 ~@2 f1@7 ~@2 f1@3 ~@2 a1@10", J: "~@5 a1@3 ~ a1@7 ~@2 a1@3 ~ g1@10",
  K: "~@7 f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~ a1@9",
  L: "[~@8 a1@3 ~ a1@7 ~@2 a1@4 g1@15 ~@2 f1@2 ~@2 f1@9 ~ f1@3 a1@16 ~ a1@3 ~ a1@7 ~ a1@4 g1@15 ~@2 f1@3 ~ f1@7 ~@2 f1@3 a1@14 ~@2 a1@3 ~ a1@7 ~@2 a1@4 g1@14 ~@2 f1@3 ~ f1@3 ~@2 f1@2 ~@2 f1@3 ~ a1@15 ~ a1@2 ~@2 a1@5 ~@2 a1@4 ~ g1@15 ~@2 f1@3 ~ f1@7 ~@2 f1@3]/8",
  M: "[a1@15 ~@3 a1@3 a1@7 ~@2 a1@4 g1@14 ~@2 f1@2 ~@2 f1@7 ~@2 f1@3 a1@15 ~@2 a1@2 ~@2 a1@3 ~ a1@4 g1@7 ~ g1@3 ~@2 g1@3 ~@2 f1@11 ~@2 f1@2]/4",
  N: "~ f1@3 ~ a1@7 ~ a1@7 ~@2 a1@6 ~ a1@3", O: "~ g1@7 ~ g1@3 ~@2 g1@2 ~ f1@7 ~@2 f1@3 ~ f1@2",
  P: "~ f1@3 ~@2 a1@7 ~ a1@6 ~@2 a1@3 ~ a1@6", Q: "[~@2 g1@15 ~ f1@19 ~ a1@26]/2",
  R: "[~@3 g1@15 ~ f1@19 ~ a1@18 ~@3 a1@2 ~ a1@6 ~@2 a1@4 g1@15 ~@3 f1@3]/3", S: "f1@7 ~@3 f1@4 a1@14 ~@2 a1@2",
  T: "[~ a1@7 ~@2 a1@4 g1@15 ~@2 d1@3 ~ d1@6 ~@2 d1@3 ~ a1@14 ~@3]/2", U: "a1@3 ~ a1@7 ~ a1@4 ~ g1@15",
  V: "[~@2 f1@2 ~ f1@7 ~@2 f1@4 ~ a1@18 ~ a1@8 ~@2 a1@4 g1@15 ~@2 c1@3 ~ c1@3 ~ c1@3 ~@2 c1@3 ~ a1@10]/3",
  W: "[~@5 a1@2 ~@2 a1@7 ~ a1@4 g1@15 ~@2 d1@3 ~ d1@3 ~ d1@3 ~@2 d1@4 ~ g1@7 ~]/2",
  X: "[~@10 a1@6 ~ a1@5 g1@15 ~ d1@2 ~ d1@3 ~@2 d1@2 ~@2 d1@4 a1@10]/2",
  Y: "[~@6 a1@3 ~ a1@6 ~@2 a1@4 g1@16 ~@2 d1@2 ~ d1@2 ~@2 d1@2 ~@2 d1@4 a1@15 ~@2 a1@3 ~ a1@7 ~@2 a1@4 g1@15 ~ d1@3 ~@2 d1@2 ~@2 d1@2 ~@2 d1@4 a1@14 ~@2 a1@10 ~@3 a1@3 g1@15 ~@2 f1@12 ~ f1@4 a1@14 ~@3 a1@3 ~ a1@7 ~@2 a1@4 g1@15 ~@2 f1@2 ~ f1@6 ~@3 f1@4 ~]/8",
  Z: "[g1@4 ~@3 a1@6 ~@6 a1@5 ~@2 a1@4 g1@15 ~@2 f1@2 ~@2 f1@7 ~ f1@4 a1@14 ~@2 a1@3 a1@6 ~@2 a1@4 ~ g1@15 ~@2 f1@3 ~ f1@3 f1@3 ~ f1@4 ~]/4",
  AA: "[a1@6 ~@2 a1@6 ~@3 a1@2 ~@2 a1@2 ~ a1@3 ~@2 g1@6 ~@2 g1@2 ~ g1@3 ~@2 f1@6 ~@2 f1@2 ~ f1@3 ~ f1@4]/2",
  AB: "[a1@7 ~@2 a1@6 ~ a1@3 ~@2 a1@2 ~ a1@3 ~ g1@8 ~ g1@3 ~ g1@3 ~@2 f1@6 ~ f1@3 ~ f1 ~@3 f1@3]/2",
  AC: "[~ a1@6 ~@3 a1@6 ~ a1@3 ~ a1@2 ~@2 a1@3 ~ g1@6 ~@2 g1@3 ~ g1@3 ~ f1@7 ~ f1@3 ~ f1@2 ~ f1@3 ~]/2",
  AD: "[a1@6 ~@2 a1@6 ~ a1@2 ~@2 a1@2 ~@2 a1@3 g1@16 f1@21 g1@7 ~@2 a1@22 ~@2]/3",
})).s("gm_electric_bass_finger").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI I AJ AK AL AM M AN AO AP AQ AR AS AT P
  AU AV AW AX AY AZ BA BB BA BC BD BE BF BG BH BI BJ BK ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@13 x ~@3 x ~@12 x ~", C: "~@15 x ~@3 x ~@11 x", D: "~@9 x ~ x ~@4", E: "~ x ~@8 x ~ x ~@3",
  F: "~@2 x ~@8 x ~ x ~@2", G: "~@5 x ~@17 x ~@3 x ~@4", H: "~@8 x ~@17 x ~@4 x", I: "~@12 x ~@16 x ~@2",
  J: "~@2 x ~@11 x ~@16 x", K: "~@3 x ~@11 x ~@16", L: "x ~@4 x ~@11 x ~@14", M: "~@2 x ~@3 x ~@12 x ~@12",
  N: "~@4 x ~@3 x ~@12 x ~@10", O: "~@6 x ~@3 x ~@12 x ~@8", P: "~@2 x!2 ~@2 x ~", Q: "~@9 x ~@4 x ~@10 x ~@6",
  R: "~@10 x ~@3 x ~@12 x ~@4", S: "~@13 x ~@3 x ~@11 x ~@2", T: "~@14 x ~@4 x ~@10 x ~", U: "~@3 x ~@7 x ~@7 x ~@11 x",
  V: "~@11 x ~@20", W: "x ~@14 x ~@4 x ~@11", X: "x ~@16 x ~@3 x ~@10", Y: "~ x ~@7 x ~ x ~@4",
  Z: "~@3 x ~@14 x ~@4 x ~@8", AA: "~@3 x ~@15 x ~@3 x ~@7 x", AB: "~@7 x ~@9 x ~@7 x ~@6", AC: "~@3 x ~@7 x ~ x ~@2",
  AD: "~@2 x ~@8 x ~@7 x ~@6 x ~@5", AE: "~@7 x ~@14 x ~@4 x ~@4", AF: "~@2 x ~@8 x ~@7 x ~@8 x ~@3",
  AG: "~@7 x ~@15 x ~@3 x ~@4", AH: "~@3 x ~@20 x ~@3 x ~@3", AI: "~@8 x ~@18 x ~@3 x", AJ: "~ x ~@12 x ~@16 x",
  AK: "~@3 x ~@11 x ~@15 x", AL: "~@3 x ~@12 x ~@15", AM: "~ x ~@3 x ~@11 x ~@14", AN: "~@4 x ~@4 x ~@11 x ~@10",
  AO: "~@5 x ~@3 x ~@12 x ~@9", AP: "~@6 x ~@4 x ~@10 x ~@9", AQ: "~@7 x ~@3 x ~@12 x ~@7",
  AR: "~@4 x ~@7 x ~@10 x ~@8", AS: "~@7 x ~@2 x ~@12 x ~@8", AT: "~@7 x ~@4 x ~@11 x ~@7",
  AU: "~@9 x ~@4 x ~@11 x ~@5", AV: "~@10 x ~@4 x ~@11 x ~@4", AW: "~@11 x ~@4 x ~@11 x ~@3",
  AX: "~@12 x ~@3 x ~@12 x ~@2", AY: "~@14 x ~@4 x ~@11 x", AZ: "~@15 x ~@4 x ~@11", BA: "x ~@3 x!2 ~@2",
  BB: "x ~@10 x ~@9 x ~@10", BC: "x ~@11 x ~@8 x ~@10", BD: "~ x ~@11 x ~@3 x ~@3 x ~@6 x ~@3",
  BE: "~@5 x ~@7 x ~@8 x ~@9", BF: "~@2 x ~@14 x ~@4 x ~@7 x ~", BG: "~@6 x ~@7 x ~@6 x ~@10",
  BH: "~ x ~@7 x ~ x ~@3 x", BI: "~@3 x ~@3 x ~@3 x ~@4", BJ: "~ x ~@14 x ~@3 x ~@6 x ~@4", BK: "~@3 x ~@16 x ~@11",
})).gain(0.26)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B C D E F G H I J K L M N O P Q R S T B U C V W X Y Z AA AB AC AB AD AE AF I AG AH@2 AI AJ M AK AL@2 AK AL O AM AN
  AO@2 S B AG B AP AQ AR AS AR AT AU AV AW AX ~@2
>`.pickRestart({
  A: "~@4 x ~@20 x ~@6", B: "~@7 x ~@19 x ~@4", C: "~@9 x ~@19 x ~@2", D: "~@5 x ~@10", E: "x ~@12 x ~@18",
  F: "~ x ~@12 x ~@17", G: "~@3 x ~@13 x ~@14", H: "~@3 x ~@6 x ~@5", I: "~@9 x ~@12 x ~@9", J: "~@11 x ~@12 x ~@7",
  K: "~@13 x ~@12 x ~@5", L: "~@14 x ~@12 x ~@4", M: "~@17 x ~@12 x ~", N: "~@18 x ~@12 x", O: "~@5 x ~@2",
  P: "~ x ~@19 x ~@10", Q: "~ x ~@21 x ~@8", R: "~@3 x ~@21 x ~@6", S: "~@3 x ~@9 x ~@2", T: "~@7 x ~@14 x ~@9",
  U: "~@8 x ~@18 x ~@4", V: "~@5 x ~@9 x", W: "~@11 x ~@19 x", X: "~@11 x ~@16 x ~@3", Y: "~@6 x ~@8 x",
  Z: "~ x!2 ~@4 x ~@7 x", AA: "~@14 x ~@16 x", AB: "~@3 x ~ x ~@9 x ~@15 x", AC: "~@15 x ~@15 x", AD: "~ x",
  AE: "x ~@16 x ~@14", AF: "~@7 x ~@12 x ~@11", AG: "~@10 x ~@12 x ~@8", AH: "~@12 x ~@12 x ~@6", AI: "~@7 x ~@6 x ~",
  AJ: "~@17 x ~@11 x ~@2", AK: "~@9 x ~@5 x", AL: "~@19 x ~@11 x", AM: "x ~@20 x ~@10", AN: "~ x ~@9 x ~@4",
  AO: "~ x ~@4 x ~", AP: "~ x ~ x", AQ: "~@2 x ~@4 x", AR: "~@9 x ~@15 x ~@6", AS: "~@9 x ~@15 x ~@3 x ~ x",
  AT: "~@10 x ~@14 x!2 ~@2 x!3", AU: "x ~@8 x ~@15 x!2 ~@5", AV: "~@10 x ~@14 x!2 ~@2 x ~ x", AW: "~@9 x ~@13 x ~@8",
  AX: "~@7 x ~@17 x ~@6",
})).gain(0.26)

stack(acoustic_guitar_steel, bass, kick, snare)

More by The Smashing Pumpkins