Strudelify
Lucky (In My Life) cover art

Contact!

Lucky (In My Life)

Eiffel 65

KeyD majorTempo130 bpm
0:00/0:00
// Lucky (In My Life) — Eiffel 65
// 130 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · synth bass 2
const bass = note(`<
  ~@25 A B A B C B D E A B A B C B D E F G H B I J H B H K A B A B C B D E A B A B C B D E A B A B C B D E A B A B C B D
  E L M N M L M L O H B I J H B H K A B A B C B D E A B A B C B D E A B A B P M Q R ~
>`.pickRestart({
  A: "~ d2 ~ d2 ~ g1 ~ g1", B: "~ a1 ~ a1 ~ a1 ~ a1", C: "~ f#1 ~ f#1 ~ g1 ~ g1", D: "~ c2 ~ c2 ~ c2 ~ c2",
  E: "~ b1 ~ b1 ~ a1 ~ a1", F: "~ d2 ~ d2 ~ d2 ~ d2", G: "~@2 d2@2 ~@2 d2@2 d1 ~ d2@2 d1 ~ d2@2",
  H: "~ g1 ~ g1 ~ g1 ~ g1", I: "~ b1 ~ b1 ~ b1 ~ g1", J: "~ a1 ~ a1 ~ f#1 ~ d1", K: "~ f#1 ~ f#1 ~ c#2 ~ c#2", L: "g1",
  M: "a1", N: "b1", O: "f#1", P: "f#1 g1", Q: "c2", R: "b1@2 a1 c#2",
})).s("gm_synth_bass_2").gain(0.8)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~ A B C D E B F G H I J K L I M N H I J K L I O ~ P Q R S T Q U V P Q R S T Q U V W X Y Z Y AA Y Z Y AB P Q R S T Q U
  V P Q R S T Q AC V P Q R S T Q U ~ P Q R S T Q AC V AD AE AF AE AD AE AD ~ Y Z Y AA Y Z Y AB P Q R S T Q AC V P Q R S
  T Q U V P Q R S L I M AG ~
