Strudelify

What I Did For Love (Instrumental)

Edward Kleban

KeyC majorTempo86 bpm
0:00/0:00
// What I Did For Love (Instrumental) — Edward Kleban
// 86 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 47 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/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 · fretless bass · "FRETLESS"
const bass = note("<~@13 A B C D E F@2 G H I J K L M N O P Q@2 R S T U V W X Y Z AA AB AC AD@2 ~>".pickRestart({
  A: "c2@7 b1", B: "a1@6 ~ e1 a1 ~ a1@4 e1@2", C: "d1@8 a1@6 d2 e2", D: "f2@2 g#1 f1", E: "c2@6 c2 ~ b1@6 b1 ~",
  F: "[d2@30 g2 f#2]/2", G: "f2@14 f2 e2", H: "d2@7 f2", I: "g2@3 g2 f2@3 f2", J: "e2@4 f1@2 g1@2 a1@5 ~ a1@2",
  K: "g1@2 ~ g1 f1@2 ~ f1", L: "e1@2 g#1@2 a1@2 ~ a1", M: "g1@2 ~ g1 f#1@2 ~ f#1", N: "b1@2 d#2@2 e2@2 ~ e2",
  O: "d2@3 ~@3 d2@2 a1@4 ~@2 a1@2", P: "a1@2 c#2@2 d2@2 ~ d2", Q: "[g1@6 d2@2 g2 ~@3 g1@12 c2@7 g1]/2",
  R: "c2 ~ c2@4 b1@2 a1@7 e1", S: "a1 e1 a1@4 e1@2 d1@7 a1", T: "d2 ~ d2@4 d2 e2 f2@6 f2 c2", U: "g#1@4 f1@4 c2@6 c2 ~",
  V: "b1@6 c2 b1 a1@6 a1 ~", W: "g1@6 g1 ~ f#1@6 f#1@2", X: "f#1@4 e2@2 d2 ~ f1 ~ f2@4 f1@2",
  Y: "e1 ~ e2@4 e1@2 d2@2 a1@2 f1@4", Z: "g1@4 g2 ~ g1@2 c2@6 c2@2", AA: "a#1@6 a#1@2 g#1 ~@7", AB: "~@4 c2@3 c2",
  AC: "a#1@3 a#1 g#1 ~@3", AD: "[~@5 g2 d2 g1@2 c2@19 ~@4]/2",
})).s("gm_fretless_bass").gain(0.22)

