Strudelify
Too Hot cover art

Kool & The Gang and Friends!

Too Hot

Kool & The Gang

KeyC minorTempo102 bpm
0:00/0:00
// Too Hot — Kool & The Gang
// 102 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 122 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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.

// chords · epiano1 · "DigiPiano"
const epiano1 = note(`<
  ~ A B C D E F C G A B C D E F C G H I J K H L M N O P Q R O P S T U V A B C D E F C G A B C D E F C G H I J K H L M N
  O P Q R O P S T U V W X Y Z A B C D E F C G H I J K H L M N O P Q R O P S T O P Q R O P S T O P Q R O P S T O P Q R O
  P S T ~
>`.pickRestart({
  A: "[c4,eb4,g4]@11 ~", B: "[g3,bb3,d4,f4]@23 ~", C: "[f3,ab3,c4,eb4]@23 ~",
  D: "ab3@11 ~ bb3@6 b3@5 ~, [g3,c4,d4]@3 ~", E: "[c4,eb4,g4]@11 ~, bb4@2 ~, gb4 ~@23", F: "[f3,g3,bb3,d4,f4]@23 ~",
  G: "[f3,ab3,c4,eb4]@11 ~ [f3,ab3]@6 b3@4 ~@2, ~@12 [c4,eb4]@5 ~@7", H: "[c3,a3,b3,d4,e4,g4]@23 ~",
  I: "[g3,a3,e4]@11 ~, [a2,c4]", J: "[f2,a3,d4,g4]@11 ~", K: "[f3,a3,c4,e4]@11 ~ [f3,a3,c4,d4]@10 ~@2, g2",
  L: "[a2,g3,a3,c4,e4,g4]@23 ~", M: "[c4,d4,g4]@19 ~@5, [f2,a3]@7 ~", N: "c4@11 ~ b3@9 ~@3, [g2,f3,a3,e4]@7 ~",
  O: "[c2,c4,eb4,g4]@23 ~", P: "[b1,b3,eb4,g4]@23 ~", Q: "[bb1,bb3,eb4,g4]@11 ~", R: "[a1,a3,eb4,g4]@11 ~, gb4 ~@23",
  S: "[bb1,bb3,eb4,g4]@23 ~", T: "[a1,a3,eb4,g4]@23 ~, gb4 ~@23", U: "[f2,f3,ab3,c4,eb4]",
  V: "[bb2,g3,ab3,c4,d4] [bb2,f3,ab3,b3,d4]", W: "[a1,a3,d4,eb4,g4]", X: "[a1,a3,c4,eb4,g4]@19 ~@5",
  Y: "[bb1,ab3,c4,d4,f4]@7 ~", Z: "[bb1,ab3,bb3,c4,eb4,g4]@11 ~",
})).s("gm_epiano1").gain(0.35)

// bass · fretless bass
const bass = note(`<
  ~ A B C D E F G H A B C D E F G H I J K L M N O P Q R S T E R U V W X A B C D E F G H A B C D E F G H I J K L M N O P
  Q R S T E R U V W Y Z@2 AA@2 A B C D E F G H I J K L M N O P Q R S T E R U AB Q R S T E R U AB Q R S T E R U AB Q R S
  T E R U AB ~
>`.pickRestart({
  A: "c2@3 ~@2 c2 ~@2 c2 ~@2 c2 c2@2 ~@10", B: "g1@3 ~@2 g1 ~@2 g1 ~@2 g1!2 ~@11",
  C: "f1@3 ~ f1 ~@3 f1 ~@2 f1 f1@2 ~@10", D: "bb1@3 ~@2 bb1 ~@2 bb1 ~@2 bb1 bb1@5 ~ b1@5 ~",
  E: "c2@3 ~@2 c2 ~@2 c2 ~@2 c2!2 ~@11", F: "~ g1@3 ~ g1 ~@2 g1 ~@2 g1 g1@2 ~@10",
  G: "f1@3 ~@2 f1 ~@2 f1 ~@2 f1 f1@2 ~@10", H: "bb1@3 ~@2 bb1 ~@2 bb1 ~@2 bb1 bb1@5 ~@7",
  I: "c2@3 ~ c2 ~@2 c2 ~@2 c2 ~ c2@5 b1@6 ~", J: "a1@3 ~@2 a1 ~@2 a1 ~@2 a1 a1@11 ~",
  K: "f1@3 ~ f1 ~@3 f1 ~@2 f1 f1@9 ~@3", L: "g1@3 ~ g1 ~@2 g1 ~@3 g1 g1@10 ~@2", M: "c2@4 ~ c2 ~@2 c2 ~@2 c2 c2@11 ~",
  N: "a1@3 ~@2 a1 ~@2 a1 ~@2 a1 a1@12", O: "f1@3 ~ f1 ~@3 f1 ~@2 f1 f1@10 ~@2", P: "g1@4 ~ g1 ~@2 g1 ~@2 g1 g1@10 ~@2",
  Q: "c2@3 ~@2 c2 ~ c2 ~@2 c2 ~ c2 ~@11", R: "b1@3 ~@2 b1 ~@2 b1 ~@2 b1!2 ~@11",
  S: "bb1@3 ~@2 bb1 ~@2 bb1 ~@2 bb1!2 ~@11", T: "a1@3 ~ a1 ~@3 a1 ~@2 a1 a1@2 ~@10",
  U: "bb1@3 ~@2 bb1 ~@2 bb1 ~ bb1 ~ bb1 ~@11", V: "a1@3 ~@2 a1 ~@2 a1 ~@2 a1 a1@2 ~@10",
  W: "f1@3 ~ f1 ~@2 f1 ~@2 f1 ~ f1@2 ~@10", X: "bb1@3 ~ bb1 ~@3 bb1 ~@2 bb1 bb1@4 ~@2 b1@4 ~@2",
  Y: "bb1@3 ~ bb1 ~@3 bb1 ~@2 bb1 bb1@4 ~@2 bb1@4 ~@2", Z: "a1@11 ~", AA: "bb1@4 ~ bb1 ~@2 bb1 ~@2 bb1 bb1@7 ~@5",
  AB: "a1@3 ~ a1 ~@2 a1 ~@2 a1 ~ a1 ~@11",
})).s("gm_fretless_bass").gain(0.36)