>`.pickRestart({
  A: "[d2,d4,f#4] ~ [d4,f#4] ~ [d4,f#4] ~ [g2,d4,g4] ~ [g2,g4]@2 [g2,d4,e4] ~ [g2,d4]@2 [a2,d4,f#4] ~, ~@2 d2@2 ~@4 d4 ~@3 e4 ~@3", // D G5 G Em7 G5 D
  B: "[a2,d4,f#4] ~ [a2,d4,f#4] ~@3 [a2,d4,f#4] ~ [a2,d4,g4]@2 [a3,d4,g4]@2 [a2,d4,e4]@2 [a3,d4,e4]@2", // D Dsus4 Asus4
  C: "[d2,d4,f#4] ~ [d2,d4,f#4] ~ d2 ~ [d2,d4,f#4] ~ [g2,d4,g4]@2 [g2,e4,g4] ~ [g2,d4,e4]@2 [g2,f#4] ~", // D G5 C Em7 Gmaj7
  D: "[a2,d4,f#4] ~ [a2,d4,f#4] ~ f#4 ~ [a2,d4,f#4] ~ [a2,a3,d4]@2 [a3,d4]@2 [a2,a3,c#4]@2 [a3,c#4]@2", // D D5 A
  E: "[f#2,d4,f#4] ~ [f#2,d4,f#4] ~ [d4,f#4] ~ [g2,d4,f#4] ~ [g2,g4]@2 [g2,d4,e4] ~ [g2,d4,e4]@2 [a2,d4,f#4] ~, ~@8 d4 ~@7", // D Gmaj7 G Em7 D
  F: "[c2,c4,e4] ~ [c2,c4,e4]@2 [c4,e4] ~ [c2,c4,e4] ~ [c4,e4]@2 [c3,d4] ~ [c2,c4,d4]@2 [c3,e4] ~, ~@4 c2@2 ~@2 c2 ~@7", // C Csus2 C
  G: "[b2,b3,d4] ~ [b2,b3,d4] ~ [b2,b3,d4] ~ [b2,b3,d4] ~ [a2,a3,d4]@2 [a3,d4]@2 [a2,c#4]@2 c#4@2, ~@12 a3 ~@3", // Bm D5 A
  H: "[d2,d4,f#4] ~ [d4,f#4] ~@3 [g2,d4,g4] ~ [g2,g4]@2 [g2,d4,e4] ~ [g2,d4]@2 [a2,d4,f#4] ~, d1 g1, ~@2 d2@2 ~@4 d4 ~@3 e4 ~@3", // D G5 G Em7 G5 D
  I: "[a2,d4,f#4] ~ [a2,d4,f#4] ~@3 [a2,d4,f#4] ~ [a2,d4,g4]@2 a3@2 [a2,d4,e4]@2 a3@2, a1", // D Dsus4 Asus4
  J: "[d2,d4,f#4] ~ [d2,d4,f#4] ~@3 [d2,d4,f#4] ~ [g2,d4,g4]@2 [g2,e4] ~ [g2,d4,e4]@2 [g2,f#4] ~, d1 g1", // D G5 C Em7 Gmaj7
  K: "[a2,d4,f#4] ~ [a2,d4,f#4] ~@3 [a2,d4,f#4] ~ [a2,a3,d4]@2 a3@2 [a2,a3,c#4]@2 ~@2, a1", // D D5 A
  L: "[f#2,d4,f#4] ~ [f#2,d4,f#4] ~@3 [g2,d4,f#4] ~ [g2,g4]@2 [g2,d4,e4] ~ [g2,d4,e4]@2 [a2,d4,f#4] ~, f#1 g1, ~@8 d4 ~@7", // D Gmaj7 G Em7 D
  M: "[c3,c4,e4] ~ [c3,c4,e4]@2 ~@2 [c3,c4,e4] ~ [c4,e4]@2 [c3,d4] ~ [c3,c4,d4]@2 [c3,e4] ~, c2, ~@8 c3 ~@7", // C Csus2 C
  N: "[b2,b3,d4] ~ [b2,b3,d4] ~@3 [b2,b3,d4] ~ [a2,a3,d4]@2 [a3,d4]@2 [a2,c#4]@2 c#4@2, b1 a1, ~@12 a3 ~@3", // Bm D5 A
  O: "[c4,e4] ~ [c4,e4]@2 ~@12, c2 ~@3", // C
  P: "[d2,d4,f#4] ~ [d4,f#4] ~@3 [g2,d4,g4] ~ [g2,g4]@2 [g2,d4,e4] ~ [g2,d4]@2 [a2,d4,f#4] ~, ~@2 d2@2 ~@4 d4 ~@3 e4 ~@3", // D G5 G Em7 G5 D
  Q: "[a2,d4,f#4] ~ [a2,d4,f#4] ~@3 [a2,d4,f#4] ~ [a2,d4,g4]@2 a3@2 [a2,d4,e4]@2 a3@2", // D Dsus4 Asus4
  R: "[d2,d4,f#4] ~ [d2,d4,f#4] ~@3 [d2,d4,f#4] ~ [g2,d4,g4]@2 [g2,e4] ~ [g2,d4,e4]@2 [g2,f#4] ~", // D G5 C Em7 Gmaj7
  S: "[a2,d4,f#4] ~ [a2,d4,f#4] ~@3 [a2,d4,f#4] ~ [a2,a3,d4]@2 a3@2 [a2,a3,c#4]@2 ~@2", // D D5 A
  T: "[f#2,d4,f#4] ~ [f#2,d4,f#4] ~@3 [g2,d4,f#4] ~ [g2,g4]@2 [g2,d4,e4] ~ [g2,d4,e4]@2 [a2,d4,f#4] ~, ~@8 d4 ~@7", // D Gmaj7 G Em7 D
  U: "[c3,c4,e4] ~ [c3,c4,e4]@2 ~@2 [c3,c4,e4] ~ [c4,e4]@2 [c3,d4] ~ [c3,c4,d4]@2 [c3,e4] ~, ~@8 c3 ~@7", // C Csus2 C
  V: "[b2,b3,d4] ~ [b2,b3,d4] ~@3 [b2,b3,d4] ~ [a2,a3,d4]@2 [a3,d4]@2 [a2,c#4]@2 c#4@2, ~@12 a3 ~@3", // Bm D5 A
  W: "[d4,f#4] ~ [d4,f#4] ~@3 [d4,f#4] ~ [d4,g4]@2 e4 ~ [d4,e4]@2 f#4 ~", // D G5 Dsus2
  X: "[d4,f#4] ~ [d4,f#4] ~@3 [d4,f#4] ~ [a3,d4]@2 a3@2 [a3,c#4]@2 ~@2", // D D5 A
  Y: "c#4@2 d4@2 ~@2 [a3,d4] ~ [a3,d4] ~ [a3,d4] ~ [a3,d4] ~ [a3,d4] ~, a3 ~@3", // D5
  Z: "d4@2 c#4@2 ~@2 [a3,c#4] ~ [a3,c#4] ~ [a3,c#4] ~ [a3,c#4] ~ [a3,c#4] ~, a3 ~@3", // A
  AA: "d4@2 c#4@2 ~@2 [a3,c#4] ~ [a3,e4]@3 ~ [a3,c#4]@2 ~@2, a3 ~@3", // A A5 A
  AB: "d4@2 e4@2 ~@2 [a3,e4] ~ [a3,e4]@2 ~@2 [a3,e4]@2 ~@2, a3 ~@3", // A5
  AC: "[c3,c4,e4] ~ [c3,c4]@2 ~@2 [c3,c4,e4] ~ [c4,e4]@2 [c3,d4] ~ [c3,c4,d4]@2 [c3,e4] ~, ~@2 e4 ~@5 c3 ~@7", AD: "g1",
  AE: "a1", AF: "b1",
  AG: "[b2,b3,d4] ~ [b2,b3,d4] ~@3 [b2,b3,d4] ~ [a3,d4]@2 [a3,d4]@2 c#4@2 c#4@2, b1@2 [a1,a2] [c#2,c#3], ~@12 a3 ~@3", // Bm D5 A C#
})).s("gm_lead_2_sawtooth").gain(0.35)

// chords · lead 2 sawtooth · soft notes
const lead_2_sawtooth_soft = note(`<
  ~ A B C D E B ~ F G H I J K H L M G H I J K H ~@2 G H I J K H L M G H I J K H L M N O ~@8 G H I J K H L M G H I J K H
  L M G H I J K H L ~ G H I J K H L M ~@16 G H I J K H L M G H I J K H L M G H I J K H L M ~
