Strudelify

(Shake, Shake, Shake) Shake Your Booty

KC and The Sunshine Band

KeyC minorTempo120 bpm
0:00/0:00
// (Shake, Shake, Shake) Shake Your Booty — KC and The Sunshine Band
// 120 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 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.

// chords · epiano2
const epiano2 = note(`<
  A@2 B C D E F G A@2 B C D E F G H I J K L M N O A@2 B C D E F G H I J K L M N O A@2 B C D E F G H I J K L M N O A@2 B
  C D E F G H I J K L M N O A@2 B C D E F G H I J K L M N O H I J K L M N P
>`.pickRestart({
  A: "[[g3,bb3,eb4]@25 ~ [g3,bb3,eb4] ~@2 [g3,bb3,eb4] ~@2]/2", B: "[g3,a3,c4,eb4]@12 ~@3 [d4,eb4,g4,bb4]",
  C: "~ [eb4,bb4] [eb4,f4,a4] ~ [bb3,eb4,g4] ~ [c4,f4,a4] ~ [bb3,eb4,g4]@3 ~@2 [g3,bb3,eb4] ~@2", // Eb5 F7 Eb F Eb
  D: "[g3,bb3,eb4]@11 ~@3 [a3,c4,f4] ~", E: "[g3,bb3,eb4]@9 ~ [g3,bb3,eb4] ~@2 [g3,bb3,eb4] ~@2",
  F: "[g3,a3,c4,eb4]@7 ~", // Am7b5
  G: "[g4,bb4,eb5] ~ [f4,bb4,d5] ~ [f4,g4,a4,c5] ~ [c4,f4,a4] ~ [bb3,eb4,g4] ~ [c4,f4,a4] ~ [d4,eb4,bb4] [c4,f4,a4]@2 ~", // Eb Bb F Eb F Ebmaj7 F
  H: "g4 ~ g4@7 ~ [ab3,c4,eb4,g4] ~@2 [ab3,c4,eb4,g4] ~@2, [ab3,c4,eb4]@5 ~@3", // Abmaj7 Ab
  I: "[bb3,d4,f4]@9 ~ [bb3,d4,f4] ~@2 [bb3,d4,f4] ~@2", // Bb
  J: "[bb3,d4,f4]@2 ~ [bb3,eb4,g4] ~ g3 [bb3,d4,f4] ~@5 g3 ~ g3 [bb3,d4,f4], ~@8 [bb3,eb4,g4]@7 ~", // Bb Eb Bb Eb
  K: "~@2 [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,d4,f4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4]@2 g3 [bb3,d4,f4] ~@2", // Eb Bb Eb Bb
  L: "[ab3,c4,eb4,g4]@9 ~ [ab3,c4,eb4,g4] ~@2 [ab3,c4,eb4,g4] ~@2", // Abmaj7
  M: "[d4,f4,bb4]@8 ~@2 [c4,d4,f4,bb4] ~@2 [c4,d4,f4,bb4] ~@2", // Bb
  N: "[g3,eb4,g4,c5]@6 [c4,f4,a4,c5] ~ [d4,g4,bb4,c5] ~ [c4,f4,a4,c5] ~ [c4,eb4,g4,c5] ~ g3 [bb4,eb5,g5]", // Cm F Gm F Cm Eb
  O: "~ [bb4,eb5,g5] [a4,d5,f5] ~ [g4,bb4,eb5] ~ [f4,bb4,d5] ~ [f4,g4,c5] ~ [c4,f4,a4] ~ [bb3,eb4,g4] [c4,f4,a4]@2 ~", // Eb Dm Eb Bb Fsus2 F Eb F
  P: "~@2 c4 bb3 c4 ~ c4 bb3 c4 bb3 [c4,db4] [bb3,eb4]@2 ~@3", // Dbmaj7 Eb5
})).s("gm_epiano2").gain(0.09)

