Strudelify
Jungle Boogie cover art

1974 · Wild And Peaceful

Jungle Boogie

Kool & The Gang

KeyG minorTempo110 bpm
0:00/0:00
// Jungle Boogie — Kool & The Gang
// 110 bpm, 4/4, key G minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 50 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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.

// other · trumpet
const trumpet = note("<~ A B C B C B C B D@5 E F G H I ~ I J@5 E F G H I ~ I A B C B C B C B D@5 E F G H>".pickRestart({
  A: "~@15 g4", B: "[bb4,d5,g5] ~@2 g4 [bb4,d5,g5] ~@11", C: "bb5 a5 g5 ~ bb5 a5 g5 f5@3 g5 ~@4 g4",
  D: "[bb5 a5 g5 ~ bb5 a5 g5 ~ bb4@63 ~ g4 ~ g4 bb4 ~ bb4 f4@2]/5", E: "~ g4@3 bb4@3 c5@3 db5@3 d5@3",
  F: "f5@3 ~ gb5@3 [g5,a5] [bb5,b5] ~ bb5 f5 ~ f5 a5@2", G: "~ bb5@3 g5@3 gb5@3 f5@3 d5@3", H: "db5@3 ~ c5@3 ~@9",
  I: "db5 [bb4,d5] g4 ~ db5 [bb4,d5] g4 ~@9", J: "[~@8 bb4@63 ~ g4 ~ g4 bb4 ~ bb4 f4@2]/5",
})).s("gm_trumpet").gain(0.36)

// other · tenor sax
const tenor_sax = note(`<
  ~ A B C B C B C B D@5 E F G H I ~ I J@5 E F G H I ~ I A B C B C B C B D@5 E F G H
>`.pickRestart({
  A: "~@15 g2", B: "[bb2,d3,g3] ~@2 g2 [bb2,d3,g3] ~@11", C: "bb3 a3 g3 ~ bb3 a3 g3 f3@3 g3 ~@4 g2",
  D: "[bb3 a3 g3 ~ bb3 a3 g3 ~ g2@63 ~ g2 ~ g2 bb2 ~ bb2 f2@2]/5", E: "~ g2@3 bb2@3 c3@3 db3@3 d3@3",
  F: "f3@3 ~ gb3@3 ~ bb3@2 bb3 f3@2 f3 a3@2", G: "~ bb3@3 g3@3 gb3@3 f3@3 d3@3", H: "db3@3 ~ c3@3 ~@9",
  I: "db3 [bb2,d3] g2 ~ db3 [bb2,d3] g2 ~@9", J: "[~@8 g2@63 ~ g2 ~ g2 bb2 ~ bb2 f2@2]/5",
})).s("gm_tenor_sax").gain(0.8)

// bass · electric bass finger · "Fingered Bass"
const bass = note("<~@9 A B C D E B C D F G@2 H@2 B C I@3 J K@8 G@4 H@2 B L@7>".pickRestart({
  A: "~@8 g2@2 g2 bb2@2 bb2 f2@2", B: "~ g2@3 bb2@3 c3@3 db3@3 d3@3", C: "f3@3 ~ gb3@3 ~ bb3@2 bb3 f3@2 f3 a3@2",
  D: "~ bb3@3 g3@3 gb3@3 f3@3 d3@3", E: "db3@3 ~ c3@3 ~ g2@2 g2 bb2@2 bb2 f2@2", F: "db3@3 ~ c3@3 ~ g2@3 ~ g2@2 g2@2",
  G: "[~@2 f3@2 e3@3 ~ g2@3 ~ g2@2 g2@10 g2@3 ~ g2@2 g2@2]/2",
  H: "[~@2 f3@2 e3@3 ~ g2@3 ~ g2@2 g2@10 g2@2 g2 bb2@2 bb2 f2@2]/2",
  I: "[~ bb3@3 g3@3 ~@3 f3@3 d3@3 db3@3 ~ c3@3 ~ g2@2 g2 bb2@2 bb2 f2@3 g2@3 bb2@3 c3@3 db3@3 d3@3, ~@7 gb3@41]/3",
  J: "f3@3 ~@5 bb3@2 bb3 f3@2 f3 a3@2, ~ gb3@3",
  K: "[~ bb3@3 g3@3 ~@3 f3@3 d3@3 db3@3 ~ c3@3 ~ g2@3 ~ g2@2 g2@3 ~ f3@2 e3@3 ~ g2@3 ~ g2@2 g2@10 g2@3 ~ g2@2 g2@3 ~ f3@2 e3@3 ~ g2@3 ~ g2@2 g2@10 g2@3 ~ g2@2 g2@3 ~ f3@2 e3@3 ~ g2@3 ~ g2@2 g2@10 g2@3 ~ g2@2 g2@2, ~@7 gb3@121]/8",
  L: "[f3@3 ~@5 bb3@2 bb3 f3@2 f3 a3@3 bb3@3 g3@3 ~@3 f3@3 d3@3 db3@3 ~ c3@3 ~ g2@2 g2 bb2@2 bb2 f2@3 g2@3 bb2@3 c3@3 db3@3 d3@3 f3@3 ~@5 bb3@2 bb3 f3@2 f3 a3@3 bb3@3 g3@3 ~@3 f3@3 d3@3 db3@3 ~ c3@3 ~@9, ~@4 gb3@19 gb3@45 gb3@19 gb3@16 ~@9]/7",
})).s("gm_electric_bass_finger").gain(0.48)