// chords · piano · "A.PIANO 1"
const piano = note("<A B C@2 D E F G@2 H I J K C@2 D E L M@2 N I O P@8 Q@2 R@3 S@3 T U@2 V@2 W@3>".pickRestart({
  A: "[d5,e5,g5] g4 [d5,e5,g5] g4 ~ g4 ~ g4, c3@2 [c5,e5,g5]!2", B: "[f4,a4,c5,d5]@3 ~, g2@15 ~",
  C: "[~@11 a4 ~@2 [d5,f5] c#5, [d5,e5,g5]@4 [d5,e5,g5]@4 [c5,e5,g5]@4 [c5,e5,g5]@4 [d5,e5,g5,a5]@4 [d5,e5,a5]@4 [c#5,e5,a5]@4 ~@2 e5 ~, ~ g4@2 g4@2 g4@2 g4@2 a4@2 ~@2 a4@2 ~]/2", // Dm Em7 C Dsus4 Dsus2 A
  D: "~@15 e3, [a4,e5,f5] [f4,a4,d5] [d4,f4,c5] [c4,a4], ~ d4@2 a3@2 d3@2 [d3,f4]", // Fmaj7 Dm Dm7 F Dm
  E: "~@6 g4 f4, f3, [g#4,c5,e5] [g#4,c5,d5] [g#4,c5,f5] [g#4,c5], ~ f4@2 f4@2 f4@2 ~", // G#aug Dm7b5 Fm G#
  F: "~ c4 ~ c4 ~@3 g3, c3 b2, [e4,g4,c5]!2 [d4,g4,d5]!2, ~@5 g3@2 ~", G: "[[d3,d4,f#4,c5,e5,a5,c6]@7 ~]/2",
  H: "~@2 f4@2 ~@10 f3 e3, f3@13 ~@3, [g#4,c5,d5]!4, ~@3 f4@2 f4@2 ~", // Dm7b5
  I: "~ e4 ~@5 g#3, d3, [f4,g#4,c5]!4, ~@3 d4@2 c4@2 ~", // Fm
  J: "~@14 e3 d3, g2, g3@4 f3@3 ~, [g4,b4,d5] [a4,d5] [b4,d5] [b4,g5], ~ d4@2 g4@2 d4@2 [c4,d5,a5]", // G D5 Bm Em D7
  K: "[g2,b3,d5,g5,b5] ~", L: "~ c4 ~ c4 [d4,g4,d5] ~@2 g3, c3 b2, [e4,g4,c5]@2 [e4,g4,c5]@2 ~ g3@2 ~, ~@3 [d4,g4,d5]",
  M: "[[d3,d4,f#4,c5,e5,a5,c6]@28 ~@2 g3 f#3]/2", // D7
  N: "~@2 f4@2 [g#4,c5,d5]@2 f4@2 ~@6 f3 e3, f3@3 ~, [g#4,c5,d5] ~ [g#4,c5,d5]!2, ~@10 f4@5 ~", // Dm7b5
  O: "~@2 d4@2 ~@2 [g2,g3] ~@3 a4@2 a4 ~ b4@2, [g2,g3,g4,b4,d5] [g4,b4,d5] ~ d5, ~@6 d4@2 [f2,f3,g4,b4,d5]@5 ~ f2 ~", // G G7
  P: "[~@8 [a4,b4,d5] [g#4,c5] ~@6 [f#4,a4,e5] [f#4,a4,d#5] ~@12 [b4,g5] ~, ~@8 [b4,c5,e5]@4 [b4,c5,e5]@4 [a4,c5,e5]@4 [a4,c5,e5]@4 [g4,a4,c5]@4 [f4,a4,c5]@4 ~@4 d5 ~@3 [b4,c5,e5]@4 [b4,c5,e5]@4 [a4,c5,e5]@4 [a4,c5,e5]@4 [b4,c5,e5]@4 [a4,c5,e5]@4 ~@10 b3@4 b3@4 b3@4 b3@4 e4@4 e4@4 e4@4 e4@4 c4@4 c4@4 g3@4 g3@4 ~@6, ~@5 e4@2 e4@2 e4@2 e4@2 c4@2 c4@2 ~@4 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 ~@3 [f#4,g4,b4]@2 [f#4,g4,b4]@2 [e4,g4,b4]@2 [e4,g4,b4]@2 [g4,b4,d5]@2 [g4,b4,d5]@2 [g4,a4,c#5]@2 [g4,a4,c#5]@2 [f4,g#4,c5]@2 [f4,g#4,c5]@2 [d4,g4,b4]@2 d4@6, ~@116 b3@7 ~@5, ~@29 g4 ~@2]/8", // Bm7 G# F#m7 D#dim Em Cmaj7 Am Am7 …
  Q: "[~@15 a4, ~@2 [d5,e5,g5]!2 [c5,e5,g5]!2 [d5,e5,g5,a5] [d5,e5,a5], ~@5 g4@2 g4@2 g4@2 g4@2 a4@2 ~]/2", // Em7 C Dsus4 Dsus2
  R: "[~@4 [d5,f5]@2 c#5@2 ~@15 e3 ~@12 g4@2 f4@2 ~@2 c4@2 ~@2 c4@2, [c#5,e5,a5]@4 ~@2 e5 ~@3 d4@4 a3@4 d3@4 [d3,f4]@2 f3@16 c3@8, ~ a4@2 ~ [a4,e5,f5]@2 [f4,a4,d5]@2 [d4,f4,c5]@2 [c4,a4]@2 [g#4,c5,e5]@2 [g#4,c5,d5]@2 [g#4,c5,f5]@2 [g#4,c5]@2 ~@4, ~@13 f4@2 f4@2 f4@2 ~ [e4,g4,c5]@2 [e4,g4,c5]@2]/3", // Dm A Dm Fmaj7 Dm Dm7 F G#aug …
  S: "[[d4,g4,d5]@2 ~@4 g3@2 ~@14 a3@2 ~@7 c5 [a4,c5]@4 ~@2 d5@2 ~@6 d4@2, b2 a2 g2 f#2@2 [f2,f3], ~@2 g3@4 ~@4 a3@4 a3@4 a3@4 ~@3 a3@3 [d4,e4]@2 [a4,b4]@2 e5@6 ~@10, ~@4 [d4,g4,d5]@4 [e4,a4,c5]@4 [e4,a4,c5]@4 [e4,a4,c5]@4 [e4,a4,c5]@4 [e4,a4,c5]@3 c4@4 d5@2 ~@9 c4@4 ~@2, ~@26 b3@3 [f#4,g#4]@3 ~@8 [f4,a4,c5]@4 [f4,a4,c5]@4]/3", // G5 Am F Dsus2 Asus2 G5 Am F#sus2 …
  T: "c4 ~@6 d4, [e2,e3]@2 [d2,d3,f4,a4,c5] [a2,f4,a4,c5], [g4,c5]@2 [c4,g4,c5]@2 ~ d4@2 ~, ~ g3@2 g3@2 ~@3", // E Dm7 F C5
  U: "[~@2 d4@2 ~@2 d4@2 ~@14 g3@2 [g#2,g#3,e4,g4] ~@7, [g2,g3]@2 c3@2 [a#2,a#3,c4,e4,g4] ~@3, [g4,b4,d5]!2 [c4,e4,g4]!2 ~ [c4,e4,g4] ~@2, ~@5 g3@2 g3@2 g3@2 ~@5]/2", // C G C7 G C
  V: "[~@8 [c4,g4]@2 ~@12 g3@2 [g#2,c4,e4,g4] ~@7, ~ c3 [a#2,a#3] ~, ~@8 e4 ~ g3@4 g3@4 g3@4 ~@10, ~@3 [c4,e4,g4] [c4,e4,g4]!2 ~@2]/2", // C5 C A# C
  W: "[~@9 g4@2 ~ g4@2 c5@2 d5@2 e5@2 ~ e5@2 a5@2 ~ e5 ~@2 g5@8 ~@11, ~@9 [c4,e4]@14 ~@5 [c5,d5]@9 ~@11, ~@3 c3@3 ~@10]/3", // C Csus2
})).s("gm_piano").gain(0.22).pan(0.4)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@22 A B C D@3 E F G H@4 I J K L M N O P Q R@2 ~>".pickRestart({
  A: "g2@8 g3@2 a3 ~ a3 ~ b3 ~", B: "b3 c4!2 d4 [d4,e4] [f4,g4] [a4,b4] [c5,d5] [a4,c5]@6 [c4,a4] [e4,b4]",
  C: "[a4,c5]@6 [c4,a4] [e4,b4] [a4,c5]@2 [b4,d5]@2 [c5,e5]@4", // Am F E5 Am Bm C
  D: "[[b4,e5]@4 [c5,e5]@8 [d5,e5]@2 [b4,e5] [c5,e5]@7 [a4,c5] [b4,d5] e5@2 f#5@2 e5@2 f#5@4 [b4,d#5]@2 [c5,e5]@2 a4@2 ~@6 g5 f#5, ~@12 c5@5 ~@2 f#5@4 ~, ~@5 b4]/3", // E5 C Dsus2 E5 C Am Bm B …
  E: "e5@6 f#5 e5 [g4,d5]@8, g4 ~", F: "[a4,c#5] [g#4,c5]", G: "[g4,b4]@9 ~@7",
  H: "[~@4 d4@4 c4@4 d4@4 c#4@2 [d4,f4] [c#4,e4] [d4,f4]@4 [c4,f4]@4 [c4,e4]@2 d4@2, ~ [e4,g4]@2 a4@2 a4@2 ~, ~@24 e4@12 ~@12 a3 ~@7 g#3@8]/4", // Dm C#m Dm F5 C Em
  I: "[g#3,c4] g#3 [c3,e3,g3]@2, f3 ~", J: "[d3,g3,d4]@8 c4@4 e4@2 a3 [b3,c4,d4,e4], ~ e3, ~@4 a3@3 ~",
  K: "b4@6 a4@2 [e4,a4,c5]@5 [g#4,b4] [a4,c5] [b4,d5], c4 ~, e4 ~@3, a4 ~@15", L: "[a4,c5,e5]@3 [a4,d5] [f4,a4,c5]@4",
  M: "[c4,g4,c5] [d4,f4,c5]", N: "[d4,g4,d5]@2 [c3,g3] [e3,c4]", O: "[c4,g4]@6 [e3,c4] ~ [c4,e4,g4] ~@7",
  P: "~@2 [c3,g3] [e3,c4]", Q: "[c4,g4]@2 [e3,c4] [g3,d4] [c4,e4] [g3,d4] [e3,c4] ~ [c4,g4] ~@7",
  R: "[~@9 [e3,g3,c4]@20 ~@3]/2", // C
})).s("gm_string_ensemble_1").gain(0.23).pan(0.1)

