Strudelify

Funky Stuff

Kool & The Gang

KeyG majorTempo101 bpm
0:00/0:00
// Funky Stuff — Kool & The Gang
// 101 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(101/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 · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@3 A B C D E F G B H D I J K L M N O B P D Q J K R S T U@2 V W O B C D A B C D G B C D A B C D O B P D X Y G B ~@8 O
  B P D O B P D O B P D O B P D X Z AA
>`.pickRestart({
  A: "[g#3,d4,f#4,b4] ~ [c#4,f4,a#4] ~ [g#3,d4,f#4,b4] c#4 [g3,c#4,f4,a#4] [d4,f#4,b4] ~@3 a4 [d4,a4]!3 ~, ~@10 [d4,a4]@2 e4@3 ~", // G#m7b5 A#m G#m7b5 Gm7b5 Bm D5
  B: "[g#3,d4,f#4,b4] ~ [c#4,f4,a#4] [d4,f#4,b4] ~@2 [d4,f#4,b4] b3 ~@2 [c4,g4,a4] [c4,f#4,a4] ~ [c4,e4,a4] ~@2", // G#m7b5 A#m Bm Am7 F#dim Am
  C: "[g#3,d4,f#4,b4] ~ [c#4,f4,a#4] ~ [g#3,d4,f#4,b4] c#4 [g3,c#4,f4,a#4] [d4,f#4,b4] ~@2 a4!3 [d4,a4] [e4,a4] ~, ~@5 [d4,e4]@2 ~", // G#m7b5 A#m G#m7b5 Gm7b5 Bm D5 A5 Dsus2
  D: "[g#3,d4,f#4,b4] ~ [g3,c#4,f4,a#4] [d4,f#4,b4] a#4 ~ [d4,f#4,b4] b3 ~@2 [c4,g4,a4] [f#4,a4] ~ [c4,e4,a4] ~@2", // G#m7b5 Gm7b5 Bm Am7 F#m Am
  E: "[g#3,d4,f#4,b4] g#4 [c#4,f4,a#4] [d4,f#4,b4] c#4!2 [g3,c#4,f4,a#4] [d4,f#4,b4] ~@2 [d4,e4,a4] [d4,a4] [d4,e4,a4] [d4,a4] [d4,e4,a4] e4", // G#m7b5 A#m Bm Gm7b5 Bm Dsus2 D5 Dsus2 …
  F: "[d4,f#4,b4] ~ [c#4,f4,a#4] [d4,f#4,b4] ~@2 [f#4,b4] ~@3 [c4,g4,a4] [f#4,a4] ~ [c4,e4,a4] ~@2", // Bm A#m Bm B5 Am7 F#m Am
  G: "[g#3,d4,f#4,b4] ~ [c#4,f4,a#4] ~ [g#3,d4,f#4,b4] c#4 [g3,c#4,f4,a#4] [d4,f#4,b4] ~@3 a4 [d4,a4]!2 [b3,d4,a4] ~, ~@10 [d4,a4]@2 e4@3 ~", // G#m7b5 A#m G#m7b5 Gm7b5 Bm D5 Bm7 D5
  H: "[g#3,d4,f#4,b4] ~ [c#4,f4,a#4] ~ [g#3,d4,f#4,b4] c#4 [g3,c#4,f4,a#4] [d4,f#4,b4] ~@2 a4!3 [d4,a4] a4 ~, ~@5 [d4,e4]@2 ~", // G#m7b5 A#m G#m7b5 Gm7b5 Bm D5 Dsus2
  I: "[g#3,d4,f#4,b4] ~ [c#4,a#4] ~ [g#3,d4,f#4,b4] a#4 [c#4,f4,a#4] [d4,f#4,b4] ~@2 [d4,a4] ~ a4 [d4,e4,a4]!2 ~, ~@10 e4@3 ~@3, ~@11 [d4,a4]@2 ~@3", // G#m7b5 F# G#m7b5 A#m Bm D5 Dsus2 D5
  J: "[g#3,d4,f#4,b4] ~ [g3,c#4,f4,a#4] [d4,f#4,b4] ~@2 [g#3,d4,f#4,b4] ~ b3 ~ [c4,g4,a4] [f#4,a4] ~ [c4,e4] ~@2", // G#m7b5 Gm7b5 Bm G#m7b5 Am7 F#m C
  K: "[g#3,d4,f#4,b4] ~ [g3,c#4,f4,a#4] b3 [g#3,d4,f#4,b4] ~ [g3,c#4,f4,a#4] [g#3,d4,f#4,b4] ~ g#4 ~ a4 [d4,e4,a4] [d4,a4] [d4,e4,a4] ~, ~@5 [d4,e4,a4] ~@2", // G#m7b5 Gm7b5 G#m7b5 Gm7b5 G#m7b5 Dsus2 D5 Dsus2
  L: "[g#3,d4,f#4,b4] g#4 [g3,c#4,f4,a#4] [d4,f#4,b4] ~@2 [g#3,d4,f#4,b4] ~@3 [c4,g4,a4] [f#4,a4] ~ [c4,e4,a4] e4 ~", // G#m7b5 Gm7b5 Bm G#m7b5 Am7 F#m Am
  M: "[g#3,d4,f#4,b4] ~ [c#4,f4,a#4] ~ [g#3,d4,f#4,b4] ~ [g3,c#4,f4,a#4] [d4,f#4,b4] ~@2 [d4,a4]!2 ~ a4!2 ~, ~@5 e4@2 ~, ~@6 [d4,a4] ~", // G#m7b5 A#m G#m7b5 Gm7b5 Bm D5
  N: "[g#3,d4,f#4,b4] g#4 [g3,c#4,f4,a#4] [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@3 [c4,g4,a4] [c4,f#4,a4] ~ [e4,a4] ~@2", // G#m7b5 Gm7b5 Bm Am7 F#dim A5
  O: "[g#3,d4,f#4,b4] ~ [c#4,f4,a#4] ~ [g#3,d4,f#4,b4] c#4 [g3,c#4,f4,a#4] [d4,f#4,b4] ~@3 a4 [d4,e4,a4] [d4,a4] [d4,e4,a4] ~, ~@5 [d4,a4] ~@2", // G#m7b5 A#m G#m7b5 Gm7b5 Bm Dsus2 D5 Dsus2 …
  P: "[g#3,d4,f#4,b4] ~ [c#4,f4,a#4] ~ [g#3,d4,f#4,b4] c#4 [g3,c#4,f4,a#4] [d4,f#4,b4] ~@2 a4!3 [d4,a4] [c4,a4] ~, ~@5 [c4,d4]@2 ~", // G#m7b5 A#m G#m7b5 Gm7b5 Bm D5 F Csus2
  Q: "[g#3,d4,f#4,b4] ~ [c#4,a#4] ~ [g#3,d4,f#4,b4] a#4 [c#4,f4,a#4] [d4,f#4] ~@2 [d4,a4] ~ a4 [d4,e4,a4]!2 ~, ~@10 e4@3 ~@3, ~@11 [d4,a4]@2 ~@3", // G#m7b5 F# G#m7b5 A#m D D5 Dsus2 D5
  R: "[g#3,d4,f#4,b4] g#4 [g3,c#4,f4,a#4] [d4,f#4,b4] c#4 ~ [g#3,d4,f#4,b4] ~@3 [c4,g4,a4] [f#4,a4] ~ [c4,e4,a4] e4 ~", // G#m7b5 Gm7b5 Bm G#m7b5 Am7 F#m Am
  S: "[g#3,d4,f#4,b4] ~ [g3,c#4,f4,a#4] ~ [g#3,d4,f#4,b4] ~ [g3,c#4,f4,a#4] [g#3,d4,f#4,b4] ~@2 a4!3 [d4,a4] [d4,e4,a4] ~, ~@5 [d4,e4]@2 ~", // G#m7b5 Gm7b5 G#m7b5 Gm7b5 G#m7b5 D5 Dsus2
  T: "[g#3,d4,f#4,b4] ~ [g3,c#4,f4,a#4] [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@3 [c4,g4,a4] [f#4,a4] ~ [c4,e4,a4] ~@2", // G#m7b5 Gm7b5 Bm Am7 F#m Am
  U: "[[e3,g#3,d4,g4]@2 ~ [g#3,d4,g4]@2 ~ [e3,g#3,d4,g4]@2 ~ [d4,g4]@2 ~ [e3,g#3,d4,g4]@2 ~ [g#3,d4,g4]@2 ~ [e3,g#3,d4,g4]@2 ~ [d4,g4]@2 ~ [e3,g#3,d4,g4]@2 ~ [g#3,d4,g4]@2 ~ g4 ~]/2", // E7 G E7 G5 E7 G E7 G5 …
  V: "[g#3,d4,f#4,b4] ~ [c#4,f4,a#4] b3 [d4,f#4,b4] ~ [g3,c#4,f4,a#4] [g#3,d4,f#4,b4] ~@3 a4 [d4,e4,a4]!3 ~, ~@5 [d4,e4,a4] ~@2", // G#m7b5 A#m Bm Gm7b5 G#m7b5 Dsus2
  W: "[g#3,d4,f#4,b4] ~ [g3,c#4,f4,a#4] [d4,f#4,b4] ~@2 [d4,f#4,b4] b3 ~@2 [c4,g4,a4] [c4,f#4,a4] ~ [c4,e4,a4] ~@2", // G#m7b5 Gm7b5 Bm Am7 F#dim Am
  X: "[e3,g#3,d4,g4]@2 ~ [g#3,d4,g4]@2 ~ [e3,g#3,d4,g4]@2 ~ [d4,g4]@2 ~ [e3,g#3,d4,g4]@2 ~ [g#3,d4,g4]", // E7 G E7 G5 E7 G
  Y: "~@2 [e3,g#3,d4,g4]@2 ~ [d4,g4] ~@2 [e3,g#3,d4,g4] ~@2 [g#3,d4,g4] ~@2 g4 ~", // E7 G5 E7 G
  Z: "~@2 [e3,g#3,d4,g4]@2 ~ [d4,g4] ~@2 [e3,g#3,d4,g4] ~@2 [g#3,d4,g4] ~ g4 ~@2", AA: "[e3,g#3,d4,g4] ~@7",
})).s("gm_electric_guitar_jazz").gain(0.17).pan(0.4)

// chords · electric guitar jazz · "JAZZ GTR" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@3 A B C D E F G B C H I J ~ K L M A B N D O J ~ K P Q R@2 S T G B C D A B C D G B C D A B C D G B N D U V G B ~@8 A
  B N D A B N D A B N D A B N D U W ~
>`.pickRestart({
  A: "~@2 g3 ~@2 g#4 ~@3 [e4,a4] e4@2 ~@4", B: "~@3 g#3 ~@2 g#3 ~@9", C: "~@9 e4 ~@6",
  D: "~@4 d4 ~@4 f#4 ~ c4 d3 ~ d4 ~", E: "~@2 g3 g#3 ~ [g3,f4,a#4] ~@10", F: "g#3 ~@15",
  G: "~@2 g3 ~@2 g#4 ~@3 [b3,a4] e4@2 ~@4", H: "~@4 d4 ~@4 f#4 ~ c4 d3 ~@3", I: "~@2 f4 ~@4 g#3 ~ f#4 ~@6",
  J: "~@9 f#4 ~@3 a4 ~ g#3", K: "~@9 g4 ~ c4 ~@3 [g#3,d4,f#4]", L: "~@3 g3 ~ g3 ~ g#3 e4 ~@7",
  M: "~ g3 ~@6 e3 ~@4 c4 ~@2", N: "~@9 c4 ~@6", O: "~@2 f4 ~@4 [g#3,b4] ~ f#4 ~@6", P: "~ e3 ~ e4 ~@12",
  Q: "~@9 f#4 ~@6", R: "[~@3 e3@2 ~@4 g#3@2 ~@4 e3@2 ~@4 [e3,g#3]@2 ~@4 e3@2 ~ [g#3,d4] ~]/2", S: "~@8 b3 ~@7",
  T: "~@3 g#3 ~@5 g4 ~@6", U: "~@3 e3@2 ~@4 g#3@2 ~@4 e3", V: "~@5 [e3,g#3] ~@5 e3 ~@2 [g#3,d4] ~",
  W: "~@5 [e3,g#3] ~@5 e3 ~ [g#3,d4] ~@2", // E G#dim
})).s("gm_electric_guitar_jazz").gain(0.06).pan(0.4)

