Strudelify
KeyE majorTempo70 bpm
0:00/0:00
// I'm Not In Love — Eric Stewart & Graham Gouldman
// 70 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6302838; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 54 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano
const piano = note(`<
  A B C D E F G H I J K L M N O P Q R S T I J K L M N O P Q R S U V W V X V W V X I J K L M N O P Y J Z AA Z AA
>`.pickRestart({
  A: "[a3,b3,c#4,e4]@4 [a3,c#4]@3 ~@2 [a3,c#4]@3 ~ a3 ~ b2, b1@7 [a3,c#4,e4]@2 ~@5 [a3,c#4,e4]@2, ~@8 b2@4 b1@3 ~", // A
  B: "[b3,d#4,f#4]@4 [b3,d#4,f#4]@2 ~ [b3,d#4,f#4]@3 ~@3 [b3,d#4,f#4] ~ b1, b1@6 b2@4 b1@2 b2@3 ~, ~@11 [b3,d#4,f#4]@2 ~ b3@2", // B
  C: "[b1,a3,b3,c#4,e4]@4 [b2,a3,c#4]@3 ~@3 a3 ~ b1@2 a3 [b2,a3,c#4,e4], ~@7 [a3,c#4]@3 ~ [a3,c#4,e4]@3 ~@2, ~@2 b2 ~", // A F#m A
  D: "[f#3,b3,d#4,f#4]@4 [b3,d#4,f#4]@3 ~@2 b3!2 ~@2 b3 ~ b2, b1@7 [b3,d#4,f#4]@2 ~@2 [d#4,f#4]@2 ~ b3@2, ~@8 b2@4 b1@3 ~", // B D#m
  E: "[b1,a3,b3,c#4,e4]@4 [b2,a3,c#4]@2 ~ [a3,c#4,e4]@3 a3 ~@2 a3 b2 b1, ~@6 b2@5 [a3,c#4,e4]@2 ~ [a3,c#4]@2, ~@6 b1 ~", // A F#m A
  F: "[b3,d#4,f#4]@4 [b3,d#4,f#4]@2 ~@3 [b3,d#4,f#4]@2 ~@2 b3 ~ b1, b1@6 b2@2 b1@4 b2@3 ~, ~@7 b3@2 ~@2 b3@2 ~ [b3,d#4]@2", // B
  G: "[b1,a3,b3,c#4,e4]@4 [b2,a3,c#4]@2 ~ [a3,c#4,e4]@2 ~@2 b2 ~ a3 ~ b2, ~@6 b2@5 ~ b1@3 ~, ~@9 [a3,c#4]@4 ~ [a3,c#4,e4]@2", // A F#m A
  H: "[b3,d#4,f#4]@4 [b3,d#4,f#4]@2 ~@3 b3 b3@2 [c#2,c4,d#4,f#4]@4, b1@3 b2 b1@2 ~@2, ~@7 b3@2 ~@7", // B Cdim
  I: "a1@3 e2 a2@2 ~ [a3,c#4,e4], [a3,c#4,e4]@11 ~ a1@4", J: "a1@4 e2@3 a2@2 a2@3 a1@3 a1, [a3,c4,e4]@15 ~",
  K: "g#1@4 g#2@4 c2@4 g#2@3 g#2, [g#3,b3,e4] [g#3,c4,f#4]", // E G#7
  L: "[c#2,g#3,c#4,e4]@3 c#3 ~@2 [e4,g#4] ~@3 [e4,g#4] [d#4,f#4]@3 [b1,c#4,e4]@2, ~@4 c#3@3 [d#4,f#4]@3 ~@6, ~@4 b1@3 ~", // C#m E D#m C#m7 D#m
  M: "a1@4 a2@3 e3@5 a1@2 [a2,a3,c#4,e4]@2, [a3,c#4,e4]@11 ~@5", N: "a1@4 a2@4 a2@3 e3 a2@3 a1, [a3,c4,e4]@15 ~",
  O: "g#1@4 g#2@3 g#2 c2@4 c3@3 c2, [g#3,b3,e4] [g#3,c4,f#4]", // E G#7
  P: "[c#2,g#3,c#4,e4]@3 e3 c#3 e3@2 ~@2 g#3 c#4 ~@2 g#3 c#4 [b1,g#3], ~@7 [g#3,c#4]@2 ~@2 [g#3,c#4,e4]@2 ~@3, ~@8 b1@4 b2@3 ~", // C#m E C#5 C#m
  Q: "a1@2 a2 e3 a1@2 a2@2, [a3,c#4,e4] ~", // A
  R: "b1@4 ~@2 f#3 ~@2 f#3 b3@2 f#3@2 b1@2, [b3,d#4,f#4]@6 ~ b3@2 ~@7, ~ b2 b1 ~", // B
  S: "[e2,b3,e4,g#4]@3 ~ e2@2 [e2,e3,a3,c#4,e4]@6 ~ a3 ~ e2, ~@3 [g#3,b3,e4]@3 ~@6 [e2,e3]@2 c#4@2", // E A E
  T: "[e2,g3,b3,d4]@3 [e2,g3,b3,d4] ~@2 [e2,e3,a3,c#4]@5 e3 e4 c#4 a3@2", // Em7 A
  U: "[e2,g3,b3,d4]@3 [e2,g3,b3,d4] ~@2 [e2,e3,a3,c#4]@9 ~", V: "a2 g2 f#2 d2, [a3,c4,e4] [a3,c4,d4,f#4]",
  W: "g2 f#2 e2 d2, [g3,b3,d4] [g3,b3,e4]", X: "~@2 [d4,e4,f#4,a4]@3 [d4,e4,f#4,a4] ~@2 [e2,e4,g#4,b4]@8, e2 ~",
  Y: "a1@2 a2 e3 a1@2 a2@2, [a3,c#4,e4]@15 ~", // A
  Z: "[a3,b3,c#4,e4]@4 [a3,c#4]@3 ~@5 b1@3 b2, b1@7 [a3,c#4,e4]@2 [a3,c#4]@7, ~@2 b2 ~", // A
  AA: "[b3,d#4,f#4]@4 [b3,d#4,f#4]@2 ~@4 b1@2 b2@3 b1, b1@3 b2@2 ~@3, ~@7 [b3,d#4,f#4]@9", // B
})).s("gm_piano").gain(0.3)

stack(piano)