Strudelify
That's the Way I Like It cover art

KC & the Sunshine Band

That's the Way I Like It

KC and The Sunshine Band

KeyC minorTempo109 bpm
0:00/0:00
// That's the Way I Like It — KC and The Sunshine Band
// 109 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(109/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D A B C D E F E F E F E F A B C D A B C D E F E F E F E F A B C D A B C D E F E F E F E F A B C D A B C D E F E
  F E F E F A B C D A B C D E F E F E F E G
>`.pickRestart({
  A: "f1@3 g1@3 ab1@3 c2@3 ab1@2 g1@2", B: "f1@3 eb2@3 f2@3 f2!2 ~ f2 eb2 c2@2",
  C: "f1@3 g1@3 ab1@3 c2 c2@2 ab1@2 g1@2", D: "f1@3 eb2@2 ~ f2@3 f2!2 ~ f2 eb2 c2@2",
  E: "c2@2 b1@2 ~@2 g1!2 ~ g1 g1@2 bb1@2 g1 ~", F: "c3@2 c2 ~@3 g1!2 ~ g1 g1@2 bb1@2 g1@2",
  G: "c3@2 c2 ~@3 g1!2 ~ g1 g1@2 bb1@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.21)

// other · trumpet
const trumpet = note(`<
  A B C B A B C B D E D E D E D E F G H@2 F G I@2 D E D E D E D E F G H@2 F G I@2 D E D E D E D E F G ~@2 F G ~@2 D E D
  E D E D E A B C B A B C B D E D E D E D E
>`.pickRestart({
  A: "ab4@3 bb4@3 c5@3 eb5@3 c5@2 bb4@2", B: "ab4@3 g4@3 ab4@9 ~", C: "ab4@3 bb4@3 c5@3 eb5@2 ~ c5@2 bb4@2",
  D: "~@2 g5 ~@5", E: "~@4 gb5 f5 ~@2 f5 eb5 ~@2 c5 ~@3", F: "[c5,eb5]@15 [db5,d5]", G: "c5@13 ~@3",
  H: "[eb5@4 f5@3 ~, c5@29 ~@3]/2", I: "[eb5 f5, c5@15 ~]/2",
})).s("gm_trumpet").gain(0.17).pan(0.4)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  A B A B A B A B C D C D C D C D E@4 F@2 G@2 C D C D C D C D E@4 F@2 G@2 C D C D C D C D E@2 ~@2 E@2 ~ H C D C D C D C
  D A B A B A B A B C D C D C D C D
>`.pickRestart({
  A: "c5@3 d5@3 eb5@3 g5@3 eb5@2 d5@2", B: "c5@3 bb4@2 ~ c5@9 ~", C: "~@2 [c5,g5] ~@5",
  D: "~@4 gb5 f5 ~@2 f5 eb5 ~@2 c5 ~@3", E: "[ab4@4 f4@3 ~, f3@29 ~@3]/2", F: "[ab4@8 f4@7 ~, f3@15 ~]/2",
  G: "[ab4@16 f4@15 ~, f3@31 ~]/2", H: "f4@15 ~",
})).s("gm_brass_section").gain(0.45)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B C@4 D E F G H I F G H I J@8 F G H I F G H I J@8 F G H I F G H I J@8 F G H I F G H I A C D E A C D E F G H I F G H
  K
