Strudelify

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: 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 Y D Z@2 AA D AB@2 AC V
  AD@2 G D AE@2 R S AF AG AH V AI@2 AJ AK P@2 Q ~@3 AL AM AN@2 C AO@3 AP O AQ@3 ~@3 R AM AR@2 AS D AT@2 AU AK AV@2 AW AX
  AY@3 ~@23 AZ S BA@2 AS D BB@2 AP AK BC@2 C BD@2 ~ AZ AM BE@2 BF BG@3 AP O BH@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@2 [d#3,f#3,b3] b2",
  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@3 ~ [d#3,f#3,b3]@7 ~, ~@3 f#3@5 ~@24]/2", // B G#m B
  N: "f#2@8 ~ f#3@3 f#2@4, ~@2 [a#3,c#4] ~", 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@2 [g#3,b3,d4,e4] e3", 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: "b2@8 [d#3,f#3,b3]@4 b2@3 ~", Z: "[[d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@11 b2@5 [d#3,f#3,b3]@2 ~@2]/2",
  AA: "~@4 b2@4 [d#3,f#3,b3]@4 b2@3 ~", AB: "[[d#3,f#3,b3]@8 b2@3 ~ [d#3,f#3,b3]@20]/2",
  AC: "~@4 [d#3,f#3] ~ b2@2, ~@8 b3 ~@7", // D#m
  AD: "[[d#3,f#3,b3]@8 b2@3 ~ [d#3,b3]@12 b2@4 [d#3,f#3,b3] ~@3, ~@11 f#3@13 ~@8]/2", // B G#m B
  AE: "[[d#3,f#3,b3]@8 b2@4 [d#3,f#3,b3]@8 b2@3 ~ [d#3,f#3,b3]@8]/2", AF: "[g#3,b3,d4,e4]@8 e3@3 ~ [g#3,b3,d4,e4]@3 ~",
  AG: "~ [g#3,b3,d4,e4] e3 [g#3,b3,d4,e4]", AH: "b2@2 [d#3,f#3,b3] b2, ~@8 a3 ~@7",
  AI: "[[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", AJ: "[f#2,g#2]@2 [f#3,a#3,c#4] f#2",
  AK: "[f#3,a#3,c#4]@12 f#2@3 ~", AL: "[e2,e3]@8 [g#3,b3,d4,e4]@3 ~ e3@4", AM: "[g#3,b3,d4,e4]@3 e3",
  AN: "[[g#3,b3,d4,e4] ~@3 e3@2 g#3@4 e3@2 ~@2 b3@2, ~@3 e4@5, ~@12 [b3,d4]@11 ~ g#3@8]/2", // E7 Bm
  AO: "[[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
  AP: "f#2@2 [f#3,a#3,c#4] f#2", // F#
  AQ: "[[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
  AR: "[[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
  AS: "b2@7 ~ [d#3,f#3,b3]@4 b2@4", AT: "[[d#3,f#3,b3]@2 b2 [d#3,f#3,b3]@2 b2 [d#3,f#3,b3]@2]/2",
  AU: "f#2@8 [f#3,a#3,c#4]@4 f#2@3 ~", // F#
  AV: "[[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#
  AW: "b2@7 ~ [d#3,b3]@4 b2@4, ~@7 f#3@5 ~@4", AX: "[d#3,f#3,b3]@15 ~",
  AY: "[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
  AZ: "e3@8 [g#3,b3,d4,e4]@3 ~ e3@4", // E7
  BA: "[[g#3,b3,d4,e4]@8 e3@4 [g#3,b3,d4,e4]@11 e3@4 ~ [b3,d4,e4]@3 ~, ~@27 g#3@4 ~]/2", // E7
  BB: "[[d#3,f#3,b3]@8 b2@3 ~ [d#3,f#3,b3]@8 b2@3 ~ [d#3,f#3,b3]@8]/2", // B
  BC: "[[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]@7 ~]/2", // F#
  BD: "[[d#3,f#3,b3]@13 ~@3 b3@13 ~@3, ~@15 [b2,d#3,f#3]@13 ~@4]/2", // B
  BE: "[[g#3,b3,d4,e4] ~@3 [g#3,b3,d4,e4]@4 e3@4 [g#3,b3,d4,e4]@12 e3@3 ~ [b3,d4,e4]@4, ~@27 g#3@4 ~]/2", // E7
  BF: "~@2 [d#3,f#3,b3] b2", // B
  BG: "[[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
  BH: "[[f#3,a#3,c#4]@8 f#2@4 [f#3,a#3,c#4]@8 f#2@3 ~ [f#3,c#4]@6 ~@2 [b2,b3,d#4]@5 ~@11, ~@23 a#3@6 ~@2 f#3@5 ~@12]/3", // F# F#5 B
})).s("gm_piano").gain(0.56)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@5 A B A C A D E F A B A D A D G H I J I K L M L N O P Q R S ~@3 T U T V W D A X Y Z AA AB S ~@3 G AC A AD A AE E AF
  A D A D AG D A X T U T V W D A X Y Z AA AB S ~@3 AH AI AH AJ A B A AK AL AM AL AN S ~@3 T AO AP AQ A AC AG AR AL AS AA
  AT AG AU AV AW S ~@2 AX S ~@2 AY AZ ~@2 BA BB ~@2 BC BD ~ BD ~ BE BF BG BH AH BI AH BJ A AC G BK AL BL AL BM BN BO BP
  BQ AH BR T BS A AE A BT BU BV Y BW BB ~@5 BX BY@6 ~
