Strudelify
Lucky Lips cover art

Lucky Lips

Lucky Lips

Cliff Richard

KeyB majorTempo145 bpm
0:00/0:00
// Lucky Lips — Cliff Richard
// 145 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 96 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): STEEL GTR.
setcpm(145/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D E B F D A B G H G H A I A B J K L M N O A B G H G H A I A B J K L M N O E B F D A B G H G H A I A B J K L M N
  O A B G H G H A I A B J K L M N O A B G H G H A I A B J K L M D P Q R S@2
>`.pickRestart({
  A: "e1@5 ~@7 g#1@5 ~@7", B: "b1@7 ~@3 c#2@5 ~ b1@2 g#1@5 ~", C: "a1@7 ~@5 c#2@5 ~ e2@5 ~",
  D: "b1@6 a1@6 g#1@6 f#1@5 ~", E: "e1 ~ g#1 ~", F: "a1@9 ~@3 c#2@4 a1@2 e2@6", G: "b1@5 ~@7 d#2@5 ~@7",
  H: "f#2@5 ~@5 g#2@5 ~ f#2 ~ d#2@4 ~@2", I: "b1@6 ~@4 c#2@5 ~ b1@2 g#1@5 ~", J: "a1@3 ~@3 c#2@4 ~@2",
  K: "e2@7 ~@3 f#2@5 ~ e2 ~ c#2@4 ~@2", L: "b1@7 ~@5 a1@7 ~@5", M: "g#1@2 ~ f#1@2 ~", N: "b1 ~@5",
  O: "~@4 b1 ~ b1@2 ~@2 b1 ~ b1@2 ~@2 b1 ~ b1@2 ~@2 b1@2", P: "e1@5 ~ e1@5 ~ g#1@6 b1@5 ~",
  Q: "a1@5 ~ a1@5 ~ c#2@6 e2@5 ~", R: "e2@5 ~ c#2@6 b1@6 g#1@5 ~", S: "[e1@9 ~@7]/2",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D E F G D H I J K L K H I A B M N O P Q R S T U@2 V U W S X Y Z AA AB AC AD R E F G D H I J K L K H I A B M N O
  P Q R S T U@2 V U AE S X Y Z AA AB AC AD R S T U@2 V U AE S X Y Z AA AB AC AF AG AH AI AJ@2
>`.pickRestart({
  A: "e2@4 [b3,e4,g#4] ~@5 [b3,e4,g#4] ~ g#2@4 [b3,e4,g#4] ~@5 [b3,e4,g#4] ~", // E
  B: "b2@4 [b3,e4,g#4] ~@5 [b3,e4] ~@5 [b2,e4,g#4]@2 ~@4 [e4,g#4]@2, ~@10 c#3@5 ~@3 g#2@6, ~@10 g#4@2 ~@4 b3 ~@5 b3 ~", // E E5 E
  C: "~@4 [c#4,e4,a4] ~@5 [c#4,e4,a4] ~ c#3@4 [c#4,e4,a4] ~ e3@4 [c#4,e4,a4] ~, a2@7 ~@17", // A
  D: "~@4 [b3,d#4,f#4] ~@5 [b3,d#4,f#4] ~@5 [b3,d#4,f#4] ~ f#2@4 [b3,d#4,f#4] ~, b2 a2 g#2 ~", // B
  E: "~@4 [b3,e4,g#4] ~@5 [b3,e4,g#4] ~@5 [b3,e4,g#4] ~@5 [b3,e4,g#4] ~, e2@6 ~@6 g#2@7 ~@5", // E
  F: "~@4 [b3,e4,g#4] ~@5 [b3,e4,g#4] ~@5 [b3,e4,g#4] ~ g#2@4 [b3,e4,f#4,g#4] ~, b2@7 ~@3 c#3@5 ~ b2@2 ~@6", // E
  G: "~@4 [c#4,e4,a4] ~@5 [c#4,e4,a4] ~ c#3@4 [c#4,e4,a4] ~@5 [c#4,e4,a4] ~, a2@9 ~@7 a2@2 e3@6", // A
  H: "e2@4 [b3,e4,g#4]@2 ~@4 [b3,e4,g#4]@2 g#2@4 [b3,e4,g#4]@3 ~@3 [b3,e4,g#4]@2", // E
  I: "b2@4 [b3,e4,g#4]@2 ~@4 [b3,e4,g#4]@3 ~@3 [b2,b3,e4,g#4]@2 g#2@4 [b3,e4,g#4]@2, ~@10 c#3@5 ~@9", // E
  J: "b2@2 [b3,d#4,f#4] ~@2 [b3,d#4,f#4] d#3@2 [d#4,f#4] ~@2 [d#4,f#4], ~@16 b3 ~@5 b3 ~", // B D#m
  K: "f#3@2 [b3,d#4,f#4] ~@2 [b3,d#4,f#4] ~@2 [f#3,b3,d#4,f#4] d#3@2 [b3,d#4,f#4], ~@10 g#3@5 ~@9", // B
  L: "b2@2 [b3,d#4,f#4] ~@2 [b3,d#4,f#4] d#3@2 [b3,d#4,f#4] ~@2 [b3,d#4,f#4]", // B
  M: "a2@4 [c#4,e4,a4]@2 ~@4 [c#4,e4,a4] ~ c#3@4 [e4,a4]@2 ~@4 [c#4,e4,a4] ~, ~@16 c#4 ~@7", // A A5 A
  N: "e3@4 [c#4,a4] ~@5 [e4,a4]@2 ~@4 [e3,c#4,e4,a4]@2 c#3@4 [e4,a4] ~, ~@2 e4 ~@2 f#3@3 ~@4, ~@10 c#4 ~@11 c#4@2", // F#m A5 A A5
  O: "~@4 [b3,f#4] ~@5 [b3,d#4,f#4] ~@5 [b3,f#4] ~@5 [b3,f#4] ~, b2@7 ~@5 a2@8 ~@4, ~@2 d#4 ~@5 d#4 ~@2 d#4", // B5 B B5
  P: "~@4 [b3,d#4,f#4] ~@5 [d#4,f#4]@2 ~@4 [b3,f#4] ~@5 [b3,d#4,f#4] ~, g#2@9 ~ b3 ~ f#2@9 ~@3, ~@8 d#4 ~@3", // B D#m B5 B
  Q: "[b3,d#4,f#4] ~@7, b2@5 ~@19", // B
  R: "~@4 [b2,d#4,f#4,b4] ~ [b2,d#4,f#4,b4]@2 ~@2 [b2,d#4,f#4,b4] ~ [b2,d#4,f#4,b4]@2 ~@2 [b2,d#4,f#4,b4] ~ [b2,d#4,f#4,b4]@2 ~@2 [b2,d#4,f#4,b4]@2", // B
  S: "e2@2 ~@2 [b3,e4,g#4] ~ g#2@2 ~@2 [g#2,b3,g#4] ~ b2@3 ~ [b2,e4]@2 c#3@3 ~ [b2,e4]@2, ~@4 e2@2 ~@4 e4@2 ~@4 [b3,g#4] ~@5 [b3,g#4] ~", // E G#m E5 E
  T: "e2@2 ~@2 [e2,e4]@2 g#2@2 ~@2 [e4,g#4]@2 b2@3 ~ [b2,e4]@2 c#3@3 ~ [b2,b3,e4,g#4] ~, ~@4 [b3,g#4] ~@5 [g#2,b3] ~@5 [b3,g#4] ~@7", // E E5 E G#m E
  U: "b2@2 ~@2 [b3,d#4,f#4] ~ d#3@2 ~@2 [b3,d#4,f#4] ~ f#3@3 ~ [b3,d#4,f#4] ~ g#3@4 [b3,d#4,f#4] ~, ~@2 b2 ~@2 d#3 ~@2 f#3 ~@2 f#3", // B
  V: "b2@2 ~@2 [b3,d#4,f#4] ~ d#3@2 ~@2 [b3,d#4,f#4] ~ f#3@2 ~@2 [b3,d#4,f#4] ~ g#3@3 ~ [f#3,b3,d#4,f#4] ~, ~@2 b2 ~@2 d#3 ~@2 f#3 ~@3", // B
  W: "e2@2 ~@2 [b3,e4,g#4] ~ g#2@2 ~@2 [b3,e4,g#4] ~ b2@2 ~@2 [b3,e4,g#4] ~ c#3@3 ~ [b2,b3,e4,g#4] ~, ~@2 e2 ~@2 g#2 ~@2 b2 ~@3", // E
  X: "e2 ~ [e2,b3,e4,g#4] g#2 ~ [b3,e4,g#4] b2 ~ [b2,b3,e4,g#4] c#3 b2 [c#3,b3,e4,g#4], ~@10 g#2 ~@13", // E C#m7
  Y: "e2 ~ [e2,e4,g#4] g#2 ~ [g#2,b3,e4,g#4] b2 ~ [b2,e4,g#4] c#3 b2 [e4,g#4], ~@4 b3 ~@11 b3 ~@5 [c#3,b3] ~", // E C#7
  Z: "a2 ~ [a2,c#4,e4,a4] c#3 ~ [c#3,e4,a4] e3 ~ [e3,c#4,e4,a4] f#3 e3 [c#4,e4,a4], ~@10 c#4 ~@11 f#3 ~", // A
  AA: "a2 ~ [a2,c#4,e4,a4] c#3 ~ [c#3,e4,a4] e3 ~ [e3,c#4,e4,a4] f#3 e3 [f#3,e4], ~@10 c#4 ~@11 [c#4,a4] ~", // A F#7 F#m
  AB: "d#3@2 ~@2 [b3,d#4,f#4]@2 ~@4 [d#3,b3,d#4] ~ c#3@4 [d#4,f#4]@2 c#3@3 ~ [d#4,f#4]@2, ~@4 d#3@4 ~@2 f#4@2 ~@4 b3 ~@5 [c#3,b3] ~", // B G#m D#m C#7
  AC: "b2@4 [b3,d#4,f#4]@2 b2@2 ~@2 [d#4,f#4]@2 a2@3 ~ [d#4,f#4]@2 a2@2 ~@2 [a2,b3,d#4,f#4] ~, ~@10 [b2,b3] ~@5 b3 ~@7", // B D#m B7 B
  AD: "[b2,b3,d#4,f#4] ~@7", // B
  AE: "e2@2 ~@2 [b3,e4,g#4] ~ g#2@2 ~@2 [b3,e4,g#4] ~ b2@2 ~@2 [b3,e4,g#4] ~ c#3@3 ~ [b2,b3,e4,g#4] ~, f2 ~@3 e2@2 ~@4 g#2@2 ~@4 b2@2 ~@6", // E
  AF: "d#3@4 [d#4,f#4]@2 c#3@4 [b3,d#4] ~ b2@4 [d#4,f#4] ~ a2@4 [b3,d#4,f#4] ~, ~@4 b3 ~@5 f#4@2 ~@4 b3@2 ~@6", // D#m B D#m B
  AG: "e2@4 [b3,e4,g#4] ~ e2@4 [b3,e4,g#4] ~ g#2@4 [b3,e4,g#4] ~ b2@4 [b3,e4,g#4] ~", // E
  AH: "a2@4 [c#4,e4,a4] ~ a2@4 [c#4,e4,a4] ~ c#3@4 [c#4,e4,a4] ~ e3@4 [c#4,e4,a4] ~", // A
  AI: "e3@4 [b3,e4,g#4] ~ c#3@4 [b3,e4,g#4] ~ b2@4 [b3,e4,g#4] ~ g#2@4 [b3,e4,g#4] ~", // E
  AJ: "[[b3,e4,g#4]@31 ~@17, e2@13 ~@11]/2", // E
})).s("gm_piano").gain(0.23)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B C D E F G D A H I J I K L H M N O P Q R S T U V W@2 X W Y U Z@2 AA AB AC AD S T AE F G D A H I J I K L H M N O P Q
  R S T U V W@2 X W Y U Z@2 AA AB AC AD S T U V W@2 X W Y U Z@2 AA AB AC AD D AF AG AH AI@2
