Strudelify

The Lady

Sandy Denny

KeyA minorTempo100 bpm
0:00/0:00
// The Lady — Sandy Denny
// 100 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 104 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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.

// other · piano
const piano = note(`<
  ~@12 A B@2 C@6 D@2 E@2 F G@3 H I ~ J K L@2 M N O@2 P@2 Q R M N S T U@2 V@2 F ~@3 W X W Y@5 W Z W AA@5 M N O@2 P@2 Q R
  M N S T U@2 V@2 F ~@15
>`.pickRestart({
  A: "~@13 e5@12 e5@12 e5@11", B: "[~ d5@12 d5@12 d5@12 c5@36 ~@23]/2",
  C: "[~ b4@12 b4@12 b4@12 a4@36 e5@12 d5@60 d5@12 d5@12 d5@12 c5@60 ~@12 e5@12 e5@12 e5@11]/6",
  D: "[~ d5@12 d5@12 d5@12 c5@36 ~@12 e4@11]/2", E: "[~ b4@12 b4@12 b4@12 a4@36 e5@12 d5@6 c5@5]/2", F: "~ a4@47",
  G: "[~ b4@12 b4@12 b4@12 a4@60 ~@12 d5@12 d5@12 d5@11]/3", H: "~ d5@12 d5@12 c5@12 d5@11", I: "~ e5@12 c5@6 a4@29",
  J: "~@13 d5@12 d5@12 d5@11", K: "~ d5@12 d5@12 c5@18 d5@5", L: "[~ e5@72 ~@23]/2",
  M: "~@19 e4@6 a4@6 b4@6 c#5@6 e5@5", N: "~ f5@24 ~@12 d5@6 e5@5",
  O: "[~ f5@12 f5@12 f5@12 g5@6 e5@30 ~@12 c5@6 d5@5]/2", P: "[~ e5@12 e5@12 e5@12 f5@6 d5@30 ~@12 b4@6 c#5@5]/2",
  Q: "~ d5@12 d5@6 f#5@24 e5@5", R: "~ c#5@6 b4@6 a4@12 ~@23", S: "~ f5@12 f5@12 a5@18 g5@5",
  T: "~ g5@6 e5@18 ~@12 c5@6 d5@5", U: "[~ e5@12 e5@12 e5@12 f5@6 d5@30 ~@6 b4@6 b4@6 c#5@5]/2",
  V: "[~ d5@12 d5@12 d5@12 c#5@6 d5@18 c#5@12 a4@12 b4@11]/2", W: "~@13 c5@12 c5@12 a4@6 g4@5", X: "~ c5@12 d5@6 e5@29",
  Y: "[~ c5@12 d5@6 e5@18 f5@6 e5@54 ~@12 e5@12 d5@12 e5@24 d5@12 d5@12 e5@6 d5@30 ~@23]/5",
  Z: "~ c5@12 d5@6 e5@12 d5@6 c5@11", AA: "[~ c5@12 d5@6 e5@18 f5@6 e5@54 ~@12 d5@12 c5@12 e5@72 ~@35]/5",
})).s("gm_piano").gain(0.26)