// chords · brass section · "BRASS 1" · C5 C C5 C C5 C C5 C …
const brass_section = note(`<
  ~@40
  [~@2 [c4,g4] [e4,c5]]
  [[c5,g5]@6 [e4,c5] ~ [c5,g5] ~@7]
  [~@2 [c4,g4] [e4,c5]]
  [[c5,g5]@2 [e4,c5] [g4,d5] [c5,e5] [g4,d5] [e4,c5] ~ [c5,g5] ~@7]
  ~@3
>`).s("gm_brass_section").gain(0.5)

// chords · pad new age · "FANTASIA"
const pad_new_age = note("<~@7 A B ~@3 C ~@5 A B D E F ~@20 G@2 H@2>".pickRestart({
  A: "~@8 d4 e4 f#4 a4 d5 e5 f#5 a5", B: "c6", C: "~ g4@3, ~@3 [b4,g5]@5 ~@8, ~@3 [a4,d5]@3 ~@10", D: "d5",
  E: "[g#4,c5]", F: "[g4,b4] ~",
  G: "[~@4 b5 ~@3, ~@8 f4@3 c5@3 g5@4 ~@14, ~@9 g4@3 d5@3 g#5@6 ~@11, ~@10 g#4@3 f5@5 ~@14]/2",
  H: "[~@2 e5@2 ~ e5@2 a5@3 e5 ~@2 g5@7 ~@12, ~@11 c5@7 ~@14, ~@6 d5 ~@9]/2",
})).s("gm_pad_new_age").gain(0.09).pan(0.7)

