Strudelify
With A Little Luck cover art

1978 · London Town

With A Little Luck

Paul McCartney

KeyE majorTempo113 bpm
0:00/0:00
// With A Little Luck — Paul McCartney
// 113 bpm, 4/4, key E major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 7, 4/4 at bar 8, 2/4 at bar 9, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(113/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 · "Piano 2"
const piano = note(`<
  A@2 B@4 C D E F G H E I J K L M N O P Q R@2 S T N U@2 V@4 W E F G H E I J K L M N O P Q R@2 S T N X@2 Y@2 W E F G H E
  I J Z@2 AA AB AC AD AE AB AC AD AE AF@2 AG AH AI@3 AJ@8 ~@2
>`.pickRestart({
  A: "[~@8 [a3,c#4,e4] ~@5 [a3,c#4,e4]@15 ~@3]/2", // A
  B: "[[a3,c#4,e4]@5 ~@3 [e3,g#3,b3]@27 ~@5 [a3,c#4,e4] ~@5 [a3,c#4,e4]@15 ~@3]/4", // A E A
  C: "[e3,a3,c#4]@4 ~@2 [e3,g#3,b3]@7 ~@3", D: "[e3,f#3,a3]@4 ~@2 [e3,g#3] ~@5 [e4,g#4] ~ [e4,g#4] ~",
  E: "[e4,b4] ~ g#5@3 ~ [g#4,b4,e5]@5 ~ [e4,g#4] ~ [e4,g#4] ~", F: "[e4,b4] ~ e5@3 ~ [f#4,a4,c#5]@5 ~ f#4 ~ f#4 ~",
  G: "a4 ~ c#5@3 ~ [a4,c#5,e5]@3 ~ c#5@3 ~ [a4,c#5,e5]@2", H: "~@2 c#5 ~ b4 ~ [g#4,b4,e5]@5 ~ [e4,g#4] ~ [e4,g#4] ~",
  I: "[e4,b4] ~ e5@3 ~ [e4,a4,c#5]@5 ~ f#4 ~ f#4 ~", J: "a4 ~ c#5@3 ~ [a4,c#5,e5]@3 ~ c#5 ~ b4 ~ [a4,c#5,e5]@2",
  K: "~@2 [e4,a4,c#5]@5 ~ [e3,g#3,b3]@8", L: "~@3 [e3,g#3,c#4]@3 ~ [e3,g#3,b3]",
  M: "~@2 g#3 ~ [e3,g#3,b3]@3 ~ [f#3,a3,c#4]@4 ~@2 a4 ~", N: "b4 ~ c#5@3 ~ [g#4,b4,f5]@5 ~ c#5 ~ [f4,g#4,b4]@2",
  O: "~@2 [f4,g#4,c#5]@3 ~ g#4 ~ [f#4,a4]@4 ~@2 [f#4,a4] ~", // C# F#m
  P: "[g#4,b4] ~ a4@5 ~ [f4,g#4,b4]@4 ~@2 [f5,g#5] ~, ~@2 c#5@9 ~@5", Q: "[f#5,a5] ~ [g#5,b5]@5 ~ [a5,c#6]@4 ~@2 a4 ~",
  R: "[b4 ~ c#5@3 ~ c#5@6 ~@2 c#5 ~ c#5 ~ c#5@3 ~ [f#4,a4,c#5]@6 ~@2 [f#5,a5] ~, ~@6 [f4,g#4,b4]@13 ~@13]/2", // F#m Fdim
  S: "[g#5,b5] ~ [a5,c#6]@3 ~ [f5,g#5,b5]@6 ~@2 c#4 ~", T: "d#4 ~ f4@5 ~ [a3,c#4]@4 ~@2 a4 ~, b3@5 ~@11",
  U: "[~@2 [f4,g#4,c#5]@3 ~ g#4 ~ b4 ~ a4@3 ~ b4 ~ c#5@4 [d4,f#4]@5 ~ [c#4,e4]@5 ~, ~@8 f#4@4 ~@2 [e4,g#4]@5 ~@13]/2", // C# D C#m E
  V: "[[b3,d4]@3 ~ [a3,c#4]@2 a4 f#4 a4 ~ a4@3 ~ b4 ~ c#5@19 ~@7 e4@2 f#4 ~ b4 c#5@12 ~ [a4,c#5,e5]@3 ~, ~@8 e4@4 ~@2 [e4,a4]@21 ~@7 a4 ~@3 [e4,a4]@13 ~@5]/4", // Bm A A5
  W: "[a4,c#5,e5] ~ [a4,c#5,e5]@3 ~ [a4,c#5,e5] ~@5 [e4,g#4] ~ [e4,g#4] ~", // A E
  X: "[~@2 [f4,g#4,c#5]@3 ~ g#4 ~ a4 ~ a4@3 ~ b4 ~ c#5@4 [d4,f#4]@5 ~ [c#4,e4]@5 ~, ~@8 f#4@4 ~@2 [e4,g#4]@5 ~@13]/2", // C# D C#m E
  Y: "[[b3,d4]@3 ~ [a3,c#4]@3 ~@3 e4@2 f#4 ~ b4 c#5@12 ~ [a4,c#5,e5]@3 ~, ~@10 a4 ~@3 [e4,a4]@13 ~@5]/2", // Bm A A5
  Z: "[~@2 [e4,a4,c#5]@5 ~ [g#3,b3,e4]@12 ~@2 c#4@3 ~ e4 ~ f#4@3 ~]/2", // A E
  AA: "f#4 ~ e4@3 ~ b4 c#5 [g#4,b4,e5] ~ [g#4,b4,e5]@3 ~ [g#4,b4,e5]@2", // E
  AB: "~@4 b4 ~ c#5 ~ [g#4,b4,e5] ~ [g#4,b4,e5]@3 ~ [g#4,b4,e5]@2", // E
  AC: "~@4 b4 ~ c#5 ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~", // A
  AD: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,f#5]@3 ~ [e4,a4,c#5]@2", // A F#m A
  AE: "~@6 b4 c#5 [g#4,b4,e5] ~ [g#4,b4,e5]@3 ~ [g#4,b4,e5]@2", // E
  AF: "[~@4 b4 ~ c#5 ~ [g#4,b4,e5] ~ [g#4,b4,e5]@4 b4@6 ~@2 c#5 ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~, ~@7 g#4@9, ~@7 e5@5 e5!4, ~@5 b4@3]/2", // E A
  AG: "[a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [c#5,a5]@3 ~ a5 ~ [b4,e5,g#5]@2, e5!4 e5@3 ~", // A F#m E
  AH: "~@4 f#5 ~@3 [a4,c#5,f#5]@4 ~@2 [g#4,b4,e5]@2, ~@3 e5@4 ~", // F#m E
  AI: "[~@8 [c#5,a5]@3 ~ a5 ~ [b4,e5]@6 f#5 e5@11 [a4,c#5] ~@5 [a4,c#5,e5]@10, ~@4 e5@3 g#5@17, ~@5 b4@7, ~@16 e5@3 ~@5]/3", // F#m E5 A
  AJ: "[~@4 e5@4 [g#4,b4,e5]@7 [g#4,b4,e5]@49, ~ [a4,c#5]@15]/8", // E A
})).s("gm_piano").gain(0.39).pan(0.1)