// other · synth bass 2
const synth_bass_2 = note("<~@9 A B C D E B C D F G@2 H@2 B C D I D E B J G@10 H@2 B C K@4 L@2>".pickRestart({
  A: "~@8 g3@2 g3 bb3@2 bb3 f3@2", B: "~ g3@3 bb3@3 c4@3 db4@3 d4@3", C: "f4@3 ~ gb4@3 ~ bb4@2 bb4 f4@2 f4 a4@2",
  D: "~ bb4@3 g4@3 gb4@3 f4@3 d4@3", E: "db4@3 ~ c4@3 ~ g3@2 g3 bb3@2 bb3 f3@2", F: "db4@3 ~ c4@3 ~ g3@3 ~ g3@2 g3@2",
  G: "[~@2 f4@2 e4@3 ~ g3@3 ~ g3@2 g3@10 g3@3 ~ g3@2 g3@2]/2",
  H: "[~@2 f4@2 e4@3 ~ g3@3 ~ g3@2 g3@10 g3@2 g3 bb3@2 bb3 f3@2]/2", I: "db4@3 ~ c4@3 ~ bb4@2 bb4 f4@2 f4 a4@2",
  J: "f4@3 ~ gb4@3 ~ g3@3 ~ g3@2 g3@2",
  K: "[~ bb4@3 g4@3 ~@3 f4@3 d4@3 db4@3 ~ c4@3 ~ g3@2 g3 bb3@2 bb3 f3@3 g3@3 bb3@3 c4@3 db4@3 d4@3 f4@3 ~ gb4@3 ~ bb4@2 bb4 f4@2 f4 a4@2, ~@7 gb4@45 ~@12]/4",
  L: "[~ bb4@3 g4@3 ~@3 f4@3 d4@3 db4@3 ~ c4@3 ~@9, ~@7 gb4@16 ~@9]/2",
})).s("gm_synth_bass_2").gain(0.48)

// other · electric guitar clean · "Clean Elec. Guitar"
const electric_guitar_clean = note(`<
  ~
  [~@8 g3 ~ f3!2 g3 ~ f3!2]
  [g3!3 ~ g3 ~ f3!2 g3 ~ f3!2 g3 ~ f3!2]!47
  [g3!3 ~ g3 ~ f3!2 ~@8]
>`).s("gm_electric_guitar_clean").gain(0.48)

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

// drums · snare
const snare = s("sd").struct("<~ [~@3 x] [~ x ~ x]!47 [~ x ~@2]>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B D
>`.pickRestart({
  A: "~@4 x!4", B: "x!8", C: "x!2 ~ x!5", D: "x!2 ~ x ~@4",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  A ~@2 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B
>`.pickRestart({
  A: "~@15 x", B: "~ x ~@2",
})).gain(0.72)

stack(trumpet, tenor_sax, bass, synth_bass_2, electric_guitar_clean, kick, snare, hihat, crash)

More by Kool & The Gang