Strudelify
Ladies Night cover art

Ladies' Night

Ladies Night

Kool & The Gang

KeyG minorTempo113 bpm
0:00/0:00
// Ladies Night — Kool & The Gang
// 113 bpm, 4/4, key G 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 102 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(113/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 · "E.PIANO 2"
const epiano2 = note(`<
  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 C D E D F D G H I J K J L J K J M N I
  J K J L J K J ~@8 O P Q R@2 P Q R@2 P Q R@2 P Q R@2 P Q R@2 P Q R@2 P S ~
>`.pickRestart({
  A: "[ab3,b3,db4] ~ [ab3,b3,db4] ~ [ab3,b3,db4] ~ [ab3,b3,db4] ~ [ab3,b3,db4] ~ [ab3,b3,db4] ~ [ab3,b3,db4] ~ [ab3,b3,db4] ~", // Db7
  B: "[ab3,bb3,db4] ~ [ab3,bb3,db4] ~ [ab3,bb3,db4] ~ [ab3,bb3,db4] ~ [ab3,bb3,db4] ~ [ab3,bb3,db4] ~ [ab3,bb3,db4] ~ [ab3,bb3,db4] ~", // Bbm7
  C: "[c4,e4,g4,b4]@10 [c4,e4,g4,b4]@3 [c4,e4,g4,b4]@3", D: "[a3,c4,e4,g4,b4]@3 [e4,g4,b4,d5]@5",
  E: "[c4,e4,g4,b4]@10 [c4,e4,g4,b4]@3 ~ [g4,b4]@2, ~@13 [a3,c4,e4]@3", F: "[c4,e4,g4,b4]@13 [c4,e4,g4,b4]@3",
  G: "[c4,e4,g4,b4]@5 [c4,e4,g4,b4]@3", H: "[a3,c4,e4,g4,a4]@3 [e4,g4,b4,d5]@5",
  I: "[eb4,g4,bb4,d5]@3 [eb4,g4,bb4,d5]@7 [g4,bb4,d5]@3 [g4,bb4,d5]@3, ~@5 eb4@3", // Ebmaj7 Gm
  J: "[eb4,gb4,bb4,d5]@3 [c4,d4,f4,g4,bb4]@5", K: "[eb4,g4,bb4,d5]@10 [eb4,g4,bb4,d5]@3 [eb4,g4,bb4,d5]@3",
  L: "[eb4,g4,bb4,d5]", // Ebmaj7
  M: "[e4,gb4,b4] ~ [e4,gb4,b4] ~ [e4,gb4,b4] ~ [e4,gb4,b4] ~ [e4,gb4,b4] ~ [e4,gb4,b4] ~ [e4,gb4,b4] ~ [e4,gb4,b4] ~", // Esus2
  N: "[e4,gb4,b4]!2 ~ [e4,gb4,b4]!3 ~ [e4,gb4,b4]!2 ~@7", O: "[g3,bb3]@3 [g3,bb3,d4]@3 ~@4 f4@6, eb4@3 [g3,bb3,d4]@5",
  P: "d4@2 d4 [f3,g3,bb3,d4]@5, [a3,f4]@3 ~@5", Q: "[g3,bb3]@2 [g3,bb3,d4] d4@2 [d4,f4]@3, eb4@3 [g3,bb3]@5",
  R: "[d4@4 d4@2 [g3,bb3]@10 [g3,bb3]@3 [g3,bb3,d4]@3 ~@4 f4@6, [f3,a3,f4]@3 f3@8 [g3,bb3,d4]@5, ~@6 d4@13 ~@13, ~@8 eb4@3 ~@5]/2", // Gm F Gm
  S: "[g3,bb3]@2 [g3,bb3,d4] [g3,bb3]@5, eb4@3 d4@2 ~@3", // Gm
})).s("gm_epiano2").gain(0.46)

