Strudelify

Too Much of Heaven

Eiffel 65

KeyE♭ majorTempo180 bpm
0:00/0:00
// Too Much of Heaven — Eiffel 65
// 180 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 258 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/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 · piano · "'Europop'"
const piano = note(`<
  ~@16 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 A@2 D@2 ~@32 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 C@2 ~@52 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 ~@16 A@2 B@2 A@2 B@2
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2 ~@2
>`.pickRestart({
  A: "[[f2,f4]@2 f3 ab3 c4 f4@2 [bb1,d4]@2 ~@2 f3@2 bb3 d4 bb3, ~@2 f2@6 ~ bb2@2 ~@5, ~@5 bb1@3]/2", // F Bb
  B: "[[eb2,eb4]@2 c3 g3 c4 eb4@2 [ab1,c4]@2 ~@2 eb3@2 ab3 c4 ab3, ~@2 eb2@6 ~ ab2@2 ~@5, ~@5 ab1@3]/2", // Eb Ab
  C: "[[eb2,eb4]@2 c3 g3 c4 eb4@2 ab1@2 ~ ab1@6, ~ eb2@3 ~@4, ~@7 c4@8 ~]/2", // Eb
  D: "[[eb2,eb4]@2 c3 g3 c4 eb4@2 [ab1,c4]@2 ~@7, ~ eb2@3 ~@4]/2", // Eb Ab
})).s("gm_piano").gain(0.4)

// bass · fretless bass
const bass = note(`<
  ~@32 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@4 C@24 D E F@2 D E G@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 H@5 I J@2 K H I ~ C@16 D E F@2 D E G@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 ~@2
>`.pickRestart({
  A: "[f2@5 f2@2 bb1@9]/2", B: "[eb2@5 eb2@2 ab1@9]/2", C: "c2", D: "ab1", E: "bb1", F: "c2/2", G: "[c2@3 ~]/2",
  H: "f2", I: "g2", J: "eb2/2", K: "eb2",
})).s("gm_fretless_bass").gain(0.25)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@76 A@8 ~@16 B C D E B F G E B C D E B F G E B C D E B F G E B C D E B F G E ~@28 A@8 ~@16 B C D E B F G E B C D E B
  F G E B C D E B F G E B C D E B F G E B C D E B F G E B C D E B F G E B C D E B F G E ~@18
>`.pickRestart({
  A: "[ab2 bb2 c3@2 ab2 bb2 ~ c5, g5@7 ~, ~@12 c3@3 ~]/8", B: "f6", C: "bb5", D: "c6", E: "eb6", F: "g6", G: "d6",
})).s("gm_string_ensemble_1").gain(0.19).pan(0)

// other · recorder
const recorder = note("<~@48 A B C ~@81 A B C ~@120 D E F>".pickRestart({
  A: "f5@3 ~@5 f5@3 ~@5", B: "f4@3 f5@3 ~@10", C: "f5@3 ~@13", D: "~ g5 ~@4 g5 ~", E: "~@2 g5 ~@5", F: "g5 ~@4 g5 ~@2",
})).s("gm_recorder").gain(0.1).pan(1)

// bass · sitar
const bass_2 = note("<~@52 A@28 B C D@2 ~@48 E@5 F G@2 H E F ~ A@16 B C D@2 ~@94>".pickRestart({
  A: "c2", B: "ab1", C: "bb1", D: "c2/2", E: "f2", F: "g2", G: "eb2/2", H: "eb2",
})).s("gm_electric_bass_finger").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@32 A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B ~@8 A B A B A B A B A B A B A B A B ~@18
>`.pickRestart({
  A: "x", B: "x!2 ~@2",
})).gain(0.52)

// drums · snare
const snare = s("sd").struct("<~@32 A@16 ~@4 A@90 ~@2 A@72 ~@8 A@16 ~@18>".pickRestart({
  A: "~ x",
})).gain(0.52)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@32 A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@2 A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B ~@8 A B A B A B A B A B A B A B A B ~@18
>`.pickRestart({
  A: "x!3 ~", B: "x!4",
})).gain(0.52)

// drums · splash
const splash = s("cr").struct(`<
  ~@32 A ~@43 A ~@7 A ~@15 A ~@15 A ~@19 A ~@15 A ~@7 A ~@7 A ~@15 A ~@15 A ~@15 A ~@7 A ~@15 A ~@14 A ~@2
>`.pickRestart({
  A: "x",
})).gain(0.52)

// drums · shaker
const shaker = s("sh").struct("<~@32 A@16 ~@4 A@90 ~@2 A@72 ~@8 A@16 ~@18>".pickRestart({
  A: "x!4",
})).gain(0.52)

stack(piano, bass, string_ensemble_1, recorder, bass_2, kick, snare, ride_bell, splash, shaker)

More by Eiffel 65