Strudelify
Aeroplane cover art

1995 · One Hot Minute

Aeroplane

Red Hot Chili Peppers

KeyF majorTempo99 bpm
0:00/0:00
// Aeroplane — Red Hot Chili Peppers
// 99 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(99/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 · electric guitar clean · "GUITAR 1"
const electric_guitar_clean = note(`<
  ~ A@4 B@5 C D C D C D C D C D C D E F E F E F E G H F E F E F E I C D C D C D C D C D C D E F E F E F E F E F E F E F
  E J C D C D C D C K ~@11 L C D C D C D C D M ~@7 N O N O N O N O N O N O N O N O P@3 Q@2
>`.pickRestart({
  A: "[~@16 f4@14 ~@2 e4@13 ~@3 a4@6 ~@6 bb3@3 g3, ~@14 f3@16 g3@15 ~ f3@17 ~, ~@15 [bb3,c4]@16 [bb3,c4]@14 ~@2 bb3@12 ~@5, ~@47 d4@9 ~@2 d4@6, ~@27 bb4@5]/4", // Bbsus2
  B: "[[c4,e4]@13 ~@15 bb3@2 ~@2 g4@13 ~@3 f4@14 ~@2 e4@15 ~, ~@14 bb3@11 ~ f4@5 [c4,e4]@14 ~@2 [bb3,c4]@15 ~@18, ~@15 d4@15 g3@15 ~ f3@16 ~ [g3,c4]@15 ~@2, ~@15 f4@6 ~ a4@9 ~@49, ~@16 bb4@15 ~@49]/5", // C Bbsus2 C5
  C: "[c4,f4,bb4]!16", D: "[c4,e4,bb4]!16", E: "[c5,f5,bb5] ~@2 [c5,f5,bb5] ~@4 [c5,f5,bb5] ~@2 [c5,f5,bb5] ~@4",
  F: "[c5,e5,bb5] ~@2 [c5,e5,bb5] ~@4 [c5,e5,bb5] ~@2 [c5,e5,bb5] ~@4", // C7
  G: "[c5,e5,bb5] ~@2 [c5,e5,bb5] ~@3 c4 [bb3,b3] [g3,ab3,a3] [e3,f3,gb3] [db3,d3,eb3] [c3,db3,d3] [eb3,e3,f3] [gb3,g3,ab3] [a3,bb3,b3]", // C7 Bmaj7
  H: "[c4,c5,f5,bb5] ~@2 [c5,f5,bb5] ~@4 [c5,f5,bb5] ~@2 [c5,f5,bb5] ~@4", // Fsus4
  I: "[c5,f5,bb5] ~@2 [c5,f5,bb5] ~@4 [c5,f5,bb5] ~@3 [e2,a2,d3,g3,b3,e4]@3 ~", // Fsus4 Em7
  J: "[c5,f5,bb5] ~@2 [c5,f5,bb5] ~@4 [c5,f5,bb5] ~@7", K: "[c4,e4,bb4]!13 ~@2 [c4,e4,bb4]",
  L: "~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~@2", M: "[c4,d4,f4,bb4] [eb4,e4,f4] [gb4,g4,ab4] [a4,bb4,b4] c5 ~@11",
  N: "[g2,b2,d3,f3] ~ [g2,b2,d3,f3] ~ [g2,b2,d3,f3] ~ [g2,b2,d3,f3] ~ [g2,b2,d3,f3] ~ [g2,b2,d3,f3] ~ [g2,b2,d3,f3] ~ [g2,b2,d3,f3] ~", // G7
  O: "[c3,e3]!2 [c3,e3,g3,bb3]@2 [c3,e3]!2 [c3,e3,g3,bb3]@2 [c3,e3]!2 [c3,e3,g3,bb3]@2 [c3,e3]!2 [c3,e3,g3,bb3]@2", // C C7 C C7 C C7 C C7
  P: "[[g2,b2,d3,f3]@12 [f4,g4]@10 ~@7 b3@2 b3 ~ f4 [b3,f4]!3 ~ b3 [b3,f4] [b3,d4,e4,f4,gb4] [f3,g3,a3,b3,c4,f4] [c3,d3,e3,b3,f4] ~@5, ~@3 [g3,d4]@7 ~@2, ~@12 b3@16 ~@4 [b3,f4]@2 ~@3 [b3,f4]@2 ~@9, ~@23 g4@17 ~@8, ~@13 f4@3 ~@8]/3", // G7 Fsus2 Bdim Bm F Bdim G5 Bdim
  Q: "[~@12 [f3,g3,b3]@3 [e3,g3,a3] [b2,c3,d3,e3,f3,gb3] [e2,f2,g2,a2] ~@14, ~@6 f4@3 ~@7]/2", // G7 A7 Bm Fmaj7
})).s("gm_electric_guitar_clean").gain(0.28)