// chords · piano
const piano_2 = note(`<
  A@2 B@2 C@4 D E F E G H@5 I@2 J K@2 L@3 M@3 N O P@2 Q R S T U V@2 W@2 X Y T Z AA AB AC@2 AD@2 AE@4 AF@4 AG@4 AH@2 AF@2
  AI@3 AJ T Z V@2 W@2 X Y T Z AA AB AC@2 AD@2 AE@8 AK@8
>`.pickRestart({
  A: "[~ [a2,e3,g#3]@36 [d3,f3,a3,c4]@59]/2", B: "[~ [d3,f3,a3,c4]@36 [e3,g3,b3,d4]@48 ~@11]/2",
  C: "[~ [a2,e3,g#3]@36 [d3,f3,a3,c4]@60 [d3,f3,a3,c4]@36 ~ e3@47 ~@11, ~@133 [g3,b3,d4]@48 ~@11]/4", // Amaj7 Dm7 G
  D: "~ [a2,c4,e4]@47", E: "~ [a2,f#3]@47", F: "~ [a2,g3,c4]@47",
  G: "~ [c4,e4]@12 [g4,a4,c5,e5]@12 ~ g4@11 ~ g4@10, ~@25 [a4,c5,e5]@12 [a4,c5,e5]@11", // C Am7 Am
  H: "[~@2 f#4@11 ~ f#4@11 ~ f#4@11 [e4,g4,a4,c5]@60 [d4,g4,b4]@6 ~@6 [d4,g4,b4]@6 ~@6 [d4,g4,b4]@6 ~@6 [c4,f4]@60 ~@47, ~ [a4,b4,d5]@12 [a4,b4,d5]@12 [a4,b4,d5]@12 ~@203]/5", // Am7 G F5 Bm7
  I: "[~ [d4,g4,b4,d5]@6 ~@6 [d4,g4,b4,d5]@6 ~@6 [d4,g4,b4,d5]@6 ~@6 [c4,f4,a4,c5]@42 [g3,b3,d4]@17]/2", // G F G
  J: "~ [c4,e4]@12 [g4,a4,c5,e5]@12 [g4,a4,c5,e5]@12 ~ g4@10, ~@37 [a4,c5,e5]@11", // C Am7 Am
  K: "[~@2 f#4@11 [f#4,a4,b4,d5]@12 ~ [f#4,a4]@11 ~ e4@47 e4@11, ~ [a4,b4,d5]@12 ~@12 [b4,d5]@12 [g4,a4,c5]@48 ~@11]/2", // Bm7 F#m Bm7 Bm Am7
  L: "[~ [d4,g4,b4]@6 ~@6 [d4,g4,b4]@6 ~@6 [d4,g4,b4]@6 ~@6 [c4,f4]@60 a4@47]/3", // G F5
  M: "[~ [d4,g4,b4]@6 ~@6 [d4,g4,b4]@6 ~@6 [d4,g4,b4]@6 ~@6 [c4,f4,a4]@24 [a3,c4,f4]@12 [g3,c4,e4]@12 [g3,b3,d4]@24 [d4,b4,d5]@12 [d4,b4,d5]@12 [d4,b4,d5]@11]/3", // G F C G
  N: "~@2 d4@11 [d4,b4,d5]@12 [d4,b4,c5]@12 d5@11, ~ [b4,d5]@12 ~@35", O: "~ [e4,a4,e5]@12 c5@6 [a3,e4,a4]@29",
  P: "[~ [a3,c4]@6 d4@6 ~@6 [c4,g4]@6 ~@6 e4@6 c4@6 [g3,b3,d4]@18 [d4,b4,d5]@12 [d4,b4,d5]@12 [d4,b4,d5]@11]/2", // Am C5 G
  Q: "~ [d4,b4,d5]@12 [d4,b4,d5]@12 [d4,b4,c5]@18 d5@5", R: "~ [d4,f#4,a4]@24 [d4,f#4]@23", S: "~ [d4,f#4]@36 ~@11",
  T: "~ [g#3,b3,c#4,e4]@18 e4@6 a4@6 b4@6 c#5@6 e5@5", U: "~@2 f4@35 d5@6 e5@5, ~ [a4,c5,f5]@36 ~@11",
  V: "[~ [f4,a4,c5]@42 [e4,g4,b4]@42 c5@6 d5@5]/2", W: "[~ [e4,g4,a4]@42 [d4,f#4,a4]@42 b4@6 c#5@5]/2",
  X: "~ [d4,f#4,a4]@47", Y: "~ [c#4,e4]@24 [a3,c4,f4]@23", Z: "~ [f4,a4,c5,f5]@36 d5@6 e5@5", AA: "~ [f4,a4,c5]@47",
  AB: "~ [g4,b4]@47", AC: "[~ [e4,g4,a4]@42 [d4,f#4,a4]@36 b4@6 b4@6 c#5@5]/2",
  AD: "[~ [d4,f#4,a4]@42 [d4,f#4,a4]@30 [d4,f#4]@23]/2", // D
  AE: "[~ [a2,e3,g#3]@36 [d3,f3,a3,c4]@60 [d3,f3,a3,c4]@36 [e3,g3,b3,d4]@48 ~@11]/4", // Amaj7 Dm7 Em7
  AF: "[~ [d3,f3,a3,c4]@78 [e3,g3,b3,d4]@17]/2", AG: "[~ [e3,g3,c4]@96 [a3,b3]@84 ~@11]/4",
  AH: "[~ [d3,f3,a3,c4]@78 ~ e3@16, ~@79 [g3,b3,d4]@17]/2", AI: "[~ [e3,g3,c4]@96 [d4,f#4,a4]@24 [d4,f#4]@23]/3",
  AJ: "~ [d4,f#4,a4]@24 [e4,g#4,b4]@23", // D E
  AK: "[~ [a2,e3,g#3,b3]@36 [d3,f3,a3,c4]@60 [d3,f3,a3,c4]@36 [e3,g3,b3]@60 ~ a2@35 [d3,f3,a3,c4]@60 [d3,f3,a3,c4]@36 [e3,g3,b3]@59, ~@193 [e3,g#3,b3]@36 ~@155]/8", // E Dm7 Em Dm7 Em E
})).s("gm_piano").gain(0.26)

stack(piano, piano_2)