Strudelify

What Kind of Fool Am I

Jr. Sammy Davis

KeyD majorTempo120 bpm
0:00/0:00
// What Kind of Fool Am I — Sammy Davis, Jr.
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 5, 4/4 at bar 6) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@12 A B C D E F G H I J K L A M N O P Q R B P R S T U V W X Y V Z AA A B C D E F G AB AC AD AE AF AG AH AI AJ AK@2
  AL@2 ~@3 AM@4
>`.pickRestart({
  A: "d3@8 a2@7 ~", B: "b2@7 ~ b2@7 ~", C: "e2@7 ~ e3@8", D: "f3@3 ~ e3@3 ~ e3@4 d3@3 ~", E: "c#3 f#2", F: "b2 e3",
  G: "a3@3 e3", H: "a2 ~@7 a2@7 ~", I: "d3@15 ~", J: "b2@7 ~ b2@8", K: "e2@5 e3 e2@2", L: "a2@12 a2@3 ~",
  M: "a2@6 ~@2 a2@5 ~@3", N: "f#3@7 ~ f#2@8", O: "b2@3 ~", P: "e3@7 ~ e3@8", Q: "c3@7 ~ c3@4 ~@4", R: "a2@7 ~ a2@8",
  S: "d3@7 ~ d3@6 a2@2", T: "a2 ~@7", U: "d3@4 ~ d3@2 a2", V: "b2@5 ~ b2 ~ b2@6 b2@2", W: "e2@6 e3@3 ~ e3@2 e2@2 e3@2",
  X: "a2@5 ~ a2 ~ a2@4 g2@3 ~", Y: "f#2@5 ~ f#3 ~ f#3@6 f#2 ~", Z: "e3@3 e2 e3 e2@2 e3", AA: "a2 ~@11 a2@4",
  AB: "a#2 ~@7 a#2@7 ~", AC: "d#3@15 ~", AD: "c3@7 ~ c3@8", AE: "f2@5 f3 f2@2", AF: "a#2@12 a#2@3 ~",
  AG: "d#3@8 a#2@7 ~", AH: "a#2@6 ~@2 a#2@5 ~@3", AI: "g3@7 ~ g2@8", AJ: "c3@13 ~@3",
  AK: "[~@2 f3@8 ~ f3@9 c#3@8 c#3@4]/2", AL: "[~@5 a#2@8 ~ a#2@8 ~ c3 ~@8]/2",
  AM: "[~@15 d#3@3 a#2@2 d#3@2 a#2@2 d#3@2 ~ a#2@2 d#3@2 a#2@2 ~ d#3@18 ~@12]/4",
})).s("gm_acoustic_bass").gain(0.42)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  A B@2 C D@2 E@2 F G H I J K L M N O P Q R@2 E@2 S T U V W@2 X Y Z AA AB AC D@2 E@2 F G H I J K L M N O P AD AE@2 AF@2
  AG AH AI ~ AJ@4 AK@3 AL@4
>`.pickRestart({
  A: "~@2 f#5 g5", B: "[d#5 e5 c#5 ~@3 d5@2, ~@3 d5@3 ~@2, ~ a5]/2", C: "[a3,e4,a4,c#5] ~@3",
  D: "[~ a3, d3@7 a4@9, f#4@5 c#4@11, c#4@2 a3 f#4@5, a3@3 f#3@13]/2",
  E: "[e3@5 ~@5 b3@5 ~, [g3,d4]@15 ~, g4@7 g4@8 ~, b3@3 b3@2 ~@3, ~@5 e3@3 [e3,d5]@7 ~]/2", // G5 E7
  F: "~@6 c#4@2 [a3,c#4,f#4]@7 ~, [f#2,e4]@15 ~, c#4@3 ~@5, a3!2 ~@2, ~@2 f#3@13 ~", // F#m F#7
  G: "~@8 c#4@7 ~, b2@15 ~, [f#3,f4]@4 f#4@11 ~, ~@2 a3@13 ~, ~@6 f#3@9 ~", // F#maj7
  H: "e3@3 ~@3 d4@2, [f#4,a4], d4@5 b3@3, b3 g3, g3@3 e3@5", I: "[a2,g3,b3,d4,g5,b5,d6] ~@15",
  J: "~@3 f#4, [d3,a4], f#4@5 c#4@3, c#4 a3, a3@3 f#3@5", K: "[d4,f#4] [b3,d4,f#4], [b2,a3]",
  L: "~ g#2 ~@14, [e2,b2,g#3,b3,d4,e4]", M: "~@8 [b3,e4]@3 ~ [b3,d4]@3 ~",
  N: "[c#3,g#3,c#4,e4]@8 [c#3,f#3,a3,c#4,f#4,a4]@7 ~", // C#m F#m
  O: "a3@4 ~@2 d4@2 ~@4 [d4,g#4]@3 ~, [b2,f#4]@8 e3@7 ~, d4@3 ~@5, ~@4 a3@4 ~@2 b3@5 ~", // Ddim B5
  P: "~@7 a4, [a2,d4]@3 b3, b3@5 g3@3, g3 e3, ~@3 g4@5", Q: "[a2,e3,c#4,d#4,e4,a4] ~@15",
  R: "[~@4 [a3,c#4] [a3,c#4,f#4]@3, d3, f#4@5 c#4 f#4@4 ~@6, c#4@4 a3@3 a4@9, a3@3 f#3@5 [f#3,e4]@8]/2", // A F#m F#7
  S: "~@4 a4 ~ d4@2, [d3,c#4,f#4], a4@4 d4 [e4,a4]@3, a3@3 a3@5, ~ f#3@3", // Dmaj7 A5
  T: "~@3 a3 [c4,e4]@3 ~, [a2,g3,c4,e4]@9 ~@7, ~@4 e3@5 ~@7", // C Am7
  U: "f#3@5 ~@5 c4@2 [a3,c4,e4]@3 ~, e4@3 ~, [a3,c4]@2 a3 ~, ~@6 f#3@9 ~", // Am
  V: "b2@6 ~@4 a3@2 b3 ~@3, d#4@13 ~@3, b3@5 ~@3, [f#3,a3]@8 f#3@5 ~@3, ~@3 b2@4 ~", // F#m
  W: "[~@8 [g4,b4]@7 ~@13 d4@2 ~@2, [e3,d4]@15 c3@7 c3@8 ~@2, [g4,b4]@3 e4@5 d4@6 ~@2, ~ g3@7 g3@4 g3@3 ~, ~@2 b3@6 a#3@5 a#3@2 ~]/2", // G E7 G
  X: "~@12 d4@3 ~, [d3,f#4]@15 ~, d4@2 d4 ~, ~@6 a3@9 ~, ~@10 [e4,a4]@5 ~", // D A5
  Y: "b2@6 ~@6 d4@3 ~, d4@3 ~, b3@10 b3@5 ~, f#3@8 f#3@7 ~, ~@6 b2@9 ~",
  Z: "~ [g4,b4], [e3,d4], g4@3 e4@5, ~ g3@7, ~ b3@3", AA: "a2@3 ~@2 b3 [b3,d4]@2, d4@3 ~, b3@5 ~@3, g3!2, ~@3 a2@5",
  AB: "~@10 f#4@5 ~, [d3,a3,d4]@15 ~, ~ f#4@4 ~@3, ~@4 f#3@11 ~, ~@6 a4@9 ~", AC: "[g3,b3,d4] ~@15, a2 ~@7",
  AD: "[a#2,f3,d4,e4,f4,a#4] ~@15", // A#
  AE: "[~@4 [a#3,d4] [a#3,d4,g4]@3, d#3, g4@5 d4 g4@4 ~@6, d4@4 a#3@3 a#4@9, a#3@3 g3@5 [g3,f4]@8]/2", // A# Gm G7
  AF: "[f3@5 ~@5 c4@5 ~, [g#3,d#4]@15 ~, g#4@7 g#4@8 ~, c4@3 c4@2 ~@3, ~@5 f3@3 [f3,d#5]@7 ~]/2", // G#5 F7
  AG: "~@4 a#4 ~ d#4@2, [d#3,d4,g4], a#4@4 d#4 [f4,a#4]@3, a#3@3 a#3@5, ~ g3@3", // D#maj7 A#5
  AH: "~@3 a#3 [c#4,f4]@3 ~, [a#2,g#3,c#4,f4]@9 ~@7, ~@4 f3@5 ~@7", // C# A#m7
  AI: "g3@5 ~@5 c#4@2 [a#3,c#4,f4]@3 ~, f4@3 ~, [a#3,c#4]@2 a#3 ~, ~@6 g3@9 ~", // A#m
  AJ: "[~@33 d#4@3 ~@15 d#4@4 [c3,g3,c4,e4] ~@8, ~@2 [f3,d#4]@18 g#3@8 g#3@7 ~@13 [f4,a#4]@6 ~ g4@2 ~@7, ~@2 [g#4,c5]@6 f4@3 [g#4,c5]@9 d#4@13 ~@4 d#4@9 d#4@4 ~@14, ~@4 g#3@16 b3@11 b3@5 ~@8 a#3@10 ~@10, ~@6 c4@12 c#3@8 c#3@9 ~@2 [d#3,g4]@17 ~@10]/4", // C F7 A#5 G# D#
  AK: "[~@4 c4@3 f4@2 [f3,g#3,d#4]@18 [b2,f#3,b3,d#4]@8 ~ [g#3,c4,d#4]@10 ~@2, c3@9 ~@26 a#2@10 ~@3, ~@2 g3@6 ~ c4@8 ~@31]/3", // Fm7 B G#
  AL: "[~@15 [d#3,a#3,d#4,g4]@4 ~ [g#3,c4,d#4]@4 [d#3,a#3,d#4,g4,a#4]@4 ~ [g#3,c4,d#4]@5 [d#3,a#3,d4,g4,a#4]@18 ~@12]/4", // D# G# D# G# D#maj7
})).s("gm_epiano1").gain(0.43)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@3 A B@2 C@2 D E F@3 ~@5 G@2 B@2 C@2 H I J K L ~ M ~ L N O P B@2 C@2 D E F@3 ~@3 Q R S@2 T@2 U@2 V W X Y Z@4 AA AB@6
>`.pickRestart({
  A: "~@2 a3@2 d4@3 e4", B: "[e4@3 f#4 f#4@6 a3@2 e4@2 f#4@2]/2", C: "[f#4@3 g4 g4@6 e4@2 f#4@3 g4]/2",
  D: "a4@3 b4 b4@3 a4", E: "a4@6 b4@2 b4@3 a4@2 g4@3", F: "[f#4@3 e4 e4@6 e4@2 d4@2 c#4@4 ~@6]/3",
  G: "[~@3 g5@5, ~@6 e4@9 ~@17, ~@8 b4@7 ~@17, ~@10 e5@5 ~@17]/2", H: "~ f#5, d4@15 ~, c#5@6 c#5@9 ~, ~@4 a4@11 ~",
  I: "c5", J: "~@5 f#5@3, a4@2 f#5@2 c5@3 ~, ~ c5@2 a4@4 ~", K: "~@3 b3@4 ~, b3@3 ~@5, ~@2 b4@5 ~",
  L: "~@12 [g4,b4] ~@3", M: "~@4 a4 ~@11", N: "~@12 d5 ~@3", O: "~@7 a4, ~@5 d4@3, ~@3 f#4", P: "[a3,g4,b4]",
  Q: "~@4 e5 ~@7 c#5 ~@3", R: "~@4 d5 ~@7 [b4,e5] ~@3",
  S: "[~@3 g5@2 a#3 d#4 f4, ~@6 e4@9 ~@17, ~@8 b4@7 ~@17, ~@10 e5@5 ~@17]/2", T: "[f4@3 g4 g4@6 a#3@2 f4@2 g4@2]/2",
  U: "[g4@3 g#4 g#4@6 f4@2 g4@3 g#4]/2", V: "~ g5, d#4@15 ~, d5@6 d5@9 ~, ~@4 a#4@11 ~", W: "c#5",
  X: "~@5 g5@3, a#4@2 g5@2 c#5@3 ~, ~ c#5@2 a#4@4 ~", Y: "~@4 d#5@3 ~@2 d#5@3 ~ d#5@3, [c4,g4,c5]@15 ~",
  Z: "[~@2 d#5@6 f5@2 ~ f5@17 d#5@9 d#5@7 f5@2 f5@13 ~ d#5@4]/4", AA: "d#5@4 d#5@4 ~ d#5@7",
  AB: "[f5@2 f5@6 d#5@2 ~ d#5@4 f#5@5 f5@14 d#5@4 g5@9 [d#4,a#4,d#5]@5 [c5,d#5,g#5]@4 [d#4,a#4,d#5,g5]@5 [c5,d#5,g#5]@5 [d#4,a#4,d#5,g5]@18 ~@12, ~@47 g5@9 ~@40]/6", // D#5 G# D# G# D#
})).s("gm_acoustic_guitar_nylon").gain(0.54)

// chords · acoustic guitar nylon · "NYLON GTR" · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@12 A B C@2 D E ~@6 F ~@2 G@2 ~ H ~ I J K ~@9 A B C@2 L M ~@6 N ~@14
>`.pickRestart({
  A: "~@4 [f#4,a4,d5] ~@7 [f#4,a4,d5] ~@3", B: "~@4 [f#4,a4,b4] ~@7 [f#4,a4,b4] ~@3",
  C: "~@4 [e4,g#4,b4] ~@7 [e4,g#4,b4] ~@3", D: "~@4 [c#5,e5,g#5] ~@7 [a4,c#5,f#5] ~@3",
  E: "~@4 [b4,d5,f#5] ~@7 [g#4,b4,e5] ~@3", F: "~@2 f#4@13 ~", G: "[~@8 d#5@12 [e4,g4,b4] ~@7 e4 ~@3]/2",
  H: "~@4 [f#4,d5] ~@7 [f#4,a4,d5] ~@3", I: "~@4 [e4,g4,b4] ~@7 e4 ~@3", J: "~@4 [e4,a4,c#5] ~@7 [g4,b4] ~@3",
  K: "~@4 [d4,f#4,a4] ~@11", L: "~@4 [c#5,g#5] ~@7 [a4,f#5] ~@3", M: "~@4 [b4,f#5] ~@7 g#4 ~@3", N: "~@2 g4@13 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.31)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A B C@2 D@2 E@2 F G@2 H ~@5 I J K D@2 E@2 F L M N O P Q R S@2 T U@5 V@3 W X@2 ~ Y@2 Z AA AB AC@2 AD@2 AE AF AG AH AI@4
  AJ@3 AK@4
>`.pickRestart({
  A: "~@2 f#5 g5, ~ [e3,g3,b3,d4,f#4]", B: "d#5 e5 c#5 d5, [g3,a#3,c#4,e4]@7 ~ [e2,e3,g3,b3,d4]@8",
  C: "[d4@4 ~@4 c#4 ~@7, [a2,e3,a3,a5]@9 ~@7]/2", D: "[~ c#4@31, [d2,f#3,a3]]/2", E: "[[g3,b3]@20 e3@4 e3@4 d3@3 ~]/2",
  F: "c#4", G: "[c4@4 c#4@4 f#4@20 e4@3 ~]/2", H: "d4 ~@15", I: "f#4 g#4", J: "a4@12 c#5@3 ~", K: "[c#5,e5] ~@15",
  L: "d4@8 e4@7 ~", M: "f#4@3 g4", N: "f#4@15 ~", O: "[e4,g4,b4]@15 ~", P: "[d4,d5]@7 ~ e5@8, ~@7 e4@9", Q: "[f#4,f#5]",
  R: "d4@7 ~", S: "[d4,g4,b4]/2", T: "[d4,f#4]",
  U: "[[g4,b4,d5] ~@3 [a3,a4]@4 [d4,d5]@4 e4@4 ~@6 f#5@2 f#5@12 a4@4 e5@4 ~@10 g5@2 g5@12 [e3,e5]@4 e3@4 d3@3 ~, ~@6 e5@5 ~@11 f#5@5 ~@9 f#5@4, ~ [d2,f#3,a3]@2 ~@2, ~@17 c#4@31 [g3,b3]@20 ~@12]/5", // G A D E D G
  V: "[a5@6 b5@2 b5@6 ~@2 c4@4 c#4@4 ~@2 a5@3 ~ g5@2 f#5@6 ~@6 e4@3 ~, c#4@4 ~@2 f#4@5 ~, ~@14 a5@6 b5@7 ~@11 e5@10]/3",
  W: "d4 ~@3 f#5@7 e5@2 d5@3", X: "[[f#4,a4,c#5]@3 [e4,g4,b4] e4 ~@3 b4@8, ~ a4 ~@2, ~@7 f#4@8 ~]/2",
  Y: "[~@4 e6@4 f#6@4 g#6@10 a6@2 e6@5 ~ c#6@2]/2", Z: "d6 e6 g#6 e6, f#4 g#4", AA: "a4@12 c#5@3 ~, a6",
  AB: "[d5,f5,f6,a#6] ~@15", AC: "[~ d4@31, [d#2,g3,a#3]]/2", AD: "[[g#3,c4]@20 f3@4 f3@4 d#3@3 ~]/2", AE: "d4",
  AF: "d#4@8 f4@7 ~", AG: "g4@3 g#4", AH: "g4",
  AI: "[~@2 d#5@9 ~@26 d#5@9 f5@9 [a5,c6,f6] ~@8, ~@2 [f4,g#4,c5]@17 ~ [d#4,d#5]@8 f5@18 ~@18, ~@11 f5@16 f4@9 ~ [g4,g5]@18 ~@9]/4", // F Fm D# G
  AJ: "[~@9 [f3,g#3,c4,d#4]@17 ~ [b2,f#3,b3,d#4]@9 [a#2,g#3,c4,d#4]@10 ~@2]/3", // Fm7 B G#
  AK: "[~@15 [d#5,d#6]@2 ~ [d5,d6]@2 [c5,c6]@2 [a#4,a#5]@2 [g#4,g#5]@2 ~ [g4,g5]@2 [f4,f5]@2 [d#4,d#5]@2 ~ [g4,g5]@19 ~@11]/4", // D# D C A# G# G F D# …
})).s("gm_synth_strings_1").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~@12 A@7 B A@15 B A@7 B A@7 B A@7 ~@8 C D E F>".pickRestart({
  A: "x!2", B: "x", C: "~@15 x", D: "~@4 x ~@3 x ~@4 x ~@2", E: "~ x ~@6", F: "~ x ~@2",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@36 [~ x ~ x]!7 ~ [~ x ~ x]!7 ~@20>").gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@70 [~@2 x!2 ~@12]>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<A B@10 C B@23 D E@7 F E@7 G B@7 ~@12>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~ x!2 ~@2", D: "~@2 x!2", E: "x!4", F: "~@5 x!2 ~", G: "~@2 x ~@2 x!2 ~",
})).gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@36 [~ x ~ x ~ x ~ x]!7 ~ [~ x ~ x ~ x ~ x]!7 ~@20>").gain(0.12)

// drums · mid tom
const mid_tom = s("mt").struct("<~@69 [~@4 x!12] [x!4 ~@12]>").gain(0.24)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@69 [~@2 x!2 ~@12] ~>").gain(0.16)

// drums · open hat
const open_hat = s("oh").struct("<~@11 A ~@23 B ~@7 B ~@7 B ~@19>".pickRestart({
  A: "~@3 x", B: "~@7 x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@67 [~@15 x] [~@4 x ~@3 x ~@4 x ~@2] [~ x ~@6] [~ x ~@2]>").gain(0.4)

stack(
  bass, epiano1, acoustic_guitar_nylon, acoustic_guitar_nylon_2, synth_strings_1, kick, rim, snare, hihat, hihat_soft,
  mid_tom, mid_tom_soft, open_hat, crash
)