// bass · electric bass finger · "FingeredBs"
const bass = note("<A@2 B@4 C D@8 E@8 F@6 G@2 H@2 I@8 E@8 F@6 J@2 I@8 K@8 L@8 M N@2 O ~@8>".pickRestart({
  A: "[~@8 b2 ~@5 b2@14 ~@2 b1 f#2]/2", B: "[b2@5 ~@3 e2@12 ~@2 e2@6 ~@2 e2@5 ~ e2@3 ~ b1 ~@5 b1@15 ~@3]/4",
  C: "d2@4 ~@2 c#2@7 ~@3",
  D: "[b1@4 ~@2 e2 ~ e2@4 ~@2 e2@5 ~ e2@3 ~ g#2@4 ~@2 g#2@5 ~ g#2@3 ~ a2@4 ~@2 a2@5 ~ a2@3 ~ b2@4 ~@2 b2@5 ~ b2@3 ~ e2@4 ~@2 e2@5 ~ e2@3 ~ g#2@4 ~@2 g#2@5 ~ g#2@3 ~ a2@4 ~@2 a2@5 ~ a2@3 ~ b2@4 ~@2 b2@2]/8",
  E: "[~@4 b2@3 ~ c#2@4 ~@2 c#2@5 ~ c#2@3 ~ c#2@4 ~@2 c#2@5 ~ c#2@3 ~ f#2@4 ~@2 f#2@5 ~ f#2@3 ~ c#3@4 ~@2 c#3@5 ~ c#3@3 ~ f#2@4 ~@2 f#2@5 ~ f#2@3 ~ c#3@4 ~@2 c#3@5 ~ c#3@3 ~ f#2@4 ~@2 f#2@5 ~ f#2@3 ~ c#3@4 ~@2 c#3@2]/8",
  F: "[~@4 c#3@3 ~ c#3@4 ~@2 c#3@5 ~ c#3@3 ~ c#3@4 ~@2 c#3@5 ~ c#3@3 ~ f#2@4 ~@2 f#2@5 ~ f#2@3 ~ c#3@4 ~@2 c#3@5 ~ c#3@3 ~ d2@4 ~@2 a2@5 ~ d3@5 ~ a2@5 ~]/6",
  G: "[d2@3 ~ a2@3 ~ b2@4 ~@2 b3@5 ~ f#3@5 ~ f#3@5 ~]/2", H: "[b2@3 ~ f#2@3 ~ b2@4 ~@2 b3@5 ~ f#3@5 ~ b2@5 ~]/2",
  I: "[b2@3 ~ b2@3 ~ e2@4 ~@2 e2@5 ~ e2@3 ~ g#2@4 ~@2 g#2@5 ~ g#2@3 ~ a2@4 ~@2 a2@5 ~ a2@3 ~ b2@4 ~@2 b2@5 ~ b2@3 ~ e2@4 ~@2 e2@5 ~ e2@3 ~ g#2@4 ~@2 g#2@5 ~ g#2@3 ~ a2@4 ~@2 a2@5 ~ a2@3 ~ b2@4 ~@2 b2@2]/8",
  J: "[d2@3 ~ a2@3 ~ b2@4 ~@2 b3@5 ~ f#3@5 ~ b2@5 ~]/2",
  K: "[~@4 b2@3 ~ c#2@4 ~@2 c#2@5 ~ c#2@3 ~ c#2@4 ~@2 c#2@5 ~ c#2@3 ~ e2@4 ~@2 e2@5 ~ e2@3 ~ g#2@4 ~@2 g#2@5 ~ g#2@3 ~ a2@4 ~@2 a2@5 ~ a2@3 ~ e2@4 ~@2 e2@5 ~ e2@3 ~ e2@4 ~@2 e2@5 ~ e2@3 ~ g#2@4 ~@2 g#2@2]/8",
  L: "[~@4 g#2@3 ~ a2@4 ~@2 a2@5 ~ a2@3 ~ e2@4 ~@2 e2@5 ~ e2@3 ~ e2@4 ~@2 e2@5 ~ e2@3 ~ g#2@4 ~@2 g#2@5 ~ g#2@3 ~ a2@4 ~@2 a2@5 ~ a2@3 ~ d3@4 ~@2 c#3@5 ~ c#3@3 ~ b2@4 ~@2 e2@5 ~ e2@3 ~ d3@4 ~@2 c#3@2]/8",
  M: "~@4 c#3@7 ~@3 g#3 c#4", N: "[[b1,b2] ~@5 [b1,b2]@15 ~@3 [b1,b2]@5 ~@3]/2", O: "e2@12 ~@2 e2 ~",
})).s("gm_electric_bass_finger").gain(0.27)