// other · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note("<~ A@2 B ~ C@2 D ~@27 A@2 B ~ C@2 D ~@27 E F G H ~@49>".pickRestart({
  A: "[~@12 [gb3,gb4] ~@5 [bb3,bb4]@16 ~@2 [gb3,gb4] [g3,g4]@3 ~@2 [bb3,bb4]@4 ~@2]/2", B: "[eb3,eb4]",
  C: "[~@12 [gb3,gb4] ~@5 [bb3,bb4]@15 ~@3 [gb3,gb4] g3@2 ~@3 [bb3,bb4]@3 ~@3]/2", D: "[eb3,eb4]@11 ~",
  E: "~@12 a4 ~ a4 ~@2 [a3,b3] ~@6", F: "~@6 a4 ~ a3 ~ a3 ~@2 a3 ~@2 a3 ~ a4@3 a3 ~@2",
  G: "bb3@6 bb4@5 bb3 ~ bb3 ~@3 bb3 ~@6", H: "bb3@6 bb4@3 bb3 ~ bb4 ~@2 bb4 ~ bb3 ~ bb4@3 bb3 ~@2",
})).s("gm_electric_guitar_jazz").gain(0.32)

// other · electric guitar jazz · "Jazz Guitar" · soft notes
const electric_guitar_jazz_2 = note("<~ A ~@3 B C ~@28 A ~@3 B C ~@30 D ~@50>".pickRestart({
  A: "~@14 g3@3 ~@7, ~@13 g4@3 ~@8", B: "~@13 [g3,g4]@2 ~@9", C: "~@13 g4@2 ~@9", D: "~@9 bb4@2 ~",
})).s("gm_electric_guitar_jazz").gain(0.16)

// chords · pad poly · "Poly Pad"
const pad_poly = note("<~@17 A B C D A E F G ~@26 A B C D A E F G ~@10 H I J K ~@8 A B C D A E F G ~@33>".pickRestart({
  A: "[e3,a3,d4]@23 ~", B: "~@6 g4@5 ~, [g3,a3,c4,e4]@11 ~", C: "~@4 c5@3 ~, [d4,f4,a4]@11 ~",
  D: "~@6 d4@5 ~, [f3,a3,c4]@23 ~", E: "[g3,a3,c4,e4]@7 ~", F: "[f3,a3,c4,e4]@11 ~", G: "[f3,b3,e4]@11 ~",
  H: "[a1,a3,d4,eb4,g4]", I: "[a1,a3,c4,eb4,g4]@19 ~@5", J: "[bb1,ab3,c4,d4,f4]@7 ~", K: "[bb1,ab3,bb3,c4,eb4,g4]@11 ~",
})).s("gm_pad_poly").gain(0.19)

// chords · pad poly · "Poly Pad" · soft notes
const pad_poly_soft = note("<~@19 A B ~@32 A B ~@28 A B ~@37>".pickRestart({
  A: "c4@11 ~", B: "e4 ~",
})).s("gm_pad_poly").gain(0.13)

// other · synth strings 1 · "Strings"
const synth_strings_1 = note(`<
  ~@25 A B C D E F G H ~@26 A B C D E F G H ~@2 I J K L ~@16 A B C D E F G M A B C D E F G M A B C D E F G M A B C D E F
  G M ~
>`.pickRestart({
  A: "g6@3 c7", B: "d7", C: "g6@3 d7", D: "c7", E: "g6", F: "c7 d7", G: "eb7", H: "g5@5 ~", I: "[a2,a4,d5,eb5,g5]",
  J: "[a2,a4,c5,eb5,g5]@19 ~@5", K: "[bb2,ab4,c5,d5,f5]@7 ~", L: "[bb2,ab4,bb4,c5,eb5,g5]@11 ~", M: "g5@7 ~",
})).s("gm_synth_strings_1").gain(0.16)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!120 ~>").gain(0.36)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@121>").gain(0.2)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!120 ~>").gain(0.36)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@9 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@9 A B A@3 B@7 A B@3 A B@3 A B@3 A
  B@7 A B@3 A B@3 A B@3 A B@3 A B@3 ~
>`.pickRestart({
  A: "~ x!7", B: "x!8",
})).gain(0.32)

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

stack(
  epiano1, bass, electric_guitar_jazz, electric_guitar_jazz_2, pad_poly, pad_poly_soft, synth_strings_1, kick, rim,
  snare, hihat, crash
)

More by Kool & The Gang