>`.pickRestart({
  A: "e2 ~@2 g#2 ~@2", B: "b2@5 ~@5 c#3@4 ~@2 b2@2 g#2@4 ~@2", C: "a2@6 ~@6 c#3@4 ~@2 e3@5 ~",
  D: "d#3@2 ~ c#3@2 ~ b2@2 ~ a2@2 ~", E: "e2@7 ~@5 g#2@7 ~@5, f2 ~@7", F: "b2@7 ~@3 c#3@4 ~@2 b2@2 g#2@4 ~@2",
  G: "a2@9 ~@3 c#3@4 ~@2 e3@5 ~", H: "b2@4 ~@6 c#3@5 ~ b2@2 g#2@2 b2@2 g#2@2", I: "b2@5 ~@7 d#3@4 ~@8",
  J: "f#3@2 ~@3 g#3@2 ~ f#3 d#3 f#3 d#3", K: "f#3@4 ~@6 g#3@4 ~@2 f#3@2 d#3@2 f#3@2 d#3 ~", L: "e2@3 ~@3 g#2@2 ~@4",
  M: "e2@2 ~@3 e2 g#2@2 ~@3 g#2", N: "b2@4 ~@6 b2@2 c#3@2 ~@2 c#3@2 b2@2 c#3@2 b2 ~", O: "a2@2 ~@3 a2 c#3@2 ~@3 c#3",
  P: "e3@3 ~@9 f#3 ~@3 f#3@2 e3 ~ f#3@2 e3@2, ~@5 e3@2 ~@5", Q: "d#3@3 ~@7 d#3@2 c#3@4 ~@6 c#3@2",
  R: "b2@5 ~@5 b2@2 a2@4 ~@6 a2 ~", S: "b2 ~@7", T: "~@4 b2 ~ b2 ~@3 b2 ~ b2@2 ~@2 b2 ~ b2@2 ~@2 b2@2",
  U: "e2@2 ~@2 e2@2 g#2@2 ~@2 g#2 ~ b2@3 ~ b2@2 c#3@3 ~ b2@2",
  V: "e2@2 ~@2 e2@2 g#2@2 ~@2 g#2 ~ b2@2 ~@2 b2@2 c#3@3 ~ b2 ~",
  W: "b2@2 ~@2 b2@2 d#3@2 ~@2 d#3@2 f#3@3 ~ f#3@2 g#3@4 f#3@2",
  X: "b2@2 ~@2 b2@2 d#3@2 ~@2 d#3 ~ f#3@3 ~ f#3@2 g#3@3 ~ f#3 ~",
  Y: "[e2,f2]@2 ~@2 e2@2 g#2@2 ~@2 g#2@2 b2@2 ~@2 b2@2 c#3@3 ~ b2 ~", // Fmaj7
  Z: "e2@2 ~@2 e2@2 g#2@2 ~@2 g#2 ~ b2@2 ~@2 b2@2 c#3@2 b2@2 c#3@2",
  AA: "a2@2 ~@2 a2@2 c#3@2 ~@2 c#3@2 e3@2 ~@2 e3@2 f#3@2 e3@2 f#3 ~", AB: "a2 ~ a2 c#3 ~ c#3 e3 ~ e3 f#3 e3 f#3",
  AC: "d#3@2 ~@2 d#3@4 ~@2 d#3 ~ c#3@4 ~@2 c#3@2 ~@2 c#3 ~", AD: "b2@4 ~@2 b2@2 ~@2 b2 ~ a2@3 ~@3 a2@2 ~@2 a2 ~",
  AE: "e2@7 ~@5 g#2@7 ~@5", AF: "e2@4 ~@2 e2@5 ~ g#2@5 ~ b2@5 ~", AG: "a2@4 ~@2 a2@5 ~ c#3@5 ~ e3@4 ~@2",
  AH: "e3@5 ~ c#3@4 ~@2 b2@4 ~@2 g#2@4 ~@2", AI: "[e2@13 ~@11]/2",
})).s("gm_electric_guitar_muted").gain(0.28).pan(0.6)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@19 A ~@15 A ~@19 A ~@15 A ~@15 A ~@8>".pickRestart({
  A: "~@11 a3",
})).s("gm_acoustic_guitar_steel").gain(0.12).pan(0.2)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B@2 C A@2 D C E A F C@3 A@2 G@2 H I J@2 K L E A F C@3 A@2 G@2 H I J@2 K L A@2 D C E A F C@3 A@2 G@2 H I J@2 K L E A
  F C@3 A@2 G@2 H I J@2 K L E A F C@3 A@2 G@2 H I J@3 G H G M ~
>`.pickRestart({
  A: "[g#3,b3,e4]@2 [g#3,b3,e4] [g#3,b3,e4]@2 [g#3,b3,e4]@3 [g#3,b3,e4] [g#3,b3,e4]@2 [g#3,b3,e4]", // E
  B: "[[g#3,b3,e4]@2 [g#3,b3,e4] [g#3,b3,e4]@2 [g#3,b3,e4]@3 [g#3,b3,e4] [g#3,b3,e4]@2 [g#3,b3] [a3,c#4]@2 [a3,c#4,e4] [a3,c#4,e4]@2 [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@2 [c#4,e4], ~@22 e4@5 ~@21]/2", // E G#m A C#m
  C: "[f#3,b3,d#4]@2 [f#3,b3,d#4] [f#3,b3,d#4]@2 [f#3,b3,d#4]@3 [f#3,b3,d#4] [f#3,b3,d#4]@2 [f#3,b3,d#4]", // B
  D: "[a3,c#4,e4]@2 [a3,c#4,e4] [a3,c#4,e4]@2 [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@2 [c#4,e4]", // A C#m
  E: "[g#3,b3,e4]@2 [g#3,b3,e4] [g#3,b3,e4]@2 [g#3,b3,e4]@3 [g#3,b3,e4] [g#3,b3,e4]@3", // E
  F: "[f#3,b3,d#4]@2 [f#3,b3,d#4] [f#3,b3,d#4]@2 [f#3,b3,d#4]@3 [f#3,b3,d#4] [f#3,b3,d#4]@3", // B
  G: "[g#3,b3,e4]@3 [g#3,b3,e4]@2 [g#3,b3,e4]@3 [g#3,b3,e4] [g#3,b3,e4]@2 [g#3,b3,e4]", // E
  H: "[a3,c#4,e4]@3 [a3,c#4,e4]@2 [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@2 [a3,c#4,e4]", // A
  I: "[a3,c#4,e4]@3 [a3,c#4,e4]@2 [a3,c#4,e4]@3 [a3,c#4,e4] [a3,c#4,e4]@2 [c#4,e4]", // A C#m
  J: "[f#3,b3,d#4]@3 [f#3,b3,d#4]@2 [f#3,b3,d#4]@3 [f#3,b3,d#4] [f#3,b3,d#4]@2 [f#3,b3,d#4]", K: "[f#3,b3,d#4] ~@5",
  L: "~@2 [f#3,b3,d#4] [f#3,b3,d#4]@2 [f#3,b3,d#4] [f#3,b3,d#4]@2 [f#3,b3,d#4] [f#3,b3,d#4]@2 [f#3,b3,d#4]", // B
  M: "[g#3,b3,e4]", // E
})).s("gm_electric_guitar_clean").gain(0.18).pan(0.9)

// drums · kick
const kick = s("bd").struct("<A@22 B C A@14 B C A@18 B C A@14 B C A@18 B ~>".pickRestart({
  A: "x ~@4 x!2 ~@5", B: "x", C: "~ x!3",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  A B A B A B A B A@3 B A@3 B A@3 B A@2 C D A@3 B A@3 B A@3 B A@2 C D A B A B A@3 B A@3 B A@3 B A@2 C D A@3 B A@3 B A@3
  B A@2 C D A@3 B A@3 B A@3 B A@3 B A E C ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x ~ x ~@3 x ~@2", C: "x", D: "~@2 x!2 ~ x!2 ~ x!2 ~ x", E: "~@3 x ~ x ~@2 x!4",
})).gain(0.48)

// drums · clap
const clap = s("cp").struct("<~@76 A B A B A B A B ~@12>".pickRestart({
  A: "~ x ~ x", B: "~@3 x ~ x ~@2 x!2 ~@2",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<A@22 B ~ A@14 B ~ A@18 B ~ A@14 B ~ A@18 B ~>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<x ~@95>").gain(0.3)

stack(bass, piano, electric_guitar_muted, acoustic_guitar_steel, electric_guitar_clean, kick, snare, clap, hihat, crash)

More by Cliff Richard