// bass · slap bass 1 · "SLAPBASS 1"
const bass = note(`<
  ~ A@2 B C ~@2 D E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F E F G H G I G J G K L M L N L O L N P Q L
  M L N L O L N ~@4 L M L N L O L N L O L N L O L N L O L N L O L N L O L N L O R ~
>`.pickRestart({
  A: "[~@3 db4@4 ~, ~@12 b3 ~@19]/2", B: "~@13 b2 db3 ~", C: "db3@3 ~@5", D: "~@12 db3@3 ~",
  E: "[db1,db2]@3 ~ [e1,e2]@3 ~ [gb1,gb2]@3 [ab1,ab2]@3 ~@2", // Db E Gb Ab
  F: "[db1,db2] ~ [db1,db2] ~ [e1,e2] ~ [e1,e2] [gb1,gb2] ~@8", // Db E Gb
  G: "[a1,a2]@2 ~ [a1,a2]@2 ~ [g1,g2] ~ [a1,a2]@2 ~@4 [g1,g2] [a1,a2]", // A G A G A
  H: "[b1,b2]@3 ~@3 [e2,e3]@4 ~@2 [e2,e3] [d2,d3] [c2,c3] [b1,b2]", // B E D C B
  I: "[b1,b2]@3 ~@5 [e2,e3] ~ [e2,e3] ~ [b1,b2] ~ [b1,b2] ~", // B E B
  J: "[b1,b2]@3 ~@3 [e2,e3]@5 ~ [e2,e3] [d2,d3] [c2,c3] [b1,b2]", // B E D C B
  K: "[b1,b2]@3 ~@5 [e2,e3] ~ [e2,e3] ~ [b1,b2] ~ [b1,b2]@2", // B E B
  L: "[c2,c3]@2 ~ [c2,c3]@2 ~ [bb1,bb2] ~ [c2,c3]@2 ~@4 [bb1,bb2] [c2,c3]", // C Bb C Bb C
  M: "[d2,d3]@3 ~@3 [g2,g3]@4 ~@2 [g2,g3] [f2,f3] [eb2,eb3] [d2,d3]", // D G F Eb D
  N: "[d2,d3]@3 ~@5 [g2,g3] ~ [g2,g3] ~ [d2,d3] ~ [d2,d3] ~", // D G D
  O: "[d2,d3]@3 ~@3 [g2,g3]@5 ~ [g2,g3] [f2,f3] [eb2,eb3] [d2,d3]", // D G F Eb D
  P: "[b1,b2] ~ [b1,b2] ~ [b1,b2] ~ [b1,b2] ~ [b1,b2] ~ [b1,b2] ~ [b1,b2] ~ [b1,b2] ~", // B
  Q: "[b1,b2]!2 ~ [b1,b2]!3 ~ [b1,b2] b1@2 ~@6, ~@8 b2 ~@7", R: "[c2,c3]@2 ~ [c2,c3]@2 ~ [bb1,bb2] ~ [c2,c3]@2 ~@6",
})).s("gm_slap_bass_1").gain(0.55)

// chords · trumpet
const trumpet = note("<~@7 A ~ B ~@2 C D C D ~@25 E F ~@2 G F ~@9 H I ~@23 J K ~@6 J K ~@6 J K ~@3>".pickRestart({
  A: "~@6 [db5,db6] ~", B: "~@6 [db5,db6] ~, ~@12 eb6 ~@3",
  C: "~@2 [b4,db5,gb5]!3 [b4,db5,gb5]@2 ~ [b4,db5,gb5]!3 [b4,db5,gb5]@4 ~", // Bsus2
  D: "[bb4,db5,gb5] ~ [bb4,db5,gb5] ~ [bb4,db5,gb5] ~ [bb4,db5,gb5]!2 ~@8", E: "~@12 [e4,e5] [gb4,gb5] [g4,a4,g5] a5",
  F: "[b4,b5] ~@15", G: "~@12 [e4,e5] [gb4,gb5] [g4,g5] [a4,a5]",
  H: "[a4,db5,e5] ~ [a4,db5,e5] ~ [a4,db5,e5] ~ [a4,db5,e5] ~ [a4,db5,e5] ~ [a4,db5,e5] ~ [a4,db5,e5] ~ [a4,db5,e5] ~", // A
  I: "[e5,gb5,b5]!2 ~ [e5,gb5,b5]!2 ~ [e5,gb5,b5]!3 ~@7", J: "~@12 [g4,g5] [a4,a5] [bb4,bb5] [c5,c6]",
  K: "[d5,d6] ~@15", // D
})).s("gm_trumpet").gain(0.55)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@6 A B A C D E F G H G A C D E F G H G ~ I ~ I ~ J K ~@2 I ~ I ~ I ~ I L M N O P Q R S T U V W X W Y Z ~@2 T U V W X
  W Y Z ~@12 AA AB AC AD AA AB AC AD AA AB AC AD AA AB AC AD AA AB AC AD AA AB AE ~
