Strudelify
Cherry cover art

Aeroplane Flies High

Cherry

The Smashing Pumpkins

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, A@4 for four bars: 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 E S@2 T U@3 V@2 W@2 X@8 Y@4 Z@2 AA@2 AB@2 AC@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: "[~ a1@7 ~@2 a1@4 g1@15 ~@2 d1@3 ~ d1@6 ~@2 d1@3 ~ a1@14 ~@3]/2", T: "a1@3 ~ a1@7 ~ a1@4 ~ g1@15",
  U: "[~@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",
  V: "[~@5 a1@2 ~@2 a1@7 ~ a1@4 g1@15 ~@2 d1@3 ~ d1@3 ~ d1@3 ~@2 d1@4 ~ g1@7 ~]/2",
  W: "[~@10 a1@6 ~ a1@5 g1@15 ~ d1@2 ~ d1@3 ~@2 d1@2 ~@2 d1@4 a1@10]/2",
  X: "[~@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@14 ~@3 f1@2 ~ f1@6 ~@3 f1@4 ~]/8",
  Y: "[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@2 ~@2 a1@5 ~@2 a1@4 ~ g1@15 ~@2 f1@3 ~ f1@3 f1@3 ~ f1@4 ~]/4",
  Z: "[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",
  AA: "[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",
  AB: "[~ 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",
  AC: "[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 B S T U V W X Y Z AA AB AC AD AE AD AF AG I AH AI AJ AK M AL AM O AN AO AP AQ P Q
  AR AS AT AU AV V AW V AX AY AZ BA BB BC BD BE BF ~@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: "~@14 x ~@4 x ~@10 x ~", T: "~@3 x ~@7 x ~@7 x ~@11 x", U: "~@11 x ~@20",
  V: "x ~@3 x!2 ~@2", W: "x ~@16 x ~@3 x ~@10", X: "~ x ~@7 x ~ x ~@4", Y: "~@3 x ~@14 x ~@4 x ~@8",
  Z: "~@3 x ~@15 x ~@3 x ~@7 x", AA: "~@7 x ~@9 x ~@7 x ~@6", AB: "~@3 x ~@7 x ~ x ~@2",
  AC: "~@2 x ~@8 x ~@7 x ~@6 x ~@5", AD: "~@7 x ~@14 x ~@4 x ~@4", AE: "~@2 x ~@8 x ~@7 x ~@8 x ~@3",
  AF: "~@3 x ~@20 x ~@3 x ~@3", AG: "~@8 x ~@18 x ~@3 x", AH: "~ x ~@12 x ~@16 x", AI: "~@3 x ~@11 x ~@15 x",
  AJ: "~@3 x ~@12 x ~@15", AK: "~ x ~@3 x ~@11 x ~@14", AL: "~@4 x ~@4 x ~@11 x ~@10", AM: "~@5 x ~@3 x ~@12 x ~@9",
  AN: "~@7 x ~@3 x ~@12 x ~@7", AO: "~@4 x ~@7 x ~@10 x ~@8", AP: "~@7 x ~@2 x ~@12 x ~@8",
  AQ: "~@7 x ~@4 x ~@11 x ~@7", AR: "~@10 x ~@4 x ~@11 x ~@4", AS: "~@11 x ~@4 x ~@11 x ~@3",
  AT: "~@12 x ~@3 x ~@12 x ~@2", AU: "~@14 x ~@4 x ~@11 x", AV: "~@15 x ~@4 x ~@11", AW: "x ~@10 x ~@9 x ~@10",
  AX: "x ~@11 x ~@8 x ~@10", AY: "~ x ~@11 x ~@3 x ~@3 x ~@6 x ~@3", AZ: "~@5 x ~@7 x ~@8 x ~@9",
  BA: "~@2 x ~@14 x ~@4 x ~@7 x ~", BB: "~@6 x ~@7 x ~@6 x ~@10", BC: "~ x ~@7 x ~ x ~@3 x",
  BD: "~@3 x ~@3 x ~@3 x ~@4", BE: "~ x ~@14 x ~@3 x ~@6 x ~@4", BF: "~@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 A R S B@2 C T U V W X Y Z AA Z AB AC AD I AE AF@2 AG AH M AI AJ@2 AI AJ O P AK
  AL@2 R B AE B AM AN AO AP AO AQ AR AS AT AU ~@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 ~@9 x ~@2", S: "~@7 x ~@14 x ~@9", T: "~@5 x ~@9 x",
  U: "~@11 x ~@19 x", V: "~@11 x ~@16 x ~@3", W: "~@6 x ~@8 x", X: "~ x!2 ~@4 x ~@7 x", Y: "~@14 x ~@16 x",
  Z: "~@3 x ~ x ~@9 x ~@15 x", AA: "~@15 x ~@15 x", AB: "~ x", AC: "x ~@16 x ~@14", AD: "~@7 x ~@12 x ~@11",
  AE: "~@10 x ~@12 x ~@8", AF: "~@12 x ~@12 x ~@6", AG: "~@7 x ~@6 x ~", AH: "~@17 x ~@11 x ~@2", AI: "~@9 x ~@5 x",
  AJ: "~@19 x ~@11 x", AK: "~ x ~@9 x ~@4", AL: "~ x ~@4 x ~", AM: "~ x ~ x", AN: "~@2 x ~@4 x", AO: "~@9 x ~@15 x ~@6",
  AP: "~@9 x ~@15 x ~@3 x ~ x", AQ: "~@10 x ~@14 x!2 ~@2 x!3", AR: "x ~@8 x ~@15 x!2 ~@5",
  AS: "~@10 x ~@14 x!2 ~@2 x ~ x", AT: "~@9 x ~@13 x ~@8", AU: "~@7 x ~@17 x ~@6",
})).gain(0.26)

stack(acoustic_guitar_steel, bass, kick, snare)

More by The Smashing Pumpkins