>`.pickRestart({
  A: "[c4,eb4,g4]!5 [c4,eb4]!2 [c4,eb4,g4]!3 [c4,eb4] [c4,eb4,g4]!3 [c4,eb4]!2", // Cm
  B: "[c4,eb4,g4] [c4,eb4] [c4,eb4,g4] [eb4,g4] [c4,eb4,g4] [c4,eb4] [c4,eb4,g4]!3 [c4,eb4] [c4,eb4,g4] [eb4,g4] [c4,eb4,g4] [c4,eb4] [c4,eb4,g4]!2", // Cm Eb Cm Eb Cm
  C: "[c4,eb4,g4] [c4,eb4] [c4,eb4,g4] [eb4,g4] [c4,eb4,g4] [c4,eb4] [c4,eb4,g4]!3 [c4,eb4] [c4,eb4,g4] [c4,eb4] [c4,eb4,g4]!3 [eb4,g4]", // Cm Eb Cm Eb
  D: "[c4,eb4,g4]!3 eb4 [c4,eb4,g4]!5 [c4,eb4] [c4,eb4,g4]!6", E: "[c4,eb4,g4]!7 [eb4,g4] [c4,eb4,g4]!8",
  F: "[bb3,eb4] ~@2 eb4 ~ [bb3,eb4] ~@2 [bb3,eb4] ~@2 [bb3,eb4] ~@2 [bb3,f4] [bb3,eb4]", // Eb5 Bb5 Eb5
  G: "~@2 [bb3,eb4] ~ bb3 [bb3,eb4] ~@2 [bb3,eb4] ~ [bb3,eb4] ~@3 [bb3,f4] ~", // Eb5 Bb5
  H: "[bb3,eb4] ~@2 [bb3,eb4] ~ [bb3,eb4] ~@2 [bb3,eb4] ~@2 [bb3,eb4] ~@2 [bb3,f4] [bb3,eb4]", // Eb5 Bb5 Eb5
  I: "~@2 [bb3,eb4] ~@2 [bb3,eb4] ~@2 [bb3,eb4] ~ [c4,f4] ~ [bb3,eb4] ~ [c4,f4] ~", // Eb5 F5 Eb5 F5
  J: "[ab4,c5] ~ c5 [ab4,c5]!6 c5 ab4 [ab4,c5] [ab4,c5]@2 c5 [ab4,c5]", // Ab
  K: "~@2 [bb3,eb4] ~@2 [bb3,eb4] ~@2 [bb3,eb4] ~ [c4,f4] ~ [bb3,eb4] ~@3", // Eb5 F5 Eb5
})).s("gm_electric_guitar_clean").gain(0.15).pan(0.9)

// other · clavinet
const clavinet = note(`<
  A B C D E F E G H I J K H I J K L@8 H I J K H I J K L@8 H I J K H I J K L@8 H I J K H I J K A B C D E F E G H I J K H
  I J M
>`.pickRestart({
  A: "f1@2 f2@2 f1@2 f2 f1@2 f2 f1@2 f2@2 f1 f2", B: "f1@2 f2 ~ f1@2 f2 f1 f2!2 f3 f2 f3 eb3 c3 ~",
  C: "f1@2 f2 f1 ~ f2 f1@2 f2 f1@2 f2 f1@2 f2@2", D: "f1@2 f2 f1@2 f2 f1@3 f2 f3 f2 [e3,f3] eb3 c3@2",
  E: "f1@2 f2 f1@2 f2 f1@2 f2 f1@2 f2 f1@2 f2@2", F: "f1@2 f2 f1@2 f2 f1@3 f2 f3 f2 f3 eb3 c3@2",
  G: "f1@2 f2 f1@2 f2 f1@3 f2 f3 f2 f3 eb3 c3 ~", H: "~@2 g4 ~@2 g4 ~@2 g4 ~@2 g4 ~@2 g4 ~",
  I: "~ g4 ~@2 g4 ~@2 [g4,eb5] ~@2 g4 ~@5", J: "~@2 g4 ~@2 [g4,eb5] ~@5 g4 ~@2 g4 ~",
  K: "~ [g4,eb5] ~@2 [g4,eb5] ~@2 g4 ~@2 g4 ~@2 [g4,eb5] ~@2", L: "f2 f3 f2 f3 f2 f3 f2 f3 f2 f3 f2 f3 f2 f3 f2 f3",
  M: "~ [g4,eb5] ~@2 [g4,eb5] ~@2 g4 ~@2 g4 ~@5", // Cm
})).s("gm_clavinet").gain(0.19).pan(0.3)

// other · clavinet · soft notes
const clavinet_soft = note(`<
  ~@8 A B C D A B C D ~@8 A B C D A B C D ~@8 A B C D A B C D ~@8 A B C D A B C D ~@8 A B C D A B C D
