Strudelify
Lady Madonna cover art

1

Lady Madonna

The Beatles

KeyC minorTempo110 bpm
0:00/0:00
// Lady Madonna — The Beatles
// 110 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 8 "HARMONICA MELOD" named as an organ, played on harmonica (its lead 8 bass lead patch is not one)
// note: Full arrangement: all 62 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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.

// bass · alto sax · "BASS"
const bass = note(`<
  ~@2 A@2 B C A@2 B D A@2 B E F G H I F G J K A@2 B D A@2 B D L G M N L G J K A@2 B D A@2 B D F G H I F G J K O@2 P Q
  R@2 S@2
>`.pickRestart({
  A: "c2@2 c2@2 d2 eb2 e2@2 f2@2 f2@2 ab2 a2 c3@2", B: "c2@2 c2@2 d2 eb2 e2@2 f2@2 f2@2 g2@2 g2@2",
  C: "ab2!2 bb2!2 c3@2 ~@2", D: "ab2!2 bb2!2 c3 ~@3", E: "ab2!2 bb2!2 c3!2 ~@2", F: "f2!2 eb2!2 d2!2 c2!2",
  G: "bb2!2 ab2!2 g2!2 f2!2", H: "eb2!2 d2!2 c2!2 bb2!2", I: "c2!2 d2!2 eb2!2 g2!2", J: "~ d2", K: "g2@4 ~@3 g4, ~ g2",
  L: "f2!2 eb2!2 d2!2 [c2,f4] [c2,g4]", M: "[eb2,eb4]!2 [d2,eb4] d2 c2!2 [bb2,c4] [bb2,eb4], ~@3 eb4@3 ~@2",
  N: "c2!2 d2!2 eb2 [eb2,g4] g2!2, ~@3 g4@2 ~ eb4@2", // Eb
  O: "[c2,c4]@2 c2@2 d2 eb2 e2@2 f2@2 f2@2 ab2 a2 c3@2, ~@2 c4@4 c4@4 c4@4 c4 ~", // C
  P: "[c2,c4]@2 c2@2 d2 eb2 e2@2 f2@2 f2@2 g2@2 [g2,c4]@2, ~ c4@2 c4@2 c4@2 ~", // C C5
  Q: "[ab2,c4]@2 ab2@2 [bb2,c4]@2 e4 c4 c3@2 [c2,e4]@2 ~ eb4 [c2,e4]@2, ~@2 c4 ~@3 bb2@2 ~@4 c2@2 ~@2", // Ab Bbsus2 C
  R: "[[d2,f4]@2 [d2,f4]@2 ~ e4 [d2,f4]@2 f4 gb4@3 [d2,f4]@2 [c2,e4]@10 [c2,e3]@2 [c3,e3]@2 ~ eb3 [c3,e3]@2, ~@2 d2 ~ eb2@2 ~@8 c2 ~]/2", // Dm C
  S: "[[d2,f3]@2 [c3,f3]@2 ~ e3 [c3,f3]@2 eb2@2 c3@2 [d2,f3]@2 [c2,e3]@18, ~@2 d2 ~ gb3@2 ~@10]/2", // Dm F5 Dm C
})).s("gm_electric_bass_finger").gain(0.2)

// bass · piano · "DRUM KICK"
const bass_2 = note("<~@2 A@23 B A@27 C A@3 B A@3 ~>".pickRestart({
  A: "c2 ~@5 c2 ~ c2 ~@5 c2 ~", B: "c2 ~@5 c2 ~ c2 ~@2 c2 ~@2 c2 ~", C: "c2 ~@5 c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
})).s("gm_piano").gain(0.51)