>`.pickRestart({
  A: "[ab3,b3,db4]@15 ~", B: "[ab3,bb3,db4]@7 ~", C: "[ab3,bb3,db4]@7 ~@2 [bb3,db4,e4]!4 ~@3", D: "[ab3,b3,db4]@7 ~",
  E: "[ab3,bb3,db4]@11 ~@5", F: "[ab3,b3,db4]@3 ~", G: "[ab3,bb3,db4]@7 ~@3 [ab3,bb3,db4] ~@2 [ab3,bb3,db4] ~@2",
  H: "[ab3,b3,db4]@9 ~ [ab3,b3,db4] ~@2 [ab3,b3,db4] ~@2", // Db7
  I: "~@9 [ab3,b3,db4] [e4,ab4,db5] [ab3,b3,db4] [e4,ab4,db5]@2 ~@2", // Db7 Dbm Db7 Dbm
  J: "~@9 [ab3,b3,db4] [e4,ab4,db5] [ab3,b3,db4] [e4,ab4,db5]@2 b2 ~", K: "db3 ~@15",
  L: "~@2 [c4,e4,g4,b4] ~ [c4,e4,g4,b4]!2 ~ [c4,e4,g4,b4]!2 ~ g4 [c4,e4,g4,b4] ~ [e4,g4] [c4,e4,g4,b4] ~", // Cmaj7 Em Cmaj7
  M: "~@2 [a3,c4,e4,g4] ~ [a3,c4,e4,g4]!2 [e4,g4,b4,d5]@5 ~@2 [e4,g4,d5] ~@2", // Am7 Em7
  N: "[c4,e4,g4,b4] ~ [c4,e4,g4,b4] ~ [c4,e4,g4] [c4,e4,g4,b4] ~ [c4,e4,g4,b4]!2 ~ [c4,e4,g4,b4]!2 ~ [c4,e4,g4] [c4,e4,g4,b4] ~", // Cmaj7 C Cmaj7 C Cmaj7
  O: "~@2 [a3,c4,e4,g4] ~@2 [a3,c4,e4,g4] e4@2 e4@2 ~ b4 ~ bb4 [e4,g4,d5] ~, ~@6 [g4,b4,d5]@5 ~@5", // Am7 Em7 G
  P: "~@2 [c4,e4,g4,b4] ~ [c4,e4,g4,b4]!2 ~ [c4,e4,g4,b4]!2 ~ [e4,g4,b4] [c4,e4,g4,b4] ~ [c4,e4,g4,b4]!2 ~", // Cmaj7 Em Cmaj7
  Q: "~@2 [a3,c4,e4,g4] ~ [a3,c4,e4,g4]!2 e4@4 e4 ~ g4 b4 ~ [g4,b4,d5], ~@3 [g4,b4,d5]@3 ~@2", // Am7 G
  R: "[c4,e4,g4] ~ [c4,e4,g4,b4] [db4,e4,g4,b4] ~ [c4,e4,g4,b4]!2 ~ [c4,e4,g4,b4] ~ [e4,g4,b4] [c4,e4,g4,b4] ~ [g4,bb4,b4] [c4,e4,g4,b4] ~", // C Cmaj7 Dbm7b5 Cmaj7 Em Cmaj7 G Cmaj7
  S: "~@2 [a3,c4,e4,g4] ~@2 [a3,c4,e4,g4] [b3,e4,g4,b4,d5]@4 d5 ~ b4 e4 ~@2", // Am7 Em7
  T: "~@2 [eb4,g4,bb4,d5] ~ [eb4,g4,bb4] [eb4,g4,bb4,d5] ~ [eb4,g4,bb4] [eb4,g4,bb4,d5] ~ [eb4,g4,bb4] [eb4,g4,bb4,d5] ~ [eb4,bb4] [eb4,g4,bb4,d5] ~", // Ebmaj7 Eb Ebmaj7 Eb Ebmaj7 Eb Ebmaj7 Eb5 …
  U: "~@2 [eb4,gb4,bb4] ~ [eb4,gb4,bb4]!2 ~@2 [d4,f4,bb4]@3 [d4,f4,bb4] ~@2 [d4,f4,bb4] ~", // Ebm Bb
  V: "~@2 [eb4,g4,bb4,d5] ~ [g4,bb4] [eb4,g4,bb4,d5] ~ [g4,bb4] [eb4,g4,bb4,d5] ~ [eb4,g4,bb4] [eb4,g4,bb4,d5] ~ [eb4,g4,bb4] [eb4,g4,bb4,d5] ~", // Ebmaj7 Gm Ebmaj7 Gm Ebmaj7 Eb Ebmaj7 Eb …
  W: "~@2 [eb4,gb4,bb4] ~@2 [eb4,gb4,bb4] ~@2 [d4,f4,bb4]@3 [d4,f4,bb4] ~@2 [d4,f4,bb4] ~", // Ebm Bb
  X: "~@2 [eb4,g4,bb4,d5] ~ [eb4,g4,bb4] [eb4,g4,bb4,d5] ~ [eb4,bb4] [eb4,g4,bb4,d5] ~ eb4 [eb4,g4,bb4,d5] ~ [g4,bb4] [eb4,g4,bb4,d5] ~", // Ebmaj7 Eb Ebmaj7 Eb5 Ebmaj7 Gm Ebmaj7
  Y: "~@2 [eb4,g4,bb4,d5] ~@2 [eb4,g4,bb4,d5] ~@2 [eb4,g4,bb4,d5] ~@2 [eb4,g4,bb4,d5] ~@2 [eb4,g4,bb4] ~", // Ebmaj7 Eb
  Z: "~@2 [eb4,gb4,bb4] ~@2 [eb4,gb4,bb4] ~@2 [d4,f4,bb4]@2 ~ [d4,f4,bb4] ~@2 [d4,f4,bb4] ~", // Ebm Bb
  AA: "~@2 [g3,bb3,d4] ~ bb3 [g3,bb3,d4] ~ [g3,bb3] [g3,bb3,d4] ~ [g3,bb3] [g3,bb3,d4,f4] ~ bb3 [g3,bb3,d4] ~", // Gm Gm7 Gm
  AB: "~@2 [f3,g3,bb3,d4] ~ [f3,bb3] [f3,g3,bb3,d4] ~ bb3 [f3,g3,bb3,d4] ~ bb3 [f3,g3,bb3,d4] ~ bb3 [f3,g3,bb3,d4] ~", // Gm7 Bb5 Gm7
  AC: "~@2 [g3,bb3,d4] ~@2 [g3,bb3,d4] ~ bb3 [g3,bb3,d4] ~@2 [bb3,d4,f4] ~ bb3 [g3,bb3,d4,f4] ~", // Gm Bb Gm7
  AD: "~@2 [f3,g3,bb3,d4] ~ f3 [f3,g3,bb3,d4] ~ [f3,bb3] [f3,g3,bb3,d4] ~@2 f4 ~@2 [g3,d4] bb3", // Gm7 Bb5 Gm7 G5
  AE: "~@2 [g3,bb3,d4] ~@2 [g3,bb3,d4] ~ bb3 [g3,bb3,d4] ~@7", // Gm
})).s("gm_electric_guitar_muted").gain(0.56)

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

// drums · rim
const rim = s("rim").struct("<~@8 [~ x ~ x]!92 [~ x ~@2] ~>").gain(0.7)

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

// drums · clap
const clap = s("cp").struct("<A B A B A C A B A D A B A D A B A@32 E@8 A F E@42 G ~>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x!2 ~ x ~", C: "~@4 x ~@6 x!2 ~ x!2", D: "~@4 x ~@5 x!2 ~@2 x ~", E: "x!4",
  F: "~@2 x ~@2 x!2 ~", G: "x!3 ~",
})).gain(0.62)

// drums · hihat
const hihat = s("hh").struct("<~@3 [~@14 x!2] [~@3 x] [~@4 x ~@6 x!2 ~ x!2] ~@2 [x!8]!92 [x!5 ~@3] ~>").gain(0.62)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A B@3 A B@2 ~ B@3 ~@7 B ~@12 C@16 ~@2 C@42 D ~>".pickRestart({
  A: "~@15 x", B: "~@7 x", C: "~ x ~ x ~ x ~ x", D: "~ x ~ x ~@4",
})).gain(0.47)

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

stack(epiano2, bass, trumpet, electric_guitar_muted, kick, rim, snare, clap, hihat, open_hat, crash)

More by Kool & The Gang