Strudelify

Salut d'amour Op.12

Eward Elgar

KeyF♯ majorTempo96 bpm
0:00/0:00
// Salut d'amour Op.12 — Eward Elgar
// 96 bpm, 2/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/4880134; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 111 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(96/2)

// 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 G@2 H I@3 J@7 K@7 H I@3 L@6 M@4 N@6 O@2 P@6 Q@8 R@8 S T U@8 V W X@2 Y Z AA@7 AB@3 AC AD AE@2 AF AG@8 ~
>`.pickRestart({
  A: "[~ [b2,e3,b3,e4,g#4]@2 ~@2 [b2,e3,b3,e4,g#4]@2 [b2,e3,b3,e4,g#4], e2 e2, ~@3 [b2,e3,b3,e4,g#4]@2 ~@3]/2", // E
  B: "~ [b2,e3,b3,e4,g#4]@2 [b2,e3,b3,e4,g#4], e2", C: "~ [e3,b3,e4,b4]@2 [e3,b3,e4,b4], g#2",
  D: "~ [f#3,a3,e4,a4]@2 [f#3,a3,e4,a4], f#2", E: "~ [f#3,b3,d#4,a4]@2 [f#3,b3,d#4,a4], b2",
  F: "~@3 [g#3,f#4,g#4], [e2,e3] [d#2,d#3], ~ e4@3, ~ [g#3,g#4]@2 ~", // G#7 E D# G#
  G: "[~ [c#4,e4,g#4]@2 [b3,e4,g#4] ~ [b3,e4,f#4]@2 [a#3,e4,f#4], c#3, c#2 f#2]/2", // C#m E Bsus4 F#7
  H: "~@7 [b3,d#4,b4]@14 ~ [b3,d#4,a4]@2, b2@11 ~", // B B7
  I: "[~@11 [b3,e4,g#4]@12 [b3,e4,g#4]@6 ~@6 [b3,e4,b4]@12 [b3,e4,b4]@6 ~@13 [g#2,g#3]@6, ~@5 [e2,e3]@24 [g#2,g#3]@24 [a2,a3]@13 ~@6, ~@59 [c#4,e4,c#5]@13]/3", // E E5 G# E G# A C#m
  J: "[[c#4,f4,b4,c#5]@7 ~@22 [f#3,c#4,f#4,c#5,f#5]@7 ~@12 c#4@6 ~ a4@6 ~@20 [f#4,a4]@7 ~@36 e3@8 ~@8 b2@8 ~@7 [b2,e3,b3,e4,g#4]@13, ~@7 f#2@29 [b1,b2,g#4,e5]@25 a4@20 ~@14 e3@14 e3@15 ~@8 [d#3,b3,f#4,b4]@16 ~@20, ~@14 [a4,a5]@22 ~@12 [a3,f#4]@13 c#5@27 ~@80, ~@14 [f#3,c#4,c#5]@14 ~@14 [g#3,b3]@26 ~@6 [b2,g#4,b4]@13 ~ [e2,e4,g#4]@14 ~@46 e2@20, ~@21 [g#4,g#5]@14 ~ e4@12 c#5@7 [c#4,e4]@13 b3@13 b3@21 [c#4,e4,a4]@14 [c#4,g4,a#4]@16 ~@36]/7", // C#7 F#5 F#m E B A D F#5 …
  K: "[~ [b2,e3,b3,e4,g#4]@6 ~@7 [e3,b3,e4,b4]@13 [e3,b3,e4,b4]@7 ~@7 [f#3,a3,e4,a4]@13 [f#3,a3,e4,a4]@7 ~@6 [f#3,b3,d#4,a4]@13 ~ [f#3,b3,d#4,a4]@7 ~@20 [g#3,f#4,g#4]@6 ~@7 [c#4,e4,g#4]@13 [b3,e4,g#4]@7 ~@7 [b3,e4,f#4]@13 [a#3,e4,f#4]@7, ~@7 g#2@27 f#2@27 b2@27 [e2,e3]@13 [d#2,d#3]@13 c#2@27 f#2@27, ~@47 e4@10 ~@27, ~@94 [g#3,g#4]@13 ~@7 c#3@54]/7", // E E5 F#m7 B7 G#7 C#m E Bsus4 …
  L: "[[c#4,f4,b4,c#5]@7 ~@22 [f#3,c#4,f#4,c#5,f#5]@7 ~@12 c#4@6 ~ a4@6 ~@20 [b3,f#4,a4]@7 e3@7 ~@45 e3@4, ~@7 f#2@29 [b1,b2,g#4,e5]@25 a4@20 ~@63, ~@14 [a4,a5]@22 ~@12 [a3,f#4]@13 c#5@27 ~@56, ~@14 [f#3,c#4,c#5]@14 ~@14 [g#3,b3]@25 b3@13 ~@8 [b3,e4,g#4]@14 [b3,e4,g#4]@14 [c4,f#4,a4]@16 [c#4,g4,a#4]@12, ~@21 [g#4,g#5]@14 ~ e4@12 c#5@7 [c#4,e4]@13 ~@6 [b2,g#4,b4]@13 ~@8 e3@14 e3@15 e3@16 ~@4]/6", // C#7 F#5 B7 E A D F#5 G#m …
  M: "[~@4 [d4,g4]@6 ~ [b3,d4,g4]@12 [b3,d4,g4]@6 [a3,e4,g4,c5]@6 [a3,e4,g4,c5]@12 [a3,e4,g4,c5]@6 [a3,d4,f#4,c5]@6 [a3,d4,f#4]@12 [a3,d4,f#4]@6 [g3,d4,f#4,b4]@6 [g3,d4,f#4,b4]@12 [g3,d4,f#4,b4], ~@4 [d3,b4]@25 d3@24 d3@24 d3@19, ~@11 d5@19 ~@29 c5@18 ~@19]/4", // G5 G Am7 D7 D Gmaj7 G
  N: "[~@5 [g3,c4,e4]@6 [g3,c4,e4,a4]@12 [g3,c4,e4,a4]@6 [c4,a4]@6 [c4,d4,a4]@12 [c4,d4,a4]@6 ~@21 g4@7 [a3,c4]@8 ~@16 [f#3,a3,e4]@8 [d3,g3,b3,d4]@6 [g3,b3,b4]@13 [d#3,g3,b3,d#4,b4]@6 [g2,e3,g3,b3,e4,b4]@6, ~@5 [d3,b4]@24 [d3,g3,e4]@24 d3@27 ~ d3@32 ~@6 [d3,d4]@19 ~@6, ~@35 f#3@18 [b3,d4,a4]@14 [d2,a#3,c#4]@14 ~@8 [c4,f#4]@24 ~@31, ~@60 g4@14 ~@7 g4@16 d2@16 g2@25 ~@6, ~@89 a3@16 ~@39]/6", // C Am7 F D7 Am F#m7 G D#aug …
  O: "[[e3,g3,b3,e4,b4]@2 [e3,g3,b3,e4,b4] [e4,a4,c5,e5] [a3,c4,e4,a4,c5,e5]@2 [a3,c4,e4,a4,c5,e5] [b2,d#4,a4,b4,d#5], ~@3 [f#2,f#3]@4 ~]/2", // Em Am B7 F#
  P: "[~ [a3,b3,d#4,a4,b4,d#5]@13 [a3,b3,d#4,a4,b4,d#5]@7 ~ [e4,b4,e5]@8 [g3,b3,e4,b4,e5]@16 [g3,b3,e4,b4,e5]@8 ~ [e4,g4,c5,e5]@9 [g3,c4,e4,g4,c5,e5]@26 [a3,b3,d#4,a4,b4,d#5]@16 ~@18 [e4,g#4,c#5]@6 ~@6 [d#4,f#4]@6 a#4@2, ~@22 [b2,g4]@33 b2@51 b2@38, ~@53 [g#3,e5]@12 [a3,b4]@7, ~@28 [e4,g#4]@3 ~@5, ~@59 d#5@6 ~@7]/6", // B7 E5 Em C B7 C#m D#m Em …
  Q: "[~@4 [d#4,f#4,b4]@6 ~@18 g#4@6 ~@18 [b3,d#4,f#4]@6 ~@18 [c3,f#3,a3,e4,f#4]@6 ~@18 [f#3,a3,b3,f#4]@6 ~@20 [c#3,f#3,a3,c#4,f#4]@7 ~@24 [a3,b3,d#4,c#5]@8 ~@6 [g#3,b3,e4]@12 [g#3,b3,e4]@6 g#2@3, ~@10 b2@48 [f#2,a4]@24 ~@24 [f#2,a4]@27 [b1,e5]@32 [e2,b4]@24 ~@3, ~@10 [g#3,c#5]@24 a3@24 ~@6 [c3,f#3,a3,e4]@12 ~@6 [b2,a4]@24 ~@7 [c#3,f#3,a3,c#4]@13 ~@23 d#5@16 ~@27, ~@16 [c#4,e4]@12 [c#4,e4]@30 ~@30 [f#3,a3,b3]@12 ~@41 [a3,b3]@16 ~@35, ~@22 a4@12 f#4@6 [b3,d#4]@6 f4@12 ~@12 f4@12 ~@12 f4@12 ~@14 f4@14 ~@7 f#4@24 ~@27]/8", // B F#m7b5 B7 F#m B7 E F#m E5 …
  R: "[~@3 [e3,b3,e4]@12 [e3,b3,e4]@6 f#3@6 ~@12 [f#3,a3,e4,a4,a5]@6 ~@18 [a3,b3,f#4,f#5]@6 g#4@6 ~@12 [g#3,f#4,g#4]@6 ~@6 [g#3,e4,g#4]@12 [b3,e4,g#4]@6 ~ f#5 ~@16 [a#3,c#4,e5]@6 ~@22 [a3,b3,d#4,a4]@7 ~@6 [e3,b3,e4]@12 [e3,b3,e4]@4, ~@21 f#2@24 [b2,g#4,g#5]@24 [e2,g#5]@12 d#2@12 c#2@24 f#2@24 [b1,b2,d#5]@29 [e2,g#4]@22, ~@21 [a4,a5]@18 ~@18 [f4,f5]@12 ~@6 e4@18 ~@24 f#4@6 a#3@6 f#4@12 ~@15 b4@14 ~@22, ~@27 [f#3,a3,e4]@12 ~@12 [a3,b3,f#4,f#5]@12 ~@12 [g#3,g#4]@12 ~@36 e4@18 ~@7 [a3,b3,d#4]@14 ~@30, ~@33 c5@12 ~@74 f#5@23 ~@6 c#5@22 ~@22]/8", // E5 F#m7 B7 G#7 C#m E A#dim B7 …
  S: "~@2 [e3,b3,e4,b4]@3 [e3,c4,e4,c5], ~ g#2@11", T: "~@9 e4@6 [g#2,g#3,c#4]@7 [f4,c#5]@2, ~@2 [a2,a3,c#5]@13 ~@9",
  U: "[~@12 [c#4,f#4]@15 [c#4,f#4]@8 ~@6 [c4,e4,a4]@6 [c4,e4,a4]@6 [e4,a4]@6 [a3,e4,a4]@6 [a3,e4,a4]@6 [b3,d#4,f#4]@5 [a2,a3,b3,d#4,f#4]@6 ~@6 [b3,e4]@6 [b3,e4]@5 [b3,e4]@6 [b3,e4]@6 ~@11 [b3,e4]@6 [a3,c4,e4,a4]@5 [a3,c4,e4,a4]@6 [a3,c4,e4,a4]@5 [a3,e4,a4]@6 [a3,e4,a4]@5 [a3,e4,a4]@6 [b3,d#4,f#4]@6 [a1,a2,b3,d#4,f#4]@6 ~@7 [b3,e4]@6 [b3,e4,b4]@6, ~@4 [f#2,f#3,b4]@30 ~ [f#2,f#3]@36 b2@11 g#2@35 [g#1,g#2]@11 [f#1,f#2]@33 [b1,b2]@13 ~@18, ~@12 a4@23 ~@18 c4@18 ~@11 g#3@46 ~@45 [g#1,g#2]@19, ~@111 [b3,e4]@11 ~@22 c4@17 ~@31]/8", // F#5 Am A5 B B7 E5 Am A5 …
  V: "[b3,e4,g#4]@6 ~@7 e4@7 [g#1,g#2]@3 ~, ~@3 [c#2,c#3,g#3,c#4,f#4]@7 ~@2", // E G# C#sus4
  W: "~@2 [e3,e4]@3 ~@3 [a1,a2]@3 ~@3 [e3,a3,c#4]@3 ~@3 [g#1,g#2]@3 ~", // E A G#
  X: "[~ [f3,b3,c#4]@3 ~@8 [a3,c#4]@5 [c#4,f#4]@5 ~ [c#4,f#4,a4]@5 [c#2,c#3]@3 ~@2 [g#3,e4,g#4]@3 ~@3 [b1,b2]@3 ~@2 [g#3,c#4,g#4]@3 ~, ~@7 [f#1,f#2]@21 ~@20, ~@3 f#3@4 ~@5, ~@17 a3@11 ~@20]/2", // C#7 A F#5 F#m C# C#m B C#5 …
  Y: "~ [a#1,a#2,g3,c#4,g4]@23", Z: "~@3 [a1,a2,f#3,b3,f#4]@13 [g#1,g#2,e3,b3,e4]@8",
  AA: "[~@5 [f#1,f#2,d#3,a3,d#4]@15 ~@27 b3@9 [f#1,f#2,c#3,a3]@29 ~@16 [d#4,f#4]@16 ~@18 [e3,b3,g#5]@6 ~@18 [b3,e4,e5]@6 [f#3,a5]@3, ~@20 [f1,f2,d3,g#3,d4]@36 c#4@48 ~@15 g#5@16 ~@33, ~@85 [b1,b2,a3,g#4]@32 [e2,e4]@24 [g#2,f#5]@24 ~@3, ~@41 [e3,b3]@4 ~@4 [b3,e4,e5]@4 ~@3, ~@43 b4@4 ~@4 d#5@4 ~]/7", // D#dim F#m D#m E E5 F#m Ddim E …
  AB: "[~@17 [a3,e4]@6 ~@20 [a3,b3,f#5]@7 ~@18 [b2,e3,g#4]@4, ~@4 [a3,e4]@13 ~@6 [b2,a5]@26 ~ [e2,e5]@22, ~@10 a5@13 ~@7 f#4@20 ~ g#4@17 ~@4, ~@30 [a3,b3]@13 ~@13 [b2,e3]@12 ~@4, ~@37 g#5@13 ~@12 b3@10]/3", // A5 B7 E A5 B7 E Asus2 E5
  AC: "~@5 [e3,b3,e4], ~ [g#2,f#4]@11, ~@2 [e3,b3,e4]@3 ~, ~@7 d#4@5", // E5 G#7 E5
  AD: "~@2 a4, ~ f#2@11, ~ a4@7 ~@4, ~@9 [f#3,a3,e4]@14 ~", // F#m7
  AE: "[[f#3,a3,e4]@7 ~@26 [a3,b3,f#4]@9 [e2,g#3,e4]@6, ~@7 [b2,a4]@35 ~@6, ~@5 f#3@9 ~@2, ~@5 [a3,b3]@6 ~@5, ~@23 g#4@19 ~@6]/2", // F#m7 B7 E B7 Asus2
  AF: "[g#3,b3,e4]@2 [b3,e4] [b3,e4,g#4], ~ g#3", // E E5 E
  AG: "[[e4,g#4]@4 [g#4,b4]@2 [g#4,b4,e5]@8 ~@27 [e1,e3,g#3,e4]@23, b3@14 [b3,g#4]@8 [e2,e3,g#3,e4]@9 e2@16 ~@17, ~@6 e4@15 [e3,e4]@2 g#5@24 ~@49, ~@43 b4@37 b2@28 b2@84, ~@15 e5@16 [e3,g#3,e4]@10 ~@23]/8", // E G#m E
})).s("gm_piano").gain(0.12)

stack(piano)