// chords · electric guitar jazz · "GUITAR 2"
const electric_guitar_jazz = note("<~@74 A B A B A B A B A B A ~@38>".pickRestart({
  A: "[f3,bb3,f4]!9 [f3,d4,f4] [f3,bb3,d4]!6", B: "[f3,bb3,d4] [g3,c4,d4]!7 [f3,c4,d4] [g3,c4,d4]!7",
})).s("gm_electric_guitar_jazz").gain(0.16)

// bass · electric bass finger · "BASS 1"
const bass = note(`<
  ~@2 A B C D E F G H I J I K L M N O P Q P R ~@15 S I J I T L M U V W X Y Z ~@15 S I J I AA L M N AB AC AD AC AD AE AF
  AG AH AI AJ AC AK I J I AL L M N O AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB AU BC BD BE BF BG BH BB BI@4 ~
>`.pickRestart({
  A: "c4@7 c4", B: "~ g3@12 ~ c3@2", C: "f3@9 ~ g2@3 d2@3", D: "c2@7 ~", E: "c3@7 g3",
  F: "c4@6 g3@2 e4@2 g3 d4@2 g3 c4@2", G: "c4@7 g3", H: "c3@2 ~ c3!3 ~ c3!3 ~ c3@5", I: "g2@7 a1@3 bb1@6",
  J: "c2@7 e1@3 f1@4 ~@2", K: "c2@4 c2@2 d2!2 d2@2 eb2!2 eb2@2 f2!2", L: "f2@7 a1@3 bb1@6", M: "c2@7 e1@3 f1@6",
  N: "g1 a1 bb1 c2", O: "c2@6 c2 e1@3 f1@6", P: "g1@2 a1 a1@2 bb1 bb1@2 c2 c2@2 c2 c2@2 c2@2",
  Q: "c2 c2@2 d2 d2@2 eb2 eb2@2 e2 f2 g2 f2 eb2 c2 bb1", R: "c2 c2@2 d2 d2@2 eb2 eb2@2 c2 eb2 c2 f2 c2 g2 ~",
  S: "~@12 f2@3 ~", T: "c2@4 c2@2 d2!2 d2@2 eb2!2 db3@4", U: "g2 a2 bb2 c3", V: "c3!7 e1@3 f1@2 f1!3 gb1",
  W: "g1!3 a1!3 bb1!3 c2!3 c2@2 c2!2", X: "c2!3 d2!3 eb2!3 e2 f2 g2@2 f2 d2 f2", Y: "g2@3 a2@3 bb2@3 c3@3 c3@4",
  Z: "c3@3 d3@3 eb3@2 g3!8", AA: "c2@5 g2 bb2 g2 eb3!3 d3@3 c3@2", AB: "c2@7 e1@3 f1@2 g1 a1 bb1 c2",
  AC: "eb2 ~ eb2 ~@7 f2 ~ f2 ~@3", AD: "~@2 g2 ~@3 g2 ~@9", AE: "eb2 ~ eb2 ~@7 f2 ~ f3 ~@3",
  AF: "~@2 g2 ~@2 d3 f3 d3 g3@3 f3 g3 f3 d3@2", AG: "eb2 ~ eb2 ~@3 eb3 ~@3 f2 ~@3 f3 ~",
  AH: "~@2 g2 ~@2 d3 f3 ~@2 f3 d3 ~ g3 f3 d3@2", AI: "eb2 ~ eb2 ~@7 f2 ~@3 c3 ~",
  AJ: "~@2 g2 ~@2 d3 f3 d3 g3 ~@2 bb3 ~ g3 d3 ~", AK: "~@2 g2 ~@3 g2 ~@3 g2 ~@5",
  AL: "c2@3 g1 [ab1,a1] [bb1,b1,c2] [a1,bb1,b1] [g1,ab1] [gb2,g2] [eb2,e2,f2] [c2,db2,f2] [g1,b1,ab2,a2] [bb2,b2] ~@3, ~@3 c3", // Amaj7 Abmaj7 Gmaj7 Dbmaj7 Bmaj7
  AM: "g1@4 ~@2 bb2 b2 ~ f2 ~ d2 g2 f2 d2 ~", AN: "c2 ~@4 g1 bb1 g1 c2 bb1 g1@2 e1!2 f1 ~",
  AO: "g1@2 g1@2 f1@2 f1@2 ~@2 g1 [ab1,a1] [bb1,b1,c2,db2,d2,eb2] [e2,f2,gb2,g2] [b1,c2,db2,d2,eb2,e2] [ab1,a1,bb1]", // Amaj7
  AP: "c2!2 c2@2 bb1!2 bb1@2 ~ g1 c2 g1 db2 g1 d2 f1", AQ: "g1 ~ g2 ~@3 f2 ~@3 bb2 ~@2 db2@3",
  AR: "c2 ~@3 bb1 ~@3 c2 bb1 g1@2 e1!2 f1@2", AS: "g1 ~@4 d2 g2 d2 bb2 b2 g2 d2 e2 g1 d2 g1",
  AT: "c2 ~ c3 ~@7 [c2,db2,d2,eb2] [e2,f2,gb2,g2,ab2,a2] [a2,bb2,b2,c3] [eb2,e2,f2,gb2,g2,ab2] [c2,db2,d2] ~",
  AU: "g1 ~ g1@2 a1 ~ a1@2 bb1 ~ bb1@2 b1 ~ b1@2", AV: "c2 ~ c2@2 d2 ~ d2@2 eb2 ~ eb2@2 f2 ~ f2@2",
  AW: "g2 ~ g2@2 a2 ~ a2@2 bb2 ~ bb2@2 b2 ~ b2@2", AX: "c3 ~ c3@2 d3 ~ d3@2 eb3 ~ eb3@2 f3 ~ f3@2",
  AY: "g3@3 g3 f3@3 f3 eb3 ~ eb3@2 d3 ~ d3@2", AZ: "c3!2 c3@2 bb2!2 bb2@2 a2!2 a2@2 ab2!2 ab2@2",
  BA: "g2!2 g2@2 f2!2 f2@2 eb2!2 eb2@2 d2!2 d2@2", BB: "c2!2 c2@2 bb1!2 bb1@2 a1!2 a1@2 ab1!2 ab1@2",
  BC: "c2!2 c2@2 d2!2 d2@2 eb2!2 eb2@2 f2!2 f2@2", BD: "g2@3 g2 a2 ~ a2@2 bb2 ~ bb2@2 b2 ~ b2@2",
  BE: "c3!2 c3@2 d3 ~ d3@2 eb3 ~ eb3@2 f3 ~ f3@2", BF: "g3@3 g3 f3@3 f3 eb3@3 eb3 d3@3 d3",
  BG: "eb3 d3 c3@2 d3 c3 bb2@2 c3 bb2 a2@2 bb2 a2 ab2@2", BH: "g2 ~ g2@2 f2 ~ f2@2 eb2 ~ eb2@2 d2 ~ d2@2",
  BI: "[g1@8 [g1,ab1] [a1,bb1,b1] [c2,db2,d2] [eb2,e2,f2] g2@49 ~@3, ~@12 gb2 ~@51]/4", // Abmaj7
})).s("gm_electric_bass_finger").gain(0.75)