// chords · piano
const piano = note(`<
  ~@16 A B A C D B A E ~@8 A B A F A B A G ~@8 A B A H A B A I ~@16 J ~@7 A B K L M N O P M B Q R A B S T
>`.pickRestart({
  A: "[bb3,c4,eb4] ~@6 [bb3,c4,eb4]!2 ~@7", B: "[c4,d4,f4] ~ [c4,d4,f4] ~@2 [c4,d4,f4] ~@2 [c4,d4,f4] ~@7",
  C: "[bb3,d4] ~ [bb3,c4,eb4] ~@2 [bb3,d4] ~@2 [bb3,c4,eb4] ~@3 [bb3,c4,eb4] [bb3,d4] bb3 ~", // Bb Cm7 Bb Cm7 Bb
  D: "[bb3,c4,eb4] ~@6 [bb3,c4,db4,eb4] [bb3,c4,eb4] ~@7", // Cm7
  E: "[bb3,c4,eb4] ~ [bb3,c4,eb4] ~@2 [bb3,c4,eb4] ~@2 [bb3,c4,eb4] ~ [bb3,c4,eb4] ~ [bb3,d4] [bb3,c4,db4,eb4] ~@2", // Cm7 Bb Cm7
  F: "[bb3,d4] ~ [bb3,c4,eb4] ~@2 [bb3,d4] ~@2 [bb3,c4,eb4] ~@3 [bb3,c4,eb4] [bb3,d4] ~@2", // Bb Cm7 Bb Cm7 Bb
  G: "eb4 ~ [bb3,c4,eb4] ~@2 [bb3,c4,eb4] ~@2 [bb3,c4,eb4] ~@3 [bb3,d4] [bb3,c4,eb4] ~@2", // Cm7 Bb Cm7
  H: "[bb3,c4,db4,eb4] ~ [bb3,c4,eb4] ~@2 [bb3,c4,eb4] ~@2 [bb3,c4,eb4] ~@3 [bb3,c4,eb4] [bb3,d4] ~@2", // Cm7 Bb
  I: "[c2,g3,bb3,c4,eb4] ~ [bb3,c4,eb4] ~@2 [bb3,c4,eb4] ~@2 [bb3,c4,eb4] ~@3 [bb3,d4] [bb3,c4,eb4] ~@2", // Cm7 Bb Cm7
  J: "[c4,eb4] ~@15", K: "[d4,f4]@2 ~ [c4,d4,eb4,g4] ~@2 [d4,f4] ~ [d4,f4] ~ f4 [d4,eb4,g4] ~@4, c4 ~@15",
  L: "~@2 [d4,eb4,g4] ~@2 [d4,f4] ~@2 [d4,f4] ~@3 [eb4,g4] [d4,f4]@2 ~, ~@13 g4 ~@2", // Ebmaj7 Dm Eb Dm
  M: "[c4,eb4,gb4] ~@6 [bb3,c4,eb4]!2 ~@7", // Cdim Cm7
  N: "[c4,d4,f4] ~ [c4,d4,f4] ~@2 [c4,d4,f4] ~@2 [c4,d4,f4] ~@3 [c4,d4,f4]!2 ~@2", // Dm7
  O: "[d4,eb4,g4] ~@6 [d4,eb4,g4]!2 ~@5 [c4,d4,f4] ~", // Ebmaj7 Dm7
  P: "[c4,d4,f4]@2 ~ [d4,eb4,g4] ~@2 [d4,f4] ~ [d4,f4] ~ [eb4,g4] ~ [eb4,g4] [d4,f4]@2 ~", // Dm7 Ebmaj7 Dm Eb Dm
  Q: "[d4,f4]@2 ~ [d4,eb4,g4] ~@2 [c4,d4,f4] ~ [c4,d4,f4]@2 ~ [d4,eb4,g4] ~@4, c4 ~@15", // Dm Ebmaj7 Dm7 Ebmaj7
  R: "~@2 [c4,d4,e4,f4] ~@2 [c4,d4,f4] ~@2 [d4,eb4,g4] ~@3 [d4,eb4,g4] [c4,f4]@2 ~, ~@13 d4 ~@2", // Dm7 Ebmaj7 F5
  S: "[d4,eb4,g4] ~@6 [d4,eb4,g4]!2 ~@7", T: "~@2 c4 bb3 c4 ~ [c4,db4] bb3 c4 bb3 c4 eb4@2 ~@3",
})).s("gm_piano").gain(0.31).pan(0.3)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  A B C D E B F G A B C D E B F G H@2 I J K L I M A B C D E B F G H@2 I J K L I M A B C D E B F G H@2 I J K L I M A B C
  D E B F G H@2 I J K L I M A B C D E B F G H@2 I J K L I M H@2 I J K L I N