// chords · pad new age · "FANTASIA" · soft notes
const pad_new_age_soft = note("<~@20 A ~ B@2 ~@23>".pickRestart({
  A: "g#4", B: "[~ [g4,b4,d5]@2 ~]/2",
})).s("gm_pad_new_age").gain(0.04).pan(0.7)

// other · flute
const flute = note("<~@7 A B ~@4 C D E F G H I ~@11 J K ~ L M N ~@10>".pickRestart({
  A: "~@8 d4 e4 f#4 ~ d5 e5 f#5 a5", B: "c6@9 ~@7", C: "~@4 e5@2 d5@2 e5@7 [d5,e5]", D: "e5@9 ~@7, f5 ~@15",
  E: "~@4 e5 f5 e5 f5", F: "e5 d5 c5 g#4", G: "g4@7 [g4,a4] d5@8, ~@8 b4 ~@7", H: "c5@8 d4 e4 f#4 ~ d5 e5 f#5 a5",
  I: "d6!4 ~@12", J: "~@6 e5 d5", K: "e5@7 [d5,e5] e5@8, ~@8 f5 ~@7", L: "e5 f5 e5 f5 e5@2 d5@2",
  M: "c5@4 g#4@4 g4@7 [g4,a4]", N: "d5 ~, b4 ~@15",
})).s("gm_flute").gain(0.16).pan(0.4)

// other · flute · soft notes · Csus2 Bm
const flute_soft = note(`<
  ~@7
  [~@11 a4 ~@4]
  ~@10
  [~@11 a4 ~@4]
  [c6!4 [c6,d6]!2 [b5,c6,d6] [g#5,a5,a#5] g5 ~@7]
  ~@16
  [~ c5]
  ~@10
>`).s("gm_flute").gain(0.11).pan(0.4)

// other · fretless bass · "FRETLESS"
const fretless_bass = note("<~@26 A@2 B C D ~@5 E F G ~@8>".pickRestart({
  A: "[e3@8 e4@11 ~ d#4@4 f#4@8]/2", B: "e4 d4", C: "c#4 c4", D: "b3 ~", E: "~@3 e4", F: "b4@6 a4@2 c5@5 b4 c5 d5",
  G: "e5@3 ~@5",
})).s("gm_fretless_bass").gain(0.29).pan(0.2)

// other · brass section · "BRASS 1"
const brass_section_2 = note("<~@40 [~@3 c3] [a#2@6 a#2 ~ g#2 ~@7] [~@3 c3] [a#2@6 a#2 ~ g#2 ~@7] ~@3>")
  .s("gm_brass_section").gain(0.24).pan(0.7)

