Strudelify

Sweet Surrender

Sarah McLachlan

KeyE majorTempo117 bpm
0:00/0:00
// Sweet Surrender — Sarah McLachlan
// 117 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(117/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
const piano = note(`<
  A@2 B C D E F@2 G H@2 I J K L@2 M@2 N O P Q@2 R S@4 T U@2 V D E F@2 G H@2 I J K L@2 M@2 N O P Q@2 R S@4 T W X@7 Y@5
  Z@8 AA AB@3 AC@6 AD@8 T W AE@8 AF
>`.pickRestart({
  A: "[f#4@2 f#4@3 ~ f#4@2 f#4@3 ~ f#4@2 f#4@4 f#4@2 f#4@3 ~ f#4@2 f#4@3 ~ f#4@2]/2",
  B: "f#4@3 ~ f#4@2 f#4@4 f#4@2 f#4@3 ~", C: "[f#4,f#5]@2 [f#4,f#5]@3 ~ f#4@2 [b3,b4]@2 [c#4,c#5]@2 [c#4,c#5]@3 ~",
  D: "[f#3,c#4]@2 f#3@2 f#3@2 f#3@4 c#3@3 ~ a2@2, [f#4,a4,c#5]@13 ~@3", // F#5 F#m
  E: "f#3!3 b3!2 [c#3,c#4] c#4 a2, [f#4,a4,c#5]@5 ~ f#3@4 ~@6", // C# F#m
  F: "[[f#3,c#4,e4,a4,c#5]@2 [a3,a4]@2 f#3@2 ~@2 f#3@2 b2@2 [a3,a4]@2 a2@2 a2@2 a2@2 a2@3 ~ e2@2 f#2@2 a2@2 f#2@2, ~@6 [a3,d4,e4,a4]@5 ~@3 [c#4,e4,a4]@8 ~@2 [e4,a4,b4]@6 ~@2, ~@14 a3@5 ~@13]/2", // F#m7 A Asus4 A Esus4
  G: "e2@2 [e2,e4,g#4,b4,e5]@2 [e2,e4,g#4,b4,e5]@3 ~ [e2,e4,b4]@2 [b2,d4,b4]@3 ~ [e2,c#4,c#5]@2", // E E5 Bm C#m
  H: "[[f#2,c#4,f#4,a4,c#5]@2 f#2@2 [f#2,b3]@3 ~ f#2@2 [a2,f#3,f#4]@2 [c#3,f#3,f#4]@2 a2@2 d3@2 d3@2 [c#4,c#5]@3 ~@3 b2@3 ~ a2@2, ~@4 [f#4,a4,b4]@6 ~@4 [b3,d4,a4,b4]@5 ~ d3@6 ~@6, ~@12 [a4,d5]@3 ~]/2", // F#m B5 D F#5 C# B7 Bm7 D5
  I: "d3@2 d3@2 ~@2 [f#3,f#4]@2 ~@2 b2@3 ~ [a2,d4,d5]@2, [e4,a4,c#5]@2 d3@3 ~@3, ~@8 [c#4,e4,a4,c#5]@5 ~@3", // F# D5 A
  J: "[f#3,c#4,e4,a4,c#5]@2 f#3@2 [f#3,a3]@2 f#3@4 c#3@3 ~ a2@2, ~@2 [c#4,e4,a4]@5 ~", // F#m7 F#m A
  K: "f#3@2 f#3@2 f#3@2 ~@4 c#3@3 ~ [a2,a3,a4]@2, [e4,a4,c#5]@3 f#3@2 ~@3, ~@8 [e4,a4,b4]@5 ~@3", // A Esus4
  L: "[[d3,f#4,a4,e5,f#5]@2 [f#4,f#5]@2 d3@2 ~@2 d3@2 b2@2 [e4,e5]@2 [a2,c#4]@2 [a2,c#4]@2 a2@2 a2@3 ~ e2@2 f#2@2 a2@2 [f#2,e4,e5]@2, ~@6 [e4,a4,d5,e5]@5 ~@3 [e4,a4,c#5]@8 ~@2 [e4,a4,b4]@5 ~@3]/2", // D F# E A F#7 Dsus2 A Esus4
  M: "[[e2,e4,g#4,b4,e5]@2 e2@2 [e2,e4,e5]@2 ~@2 e2@2 [b2,g#4,g#5]@3 ~ e2@2 f#2@2 [f#2,g#4,g#5]@2 f#2@2 ~@2 f#2@2 a2@2 c#3@2 [a2,c#4,c#5]@2, ~@6 [f#4,b4,e5,f#5]@4 ~@4 [a4,c#5,e5,a5]@4 ~@4 [e4,a4,c#5,e5]@7 ~@3]/2", // E F#sus2 A Esus2 A
  N: "[d3,b3,d4,e4,b4]@2 [d3,a3,a4]@2 [d3,a3]@3 ~ d3@2 b2@3 ~ a2@2, ~@2 [d4,e4,a4]@5 ~", // E7 D5 Dsus2
  O: "a2@2 a2@2 a2@3 ~ e2@2 f#2@2 a2@2 [f#2,e4]@2, [e4,a4,c#5]@6 ~@2 [e4,a4,b4]@5 ~@3", // F#7 A Esus4
  P: "e2@2 e2@2 e2@3 ~ [e2,e4,g#4,b4]@2 [b2,c#5]@2 ~@2 e2@2, b4@2 ~ c#5, [e4,g#4]@6 ~@4 [e4,g#4]@5 ~", // E Bsus2 E
  Q: "[f#2@2 f#2@2 f#2@3 ~ a2@2 a2@2 c#3@2 a2@2 d3@2 d3@2 [d3,b3,b4]@2 d4@2 d3@2 a2@3 ~ a2@2, [c#4,e4,a4]@10 ~@2 [c#4,e4,a4,c#5]@7 ~@3 [a3,e4,a4]@8 ~@2]/2", // G A A5
  R: "d3@2 d3@2 d3@3 ~ d3@2 a2@3 ~ a2@2, [a3,d4,e4]@3 ~ [a3,d4,e4]@3 ~", // Asus4
  S: "[[e3,b3,e4,f#4]@2 e3@2 e3@2 e3@2 e3@2 b2@3 ~ b2@2 d3@2 d3@2 d3@3 ~ a2@2 b2@2 d3@2 b2@2 [a2,c#4]@2 a2@2 a2@2 a2@2 a2@2 f#2@3 ~ e2@2 f#2@2 [f#2,f#4]@2 [f#2,g#4]@2 ~@2 b2@2 c#3@2 e3@2 c#3@2, ~@2 [b3,e4,g#4]@16 [e4,a4]@17 ~@29, ~@9 d4@6 ~@3 [c#4,e4,a4]@3 [c#4,e4,g#4]@4 ~@2 [a3,c#4,f#4]@4 ~]/4", // Esus2 A F# F#sus2 E A5 A C#m …
  T: "d3@2 d3@2 d3@2 a3 ~ d3@2 b2@3 e4 [d4,e5] d5, [d4,f#4,a4]@5 ~ a4@2 [a4,d5,f#5]@6 ~@2, ~@7 f#4@6 ~ a2@2", // Dsus2 D
  U: "[[e2,c#4,e4,g#4,c#5]@2 e2@2 e2@3 ~ b2@2 c#3@2 e3@2 c#3@2 a2@2 [a2,a3,a4]@2 [a2,a3]@3 ~ a2@2 f#2@3 ~ e2@2, ~ [b3,e4,g#4,b4]@8 ~ [c#4,e4,a4]@5 ~]/2", // C#m A E A
  V: "a2@2 a2@2 a2@3 ~ [a2,c#4,e4,a4,c#5]@2 e2@2 [f#2,d4,d5]@2 e2@2, [e4,a4,c#5]@3 ~@5", // A D A
  W: "[e2,c#4,e4,g#4,c#5]@2 e2@2 e2@3 ~ b2@2 c#3@2 e3@2 c#3@2, ~ [b3,e4,g#4,b4]@7", // C#m E
  X: "[f#3@2 [f#3,a3,a4]@2 f#3@3 ~ f#3@2 c#3@2 e3@2 c#3@2 f#3@2 f#3@2 f#3@3 ~ f#3@2 c#3@3 ~ a2@2 [e3,b3,e4,f#4]@2 e3@2 e3@2 e3@2 e3@2 b2@3 ~ b2@2 d3@2 d3@2 d3@3 ~ a2@2 b2@2 d3@2 b2@2 [a2,c#4]@2 a2@2 a2@2 a2@2 a2@2 f#2@3 ~ e2@2 f#2@2 [f#2,f#4]@2 f#2@2 ~@2 b2@2 c#3@2 e3@2 c#3@2 [d3,d4,f#4,a4]@2 d3@2 [d3,a3,a4]@2 ~@2 d3@2 b2@3 ~ [e4,e5] [d4,d5], g#4@17 g#4@20 g#4@5 g#4@14, b3@12 a4@3 ~@10 [e4,a4]@9 ~@3 e4@18 a2, b4@8 [a4,c#5]@3 ~ b4@44, e4@2 [a3,c#4,e4,a4]@6 e4@4 e4@4 ~ [b3,e4]@8 d4@6 ~@3 [c#4,e4,a4]@3 c#4@4 ~@2 [a3,c#4,f#4]@4 ~@4 [f#4,a4,d5,f#5]@4 ~]/7", // F#m Esus2 A F# D D5 E D …
  Y: "[[e2,c#4,e4,g#4,c#5]@2 e2@2 e2@3 ~ b2@2 c#3@2 e3@2 c#3@2 a2@2 [a3,a4]@2 a2@3 ~ a2@2 e2@3 ~ e2@2 a2@3 ~ a2@2 a2@4 e2@2 [e2,f#3,f#4]@2 [e2,f#3,f#4]@2 [b2,d4,f#4]@2 [b2,c#4,c#5]@2 [b2,b3,b4]@2 ~@2 b2@2 f#2@3 ~ f#2@2 b2@2 b2@2 b2@3 ~ b2@2 f#2@2 [e3,e4]@2 [f#2,e3,e4]@2, ~ g#4@39, ~ [b3,b4]@23 [b3,b4]@2 ~ [b3,d4,f#4]@5 [b3,d4,f#4]@5 ~@3, ~ e4@9 e4@6 e4@22 ~@2, ~@10 [a3,c#4,a4]@5 ~ [a4,c#5]@5 ~@6 b4@13]/5", // C#m A Esus2 Bm Bsus2 B E F#7 …
  Z: "[e2@2 [e2,c#4,c#5]@2 e2@2 ~@2 e2@2 b2@3 ~ b2@2 e2@2 e2@2 e2@3 ~ b2@2 c#3@2 e3@2 c#3@2 a2@2 a2@2 a2@3 ~ [a2,c#4,a4,c#5]@2 e3@2 [c#4,c#5]@2 e3@2 a2@2 a2@2 [a2,b3,b4]@2 ~@2 a2@2 e3@2 ~@2 a2@2 d3@2 d3@2 d3@3 ~ d3@2 a2@3 ~ a2@2 d3@2 d3@2 d3@3 ~ d3@2 [a2,f#3,f#4]@2 [c#4,c#5]@2 [d3,b3,b4]@2 [b2,d4,f#4]@2 [b2,a3,a4]@2 [b2,a3]@3 ~ b2@2 f#2@3 ~ e2@2 b2@2 b2@2 b2@2 ~@2 b2@2 c#3@2 e3@2 c#3@2, [b3,b4]@26 ~ [b3,c#4,b4]@3 [b3,b4]@17 ~ b4@14 b4@2, [e4,g#4]@3 [d4,e4,g#4,d5]@2 g#4@59, ~@10 e4@22 e4@8 e4@6 e4@8 e4@46 [d4,f#4,a4]@15 ~ e4@12, ~@10 [c#4,c#5]@19 ~@3 [c#4,a4]@6 ~@8 [c#4,a4,c#5]@5 ~@11 [a3,d4,f#4,a4]@24 ~@10 b3@22 [b3,d4,f#4]@5 ~@5]/8", // C#m A C# Asus2 D C# G Bm …
  AA: "e3@2 e3@2 e3@3 ~ e3@2 b2@3 ~ b2@2, e4, [b3,a4]@13 ~@3", // B7
  AB: "[e3@2 e3@2 e3@3 ~ b2@2 c#3@2 [e3,c#4,c#5]@2 c#3@2 [b2,d4,f#4]@2 [b2,a3,a4]@2 b2@2 ~@2 b2@2 f#2@3 ~ f#2@2 b2@2 b2@2 [b2,f#3,d4]@2 ~@2 b2@2 c#3@2 e3@2 c#3@2, [e4,g#4]@2 ~ [e4,g#4]@9, b3@3 ~ [c#4,e4,g#4,c#5]@2 ~@2 [b3,b4]@13 [b3,d4,f#4,b4]@3, ~@22 [d4,f#4,a4]@13 ~@13, ~@22 a3@5 ~@11 [a3,d4,f#4,a4]@4 ~@6]/3", // C#m Bm B7 Bm E C#m B Bm …
  AC: "[e3@2 e3@2 e3@3 ~ e3@2 b2@3 ~ b2@2 e3@2 e3@2 e3@3 ~ b2@2 [c#3,c#4,c#5]@2 [e3,c#4,c#5]@2 c#3@2 [f#4,a4,c#5]@21 ~ [b3,b4]@2 ~@2 [c#4,c#5]@2 [c#4,c#5]@3 ~ [c#4,f#4,a4,c#5]@2 [a3,a4]@3 ~ [a3,a4]@5 ~ [a3,a4]@2 ~@2 a2@13 ~@3, g#4, e4@13 e4@3, b4@24 [b3,b4]@8 c#4@3 ~@21 [b3,b4]@40, ~@32 f#3@29 ~@3 d3@13 ~ [a3,c#4,a4]@15 ~@3]/6", // C# C#m F#m B C# F#m A B …
  AD: "[~@2 [e4,e5]@2 [e4,e5]@3 ~ [d4,d5]@2 [d4,d5]@3 ~ [c#4,c#5]@2 [c#4,f#4,a4,c#5]@3 ~@7 [f#3,f#4]@2 [a3,a4]@2 ~@6 [c#4,c#5]@3 ~@5 [c#5,c#6]@3 ~ [d3,a3,d4,e4,a4,a5]@6 e4@2 b2@2 c#3@2 e3@2 c#3@2 [e3,b3,e4,f#4]@2 e3@2 e3@2 e3@2 e3@2 b2@3 ~ b2@2 d3@2 d3@2 d3@3 ~ a2@2 b2@2 d3@2 b2@2 [a2,c#4]@2 a2@2 a2@2 a2@2 a2@2 f#2@3 ~ e2@2 f#2@2 [f#2,f#4]@2 f#2@2 ~@2 b2@2 c#3@2 e3@2 c#3@2, g#4@33 g#4@20 g#4@5 g#4@6, b4@10 [b3,b4]@5 b4@49, e3@13 ~@3 f#3@10 ~@4 b3@26 [a3,d4]@6 ~@4 [b3,e4]@16 d4@12 ~@6 [c#4,e4,a4]@6 c#4@8 ~@4 [a3,c#4,f#4]@8 ~@2, ~@15 [e4,a4] d3@4 [a3,d4,e4]@4 ~@3 d5 e4@4 ~@9 [e4,a4]@9 ~@3 e4@11]/8", // E D C# F#m F# A C# Dsus2 …
  AE: "[f#3@2 [f#3,a3,a4]@2 [f#3,a3]@3 ~ f#3@2 c#3@2 [e3,c#5,c#6]@2 c#3@2 f#3@2 f#3@2 f#3@2 e4@2 f#3@2 c#3@3 ~ a2@2 [e3,b3,e4,f#4]@2 e3@2 e3@2 e3@2 e3@2 b2@3 ~ b2@2 d3@2 d3@2 d3@3 ~ a2@2 b2@2 d3@2 b2@2 [a2,c#4]@2 a2@2 a2@2 a2@2 a2@2 f#2@3 ~ e2@2 f#2@2 [f#2,f#4]@2 f#2@2 ~@2 b2@2 c#3@2 e3@2 c#3@2 [d3,d4,f#4,a4]@2 d3@2 [d3,a3,a4]@2 ~@2 d3@2 b2@3 ~ [e4,e5] [d4,d5] [e2,c#4,c#5]@2 e2@2 e2@3 ~ b2@2 c#3@2 e3@2 c#3@2, b4, g#4@17 g#4@20 g#4@5 g#4@22, e4@2 e4@6 [e4,a4,c#5,a5]@3 e5 a4@3 ~@10 e4@9 ~@3 e4@18 a2 ~@8, ~@2 [c#4,a4]@5 ~@5 e4@4 ~ [b3,e4]@8 [d4,a4]@6 ~@3 [c#4,e4,a4]@3 c#4@4 ~@2 [a3,c#4,f#4]@4 ~@4 [f#4,a4,d5,f#5]@4 ~ e4@8]/8", // F#m C#m Esus2 A F# D D5 E …
  AF: "~ [a3,a4] a4@5 ~, a2@13 ~@3, ~@4 a3@3 ~@9", // A
})).s("gm_piano").gain(0.31)

stack(piano)

More by Sarah McLachlan