>`.pickRestart({
  A: "~@5 eb5 ~@2 eb5 ~@2 eb5 ~@2 eb5 ~", B: "~ eb5 ~@2 eb5 ~@5 eb5 ~@2 [g4,eb5] ~@2",
  C: "~@2 eb5 ~@5 [g4,eb5] ~@2 eb5 ~@2 eb5 ~", D: "~@7 eb5 ~@2 eb5 ~@5",
})).s("gm_clavinet").gain(0.11).pan(0.3)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean_2 = note(`<
  ~@8 A@2 B C A@2 B C ~@8 A@2 B C A@2 B C ~@8 A@2 B C A@2 B C ~@8 A@2 B C A@2 B C ~@8 A@2 B C A@2 B D
>`.pickRestart({
  A: "c5@2 ~ c5 ~@2 c5 ~@2 c5 ~@2 c5 ~ c5 ~", B: "c5@3 c5 ~@2 c5 ~@2 c5 ~@2 c5 ~ c5 ~",
  C: "c5@3 c5 ~@2 c5 ~@2 c5@2 ~ c5 ~ c5 ~", D: "c5@3 c5 ~@2 c5 ~@2 c5@2 ~ c5 ~@3",
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.1)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~@16 A B C D E@3 F G H I H J K J L A B C D E@3 F G H I H J K J L A B C D E@3 F G H I H J K J L ~@8 G M J L G M J L
>`.pickRestart({
  A: "c4@2 ~ [c4,ab4] ~@2 [c4,g4]@2 ~@8, ab4 ~@15", B: "[c4,ab4]@2 ~ [c4,ab4] ~@2 [c4,g4]@3 ~@7",
  C: "[c4,ab4]@2 ~ [c4,ab4] ~@2 [c4,g4]@5 ~@5", D: "c4@2 ~ [c4,ab4] ~@2 [c4,g4]@5 ~@5, ab4 ~@15",
  E: "[c4,ab4]@2 ~ [c4,ab4] ~@2 [c4,g4]@6 ~@4", F: "c4@2 ~ [c4,ab4] ~@2 [c4,g4]@4 ~@6, ab4 ~@15",
  G: "c5@2 ~ c5@2 ~@5 [g4,c5] ~ [g4,c5] ~@3, g4 ~@2 g4 ~@12", H: "~@2 [g4,c5] ~ [g4,c5] ~@5 [g4,c5] ~@5",
  I: "c5@2 ~ [g4,c5] ~@6 [g4,c5] ~@5, g4 ~@15", J: "[g4,c5] ~@2 [g4,c5] ~@6 [g4,c5] ~ [g4,c5] ~@3",
  K: "~@2 [g4,c5] ~@7 [g4,c5] ~@3 [g4,c5] ~", L: "~@4 [g4,c5] ~@5 [g4,c5] ~ [g4,c5] ~@3",
  M: "~@2 [g4,c5] ~ [g4,c5] ~@5 [g4,c5] ~@3 [g4,c5] ~", // C5
})).s("gm_piano").gain(0.18)

// drums · kick
const kick = s("bd").struct("x!2").gain(0.48)

// drums · kick · soft notes
const kick_soft = s("bd").struct("~@7 x ~@8").gain(0.24)

// drums · snare
const snare = s("sd").struct("~ x ~ x").gain(0.6)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@4>".pickRestart({
  A: "~@13 x!2 ~",
})).gain(0.36)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ B ~@7 B ~ A ~ A ~ A ~ B ~@7 B ~ A ~ A ~ A ~ B ~@7 B ~ A ~ A ~ A ~ B ~@7 B ~ A ~ A ~ A ~ B ~@3 B ~@3 B
>`.pickRestart({
  A: "~@13 x!2 ~", B: "~@9 x!3 ~@4",
})).gain(0.3)

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

// drums · cowbell
const cowbell = s("cb").struct("~@3 x!2 ~@7 x ~@3").gain(0.48)

// drums · shaker
const shaker = s("sh").struct(`<
  A B A B A B A B C@8 A B A B A B A B C@8 A B A B A B A B C@8 A B A B A B A B C@8 A B A B A B A B C@7 D
>`.pickRestart({
  A: "x!16", B: "x!15 ~", C: "x!8", D: "x!7 ~",
})).gain(0.36)

stack(
  bass, trumpet, brass_section, electric_guitar_clean, clavinet, clavinet_soft, electric_guitar_clean_2, piano, kick,
  kick_soft, snare, snare_soft, low_tom, hihat, open_hat, crash, cowbell, shaker
)

More by KC and The Sunshine Band