// other · harmonica · "HARMONICA MELOD"
const harmonica = note(`<
  ~@6 A B C D E F G H I@2 J K L@2 M N A O G P ~@4 Q R S T Q U V W X Y G Z X Y G AA AB@2 AC AD AE@2 V AF AG@3 AH ~@4
>`.pickRestart({
  A: "[d5,e5] ~ e5@4 e5 d5@3 c5@6", B: "d5@2 e5@2 d5@2 a4 c5@9, e5 ~@15",
  C: "[d5,e5] ~ e5@2 g5@2 ~ a5@3 g5@2 e5@2 c5@2, ~@3 e5 ~@4", D: "c5@2 c5@2 c5@2 ~ c5@6 ~@3, ~@3 e5 ~@4",
  E: "d5@2 e5@4 e5 d5@3 c5@4 ~@2, e5 ~@15", F: "d5@2 e5@2 d5@2 a4 c5@7 ~@2, e5 ~@15",
  G: "[d5,e5] ~ e5@2 g5@2 e5 a5@3 g5@2 e5@2 c5@2", H: "c5@2 c5@2 c5@2 ~ e5@3 c5@3 ~@3, ~@6 bb4@3 ~@7",
  I: "[f5@2 f5@2 f5@2 eb5 f5@2 ~ f5@2 f5@2 eb5 f5@4 ~ bb4@6 ~@6]/2", J: "eb5@2 eb5!2 ~@2 c5@2 eb5@2 eb5@2 f5@2 g5@2",
  K: "eb5@3 c5@5 ~@8", L: "[f5 ~ f5 f5@3 eb5@2 f5@2 f5@2 f5@2 eb5 f5@5 d5 bb4@2 ~@9]/2", M: "g5@6 ~@2 f5@3 ~ d5@4",
  N: "g5 ~@7", O: "[d5,e5] ~ e5@2 d5@2 a4 c5@9", P: "c5@2 c5@2 c5@2 e5 c5@6 ~@3", Q: "c6!3 c6@3 ab5 bb5",
  R: "c6!2 c6@6", S: "bb5!3 bb5@3 g5 bb5", T: "eb6!2 d6 bb5@2 c6 g5@2", U: "c6!2 c6@3 ~@3", V: "g5@2 f5 d5", W: "g5 ~",
  X: "[d5,e5] ~ e5@4 e5 d5@3 c5@5 ~", Y: "[d5,e5] ~ e5@2 d5@2 a4 c5@5 ~@4", Z: "c5@2 c5 ~ c5@2 e5 c5@8 ~",
  AA: "c5@2 c5@2 c5@2 bb4 e5@3 c5@6", AB: "[f5@2 f5@2 f5@2 eb5 f5@3 f5@2 f5@2 eb5 f5@5 bb4@8 ~@4]/2",
  AC: "eb5@2 eb5 eb5@3 c5@2 eb5@2 eb5@2 f5@2 g5@2", AD: "eb5@3 c5@9 ~@4",
  AE: "[f5@2 f5 f5@3 eb5@2 f5@2 f5@2 f5@2 eb5 f5@5 d5 bb4@5 ~@6]/2", AF: "g5@11 ~@5", AG: "c5 c5@2 c5@2 c5@2 c5",
  AH: "c5@2 c5@2 c5@2 c5 c5@3 c5@2 ~@4",
})).s("gm_harmonica").gain(0.51)

