Strudelify

I'm Gonna Be a Wheel Someday

Fats Domino

KeyB♭ majorTempo122 bpm
0:00/0:00
// I'm Gonna Be a Wheel Someday — Domino Fats
// 122 bpm, 2/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 140 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/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 A C D E F G F H I J K@2 L M K H N O P Q R S T@2 U V W X@3 R H Y S D E F G F H I J K@2 L M K H N O P Q R Z T@2 U V
  W X@3 R H Y S AA ~ AA ~ D E F G F H I J K@2 L M K H N O P Q R Z T@2 U V W X@3 R H Y S D E F G F H I J K@2 L M K H N O
  P Q R Z T@2 U V W X@3 R H AB@6
>`.pickRestart({
  A: "~@4 [bb3,d4,f4]@3 ~@5 [f3,a3,c4]@3 ~, bb2@8 f2@7 ~", B: "bb2 ~@3", C: "bb2@3 ~ f2@4 g2@2 ~@2 a2@3 ~",
  D: "~@4 [c4,d4,f4]@3 ~@5 [bb3,d4,f4]@4", E: "~@4 [d4,f4]@5 ~@3 [bb3,d4,f4]@4, ~@4 c4@3 ~@9",
  F: "~@2 [c4,d4,f4]@3 ~ [bb3,d4,f4]@2", G: "~@4 [c4,d4,f4]@5 ~ [bb3,d4,f4]@6",
  H: "~@4 [bb3,d4,f4]@6 ~@2 [bb3,d4,f4]@3 ~", I: "~@4 [f3,a3,c4]@6 ~@2 [f3,a3,c4]@3 ~",
  J: "~@4 [bb3,d4,f4]@5 ~ [d4,f4]@5 ~, ~@10 bb3@3 ~@3", K: "~@2 [bb3,d4,f4]@3 ~ [c4,d4,f4]@2",
  L: "~@4 [bb3,d4,f4]@5 ~@3 [c4,d4,f4]@4", M: "~@4 [bb3,d4,f4]@5 ~ [d4,f4]@4 ~@2, ~@5 c4 ~@2",
  N: "~@4 [f3,a3,c4]@5 ~@3 [a3,c4]@4", O: "~@4 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@6",
  P: "~@4 [bb3,eb4,g4]@5 ~@3 [bb3,eb4,g4]@4", Q: "~@4 [bb3,eb4,g4]@5 ~ [bb3,eb4]@6, ~@10 g4@3 ~@3",
  R: "~@4 [bb3,d4,f4]@5 ~@3 [bb3,d4,f4]@4", S: "~@4 [bb3,d4,f4]@5 ~ [d4,f4]@6, ~@10 bb3@3 ~@3",
  T: "[~@4 [c4,e4,g4]@6 ~@2 [c4,e4,g4]@7 ~ [c4,e4,g4]@5 ~ [c4,e4,g4]@4 ~@2]/2", // C
  U: "~@2 [f3,a3,c4]@3 [a3,c4]@3, ~@10 f3@3 ~@3", V: "~@4 [f3,a3,c4]@5 ~ [a3,c4]@4 ~@2, ~@5 f3 ~@2",
  W: "~@2 [bb3,d4,f4]@3 ~ [bb3,d4,f4]@2", // Bb
  X: "[~@4 [bb3,d4,f4]@6 ~@2 [bb3,d4,f4]@7 ~ [bb3,d4,f4]@5 ~@3 bb3@5 ~@3 bb3@5 ~ [d4,f4]@6, ~@28 [d4,f4]@13 ~ c4@3 ~@3]/3", // Bb Dm
  Y: "~@4 [f3,a3,c4]@5 ~@3 [a3,c4]@4, ~@12 f3 ~@3", Z: "~@4 [bb3,d4,f4]@5 ~ [d4,f4]@4 bb3@2, ~@10 bb3@3 ~@3",
  AA: "~@4 [bb3,d4,f4]@3 ~@5 [f3,a3,c4]@3 ~", // Bb F
  AB: "[[a3,c4]@8 [a3,c4,f4]@11 ~@31 d5 ~ f5 ~ [d5,f5]@29 ~@13, f3@5 [bb3,d4,f4,bb4]@16 ~@3, ~@52 bb5@31 ~@13]/6", // Am F Dm Bb
})).s("gm_piano").gain(0.38).pan(0.4)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G H I J K G I L M N O P Q R S T I U V W X Y Z I AA AB I AC AD D G I@2 AE I P AF G AG AH I AI I AJ AK AL AM
  T I AN AO W AP AQ G@2 H O AA AC AR AS AT AU AT AV AW AA Z AX G AY AZ G Z H I BA I BB X BC BD BE I BF BG BH BI AQ G H I
  BJ I AJ BK BL I BM I BN O BO BP BQ O BM O BR AA BS BT BQ S BU I BV AO BW BX BY I BM O AI O BM BZ@6
>`.pickRestart({
  A: "bb1@3 ~ f1@3 ~", B: "bb1@3 ~@13", C: "bb1@5 ~@3 f1@6 ~@2", D: "bb1@2 ~@2 f1@3 ~ g1@3 ~ a1@2 ~@2",
  E: "bb1@5 ~@3 f2@6 ~@2", F: "bb1@6 ~@2 f2@3 ~ g2@3 ~", G: "bb1@3 ~ f2@3 ~", H: "bb1@6 ~@2 d2@3 ~ f2@3 ~",
  I: "bb1@3 ~ d2@3 ~", J: "f2@7 ~ bb1@5 ~@3", K: "f1@7 ~ c2@4 f1@2 ~@2", L: "f2@6 ~@2 bb1@2 ~@2 f2@3 ~",
  M: "bb1@5 ~@3 d2@5 ~@3", N: "f2@7 ~ bb1@3 ~ bb2@2 ~@2", O: "bb1@7 ~ d2@6 ~@2", P: "f2@3 ~ bb1@3 ~",
  Q: "f1@6 ~@2 f1@7 ~", R: "bb1@7 ~ d2@5 ~@3", S: "eb2@7 ~ g2@7 ~", T: "bb2@6 ~@2 g2@2 ~@2 eb2@3 ~",
  U: "f2@6 ~@2 bb1@4 d2@3 ~", V: "c2@3 ~ e2@3 ~", W: "g2@7 ~ c2@3 ~ c2 ~@3", X: "f1@3 ~ c2@3 ~",
  Y: "f1@3 ~ g1@2 ~@2 a1@3 ~ bb1@2 ~@2", Z: "bb1@7 ~ f2@7 ~", AA: "bb1@6 ~@2 d2@7 ~", AB: "f2@6 ~@2 bb2@7 ~",
  AC: "f2@3 ~ d2@2 bb1 ~", AD: "f1@5 ~@3 f1@5 ~@3", AE: "f2@3 ~ g2 ~ f2 ~", AF: "f1@3 ~ f1@3 ~",
  AG: "bb1@6 ~@2 d2@5 ~@3", AH: "f2@5 ~@3 f2@3 ~ g2@3 ~", AI: "f2@7 ~ bb2@3 ~ f2@3 ~", AJ: "f2@3 ~ g2@2 f2 ~",
  AK: "f1@6 ~@2 c2@7 ~", AL: "bb1@7 ~ f2@4 bb2@3 ~", AM: "eb2@3 ~ g2@3 ~", AN: "f2@6 ~@2 bb1@5 ~@3",
  AO: "c2@7 ~ e2@6 ~@2", AP: "f1@3 ~ f2@4", AQ: "~@4 f1@3 ~ g1@3 ~ a1@2 ~@2", AR: "f1@7 ~ c2@6 ~@2", AS: "bb1@13 ~@3",
  AT: "bb1@7 ~ f1@6 ~@2", AU: "bb1 ~@7", AV: "bb1@2 ~@2 f1@3 ~ g1@4 a1@2 ~@2", AW: "bb1@6 ~@2 f2@7 ~",
  AX: "bb1@7 ~ d2@3 ~ f2@3 ~", AY: "g2@3 ~ f2@2 bb1 ~", AZ: "f1@3 ~ c2@2 f1 ~", BA: "f2@6 ~@2 bb1@3 ~ d2@2 ~@2",
  BB: "f2@6 ~@2 g2@3 ~ f2 ~@3", BC: "bb1@4 d2@2 ~@2 f2@3 ~ bb1@2 ~@2", BD: "eb2@7 ~ g2@6 ~@2",
  BE: "bb2@6 ~@2 g2@3 ~ eb2@3 ~", BF: "f2@3 ~ bb1@2 d2 ~", BG: "c2@7 ~ g2@6 ~@2", BH: "c3@7 ~ g2@4 ~@4",
  BI: "f1@7 ~ f2@8", BJ: "bb1@6 ~@2 d2@4 f2@3 ~", BK: "f1@4 c2@3 ~", BL: "bb1@4 ~@4 f2@5 ~@3",
  BM: "f2@6 ~@2 g2@2 f2@2 d2@3 ~", BN: "f2@6 ~@2 g2@3 ~ bb2@3 ~", BO: "f2@6 ~@2 g2@3 ~ f2@2 ~@2",
  BP: "f1@3 ~ a1@2 c2 ~", BQ: "bb1@7 ~ d2@4 f2@3 ~", BR: "f2@6 ~@2 f2@3 ~ bb2@3 ~", BS: "f2@7 ~ d2@3 ~ f2@2 ~@2",
  BT: "f1@6 ~@2 a1@3 ~ c2@2 ~@2", BU: "bb2@7 ~ eb2@2 ~@2 g2@3 ~", BV: "f2@3 ~ g2 f2 d2 ~", BW: "g2@7 ~ c2@5 ~@3",
  BX: "f1@7 ~ c2@4 ~@4", BY: "~@4 f1@3 ~ g1@4 a1@2 ~@2", BZ: "[f1@19 ~ bb1@63 ~@13]/6",
})).s("gm_acoustic_bass").gain(0.38)

