Strudelify
I Feel Lucky cover art

1992 · Come On Come On

I Feel Lucky

Carpenter

KeyB majorTempo128 bpm
0:00/0:00
// I Feel Lucky — Carpenter
// 128 bpm, 2/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 183 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/2)

// 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.

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B@2 ~@2 C D E@3 D F@2 G D H@3 D I@2 J@2 K@2 L D M@2 N O P@2 Q ~@3 R S T@2 U V W@3 O X@2 Q ~@3 C D Y@2 G D F@2 Z D
  AA@2 G D AB@2 R S AC AD L V AE@2 AF O P@2 Q ~@3 AG AH AI@2 C AJ@3 N O AK@3 ~@3 R S AL@2 C D AM@2 AN AO AP@2 C AQ AR@3
  ~@23 R S AL@2 C D AM@2 N O P@2 C AS@2 ~ R S AT@2 U AU@3 N O AK@3 ~@13
>`.pickRestart({
  A: "~@7 d4 ~@2 f4@2 f#4@2 ~@2, ~@4 d#4 ~@3, ~@9 e4@2 ~@5", B: "[[f#4,b4]@29 ~@3]/2", C: "b2@7 ~ [d#3,f#3,b3]@4 b2@4",
  D: "[d#3,f#3,b3]@3 b2", E: "[[d#3,f#3,b3]@2 b2 [d#3,f#3,b3]@6 b2 [d#3,f#3,b3] b2]/3",
  F: "[[d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@19 ~]/2", G: "~ b2 [d#3,f#3,b3] b2",
  H: "[[d#3,f#3,b3]@2 b2 [d#3,f#3,b3]@3 b2 [d#3,f#3,b3]@2 b2 [d#3,f#3,b3] b2]/3", // B
  I: "[[d#3,f#3,b3]@2 b2 [d#3,f#3,b3]@4 ~]/2", // B
  J: "[e3@8 [g#3,b3,d4,e4]@4 e3@3 ~ [g#3,b3,e4]@12 e3@4, ~@15 d4@13 ~@4]/2", // E7 E
  K: "[[g#3,b3,d4,e4]@8 e3@3 ~ [g#3,d4]@7 ~ e3@4 ~@3 b3@4 ~, ~@3 e4@5, ~@3 b3@3 g#3@2]/2", // E7 G#dim
  L: "b2@7 ~ [d#3,f#3,b3]@4 b2@4, ~@8 a3 ~@7", // B
  M: "[[d#3,f#3,b3] ~@3 [d#3,b3]@4 b2@4 [d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@8, ~@3 f#3@5 ~@24]/2", // B G#m B
  N: "f#2@2 [f#3,a#3,c#4] f#2", O: "[f#3,a#3,c#4]@3 f#2",
  P: "[[f#3,a#3,c#4]@8 f#2@3 ~ [f#3,a#3,c#4]@8 f#2@3 ~ [f#3,a#3,c#4]@6 ~@2]/2", Q: "[b2,f#3,b3,d#4] ~@3",
  R: "e3@8 [g#3,b3,d4,e4]@3 ~ e3@4", S: "[g#3,b3,d4,e4]@12 e3@3 ~",
  T: "[[g#3,b3,d4,e4]@8 e3@3 ~ [g#3,b3,d4,e4]@18 ~@2]/2", U: "~@8 [d#3,f#3,b3]@4 b2@3 ~", V: "[d#3,f#3,b3]@12 b2@3 ~",
  W: "[[d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@8 b2@3 ~ [d#3,f#3,b3]@7 ~ f#2@8 [f#3,a#3,c#4]@4 f#2@4, ~@31 g#2@9 ~@8]/3", // B F#
  X: "[[f#3,a#3,c#4]@9 f#2@3 f#3@8 f#2@3 ~ f#3@7 ~, ~@12 c#4@17 ~@3, ~@12 a#3@11 ~@9]/2", // F#
  Y: "[[d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@11 b2@5 [d#3,f#3,b3]@2 ~@2]/2", Z: "~@4 [d#3,f#3] ~ b2@2, ~@8 b3 ~@7",
  AA: "[[d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@12 b2@4 [d#3,f#3,b3] ~@3]/2", // B
  AB: "[[d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@8 b2@3 ~ [d#3,f#3,b3]@7 ~]/2", // B
  AC: "[g#3,b3,d4,e4]@8 e3@3 ~ [g#3,b3,d4,e4]@3 ~", AD: "~ [g#3,b3,d4,e4] e3 [g#3,b3,d4,e4]",
  AE: "[[d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@8 b2@4 ~@4 f#3@3 ~, ~@24 d#3@7 ~]/2", AF: "[f#2,g#2]@2 [f#3,a#3,c#4] f#2",
  AG: "[e2,e3]@8 [g#3,b3,d4,e4]@3 ~ e3@4", AH: "[g#3,b3,d4,e4]@3 e3",
  AI: "[[g#3,b3,d4,e4]@2 ~@6 e3@4 g#3@8 e3@4 ~@3 b3@4 ~, ~@3 e4@5, ~@12 [b3,d4]@11 ~ g#3@8]/2", // E7 Bm
  AJ: "[[d#3,f#3,b3]@12 b2@3 ~ [d#3,b3]@8 b2@4 [d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@8, ~@15 f#3@8 ~@25]/3", // B G#m B
  AK: "[[f#3,a#3,c#4]@8 f#2@3 ~ [f#3,a#3,c#4]@8 f#2@3 ~ [f#3,a#3,c#4]@5 ~@3 [b2,b3,d#4]@4 ~@12, ~@31 f#3@4 ~@13]/3", // F# B
  AL: "[[g#3,b3,d4,e4]@8 e3@3 ~ [g#3,b3,d4,e4]@12 e3@3 ~ e4@3 ~, ~@27 [g#3,b3,d4]@4 ~]/2", // E7 G#dim
  AM: "[[d#3,f#3,b3]@2 b2 [d#3,f#3,b3]@2 b2 [d#3,f#3,b3]@2]/2", AN: "f#2@8 [f#3,a#3,c#4]@4 f#2@3 ~",
  AO: "[f#3,a#3,c#4]@12 f#2@3 ~", // F#
  AP: "[[f#3,a#3,c#4] ~@3 [f#3,a#3,c#4]@4 f#2@4 [f#3,a#3,c#4]@8 f#2@3 ~ [f#3,a#3,c#4]@6 ~@2]/2", // F#
  AQ: "[d#3,f#3,b3]@15 ~", // B
  AR: "[f#2@2 [c#3,f#3,a#3]@3 ~ [c#3,f#3,a#3]@4 f#2@2 c#3@2 ~@2 [d#3,b3]@2 ~@6, ~@7 f#3@2 ~@3]/3", // F# G#m
  AS: "[[d#3,f#3,b3]@13 ~@3 b3@13 ~@3, ~@15 [b2,d#3,f#3]@13 ~@4]/2", // B
  AT: "[[g#3,b3,d4,e4] ~@3 [g#3,b3,d4,e4]@4 e3@4 [g#3,b3,d4,e4]@12 e3@3 ~ e4@3 ~, ~@27 [g#3,b3,d4]@4 ~]/2", // E7 G#dim
  AU: "[[d#3,f#3,b3]@12 b2@3 ~ b3@8 b2@4 [d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@8, ~@15 [d#3,f#3]@8 ~@25]/3", // B D#m
})).s("gm_piano").gain(0.56)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@5 A B A B A B C D A B A B A B A E F G F H I J I K L M N O P ~@3 Q R Q S A B A E T U V W P ~@3 A X A X A X C Y A B A
  B Z B A E Q R Q S A B A E T U V W P ~@3 Q R Q AA A B A AB T AC T AD P ~@3 Q AE Q AF A X A AG T AH T AI A AJ AK AL P
  ~@2 AM P ~@2 AN AO ~@2 AP P ~@2 AQ AR ~ AR ~ AS AT AU AV Q AW Q AX A X A X T AY T AZ A BA BB BC Q AE Q AX A BD A AG T
  AY BE BF P ~@5 BG BH@6 ~
>`.pickRestart({
  A: "b1@2 ~ d2", B: "d#2 ~@3 f#2@4 g#2@4 f#2@3 ~", C: "b1 ~@3 b1@4 a1 ~@3 a1@4", D: "g#1 ~ g#1@2 f1@2 f#1@2",
  E: "d#2 ~@3 f#2@4 g#2@4 f#2@2 ~@2", F: "e1@9 ~@3 g#1@4", G: "b1 ~@3 b1@3 ~ c#2@4 b1@3 ~",
  H: "b1 ~@3 b1@3 ~ a1@4 a#1@4", I: "b1@2 ~ d#2", J: "f#2 ~@3 f#2@3 ~ g#2@4 f#2@3 ~",
  K: "f#2 ~@3 f#2@3 ~ g#2@4 f#2@2 ~@2", L: "f#1@9 ~@3 a#1@4", M: "c#2 ~@3 c#2@4 d#2@3 ~ c#2@3 ~",
  N: "f#2 ~@3 f#2@3 ~ e2 ~@3 e2@4", O: "d2 ~@3 d2@2 ~@2 f#1@4 g#1@3 ~", P: "b1@5 ~@11", Q: "e1@2 ~ g1",
  R: "g#1 ~@3 b1@3 ~ c#2@4 b1@3 ~", S: "g#1 ~@3 b1@4 c#2@3 ~ e1@4", T: "f#1@9 ~@3 a1@4",
  U: "a#1 ~@3 c#2@4 d#2@4 c#2@3 ~", V: "f#1@2 ~ a1", W: "a#1 ~@3 c#2@4 f#1@4 g#1@3 ~", X: "d#2 f#2 g#2 f#2",
  Y: "g#1 ~@3 g#1@4 f#1@4 g#1@3 ~", Z: "b1@8 ~@4 d2@3 ~", AA: "g#1 ~@3 b1@4 c#2@3 ~ f#1@4",
  AB: "e2 ~@3 f#2@4 g#2@4 f#2@3 ~", AC: "b1 ~@3 c#2@4 d#2@4 c#2@3 ~", AD: "b1 ~@3 c#2@3 ~ f#1@4 g#1@4",
  AE: "g#1@4 b1@4 c#2@3 ~ b1@4", AF: "g#1 b1 c#2 f#1", AG: "d#2@3 ~ f#2@4 g#2@4 f#2@2 ~@2",
  AH: "b1@3 ~ c#2@4 d#2@4 c#2@4", AI: "b1 c#2 d#2 f#1", AJ: "d#2@4 f#2@4 g#2@4 b1@3 ~",
  AK: "f#2@3 ~ f#1@3 ~ f#1@2 ~@2 f#1@2 ~@2", AL: "f#1@2 ~@2 f#1@2 ~@2 f#1@3 ~ a#1@4", AM: "~@8 a1@7 ~",
  AN: "~@8 f#1@7 ~", AO: "e1@3 ~@5", AP: "~@8 d2@7 ~", AQ: "~@4 a1@11 ~", AR: "f#1@3 ~@5",
  AS: "b1@2 ~@2 b1@3 ~ b1@3 ~ b1@4", AT: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", AU: "c#2@2 ~@2 c#2@3 ~ c#2@3 ~ c#2@3 ~",
  AV: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", AW: "g#1 b1 c#2 b1", AX: "g#1 b1 c#2 e1", AY: "a#1@4 c#2@4 d#2@4 c#2@3 ~",
  AZ: "a#1 c#2 d#2 f#1", BA: "d#2@4 f#2@4 g#2@4 f#2@3 ~", BB: "b1@7 ~ c#2@8", BC: "d2 d#2",
  BD: "d#2@4 f#2@3 ~ g#2@4 f#2@4", BE: "f#1@8 ~@4 a1@3 ~", BF: "a#1@3 ~ c#2@3 ~ d#2@4 f#1@3 ~", BG: "~@11 d2@5",
  BH: "[~ c#2@4 ~@10 b1@70 ~@3 b1@8]/6",
})).s("gm_electric_bass_finger").gain(0.46)