// bass · electric bass finger · "FINGERDBAS"
const bass = note("<~ A B C@26 D@2 C@22 D@2 C@26 D@2 E>".pickRestart({
  A: "e1@3 ~", B: "e1 g1@3 e1 g1@2 ~ e1 ~@5 e1 ~", C: "e1@3 ~@5 e1 g1@2 ~ e1 g1@2 ~", D: "e1@3 ~@7 e1 ~ g1@4",
  E: "e1@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.44)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@3 A@5 B A B A@5 B A B A@5 B A B A@5 B A B A@5 B A B A@5 B A B A@5 B A B A@5 B A B A@5 B A B A@5 B A B ~
>`.pickRestart({
  A: "~@3 c#3 ~@2 d3 ~@9", B: "~@3 c#3 ~@2 d#3 ~@9",
})).s("gm_electric_guitar_clean").gain(0.22).pan(0.7)

// other · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@4 A ~@3 A@2 ~@2 A ~@3 A@2 ~@2 A ~@3 A@2 ~@2 A ~@3 A@2 ~@2 A ~@3 A@2 ~@2 A ~@3 A@2 ~@2 A ~@3 A@2 ~@2 A ~@3 A@2 ~@2 A
  ~@3 A@2 ~@2 A ~@3 A@2 ~@2
>`.pickRestart({
  A: "~@5 a2 ~@10",
})).s("gm_electric_guitar_clean").gain(0.06).pan(0.7)

// chords · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note("<~@29 A@2 ~@22 A@2 ~@26 A@2 ~>".pickRestart({
  A: "[[g#3,d4,g4]@31 ~]/2", // G
})).s("gm_synth_brass_2").gain(0.33)