// drums · kick
const kick = s("bd").struct("<x!134 ~@6>").gain(0.33)

// drums · snare
const snare = s("sd").struct(`<
  A@2 B C D@7 E D@7 E D@7 E D@23 E D@7 E D@8 F A F G D@15 E D@7 A D@7 H D@15 E D@7 A D@6 I J ~@4
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~", B: "x ~ x!3 ~@2 x", C: "~ x!2 ~ x ~ x ~", D: "~ x ~ x", E: "~ x!3", F: "x!2", G: "x!4 ~ x!2 ~",
  H: "~@2 x!2 ~ x!2 ~", I: "x ~@4 x ~@2", J: "~ x ~@2",
})).gain(0.44)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A ~ B ~@2 C ~@17 D ~ E@2 C E D C E@2 D ~@8 E ~@8 C ~@88>".pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2", C: "x", D: "x!2", E: "~ x",
})).gain(0.16)

// drums · hihat
const hihat = s("hh").struct("<A B A B A@65 B A B A@62 ~@6>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.38)

// drums · open hat
const open_hat = s("oh").struct("<~@135 [~@5 x!3] [x!3 ~ x ~@3] ~@3>").gain(0.27)

// drums · crash
const crash = s("cr").struct("<~@134 [x ~@4 x ~@2] [~ x ~@2] ~@4>").gain(0.33)

// drums · ride
const ride = s("rd").struct(`<
  A B A C D C@58 E C@5 F ~ G C@7 H C@3 I C@7 I C@3 J C@3 I C I C@11 K C I C K C@16 F ~@5
>`.pickRestart({
  A: "x!2", B: "x ~ x!2 ~ x!2 ~", C: "x!4", D: "~ x ~ x", E: "x ~ x ~ x!4", F: "x", G: "~ x!3", H: "x ~ x!3 ~ x ~",
  I: "x ~ x ~ x ~ x!2", J: "x ~ x!5 ~", K: "x ~ x ~ x!3 ~",
})).gain(0.33)

stack(piano, bass, kick, snare, snare_soft, hihat, open_hat, crash, ride)

More by Fats Domino