// other · orchestra hit · "ORCH.HIT" · A F#
const orchestra_hit = note("<~@132 [~ [a4,a5]@3] [[f#4,f#5] ~@3] ~ [[f#4,f#5] ~@3] ~@47>")
  .s("gm_orchestra_hit").gain(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~@2 C A B A B A B A B A B A B A ~@3 A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A ~@3 A B A B A B A B A B A B A ~@3 A B A B A B A B A B A B A B A B D A E A D A E
  A D A E A D A E B D A E A B@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~@2 F ~@2 G H ~@4 I ~
>`.pickRestart({
  A: "x", B: "x!2 ~@2", C: "~ x ~@2", D: "x ~@2 x", E: "~@3 x", F: "~@9 x ~@6", G: "~@5 x ~@2", H: "x ~@12 x ~@2",
  I: "~ x",
})).gain(0.66)

// drums · snare
const snare = s("sd").struct("<~@3 A B C@28 ~@3 C@13 ~@4 C@7 D C@20 ~@4 C@12 ~@3 E C@68 ~@3 F ~@10>".pickRestart({
  A: "~ x!3", B: "x!4", C: "~ x", D: "~@4 x ~ x!2", E: "~ x!2 ~", F: "~@4 x ~ x!2 ~@8",
})).gain(0.66)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@32 A ~@3 A ~@15 A ~@31 A ~@11 A ~@3 B ~@15 C ~@23 D ~@15 A ~@11 E ~@6 F G ~@6
>`.pickRestart({
  A: "~ x", B: "~ x!2 ~", C: "~@3 x", D: "~ x ~ x", E: "~@6 x!2", F: "~@5 x ~@2", G: "x",
})).gain(0.66)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A@28 B@3 ~ A@12 B@4 A@28 B@4 A@12 B@4 A@16 C@3 D C@3 D C@3 D C@3 D C@4 A@32 B@3 E B E ~@2 B@3 F ~@2
>`.pickRestart({
  A: "x!4", B: "~ x", C: "x!2", D: "x", E: "~@9 x ~@6", F: "~@11 x ~@4",
})).gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A B ~@27 C ~@15 D ~@3 C ~@27 D ~@3 C ~@11 C ~@19 E ~@23 F ~@15 C ~@26
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "~@2 x!2 ~@4", D: "~ x", E: "~ x ~@2", F: "~@2 x ~ x!2 ~@2",
})).gain(0.66)

// drums · open hat
const open_hat = s("oh").struct("<~@120 A ~@3 A ~@3 A ~@3 B ~@50>".pickRestart({
  A: "~ x", B: "~ x ~@2",
})).gain(0.66)

// drums · high tom
const high_tom = s("ht").struct("<~@48 A ~@31 A ~@34 B C ~@22 D C ~@42>".pickRestart({
  A: "~@2 x!2 ~@4", B: "~@3 x", C: "x", D: "~@6 x!2",
})).gain(0.66)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@7 A ~@19 A ~@3 A ~@11 A ~@11 A ~@19 A ~@3 A ~@11 A ~@3 A ~@7 A ~@7 A ~@7 A ~@6 B ~@4 C@4 A ~@15 A ~@11 A ~@6 D
  ~@4 C ~
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~ x", D: "~@13 x ~@2",
})).gain(0.66)

// drums · ride
const ride = s("rd").struct("<~@53 A@8 ~@24 A@12 ~@4 A@10 B ~@29 A@14 B ~ A@11 C ~@14>".pickRestart({
  A: "x!4", B: "x", C: "x!3 ~",
})).gain(0.52)

stack(piano, bass, orchestra_hit, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride)

More by Carpenter