>`.pickRestart({
  A: "~ c4 ~@2 c4 ~ bb3 ~ c4 ~@4 g3 bb3 g3", B: "c4!2 bb3 ~ c4 ~ bb3 ~ f4 ~ eb4 ~ eb4 f4 ~ eb4",
  C: "~ c4 bb3 ~ c4 ~ bb3 ~ c4 ~@4 g3 a3 g3", D: "c4!2 a3 ~ c4 ~ g3 ~ d4@2 c4 ~ c4 d4 ~ c4",
  E: "~ c4 bb3 ~ c4 ~@3 c4 ~@2 c4 ~ g3 bb3 g3", F: "~ c4 ~@2 c4 ~ bb3 ~ c4 ~@4 g3 a3 g3",
  G: "c4!2 a3 ~ c4 ~ a3 ~ d4 ~ c4 ~ c4 d4 ~ c4", H: "c4!2 bb3 ~ c4 ~ bb3 ~ c4 ~@4 g3 bb3 ~",
  I: "c4!2 bb3 ~ c4 ~ bb3 ~ f4@2 eb4 ~ eb4 f4 ~ eb4", J: "~ eb4 c4 ~ c4 ~ bb3 ~@3 c4 ~@2 bb3 ~@2",
  K: "~ c4 bb3 ~ c4 ~ bb3 ~ c4 ~@2 c4 ~ g3 bb3 g3", L: "c4!2 bb3 ~ c4 ~ bb3 ~ c4 ~@4 g3 bb3 g3",
  M: "~ eb4 c4 ~ c4 ~ bb3 ~ c4 ~ g3 ~ bb3 g3 ~@2", N: "~@2 c4 bb3 c4 ~ c4 bb3 c4 bb3 c4 eb4@2 ~@3",
})).s("gm_electric_guitar_muted").gain(0.17).pan(1)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A B C D E F G H A B C D E F G H I J K L I J K L A B C D E F G H I J K L I J K L A B C D E F G H I J K L I J K L A B C
  D E F G H I J K L I J K L A B C D E F G H I J K L I J K L I J K L I J K M
>`.pickRestart({
  A: "[g4,c5]!4 ~ [g4,c5] g4 [g4,c5]!2 g4 [g4,c5]!2 g4 [g4,c5] ~ g4", // C5
  B: "[g4,c5]!3 g4 [g4,c5]!4 g4 [g4,c5]!2 g4 c5 [g4,c5]!2 g4", // C5
  C: "[a4,c5] ~ [a4,c5]!2 ~ [a4,c5] a4 [a4,c5] a4!2 [a4,c5] a4 [a4,c5]!4", // Am
  D: "~ [a4,c5]!3 a4 [a4,c5] ~ [a4,c5] a4!2 [a4,c5] a4 [a4,c5]!2 a4 ~", // Am
  E: "[g4,c5] ~ [g4,c5] g4 [g4,c5]!4 g4 [g4,c5]!7", F: "[g4,c5] ~ [g4,c5]!4 ~ [g4,c5]!8 c5",
  G: "a4 [a4,c5]!2 ~ a4 [a4,c5]!3 a4 [a4,c5]!2 a4 [a4,c5]!2 ~ [a4,c5]", H: "a4 [a4,c5]!2 ~ [a4,c5]!7 a4 [a4,c5]!4",
  I: "[ab4,c5]!3 ab4 [ab4,c5]!2 ~ [ab4,c5] ab4 [ab4,c5]!2 ab4 [ab4,c5]!2 ~ [ab4,c5]", J: "f4 [f4,bb4]!5 ~ [f4,bb4]!9",
  K: "[g4,c5] g4 [g4,c5]!10 ~ [g4,c5]!3", L: "~ [g4,c5]!15",
  M: "~@2 [g4,c5] [f4,bb4] [g4,c5] ~ [g4,c5] [f4,bb4] [g4,c5] [f4,bb4] [g4,c5] [bb4,eb5] ~@4", // C5 Bb5 C5 Bb5 C5 Bb5 C5 Eb5
})).s("gm_electric_guitar_clean").gain(0.09)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~ A B C D E F G ~ A B C D E F G H ~ I J H ~ I J ~ A B C D E F G H ~ I J H ~ I J ~ A B C D E F G H ~ I J H ~ I J ~ A B
  C D E F G H ~ I J H ~ I J ~ A B C D E F G H ~ I J H ~ I J H ~ I J H ~ I ~