// other · trumpet
const trumpet = note(`<
  ~ A B ~@6 C D ~ E ~@2 C D ~ E ~@14 C D ~ E ~@2 F D ~ E ~@18 G H G I G J G I G J G I G J G I G J G K L@2 M
>`.pickRestart({
  A: "a4@15 ~", B: "~@10 d#5 e5!5", C: "g#5 ~ b4@4 c#5 ~ e5 f#5 ~ g#5 ~@4, ~@2 c5 ~@13", D: "b4 c#5 ~ d5 ~@6 g#4 a4!5",
  E: "g5@9 g4@3 e4@3 ~, f5 ~@15", F: "g#5 ~ b4@3 ~ c#5 b4 e5 f#5 ~ g#5 ~@4",
  G: "e4 ~@2 b4 ~@2 g5 ~@3 [g4,a4] [e4,f#4] b4 g4@2 ~", H: "e4 ~@2 b4 ~@2 g5 ~@3 a#4 b4!4 ~",
  I: "e4 ~@2 b4 ~@2 g5 ~@3 a#4 b4!5", J: "e4 ~@2 b4 ~@2 g5 ~@3 d#5 e5!5", K: "e4 ~@2 b4 ~@2 g5 ~@3 a#4 b4!3 d5 e5",
  L: "[g5@2 ~ g5@2 ~ g5@2 ~ g5@2 ~ g5@2 ~ g5@2 ~ g5@2 ~ g5@2 ~ g5@2 ~ g5@2 ~ g5 ~]/2",
  M: "e5@2 [c5,d5] [f4,g4,a4,b4] [a3,b3,c4,d4,e4] g3 ~@10", // Csus2 G7 Am
})).s("gm_trumpet").gain(0.49).pan(0.4)

