Strudelify
The Lady cover art

1991 · Sandy

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 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 50 ms behind the beat; the grid follows it, so its parts stay together.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order, A@4 for four bars: edit a riff to change every repeat.

// other · piano
const piano = note(`<
  ~@12 A B@2 C@3 D@2 A E@2 F@2 G H@2 I J K ~ I L M@2 N O P@2 Q@2 R S N O T U V@2 W@2 G ~@3 X Y X Z@2 AA@3 X AB X Z@2
  AC@3 N O P@2 Q@2 R S N O T U V@2 W@2 G ~@15
>`.pickRestart({
  A: "~ e5!3", B: "[d5!3 c5@3 ~@2]/2", C: "[b4!3 a4@3 e5 d5@5]/3", D: "[d5!3 c5@5]/2", E: "[d5!3 c5@3 ~ e4]/2",
  F: "[b4@2 b4@2 b4@2 a4@6 e5@2 d5 c5]/2", G: "a4", H: "[b4!3 a4@5]/2", I: "~ d5!3", J: "d5!2 c5 d5", K: "e5@2 c5 a4@5",
  L: "d5@2 d5@2 c5@3 d5", M: "[e5@3 ~]/2", N: "~@3 e4 a4 b4 c#5 e5", O: "f5@4 ~@2 d5 e5",
  P: "[f5@2 f5@2 f5@2 g5 e5@5 ~@2 c5 d5]/2", Q: "[e5@2 e5@2 e5@2 f5 d5@5 ~@2 b4 c#5]/2", R: "d5@2 d5 f#5@4 e5",
  S: "c#5 b4 a4@2 ~@4", T: "f5@2 f5@2 a5@3 g5", U: "g5 e5@3 ~@2 c5 d5", V: "[e5@2 e5@2 e5@2 f5 d5@5 ~ b4!2 c#5]/2",
  W: "[d5@2 d5@2 d5@2 c#5 d5@3 c#5@2 a4@2 b4@2]/2", X: "~@2 c5@2 c5@2 a4 g4", Y: "c5@2 d5 e5@5",
  Z: "[c5@2 d5 e5@3 f5 e5@9]/2", AA: "[~@2 e5@2 d5@2 e5@4 d5@2 d5@2 e5 d5@5 ~@4]/3", AB: "c5@2 d5 e5@2 d5 c5@2",
  AC: "[~ d5 c5 e5@6 ~@3]/3",
})).s("gm_piano").gain(0.26)

// chords · piano
const piano_2 = note(`<
  A@2 B@2 A@2 B@2 C D E D F G@2 H@2 ~ I@2 F J@2 H@2 K L@3 M N O@2 P Q R S T U@2 V@2 W X S T Y Z AA@2 AB@2 A@2 B@2 AC@4
  AD@2 AE@2 AC@4 AD@2 Q AF S T U@2 V@2 W X S T Y Z AA@2 AB@2 A@2 B@2 A@2 B@2 AG@2 AH@2 AG@2 AH@2
>`.pickRestart({
  A: "[[a2,e3,g#3]@3 [d3,f3,a3,c4]@5]/2", B: "[[d3,f3,a3,c4]@3 [e3,g3,b3,d4]@4 ~]/2", C: "[a2,c4,e4]", D: "[a2,f#3]",
  E: "[a2,g3,c4]", F: "[c4,e4] [g4,a4,c5,e5]!3", G: "[[f#4,a4,b4,d5]!3 [e4,g4,a4,c5]@5]/2",
  H: "[[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [c4,f4]@10]/2", // G F5
  I: "[[d4,g4,b4,d5] ~ [d4,g4,b4,d5] ~ [d4,g4,b4,d5] ~ [c4,f4,a4,c5]@7 [g3,b3,d4]@3]/2", // G F G
  J: "[[f#4,a4,b4,d5]!3 [e4,g4,a4,c5]@4 e4]/2", K: "a4",
  L: "[[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [c4,f4,a4]@4 [a3,c4,f4]@2 [g3,c4,e4]@2 [g3,b3,d4]@4 [d4,b4,d5]@2 [d4,b4,d5]@2 [d4,b4,d5]@2]/3", // G F C G
  M: "[d4,b4,d5]!2 [d4,b4,c5] d5", N: "[e4,a4,e5]@2 c5 [a3,e4,a4]@5",
  O: "[[a3,c4] d4 ~ [c4,g4] ~ e4 c4 [g3,b3,d4]@3 [d4,b4,d5]@2 [d4,b4,d5]@2 [d4,b4,d5]@2]/2", // Am C5 G
  P: "[d4,b4,d5]@2 [d4,b4,d5]@2 [d4,b4,c5]@3 d5", Q: "[d4,f#4,a4] [d4,f#4]", R: "[d4,f#4]@3 ~",
  S: "[g#3,b3,c#4,e4]@3 e4 a4 b4 c#5 e5", T: "[f4,a4,c5,f5]@6 d5 e5", U: "[[f4,a4,c5]@7 [e4,g4,b4]@7 c5 d5]/2",
  V: "[[e4,g4,a4]@7 [d4,f#4,a4]@7 b4 c#5]/2", W: "[d4,f#4,a4]", X: "[c#4,e4] [a3,c4,f4]", Y: "[f4,a4,c5]", Z: "[g4,b4]",
  AA: "[[e4,g4,a4]@7 [d4,f#4,a4]@6 b4!2 c#5]/2", AB: "[[d4,f#4,a4]@7 [d4,f#4,a4]@5 [d4,f#4]@4]/2",
  AC: "[[d3,f3,a3,c4]@13 [e3,g3,b3,d4]@3]/2", AD: "[e3,g3,c4]/2", AE: "[[a3,b3]@7 ~]/2", AF: "[d4,f#4,a4] [e4,g#4,b4]",
  AG: "[[a2,e3,g#3,b3]@3 [d3,f3,a3,c4]@5]/2", AH: "[[d3,f3,a3,c4]@3 [e3,g3,b3]@5]/2",
})).s("gm_piano").gain(0.26)

stack(piano, piano_2)