Strudelify

Fools Fall In Love

Elvis Presley

KeyB♭ majorTempo120 bpm
0:00/0:00
// Fools Fall In Love — Elvis Presley
// 120 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): GUITSTRUMLO.
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.

// bass · electric bass finger · "BASS"
const bass = note(`<
  ~ A@2 B C D@2 E@4 C@2 F@2 E G A@2 B@4 F@2 E@2 C@2 F@2 E G A@2 B C D@2 E@4 C@2 F@2 E G A@2 B@4 F@2 E@2 C@2 F@2 E G A@2
  B C D@2 E G A@2 B C D@2 E H@2
>`.pickRestart({
  A: "g2 d3", B: "c3 g2", C: "eb2 bb2", D: "f2!2", E: "bb2 f2", F: "f2 c3", G: "bb2@2 a2 ab2",
  H: "[bb2 f2 bb1@4 ~@2]/2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@4 A B C D E F ~@14 G H I J@2 ~@2 K@2 ~@3 A B L@2 M N ~@14 G H I J@2 ~@2 K@2 ~@3 A B O@3 P@2 Q R B S@2 T@2
>`.pickRestart({
  A: "~@2 [d5,d6] [eb5,eb6]", B: "[f5,f6]@4 [eb5,eb6] [d5,d6]", C: "[f5,f6]!2",
  D: "[d5,d6] [d5,bb5,bb6] [c5,a5,a6] [bb4,g5,g6]", E: "[a4,f5,f6] [g4,eb5,eb6] [f4,d5,d6] [eb4,c5,c6]",
  F: "[d4,bb4,bb5]", // Gm
  G: "[d3,f6,a6] [eb3,e6,ab6] [e3,eb6,g6] [f3,d6,gb6] [gb3,db6,f6] [g3,c6,e6] [ab3,b5,eb6] [a3,bb5,d6] [bb3,a5,db6] [b3,ab5,c6] [c4,g5,b5] [db4,gb5,a5]", // Dm Emaj7 Em D Gbmaj7 C Abm Bbmaj7 …
  H: "[d4,f5,bb5]", I: "[c4,f5,a5]", J: "[bb3,eb5,g5]/2",
  K: "[~@3 [bb4,bb6]@3 [a4,a6]@3 [d4,d6]@2 f4@12 ~, ~@11 f6@11 ~@2]/2", // Bb A D
  L: "[[f5,f6]@6 [f5,f6]@5 [d5,d6]@4 [bb5,d6,bb6]@3 [a5,c6,a6]@3 [g5,bb5,g6]@3]/2", // F D Bb Am Gm
  M: "[f5,a5,f6] [eb5,g5,eb6] [d5,f5,d6] [c5,eb5,c6]", N: "[bb4,d5,bb5]",
  O: "[[f5,f6]@6 [f5,f6]@5 [d5,d6]@14 ~@2 [bb3,bb4,d5] [b3,b4,eb5] [c4,c5,e5] [db4,db5,f5] [d4,d5,gb5] [eb4,eb5,g5] [e4,e5,ab5] [f4,f5,a5] [gb4,gb5,bb5]]/3", // F D Bb B C Db D Eb …
  P: "[g4,g5,b5]/2", Q: "[g4,eb5,c6]", R: "[gb4,eb5,gb5]@4 [d5,d6] [eb5,eb6]",
  S: "[[f5,f6]@6 [f5,f6]@5 [d5,d6]@4 [bb4,bb5,d6]@3 [a4,a5,c6]@3 [g4,g5,bb5]@3]/2", // F D Bb Am Gm
  T: "[[f4,f5,a5] [eb4,eb5,g5] [bb3,d4,d5,f5]@4 ~@2]/2", // F Eb Bb
})).s("gm_string_ensemble_1").gain(0.29)

// other · acoustic guitar steel · "GUIT ARPEGIO"
const acoustic_guitar_steel = note(`<
  ~ A@2 B C D E D@3 F G@2 H@2 I D A@2 B@2 J@2 K@2 D F G@2 H@2 D@2 A@2 B C D E D@3 F G@2 H@2 I D A@2 B@2 J@2 K@2 D F G@2
  H@2 D@2 A@2 B C D E D@2 A@2 B C D E D L ~
>`.pickRestart({
  A: "~@2 g3 b3@2 d4@3 b3 g3@3", B: "~@2 c4 eb4@2 g4@3 eb4 c4@3", C: "~@2 eb4 gb4@2 bb4@3 gb4 eb4@3",
  D: "~@2 bb3 d4@2 f4@3 d4 bb3@3", E: "~@2 f3 a3@2 c4@3 a3 f3@3", F: "~@2 a3 d4@2 f4@3 d4 a3@3",
  G: "~@2 g3 bb3@2 eb4@3 bb3 g3@3", H: "~@2 a3 c4@2 f4@3 c4 a3@3", I: "~@2 bb3 d4@2 f4@3 d4 bb3@2 ~",
  J: "~@2 c4 e4@2 g4@3 e4 c4@3", K: "~@2 f4 a4@2 c5@3 a4 f4@3", L: "~@2 bb3 d4@2 ~ f4@3 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.22)

// chords · acoustic guitar steel · "GUITSTRUMHI"
const acoustic_guitar_steel_2 = note(`<
  A B C D E F G H@3 I J@2 K@2 H L C@2 M@2 N@2 K@2 H I J@2 K@2 H L C@2 D E F G H@3 I J@2 K@2 H L C@2 M@2 N@2 K@2 H I J@2
  K@2 H L C@2 D E F G H@2 C@2 D E F G H O@2
>`.pickRestart({
  A: "~ [bb2,bb3] [c3,a3] [db3,ab3]", B: "d3 [d4,g4,b4] ~ [d4,g4,b4], g3 d3", C: "~ [d4,g4,b4] ~ [d4,g4,b4], g3 d3",
  D: "~ [c4,eb4,g4] ~ [c4,eb4,g4], c3 g3", E: "~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4], eb3 bb2",
  F: "~ [d4,f4,bb4] ~ [d4,g4,bb4], f3!2", G: "~ [c4,f4,a4] ~ [c4,f4,a4], f3!2",
  H: "~ [d4,f4,bb4] ~ [d4,f4,bb4], bb2 f3", I: "~ [d4,f4,a4] ~ [d4,f4,a4], bb2 f3",
  J: "~ [eb4,g4,bb4] ~ [eb4,g4,bb4], eb3 bb2", K: "~ [c4,f4,a4] ~ [c4,f4,a4], f3 c3", L: "~ [d4,f4,bb4] a3 ab3, bb2 ~",
  M: "~ [eb4,g4,c5] ~ [eb4,g4,c5], c3 g3", N: "~ [e4,g4,c5] ~ [e4,g4,c5], c3 g3", O: "[bb2 f2 [bb2,bb3,d4,f4]@4 ~@2]/2",
})).s("gm_acoustic_guitar_steel").gain(0.17)

// chords · piano
const piano = note(`<
  ~ A@2 B C D E F G@2 H I@2 J@2 G K L M N@2 O P Q J G H I@2 J@2 G K M@2 N C D E G@2 F R S@2 T@2 F K U A B@2 V W X T G R
  S@2 T@2 F K A@2 B C D E F G A@2 B C D E F Y ~
>`.pickRestart({
  A: "~@2 g3 [b3,d4]@2 g3 ~@2 g3 [b3,d4]@2 g3, g2 d2", B: "~@2 g3 [c4,eb4]@2 g3 ~@2 g3 [c4,eb4]@2 g3, c2 g2",
  C: "~@2 bb3 [eb4,gb4]@2 bb3 ~@2 bb3 [eb4,gb4]@2 bb3, eb2 bb2", D: "~@2 f3 [bb3,d4]@2 f3 ~@2 f3 [bb3,d4]@2 f3, f2!2",
  E: "~@2 f3 [a3,c4]@2 f3 ~@2 f3 [a3,c4]@2 f3, f2!2", F: "~@2 f3 [bb3,d4]@2 f3 ~@2 f3 [bb3,d4]@2 f3, bb1 f2",
  G: "~@2 f3 [bb3,d4]@2 f3 ~@2 f3 [bb3,d4]@2 f3, bb2 f2", H: "~@2 f3 [a3,d4]@2 f3 ~@2 f3 [a3,d4]@2 f3, bb2 f2",
  I: "~@2 g3 [bb3,eb4]@2 g3 ~@2 g3 [bb3,eb4]@2 g3, eb2 bb2", J: "~@2 a3 [c4,f4]@2 a3 ~@2 a3 [c4,f4]@2 a3, f2 c3",
  K: "~@2 f3 [bb3,d4]@2 f3 ~@2 f3 [bb3,d4]@2 f3, bb2@2 a2 ab2", L: "~@3 [bb3,eb4] ~ g3 ~@2 g3 [b3,d4]@2 g3, g2 d3",
  M: "~@2 g3 [b3,d4]@2 g3 ~@2 g3 [b3,d4]@2 g3, g2 d3", N: "~@2 g3 [c4,eb4]@2 g3 ~@2 g3 [c4,eb4]@2 g3, c3 g2",
  O: "~@2 g3 [c4,e4]@2 g3 ~@2 g3 [c4,e4]@2 g3, c3 g2", P: "~@2 g3 [c4,e4]@2 g3 ~@2 g3 c4@2 g3, c3 g2, ~@3 e4",
  Q: "~@2 a3 c4@2 a3 ~@2 a3 [c4,f4]@2 a3, f2 c3, ~ f4 ~@2", R: "~@2 f3 [a3,d4]@2 f3 ~@2 f3 [a3,d4]@2 f3, bb1 f2",
  S: "~@2 g3 [bb3,eb4]@2 g3 ~@2 g3 [bb3,eb4]@2 g3, eb2 bb1", T: "~@2 a3 [c4,f4]@2 a3 ~@2 a3 [c4,f4]@2 a3, f2 c2",
  U: "~@3 [bb3,eb4] ~ g3 ~@2 g3 [b3,d4]@2 g3, g2 d2", V: "~@2 g3 [c4,e4]@2 g3 ~@2 g3 [c4,e4]@2 g3, c2 g2",
  W: "~@2 g3 [c4,e4]@2 g3 ~@2 g3 c4@2 g3, c2 g2, ~@3 e4", X: "~@2 a3 c4@2 a3 ~@2 a3 [c4,f4]@2 a3, f2 c2, ~ f4 ~@2",
  Y: "~@2 f3 [bb3,d4]@2 f3 ~@6, bb2 ~", // Bb
})).s("gm_piano").gain(0.17)

// other · electric guitar clean · "GUITAR SOLO"
const electric_guitar_clean = note("<~ A B C@2 D E F@2 ~@32 G@4 H@4 I J K@2 L M N@2 ~@25>".pickRestart({
  A: "[d3,d4]@2 [eb3,eb4] [f3,f4]", B: "[ab3,ab4]@2 g3@6 [f3,f4]@2 [e3,e4] [f3,f4], ~@2 g4@5 ~@5",
  C: "[[f4,f5]@6 [f4,f5]@2 ~ [e4,e5]@2 [eb4,eb5]@7 [bb3,bb4]@3 [c4,c5]@3]/2", D: "[d4,d5]@4 [c4,c5] [bb3,bb4]",
  E: "[d4,d5]!2", F: "[[bb3,bb4]@7 ~]/2",
  G: "[[bb3,bb4]@6 [c4,c5]@3 [d4,d5]@2 [a3,a4]@7 [bb3,bb4]@3 [c4,c5]@2 g4@3 g4@20 ~@2, ~@23 g3@2 ~ g3@19 ~@3]/4", // Bb C D A Bb C
  H: "[[a3,a4]@6 [bb3,bb4]@3 [c4,c5]@2 [g3,g4]@7 [a3,a4]@3 [g3,g4]@2 f4@22 ~@3, ~@23 f3@16 ~@9]/4", // A Bb C G A G
  I: "[d3,d4]@2 [eb3,eb4] f4, ~@9 f3@2 ~", J: "ab4@2 [g3,g4]@5 ~ [d3,d4] [db3,db4]@2 [d3,d4], ab3 ~@3",
  K: "[[f3,f4]@2 eb4@19 ~@3, ~@2 eb3@15 ~@7]/2", L: "[g3,g4]@2 [a3,a4] [bb3,bb4]",
  M: "d4@4 c4 [bb3,bb4], d5@7 ~ c5 ~@3", N: "[c5@5 ~, c4@19 ~@5]/2",
})).s("gm_electric_guitar_clean").gain(0.71)

// chords · acoustic guitar steel · "GUITSTRUMLO"
const acoustic_guitar_steel_3 = note("<~@5 A ~@31 A ~@31 A ~@7 A ~@4>".pickRestart({
  A: "~@3 f3",
})).s("gm_acoustic_guitar_steel").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!80 ~>").gain(0.31)

// drums · rim
const rim = s("rim").struct("<~ [~ x ~ x]!79 [~ x ~@2] ~>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!7
  [x ~ x!2 ~ x!2 ~ x!2 ~@2]
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!31
  [x ~ x!2 ~ x!2 ~ x!2 ~@2]
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!39
  [x ~ x!2 ~ x!2 ~@5]
  ~
>`).gain(0.27)

// drums · crash
const crash = s("cr").struct("<~@80 [~ x] ~>").gain(0.22)

stack(
  bass, string_ensemble_1, acoustic_guitar_steel, acoustic_guitar_steel_2, piano, electric_guitar_clean,
  acoustic_guitar_steel_3, kick, rim, hihat, crash
)

More by Elvis Presley