// chords · piano
const piano = note(`<
  ~@2 A@2 B C D@2 E F A@2 B G H I J K H L M N D@2 E F O@2 P Q H I J R H I M S D@2 E F A@2 B G H I J K H L M N A@2 B T@3
  U@2
>`.pickRestart({
  A: "c4@2 c4@2 d4 eb4 e4@2 f4@2 f4@2 ab4 a4 c5@2", B: "c4@2 c4@2 d4 eb4 e4@2 f4@2 f4@2 g4@2 g4@2",
  C: "ab4!2 bb4!2 c5 [c3,c4,c5]!3", D: "~@2 [e4,g4]@2 ~ [e4,g4]@2 ~@3 [f4,a4]@2 ~ [f4,a4]@2 ~",
  E: "~@2 [e4,g4]@2 ~ [e4,g4]@2 ~@3 [f4,a4]@2 ~ [e4,g4]@2 ~", F: "~ [eb4,ab4,c5] ~ [d4,f4,bb4] ~ [c3,e4,g4,c5]!3",
  G: "ab4@2 ab4@2 bb4@2 bb4 ~ c5@2 [c3,c4,c5]@2 [c3,c4,c5]@2 [c3,c4,c5]@2", H: "[f4,ab4,c5]!8", I: "[d4,ab4,bb4]!8",
  J: "[eb4,g4,bb4]!8", K: "[eb4,g4,c5] [eb4,g4] [eb4,g4,c5]!6, ~@2 c5 ~@13",
  L: "[d4,ab4,bb4]!2 [d4,ab4] [d4,ab4,bb4]!5, ~@4 bb4 ~@11", M: "[eb3,eb4,g4,bb4,g6] [f4,ab4,c5]",
  N: "[f4,g4,c5]@4 g6!2 b5 ~, ~ f4, ~@8 db6 ~@7", // Fsus2
  O: "[c4,c5]@2 c4@2 d4 eb4 e4@2 f4@2 f4@2 ab4 a4 c5@2, ~ c5@2 c5@2 c5@2 ~", // C
  P: "[c4,c5]@2 c4@2 d4 eb4 e4@2 f4@2 f4@2 g4@2 [g4,c5]@2, ~ c5@2 c5@2 c5@2 ~", // C C5
  Q: "[ab4,c5] ab4 bb4 [bb4,c5] c5 [c3,c4]!3, ~ c5@2 ~@5", R: "[eb4,g4,c5]!8",
  S: "[f4,g4,c5]@8 [f4,db6] ~@3 [b5,g6]@2 ~@2, ~@4 g6 ~@3", // Fsus2 Db Em
  T: "[~@2 [eb4,ab4,c5]@2 ~@2 [d4,f4,bb4]@2 [e4,g4,c5]@2 [c5,c6]@3 c5@3 c5@2 [c5,c6]@3 [c5,c6]@3 c5@2 c5@2 [c5,c6]@2 [c5,c6]@10 c5@2 c5@3 c5@3, ~@13 c6@5 ~@6 c6@4 ~@20]/3", // Ab Bb C
  U: "[c5@2 c5@3 c5@3 c5@4 c5@2 c5@18]/2",
})).s("gm_piano").gain(0.26)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B A C D A@2 E A@3 B A@2 D F A G H E A@3 I B A@2 J A@2 D K A L M A@4 K A L M C A@3 K A L M N A@3 I B O A ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@9 x!2", C: "~@2 x ~@2 x!3", D: "~ x!2 ~ x ~@7 x ~@3", E: "~@4 x ~@6 x!5",
  F: "~@4 x ~ x ~@3 x!4 ~@2", G: "~@4 x ~@5 x ~ x ~ x!2", H: "x!2 ~ x!2 ~@7 x ~@3", I: "~@4 x ~@3 x ~@2 x ~@2 x ~",
  J: "~ x!2 ~ x ~@9 x!2", K: "~@4 x ~ x ~@3 x!6", L: "~@4 x ~@7 x!2 ~ x", M: "~ x ~ x!2 ~@7 x ~@3", N: "~ x ~@2",
  O: "~@4 x ~ x!2 ~@3 x!5",
})).gain(0.51)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@2 A B A@9 B A@11 B@2 A@2 B A@27 C B A@2 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~ x ~ x ~@4",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A B A@9 B A@11 B@2 A@2 B A@27 C B A@2 ~>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~@2",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@25 [~@8 x ~@2 x ~@2 x ~] ~@31 [~@8 x ~@2 x ~@2 x ~] ~@4>").gain(0.46)

// drums · ride
const ride = s("rd").struct(`<
  ~@2
  [x!8]!23
  [x ~ x ~ x ~ x ~ x ~@2 x ~@2 x ~]
  [x!8]!31
  [x ~@7 x ~@2 x ~@2 x ~]
  [x!8]!3
  ~
>`).gain(0.51)

// drums · cowbell
const cowbell = s("cb").struct("<[x!4]!2 ~@60>").gain(0.51)

stack(bass, bass_2, harmonica, piano, snare, pedal_hat, open_hat, crash, ride, cowbell)

More by The Beatles