// chords · overdriven guitar · "Overdrive"
const overdriven_guitar = note(`<
  ~@7 A B C D E B C D F@3 G H I J G H I J G K L M N@3 O B C D E B C D F@3 G H I J G H I J G K L M N O B C D E B C D P Q
  R@8 S@7 ~@11
>`.pickRestart({
  A: "~@8 [e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 ~", B: "[e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 ~",
  C: "[e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 ~ [c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~", // E A
  D: "[c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~", // A
  E: "[c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 ~", // A E
  F: "[[c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~ [c#4,e4,g#4,b4]@27 ~@5 [c#4,f#4,a4]@3 ~ [c#4,f#4,a4]@3 ~]/3", // A C#m7 F#m
  G: "[c#4,f#4,a4]@3 ~ [c#4,f#4,a4]@3 ~ [c#4,f4,g#4,b4]@3 ~ [c#4,f4,g#4,b4]@3 ~", // F#m C#7
  H: "[c#4,f4,g#4,b4]@3 ~ [c#4,f4,g#4,b4]@3 ~ [f#4,a4,c#5]@3 ~ [f#4,a4,c#5]@3 ~", // C#7 F#m
  I: "[f#4,a4,c#5]@3 ~ [f#4,a4,c#5]@3 ~ [c#4,f4,g#4,b4]@3 ~ [c#4,f4,g#4,b4]@3 ~", // F#m C#7
  J: "[c#4,f4,g#4,b4]@3 ~ [c#4,f4,g#4,b4]@3 ~ [c#4,f#4,a4]@3 ~ [c#4,f#4,a4]@3 ~", // C#7 F#m
  K: "[c#4,f4,g#4,b4]@3 ~ [c#4,f4,g#4,b4]@3 ~ [d4,f#4,a4,c#5]@3 ~ [d4,f#4,a4,c#5]@3 ~", // C#7 Dmaj7
  L: "[d4,f#4,a4,c#5]@3 ~ [d4,f#4,a4,c#5]@3 ~ [d4,f#4,a4,c#5]@3 ~ [d4,f#4,a4,c#5]@3 ~", // Dmaj7
  M: "[d4,f#4,a4,c#5]@3 ~ [d4,f#4,a4,c#5]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~", // Dmaj7 A
  N: "[a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~", // A
  O: "[a3,c#4,e4]@3 ~ [a3,c#4,e4]@3 ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4]@3 ~", // A E
  P: "[c#4,e4,a4]@3 ~ [c#4,e4,a4]@3 ~ [c#4,e4,g#4,b4]@3 ~ [c#4,e4,g#4,b4]@3 ~", // A C#m7
  Q: "[c#4,e4,g#4,b4]@3 ~ [c#4,e4,g#4,b4]@3 ~ [c#4,e4,g#4,b4]@3 ~ [c#4,e4,g#4,b4]@3 ~", // C#m7
  R: "[[c#4,e4,g#4,b4]@3 ~ [c#4,e4,g#4,b4]@3 ~ [e4,g#4,b4]@4 ~@2 [e4,g#4,b4]@7 ~@3 [e4,g#4,b4]@4 ~@2 [e4,g#4,b4]@7 ~@3 [c#4,e4,a4]@4 ~@2 [c#4,e4,a4]@7 ~@3 [c#4,e4,a4]@4 ~@2 [c#4,e4,a4]@7 ~@3 [e4,g#4,b4]@4 ~@2 [e4,g#4,b4]@7 ~@3 [e4,g#4,b4]@4 ~@2 [e4,g#4,b4]@7 ~@3 [c#4,e4,a4]@4 ~@2 [c#4,e4,a4]@7 ~@3 [c#4,e4,a4]@4 ~@2 [c#4,e4,a4]@2]/8", // C#m7 E A E A
  S: "[~@8 [e4,g#4,b4]@4 ~@2 [e4,g#4,b4]@7 ~@3 [e4,g#4,b4]@4 ~@2 [e4,g#4,b4]@7 ~@3 [c#4,e4,a4]@4 ~@2 [c#4,e4,a4]@7 ~@3 [a3,c#4,e4]@4 ~@2 [c#4,e4,g#4,b4]@7 ~@3 [f#4,a4,c#5]@4 ~@2 [e4,g#4,b4]@7 ~@3 [c#4,e4,a4]@5 ~ [c#4,e4,g#4,b4]@15 ~@3]/7", // E A C#m7 F#m E A C#m7
})).s("gm_overdriven_guitar").gain(0.12).pan(0.9)