// other · alto sax
const alto_sax = note(`<
  ~ A B ~@6 C D ~ E ~@2 C D ~ E ~@14 C D ~ E ~@2 C D ~ E ~@14 F@3 G F H F G F I F I F I F I F I F I F I F J K@2 L
>`.pickRestart({
  A: "d4@15 ~", B: "~@10 g#4 a4!5", C: "g#4 ~ b3@4 c#4 ~ e4 f#4 ~ g#4 ~@4", D: "b3 c#4 ~ d4 ~@6 c#5 d5!5",
  E: "g4@8 ~ g4@2 ~ e4@3 ~, f#4 ~@15", F: "e3 ~@2 b3 ~@2 g4 ~@3 [g3,a3] [e3,f#3] b3 g3@2 ~",
  G: "e3 ~@2 b3 ~@2 g4 ~@3 a#4 b4!5", H: "e3 ~@2 b3 ~@2 g4 ~@3 a#4 b4!4 ~", I: "e3 ~@2 b3 ~@2 g4 ~@3 g#4 a4!5",
  J: "e3 ~@2 b3 ~@2 g4 ~@3 g#4 a4!3 b4 c#5",
  K: "[d3@2 ~ e3@2 ~ g#3@3 a3@2 ~ b3@3 d4@2 ~ e4@3 g4@2 ~ a4@3 b4@2 ~ d5@2]/2", L: "g4@3 ~@13",
})).s("gm_alto_sax").gain(0.49).pan(0.6)