>`.pickRestart({
  A: "~@4 d2 ~@5 g4@2 ~@4", B: "~@4 [a2,d4,f#4] ~@11", C: "~@4 [d4,f#4] ~@9 d4 ~", D: "~@4 [a2,d4] ~@5 a2@2 ~@2 a2@2",
  E: "~@4 f#2 ~@5 g4@2 ~@4", F: "~@7 a3", G: "~@4 [d2,d4,f#4] ~@5 g4@2 ~@4",
  H: "~@4 [a2,d4,f#4] ~@5 [d4,g4]@2 ~@2 [d4,e4]@2", I: "~@4 [d2,d4,f#4] ~@5 g4 ~@3 d4 ~",
  J: "~@4 [a2,d4,f#4] ~@5 [a2,d4]@2 ~@2 [a2,a3,c#4]@2", K: "~@4 [f#2,d4,f#4] ~@5 g4@2 ~@4",
  L: "~@4 [c4,e4] ~@11, ~@2 c3 ~@5", M: "~@4 [b2,b3,d4] ~@9 a3@2", N: "~@4 [d4,f#4] ~@5 g4 ~@3 d4 ~",
  O: "~@4 [d4,f#4] ~@5 d4@2 ~@2 [a3,c#4]@2", // D A
})).s("gm_lead_2_sawtooth").gain(0.2)

// chords · pad halo · C Csus2 C Bm A
const pad_halo = note(`<
  ~@23
  [~@6 [c5,e5] ~ [c5,e5] ~ [c5,d5] ~ [c5,d5] ~ [c5,e5] ~]
  [d5 ~ d5@3 ~ [b4,d5] ~ [a4,c#5]@2 ~@2 [a4,c#5]@3 ~]
  ~@99
>`).s("gm_pad_halo").gain(0.31)

// other · celesta
const celesta = note("<~@83 A B C B C B C ~@34>".pickRestart({
  A: "a4 ~ d4 ~ c#4 ~ d4 ~ a4 ~ d4 ~ c#4 ~ d4 ~", B: "a4 ~ d4 ~ c#4 ~ d4 ~ a4 ~ d4 ~ g4 ~ d4 ~",
  C: "f#4 ~ d4 ~ c#4 ~ d4 ~ a4 ~ d4 ~ c#4 ~ d4 ~",
})).s("gm_celesta").gain(0.56)

// other · string ensemble 1
const string_ensemble_1 = note("<~@59 A@2 B@2 A@2 C D ~@48 A@2 B@2 A@2 C E@2>".pickRestart({
  A: "[d6@3 c#6]/2", B: "[d6@3 e6]/2", C: "g6", D: "f#6 e6", E: "[f#6@8 e6@23 ~]/2",
})).s("gm_string_ensemble_1").gain(0.25)

// chords · pad sweep
const pad_sweep = note("<~@83 A B C D E F@2 ~@34>".pickRestart({
  A: "[g3,d4]", B: "[a3,e4]", C: "[b3,f#4]", D: "[a3,d4]", E: "[g3,d4,g4,d5]", F: "[[a3,e4,c#5] [g3,d4,g4,d5], a4]/2",
})).s("gm_pad_sweep").gain(0.39)

// drums · kick
const kick = s("bd").struct("<~@9 A ~@15 B@16 ~@2 B@7 C B@32 ~@8 B@7 C B@20 ~@5>".pickRestart({
  A: "x", B: "x!4", C: "x!2 ~@2",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@25 A@16 ~@2 A@7 B A@32 ~@8 A@28 ~@5>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@17 A@7 ~@17 A B ~@40 A@7 ~@29 A@4 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@25 [~ x ~ x]!16 ~@10 [~ x ~ x]!32 ~@8 [~ x ~ x]!28 ~@5>").gain(0.56)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@17 A@7 B@2 ~@7 B ~@7 A C ~@7 D B ~@7 B ~@7 B ~@7 B ~@7 A@7 B ~@7 D B ~@7 B ~@7 B ~@3 A@4 ~
>`.pickRestart({
  A: "x!4", B: "x", C: "x!2 ~@2", D: "~@2 x!2",
})).gain(0.72)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@17 A@7 ~ A@8 ~@8 A B ~@40 A@7 ~@29 A@4 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@33 [~ x ~ x ~ x ~ x]!8 ~@10 [~ x ~ x ~ x ~ x]!32 ~@16 [~ x ~ x ~ x ~ x]!20 ~@5>")
  .gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@7 A ~@7 A ~@7 A ~@9 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.56)

stack(
  bass, lead_2_sawtooth, lead_2_sawtooth_soft, pad_halo, celesta, string_ensemble_1, pad_sweep, kick, snare, snare_soft,
  clap, low_tom, hihat, hihat_soft, open_hat, crash
)

More by Eiffel 65