>`.pickRestart({
  A: "b1@2 ~ d2", B: "d#2 ~@3 f#2@4 g#2@4 f#2@4", C: "d#2@2 ~@2 f#2@4 g#2@4 f#2@3 ~", D: "d#2 ~@3 f#2@4 g#2@4 f#2@3 ~",
  E: "b1 ~@3 b1@4 a1 ~@3 a1@4", F: "g#1 ~ g#1@2 f1@2 f#1@2", G: "b1@9 ~@3 d2@4", H: "d#2 ~@3 f#2@3 ~ g#2@4 f#2@3 ~",
  I: "e1@9 ~@3 g#1@4", J: "b1 ~@3 b1@3 ~ c#2@4 b1@3 ~", K: "b1 ~@3 b1@3 ~ a1@4 a#1@4", L: "b1@2 ~ d#2",
  M: "f#2 ~@3 f#2@3 ~ g#2@4 f#2@3 ~", N: "f#2 ~@3 f#2@3 ~ g#2@4 f#2@2 ~@2", O: "f#1@9 ~@3 a#1@4",
  P: "c#2 ~@3 c#2@4 d#2@3 ~ c#2@3 ~", Q: "f#2 ~@3 f#2@3 ~ e2 ~@3 e2@4", R: "d2 ~@3 d2@2 ~@2 f#1@4 g#1@3 ~",
  S: "b1@5 ~@11", T: "e1@2 ~ g1", U: "g#1 ~@3 b1@3 ~ c#2@4 b1@3 ~", V: "g#1 ~@3 b1@4 c#2@3 ~ e1@4", W: "b1@7 ~@5 d2@4",
  X: "d#2 ~@3 f#2@4 g#2@4 f#2@2 ~@2", Y: "f#1@8 ~@4 a1@3 ~", Z: "a#1 ~@3 c#2@4 d#2@4 c#2@3 ~", AA: "f#1@2 ~ a1",
  AB: "a#1 ~@3 c#2@4 f#1@4 g#1@3 ~", AC: "d#2 f#2 g#2 f#2", AD: "d#2@4 f#2@3 ~ g#2@4 f#2@4",
  AE: "d#2@4 f#2@3 ~ g#2@4 f#2@3 ~", AF: "g#1 ~@3 g#1@4 f#1@4 g#1@3 ~", AG: "b1@8 ~@4 d2@3 ~", AH: "e1@9 ~@3 g1@4",
  AI: "g#1 ~@3 b1@4 c#2@4 b1@4", AJ: "g#1 ~@3 b1@4 c#2@3 ~ f#1@4", AK: "e2 ~@3 f#2@4 g#2@4 f#2@3 ~",
  AL: "f#1@9 ~@3 a1@4", AM: "b1 ~@3 c#2@4 d#2@4 c#2@3 ~", AN: "b1 ~@3 c#2@3 ~ f#1@4 g#1@4",
  AO: "g#1@4 b1@4 c#2@3 ~ b1@4", AP: "e1@9 ~@3 g1@3 ~", AQ: "g#1 b1 c#2 f#1", AR: "d#2@3 ~ f#2@4 g#2@4 f#2@2 ~@2",
  AS: "b1@3 ~ c#2@4 d#2@4 c#2@4", AT: "b1 c#2 d#2 f#1", AU: "d#2@4 f#2@4 g#2@4 b1@3 ~",
  AV: "f#2@3 ~ f#1@3 ~ f#1@2 ~@2 f#1@2 ~@2", AW: "f#1@2 ~@2 f#1@2 ~@2 f#1@3 ~ a#1@4", AX: "~@8 a1@7 ~",
  AY: "~@8 f#1@7 ~", AZ: "e1@3 ~@5", BA: "~@8 d2@7 ~", BB: "b1@3 ~@5", BC: "~@4 a1@11 ~", BD: "f#1@3 ~@5",
  BE: "b1@2 ~@2 b1@3 ~ b1@3 ~ b1@4", BF: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", BG: "c#2@2 ~@2 c#2@3 ~ c#2@3 ~ c#2@3 ~",
  BH: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", BI: "g#1 b1 c#2 b1", BJ: "g#1 b1 c#2 e1", BK: "d#2@4 f#2@4 g#2@4 f#2@3 ~",
  BL: "a#1@4 c#2@4 d#2@4 c#2@3 ~", BM: "a#1 c#2 d#2 f#1", BN: "b1@9 ~@3 d2@3 ~", BO: "d#2@3 ~ f#2@4 g#2@4 f#2@3 ~",
  BP: "b1@7 ~ c#2@8", BQ: "d2 d#2", BR: "g#1@3 ~ b1@3 ~ c#2@4 b1@3 ~", BS: "g#1@4 b1@3 ~ c#2@4 e1@3 ~",
  BT: "d#2@3 ~ f#2@3 ~ g#2@4 f#2@3 ~", BU: "f#1@10 ~@2 a1@3 ~", BV: "a#1@3 ~ c#2@3 ~ d#2@4 c#2@3 ~",
  BW: "a#1@3 ~ c#2@3 ~ d#2@4 f#1@3 ~", BX: "~@11 d2@5", BY: "[~ 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]@5 ~@11] ~@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 F ~@2 B@3 G ~@2
>`.pickRestart({
  A: "x!4", B: "~ x", C: "x!2", D: "x", E: "~@9 x ~@6", F: "~@5 x ~@2", G: "~@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