// chords · pad new age · "Fantasia"
const pad_new_age = note("<~@20 A B C D E@2 ~@20 A F C G H I ~@15 J K L M N K L O N K L P@2 ~@13>".pickRestart({
  A: "~@14 g#5 ~", B: "a5 ~ b5@5 ~ a5@6 ~@2", C: "~@14 c#5 ~", D: "c#5 ~ c#5@3 ~ c#5@6 ~@2 c#5@2, ~@14 a5 ~",
  E: "[d#5@2 [e5,c#6]@3 ~ c#5@10 b4@3 ~@13, b5 ~@5 b5@13 ~@13]/2", F: "a5 ~ b5@5 ~ a5@5 ~@3",
  G: "c#5 ~ c#5@3 ~ c#5@6 ~@2 [c#5,a5] ~", H: "[d#5,b5] ~ [e5,c#6]@3 ~ c#5@10, ~@6 b5@7 ~@3", I: "b4@5 ~@11",
  J: "~@8 e5 ~ e5@3 ~ e5@2", K: "~@4 b4 ~ c#5 ~ e5 ~ e5@3 ~ e5@2",
  L: "~@4 b4 ~ c#5 ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~", // A5
  M: "[a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~ e5 ~ f#5@3 ~ c#5@2", N: "~@6 b4 c#5 e5 ~ e5@3 ~ e5@2",
  O: "[a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~ f#5@3 ~ c#5@2", // A5
  P: "[[a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~ [a4,e5] ~ f#5@3 ~ c#5@7 ~@11]/2", // A5
})).s("gm_pad_new_age").gain(0.27)