// chords · piano · "A.PIANO 2"
const piano_2 = note("<~@23 A ~ B ~ C D E F@2 ~@15>".pickRestart({
  A: "~ c5 [g4,c5] d5!2 [e5,f5,g5] [a5,b5] [c6,d6] c6@4 ~@4, e2 ~@3, b4 ~@7", // C5 Em Asus2 Csus2
  B: "~@3 g#4 ~@4 [e4,e5]@3 ~@5, ~ [e3,e4]@2 g#3@2 [d4,d5]@2 [g4,g5]@2 ~@7, ~ [f3,f4] [b3,b4] [f4,f5] ~@4", // E D G F B F
  C: "~@3 [c3,c4] ~@4 [b4,b5]@8, ~ [f#2,f#3]@2 ~@2 [g3,a3,b3,g4,a4,b4]@2 [d#4,e4,f#4,d#5,e5,f#5]@2 ~@7, ~ [a2,a3] [f#3,f#4] [c4,c5] ~@4", // C B F# G D#m A F# C
  D: "~ e3!2 f#3!2 ~@2 e4 d4@8, ~@5 g3@2 ~@9, ~@3 b3 ~@4", E: "c#4@8 ~ g#3!2 f3 ~ e3!2 d3, ~@4 c4 ~ f3 ~",
  F: "[d3@7 ~@5 b4@12 ~@8, ~@10 b5@2 c5 ~@19, ~@11 d5@4 ~@17, ~@11 [g5,a5]@2 ~@19]/2", // Gsus2
})).s("gm_piano").gain(0.19).pan(1)

// drums · kick
const kick = s("bd").struct("<~@9 A B C D A@5 E@2 A@4 E C@2 B F E B G E H E I A@2 E C J K G B L M ~>".pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "x ~@2 x!2 ~@2 x", D: "x", E: "x ~@3 x ~@2 x", F: "x ~@7 x ~@2 x ~@2 x ~",
  G: "~@4 x ~@2 x", H: "x ~@6 x!2 ~@2 x ~@4", I: "x ~@2 x ~@4 x ~@7", J: "x ~@5 x ~ x ~@2 x ~@2 x ~",
  K: "x ~@2 x ~@2 x ~ x ~@7", L: "~@9 x ~@6", M: "~@13 x ~@2",
})).gain(0.16)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@9 A ~@3 A@4 B A C ~ A ~@25>".pickRestart({
  A: "~@3 x ~@4", B: "~@3 x ~@3 x", C: "~@11 x ~@4",
})).gain(0.1)

// drums · snare
const snare = s("sd").struct("<~@13 A@6 B A@10 C B A@2 D A@6 C E C ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~@2", D: "~@4 x ~@6 x!2 ~@3", E: "~@2 x!2",
})).gain(0.18)

// drums · low tom
const low_tom = s("lt").struct("<~@23 A ~@6 B C ~@6 A ~@3 D ~ E ~@2>".pickRestart({
  A: "~@6 x!2 ~@8", B: "~@11 x!2 ~@3", C: "~@4 x!3 ~@9", D: "~@5 x!2 ~@9", E: "~@3 x ~@2 x!2 ~@8",
})).gain(0.14)

// drums · hihat
const hihat = s("hh").struct("<A B A@2 C D A E ~ A@3 B ~@6 F ~@27>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@6", C: "~@2 x ~@3 x!2", D: "~@2 x ~@2 x!2 ~", E: "~@3 x", F: "~ x!2 ~@5",
})).gain(0.12)

// drums · mid tom
const mid_tom = s("mt").struct("<~@31 [~ x ~@6] ~@9 [~@13 x ~ x] [~ x!2 ~@13] ~@4>").gain(0.18)

// drums · open hat
const open_hat = s("oh").struct("<~ A ~@3 B ~@2 C ~@3 A ~@6 D ~@27>".pickRestart({
  A: "~ x ~@2", B: "~@7 x", C: "~@3 x", D: "~@3 x ~@4",
})).gain(0.14)

// drums · high tom
const high_tom = s("ht").struct("<~@41 [~@5 x!2 ~] ~@5>").gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@7 A ~@14 B@2 ~ C ~ C ~@7 A B@5 ~ D E F G ~>".pickRestart({
  A: "~ x", B: "x!2", C: "~@3 x!2 ~@3", D: "~@2 x!2", E: "x ~ x!2 ~@4", F: "~@9 x ~@6", G: "~@13 x ~@2",
})).gain(0.18)

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

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@20 A B ~@3 C ~@5 C D@2 ~@4 C ~@8>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~@3 x ~@2", C: "~@5 x ~@2", D: "~@3 x ~@12",
})).gain(0.08)

stack(
  bass, piano, string_ensemble_1, brass_section, pad_new_age, pad_new_age_soft, flute, flute_soft, fretless_bass,
  brass_section_2, piano_2, kick, kick_soft, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride, ride_soft
)