// other · baritone sax · "BARITONSAX"
const baritone_sax = note(`<
  ~ A B ~@6 C D ~ E ~@2 C D ~ E ~@14 C D ~ E ~@2 C D ~ E ~@19 F ~ G ~ H ~ H ~ H ~ H ~ H ~ H ~ H ~ I J@2 K
>`.pickRestart({
  A: "e2@7 ~", B: "~@10 c#3 d3!5", C: "g#3 ~ b2@4 c#3 ~ e3 f#3 ~ g#3 ~@4", D: "g#3 a3 ~ b3 ~@6 g#2 a2!5",
  E: "~@9 g3@2 ~ e3@2 ~@2", F: "~@10 g#2 a2!4 ~", G: "~@10 a2!6", H: "~@10 g#2 a2!5", I: "~@10 g#2 a2!3 d3 e3",
  J: "[g#3@2 ~ g#3@2 ~ g#3@2 ~ g#3@2 ~ g#3@2 ~ g#3@2 ~ g#3@2 ~ g#3@2 ~ g#3@2 ~ g#3@2 ~ g2@2]/2", K: "e2@3 ~@13",
})).s("gm_baritone_sax").gain(0.49).pan(0.7)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B C@2 B C B C B C B C B C B C B C B C B C B C B C D B E C B C B C B C B C B C B C B C B C B C B C D B E C B@2 C
  B C B C B C F B C B F B C B F B C B F B C D B E ~
>`.pickRestart({
  A: "~@4 x ~@2 x", B: "~ x ~ x", C: "~@4 x ~@10 x", D: "~@2 x ~@3 x!2", E: "~@4 x ~@5 x ~@2 x!2 ~",
  F: "x ~@3 x ~@10 x",
})).gain(0.49)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@30 [~@9 x ~@6] ~@23 [~@9 x ~@6] ~@27 [~@9 x ~@6] ~>").gain(0.27)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A B ~@2 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ C ~ D ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ C ~ D ~ B@2 ~
  B ~ B ~ B ~ E B ~ B E B ~ B E B ~ B E B ~ C ~ D ~
>`.pickRestart({
  A: "~ x ~@3 x ~@10", B: "~@3 x", C: "~@6 x!2", D: "~@11 x ~@4", E: "x",
})).gain(0.49)

// drums · crash
const crash = s("cr").struct("<~ A ~@27 A ~@23 A ~@27 A ~ A>".pickRestart({
  A: "x",
})).gain(0.38)

// drums · ride bell
const ride_bell = s("rd").struct("<~@29 A B ~@22 A B ~@26 A B ~>".pickRestart({
  A: "~ x!3", B: "x!3 ~",
})).gain(0.49)

// drums · tambourine
const tambourine = s("tb").struct("<~@3 [x!16]!79 [x!14 ~@2] ~>").gain(0.33)

// drums · cowbell
const cowbell = s("cb").struct("<~@3 [~ x!3]!27 [~ x!2 ~] [~ x!3]!23 [~ x!2 ~] [~ x!3]!27 [~ x!2 ~] ~>").gain(0.33)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@3 [~ x ~ x ~ x ~ x]!80 ~>").gain(2.22)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~@20 A ~@22 B C ~@29 D ~@4 E ~@4>".pickRestart({
  A: "x ~ x ~@2 x ~@10", B: "~@9 x!7", C: "x", D: "x!5 ~ x!2 ~ x!2 ~@5", E: "~@9 x ~ x ~ x!3",
})).gain(0.5)

// drums · whistle
const whistle_2 = s("ballwhistle:0").struct("<A ~@19 B ~@23 C ~@29 D ~@2 E F ~@5>".pickRestart({
  A: "~@2 x!2", B: "~@8 x ~@2 x ~@4", C: "~ x ~ x ~ x ~ x ~ x ~@6", D: "~@3 x", E: "~@9 x ~@6", F: "~@2 x ~@2 x ~@10",
})).gain(0.5)

stack(
  electric_guitar_jazz, electric_guitar_jazz_2, bass, electric_guitar_clean, electric_guitar_clean_2, synth_brass_2,
  trumpet, alto_sax, baritone_sax, kick, snare, snare_soft, hihat, open_hat, crash, ride_bell, tambourine, cowbell,
  cabasa, whistle, whistle_2
)

More by Kool & The Gang