// drums · kick
const kick = s("bd").struct("<~@7 A B@9 A B@25 A B@13 A B@9 A B@13 C D ~@10>".pickRestart({
  A: "~@4 x ~@2 x", B: "~@2 x ~ x ~@2 x", C: "~ x!2 ~", D: "x",
})).gain(0.37)

// drums · snare
const snare = s("sd").struct("<~@7 A B@9 C B@25 D B@13 C B@9 E B@13 F ~@11>".pickRestart({
  A: "x ~@2 x!2 ~ x ~@5 x ~@3", B: "~ x ~ x", C: "~@2 x ~ x!3 ~@5 x ~@3", D: "~@2 x!3 ~ x ~@5 x ~@3",
  E: "~@3 x!2 ~ x!2 ~@4 x ~@3", F: "~@2 x ~@3 x!2",
})).gain(0.37)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@7 A B@3 C B@5 D B@3 C B@3 C B@7 C B@3 C B@5 D B@3 C B@3 C B@5 D B@3 C B@3 C B E B@3 C B@3 C B@5 F ~@11
>`.pickRestart({
  A: "~@4 x!4", B: "x!8", C: "x!3 ~ x!4", D: "x ~@3 x!4", E: "x!2 ~@2 x!4", F: "x!3 ~ x!3 ~",
})).gain(0.37)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A ~@9 A ~@3 A ~@7 A ~@3 A ~@9 A ~@3 A ~@9 A ~@3 A ~@5 A ~@3 A ~@5 B ~@11
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@3 x ~@3 x",
})).gain(0.37)

// drums · crash
const crash = s("cr").struct("<~@7 A ~@9 A ~@15 A ~@9 A ~@13 A ~@9 A ~@3 A ~@3 A ~@6 B ~@10>".pickRestart({
  A: "~ x", B: "x",
})).gain(0.37)

// drums · tambourine
const tambourine = s("tb").struct("<~@27 A B@4 C D ~@19 E F@3 D ~@35>".pickRestart({
  A: "~@4 x ~@2 x", B: "x ~@3 x ~@2 x", C: "x ~@3 x ~ x!2", D: "x", E: "~@2 x!2", F: "x!4",
})).gain(0.37)

stack(piano, bass, overdriven_guitar, pad_new_age, kick, snare, hihat, open_hat, crash, tambourine)

More by Paul McCartney