// bass · electric bass finger · "BASS 1" · soft notes
const bass_soft = note("<~@5 A B ~@2 C ~ D E ~@26 D E ~@26 D E ~@18 D E ~@34>".pickRestart({
  A: "~@14 [gb2,g2] [ab2,a2,bb2]", B: "b2 ~@15", C: "~@2 d3!2 ~ d3!3 ~ d3!2 ~@5", D: "~@14 [db2,d2] [eb2,e2,f2]",
  E: "gb2 ~@15",
})).s("gm_electric_bass_finger").gain(0.45)

// bass · slap bass 1 · "BASS 2"
const bass_2 = note("<~@22 A B@2 C D E F G A H A I J K A L ~@12 A B@2 M D N O P A B@2 Q R S T U ~@57>".pickRestart({
  A: "g1@3 g2 ~ g2 a1 ~ bb1 ~@2 g2 d3 g2 db2 ~",
  B: "[c2@2 c2 c3 ~ c3 d2 ~ eb2 ~@2 f2 ~ g2 ~@2 g1@3 g2 ~ g2 a1 ~ bb1 ~@2 g2 d3 g2 db2 ~, ~@15 g2@4 ~@13]/2",
  C: "c2@3 c3 ~@2 c2@2 d2 f2 ~ bb2 ~ c2!2 ~", D: "g1@2 g1 g2 ~ g2 a1 ~ bb1 ~@2 g2 d3 g2 db2 ~",
  E: "c2@2 c2 c3 ~@2 c2@2 d2 f2 ~ f2 ~ c2@3", F: "g1@2 g1 g2 ~ g2 a1 ~ bb1 ~@2 g1 ~ g2 db3@2, ~@6 d3 ~",
  G: "c2 ~ c2 c3 ~ c2 d2 ~ eb2 ~ eb3@2 d2@2 d3@2", H: "c2@2 ~ c3 ~ c2 d2 ~ eb2 ~@2 f2 ~ g2 ~ g2",
  I: "c2@2 ~ c3 ~@2 f1@2 ~ ab1 ~ bb1 ~ bb1@2 g1", J: "g1@2 g1 g2 ~ g2 a1 ~ bb1 ~@2 bb2 bb1 g1 b1 ~",
  K: "c2 ~@2 c3 ~ c3 d2 ~ eb2 ~@2 f2 ~ g2 ~ g2, ~ c2@2 ~@5", L: "~@3 c3@2 c3 d2 ~ eb2 e2 ~@6, c2@3 ~@5",
  M: "c2@2 c2 c3 ~ bb1 f1@2 f1 g1 bb1 g1 c2 e1 f1 gb1", N: "c2@2 c2 c3 ~@2 d2 ~ eb2 ~ g2 ~@2 g2 ~ g2",
  O: "g1@3 g2 ~ g2 a1 ~ bb1 ~@2 g2 d3 g2 db2@2", P: "c2@2 c2 c3 ~@3 c2@2 eb3 ~ bb1@2 ab2 ~@2",
  Q: "c2@2 c2 c3 ~@2 bb1@2 c2 eb2 ~ f2 g2 g1 bb1 c2", R: "g1@3 g2 ~ g1 a1 ~ bb1 ~@2 bb2 ~ bb2 bb1 ~",
  S: "c2@3 c3 ~ c2 c2@2 d2 f2 ~ c3 ~ db3 d3 ~", T: "g1@3 g2 ~ g1 a1 ~ bb1 ~@2 bb2 ~ bb2 bb1@2",
  U: "c2@3 c3 ~ c3 d2 ~ eb2 e2 ~@6",
})).s("gm_slap_bass_1").gain(0.66)