>`.pickRestart({
  A: "~@3 c5 ~@8 g4 ~@3", B: "~@4 a4 ~@4 c5 ~ c5 ~@4", C: "c5 ~@3 c5 ~@4 c5 ~ c5 ~@4", D: "~ c5 ~@6 c5 ~@7",
  E: "~ g4 ~@13 a4", F: "~@4 c5 ~@3 c5 ~@2 c5 ~@2 a4 ~", G: "c5 ~@10 c5 ~@4", H: "~@14 ab4 ~", I: "~ c5 ~@14",
  J: "c5 ~@15",
})).s("gm_electric_guitar_clean").gain(0.05)

// bass · synth bass 2
const bass = note(`<
  A B C D E F C G A B C D E F C G H I E J K L M N A B C D E F C G H I E J K L M N A B C D E F C G H I E J K L M N A B C
  D E F C G H I E J K L M N A B C D E F C G H I E J K L M N H I E J K L M O
>`.pickRestart({
  A: "c2 ~@6 c2!2 ~@7", B: "~@2 c2 ~@2 c2 ~@2 c2 ~@3 g1 bb1 c2 ~", C: "f1 ~@6 f1!2 ~@7",
  D: "~@2 f1 ~@2 f1@2 ~ a1 ~ c2 ~ d2 c2@2 ~", E: "c2 ~@6 c2!2 ~@3 g1 bb1 c2 ~", F: "c2 ~@6 c2!2 ~@3 g1 c2@2 ~",
  G: "~@2 f1@2 ~ f1@2 ~ a1 ~ c2 ~ d2 c2 ~@2", H: "ab1 ~@6 ab1!2 ~@7", I: "bb1 ~ bb1 ~@2 bb1 ~ bb1!2 ~@5 bb1 b1",
  J: "c2 ~ c2 ~@2 c2 ~@2 c2 ~@3 c2 bb1@2 ~", K: "ab1@2 ~@5 ab1!2 ~@7", L: "bb1 ~ bb1 ~@2 bb1 ~ bb1!2 ~@7",
  M: "c2 ~@6 c2!2 ~@3 g1 bb1 c2 bb1", N: "c2 ~ c2 ~@2 c2 ~@2 c2 ~@3 g1 bb1@2 ~",
  O: "~@2 c2 bb1 c2 ~ c2 bb1 c2 bb1 c2 eb2@2 ~@3",
})).s("gm_synth_bass_2").gain(0.45)

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

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

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

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

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

// drums · ride
const ride = s("rd").struct("<~@16 A@8 ~@8 A@8 ~@8 A@8 ~@8 A@8 ~@8 A@15 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.5)

// drums · congas
const congas = s("conga:13").struct(`<
  A B A C A@3 B A B A C A@3 B A B A C A@3 B A B A C A@3 B A B A C A@3 B A B A C A@3 B A B A C A@3 B A B A C A@3 B A B A
  C A@3 B A B A C A@3 B A B A C A@3 B A B A C A@3 B
>`.pickRestart({
  A: "~@3 x ~@3 x", B: "~@3 x ~@4", C: "~@7 x ~@8",
})).gain(1.59)

stack(
  epiano2, piano, electric_guitar_muted, electric_guitar_clean, electric_guitar_clean_2, bass, kick, snare, hihat,
  open_hat, crash, ride, congas
)

More by KC and The Sunshine Band