// other · melodic tom · "TOMS"
const melodic_tom = note("<~@120 [~@12 a4!3 ~] [~@2 e4 c4 ~@12] ~>").s("gm_melodic_tom").gain(0.61)

// drums · kick
const kick = s("bd").struct(`<
  ~@10 A@3 B A@2 C A C@3 D E@3 F E F E F E@3 F E@3 G A@3 H A@3 I C@3 D E@3 F E F E@5 F E@3 J A@3 H A@2 K A L M L M L M L
  M L M L N A@3 H A@2 O P Q R S R@4 T C@15 U V ~@2 W ~
>`.pickRestart({
  A: "x ~@6 x ~@2 x ~@5", B: "x ~@6 x ~@2 x!2 ~@4", C: "x!2", D: "x ~@7 x ~@2 x ~@2 x ~",
  E: "x ~@2 x ~@2 x ~ x ~@2 x ~@4", F: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", G: "x ~@2 x ~@4 x ~@2 x ~@4",
  H: "x ~@6 x ~@2 x!2 ~@3 x", I: "x ~@6 x ~@2 x ~@3 x ~", J: "x ~@2 x ~@4 x ~@7", K: "x ~@6 x!2 ~@7",
  L: "x!2 ~@3 x ~@2", M: "~ x!2 ~@3 x ~@3 x!2 ~@4", N: "~ x ~ x ~ x ~@2", O: "x ~@9 x ~@4 x",
  P: "x ~@2 x ~@2 x!2 ~@2 x ~@3 x ~", Q: "x ~@4 x ~@2", R: "x ~@2 x ~@6 x ~@5", S: "x ~ x!2 ~@6 x ~@5",
  T: "x ~@2 x ~@8 x ~@3", U: "x!2 ~ x ~ x ~@2", V: "x", W: "~@3 x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@10 A@3 B A@3 B A@3 C A@7 D A@7 B A@3 B A@3 B A@3 C A@15 E A@3 B A@5 B A B A B A B A B F G A@3 B A@5 H A H@2 A@2 I
  A@16 ~@2 J K ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x ~@3", C: "~@4 x ~@4 x ~@2 x!2 ~@2", D: "~@4 x ~@7 x!2 ~@2",
  E: "~@4 x ~@6 x!2 ~@3", F: "~@4 x ~@7 x ~@2 x", G: "x!2 ~ x", H: "~@4 x ~@2 x ~@4 x ~@3",
  I: "~@4 x ~@2 x ~@2 x ~@3 x ~", J: "~@8 x!4 ~@3 x", K: "x!2 ~@14",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@26 A ~@7 B@3 ~@37 C D C E C D F E C D G ~@14 H I ~@22>".pickRestart({
  A: "~@14 x!2", B: "~@15 x", C: "~@5 x ~ x ~@5 x ~ x", D: "~@5 x ~@7 x ~ x", E: "x ~@4 x ~@7 x ~ x",
  F: "~@5 x ~ x ~@7 x", G: "~@5 x ~ x ~@8", H: "~@6 x!6 ~ x!3", I: "x!2 ~ x ~@12",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C@7 D ~@8 E@3 F G H G H G H G H G@3 H G@3 I ~@12 G H G H G H G J G I K ~ K ~@11 G L@3 G L@3 M E@2 N ~@8 G@3 H G I
  O P Q B@15 ~@5
>`.pickRestart({
  A: "x!2", B: "x!4", C: "~ x ~ x", D: "~@2 x ~@3 x!2", E: "~ x ~ x ~ x ~ x", F: "~ x ~ x ~ x ~@2", G: "x!8",
  H: "x!7 ~", I: "x!3 ~@5", J: "x!6 ~ x", K: "x!2 ~@6", L: "x ~ x!6", M: "x ~ x!2 ~ x ~ x", N: "~ x!3", O: "~@2 x!6",
  P: "~@7 x", Q: "~@2 x!2",
})).gain(0.64)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@10 A ~ A ~ A ~ A@3 ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A@2 ~@12 A ~ A ~ A ~ A@2 ~@8 A ~@15 A ~@2 B ~
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.72)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@94 [x!16]!8 ~@21>").gain(2.43)

// drums · guiro
const guiro = s("guiro:0").struct("<~@22 [~ x ~@3 x ~@2]!16 ~@11 [~@10 x!6] [~ x ~@3 x ~@2]!16 ~@19 [~ x ~@14] ~@37>")
  .gain(6.76)

stack(
  electric_guitar_clean, electric_guitar_jazz, bass, bass_soft, bass_2, melodic_tom, kick, snare, snare_soft, hihat,
  open_hat, crash, cabasa, guiro
)

More by Red Hot Chili Peppers