Strudelify
Cold Sweat cover art

Gettin' Down To It

Cold Sweat

James Brown

KeyD majorTempo112 bpm
0:00/0:00
// Cold Sweat — Brown James
// 112 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 "fingeredbass" electric bass finger (copy of ch 1 "frettless" fretless bass); ch 3 "acousticbass" acoustic bass (copy of ch 1 "frettless" fretless bass)
// note: Full arrangement: all 104 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order, A@4 for four bars: edit a riff to change every repeat.

// bass · fretless bass · "frettless"
const bass = note(`<
  ~ A B A C A C A D A D A B A E A C A F A C G H I@2 J K G L@2 M N ~ O P A B A C A C A D A D A B A C A C A D A C G H I@2
  J K G L@2 M N ~ Q R A B A C A C A D A D A B A C A C A D A B G H I@2 J K G L@2 M N ~ S T@2
>`.pickRestart({
  A: "d1@4 ~@3 d1@4 ~ d2@4 c2@4 a1@3 ~@5 d2@4", B: "d1@2 f#1@2 ~@2 g1@4 g#1@4 a1 ~",
  C: "d1@4 f#1@4 ~@4 g1@8 g#1@8 a1@3 ~", D: "d1 f#1 ~ g1@2 g#1@2 a1", E: "d1@4 f#1@4 ~@4 g1@8 g#1@8 a1 a1@2 ~",
  F: "d1@4 f#1@4 ~@4 g1@8 g#1@7 a1@4 ~", G: "c2@3 ~@5 c2@3 ~@8 g1@3 ~@5 f1@5",
  H: "~@4 f1@3 ~ a1@2 ~ a1@2 ~@2 a#1@2 ~@2 a#1@2 ~@2 b1@2 ~@2 b1@2 ~@3",
  I: "[c2@3 ~@5 c2@4 ~@8 g1@4 ~@4 f1@7 ~ f1@3 ~ a1@4 f1@3 ~ a#1@2 ~@2 f1@3 ~ b1@2 ~@2 f1@3 ~]/2",
  J: "c2@3 ~@5 c2@3 ~@9 g1@3 ~@5 f1@4", K: "~@2 f1 ~ a1 ~ a1 ~ a#1 ~ a#1 ~ b1 ~ b1 ~",
  L: "[~@3 f1@3 ~@2 a1@2 ~ a1@2 ~@2 a#1@2 ~@2 a#1@2 ~@2 b1@2 ~@2 b1@2 ~@2 c2@3 ~@5 c2@4 ~@8 g1@4 ~@4 f1@5]/2",
  M: "~@4 f1@3 ~ a1@8 a#1@7 b1@6 ~@3", N: "~@3 e1@3 ~@5 f1@3 ~@5 f#1@4 ~@4 g1@4 ~", O: "~@3 e1@3 ~@5 f1@4 ~@4 g1@5 ~@8",
  P: "~@7 g1@24 ~", Q: "e1@4 ~@3 f1@3 ~@5 g1@4 ~@13", R: "~@7 g1@9", S: "e1@3 ~@6 f#1@3 ~@3 g1@4 ~@13",
  T: "[~@7 d1@17 ~@8]/2",
})).s("gm_fretless_bass").gain(0.5)

// bass · baritone sax · "baritonesax"
const bass_2 = note(`<
  ~@12 A B ~@2 A B A B ~ C D@2 ~ C D@2 E@2 ~ F ~ G H ~ A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~ C D@2 ~@7 I ~ J K ~ L@2 A B
  A B A B A B A B A M A B A B ~ C D@2 ~ C N@4 ~ I ~ O P@2
>`.pickRestart({
  A: "~@7 c2", B: "d2@3 ~@29", C: "c2 ~ c2 ~@5", D: "[~@31 c2@4 ~@5 c2@4 ~@20]/2", E: "[~@31 c2@4 ~@4 c2@4 ~@21]/2",
  F: "~@3 e2@4 ~@4 f2@4 ~@4 f#2@4 ~@4 g2@4 ~", G: "~@4 f2@3 ~@4 f#2@3 ~@6 g2@4 ~@8", H: "~@3 g2@12 ~",
  I: "~@4 e2@4 ~@3 f2@3 ~@5 f#2@3 ~@4 g2@4 ~@2", J: "f2@3 ~@5 f#2@3 ~@4 g2@3 ~@14", K: "~@7 g2@5 ~@4",
  L: "[~@28 c2@3 d2@3 ~@30]/2", M: "d2 ~@15", N: "[~@31 c2@4 ~@4 c2@3 ~@22]/2", O: "~ f2@3 ~@4 f#2@3 ~@4 g2@4 ~@13",
  P: "[~@7 d2@17 ~@8]/2",
})).s("gm_baritone_sax").gain(0.56)

// other · trumpet · "trumpet 1"
const trumpet = note("<~ [~@8 d5@8 c5 ~@15]!20 ~@14 [~@8 d5@8 c5 ~@15]!20 ~@14 [~@8 d5@8 c5 ~@15]!20 ~@15>")
  .s("gm_trumpet").gain(0.5)

// other · trumpet · "hookdiftrumpet"
const trumpet_2 = note(`<
  ~@21 A@2 B@2 C@4 D@2 E ~@2 F ~@20 A@2 B@2 C@4 D@2 E ~@2 G ~@20 A@2 B@2 C@4 D@2 E ~@2 H@2
>`.pickRestart({
  A: "[~@15 f4@4 g4@3 ~@5 a4@26 ~@11]/2", B: "[~@15 f4@3 ~ g4@3 ~@5 a4@30 ~@7]/2",
  C: "[~@15 f4@4 g4@3 ~@5 a4@30 ~@7]/2", D: "[~@15 f4@4 g4@2 ~@6 a4@31 ~@6]/2",
  E: "~@3 e4@4 ~@4 f4@4 ~@4 f#4@4 ~@4 g4@4 ~", F: "~@5 [f4,a4]@24 ~@3", G: "~@7 [f4,a4]@8 ~",
  H: "[~@7 [a3,d4]@17 ~@8]/2", // D5
})).s("gm_trumpet").gain(0.5)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@103>").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C B D E C E C F C F C F C E C E C F G B G F G B H I G B ~@3 J C F K F C E C E C F C F C F C E C E C F G B L B H
  B M I G F ~@3 N C F K F C E C E C F C F C F C E C E C F G B L B H B M I G F ~@3 N ~
>`.pickRestart({
  A: "~@2 x ~@2 x ~ x", B: "~@2 x!2 ~@2 x ~ x ~@3 x ~@3", C: "x ~ x ~@2 x ~ x", D: "x ~ x ~@2 x ~@2",
  E: "~@4 x ~@2 x ~@4 x ~@3 x ~@7 x ~@7", F: "~@5 x ~ x ~@4 x ~@3 x ~@7 x ~@7", G: "~@15 x ~@4 x ~@7 x ~@3",
  H: "~@15 x ~@3 x ~@8 x ~@3", I: "~@3 x ~ x ~@5 x ~@3 x ~@7 x ~@8", J: "~ x ~@2", K: "x ~ x ~@4 x", L: "x ~@3 x!2 ~ x",
  M: "~@15 x ~@3 x ~@7 x ~@4", N: "~@7 x ~@8",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B A B A B A B A C A C A C A B A B A D E F E B E G H I J K L ~ M N A C A C A B A B A C A C A C A B A B A D E B E B
  H I O I P B Q ~ R S A C A C A B A B A C A C A C A B A B A D E B E B H I O I P B Q ~ T S ~
>`.pickRestart({
  A: "~ x", B: "~@3 x ~@4 x ~@11 x ~@7 x ~@3", C: "~ x!2 ~@2 x ~ x", D: "~ x!2 ~@2 x ~@2", E: "x ~@3 x ~@2 x ~@4 x ~@3",
  F: "~@2 x ~@4 x ~@12 x ~@7 x ~@3", G: "~@2 x ~@5 x ~@11 x ~@7 x ~@2 x", H: "x ~@6 x ~@6 x ~@8 x ~@8",
  I: "~@2 x ~@4 x ~@11 x ~@7 x ~@3 x", J: "~@4 x ~@2 x ~@4 x ~@3", K: "~@2 x ~@5 x ~@11 x ~@6 x ~@4",
  L: "~ x ~ x ~ x ~ x", M: "~@2 x ~@3 x ~@3 x ~@3 x!2", N: "x", O: "~@7 x ~@6 x ~@8 x ~@8", P: "~@7 x ~@5 x ~@10 x ~@7",
  Q: "~@4 x ~@7 x ~@6 x ~@6 x ~@5", R: "~ x ~@6 x ~@6 x ~@14 x!2", S: "x!2 ~@3 x ~@8 x ~@17",
  T: "x ~@7 x ~@6 x ~@14 x!2",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct("<~@65 A ~ B ~@31 A ~ C ~@2>".pickRestart({
  A: "~@4 x ~@7 x ~@6 x ~@6 x ~@5", B: "~ x ~@6 x ~@6 x ~@16", C: "x ~@7 x ~@6 x ~@16",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B C B C D C E F B A B C B C D C E G H I J K L M N O P ~@4 A B A B C B C D C E F B A B C B C D C E G H I J K L
  M N O P ~@4 A B A B C B C D C E F B A B C B C D C E G H I J K L M N O P ~@5
>`.pickRestart({
  A: "x!5 ~@2 x", B: "~ x!7", C: "x!3 ~@4 x", D: "~ x!5 ~ x", E: "~ x!6 ~",
  F: "x ~@3 x ~@3 x ~@3 x ~@2 x ~@8 x ~@3 x ~@3", G: "x ~@3 x ~@3 x ~@3 x ~@2 x ~@8 x ~@2 x ~@3 x",
  H: "~@3 x ~@4 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", I: "~ x!4 ~ x!2",
  J: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x", K: "~@3 x ~@4 x ~@2 x ~@4 x ~@6 x ~@4 x ~@3",
  L: "x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", M: "~@3 x ~@3 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x",
  N: "~@4 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", O: "~@3 x ~@3 x ~@3 x ~@4 x ~@6 x ~@4 x ~@3",
  P: "x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@4",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ B ~ B ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ B
  ~ B ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ B ~ B ~@6
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@19 x ~@12",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@49 [~@13 x ~@3 x ~@4 x ~@4 x ~@4] ~@40 [~@3 x ~@4] ~@3 [~@3 x!2 ~@3] ~@9>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@4 A ~ B C D E F C D C F ~ D G H C ~@2 I J K L M N O G ~ J P ~@7 F C D Q R S ~ T D C ~ U ~ V ~@2 W ~ X ~ Y C Z ~ Y ~
  AA AB ~@4 D AC AD C D C AE AF D AG D C ~ AH C F ~@2 B AI AJ AK AL ~ AM G AN ~@5
>`.pickRestart({
  A: "~@24 x ~@3 x ~@2 x", B: "~@20 x ~@6 x ~@4", C: "x", D: "~@6 x!2", E: "~@3 x ~@28", F: "~@19 x ~@4 x ~@3 x ~@3",
  G: "~@7 x ~@24", H: "~@5 x!3", I: "~@27 x ~@3 x", J: "~@3 x ~@3 x ~@24", K: "~@20 x ~@4 x ~@4 x ~", L: "~@3 x ~@12",
  M: "~@8 x ~@12 x ~@7 x ~@2", N: "~@5 x ~@26", O: "~@19 x ~@3 x ~@3 x ~@4", P: "~@6 x ~@4 x ~@4 x ~@7 x ~@7",
  Q: "x!2 ~@2", R: "~@20 x ~@4 x ~@2 x ~@3", S: "~ x ~@10 x ~@3 x ~@15", T: "~ x!3 ~@4",
  U: "~@8 x ~@3 x ~@4 x ~@2 x ~@11", V: "~@11 x ~@4 x ~@3 x ~@3 x ~@3 x ~@3", W: "~@3 x ~@6 x ~@4 x ~@16",
  X: "~@7 x ~@5 x ~@6 x ~@6 x ~@4", Y: "~@3 x ~@7 x ~@8 x ~@6 x ~@4", Z: "~@2 x ~@3 x ~@4 x ~@6 x ~@4 x ~@3 x ~@4",
  AA: "~ x ~@3 x ~@3 x ~@6", AB: "~@23 x ~@3 x ~@4", AC: "x ~@4 x ~@26", AD: "~@11 x ~@8 x ~@7 x ~@3",
  AE: "~@23 x ~@4 x ~@3", AF: "~ x ~@6", AG: "x ~@4 x ~@5 x ~@20", AH: "~@19 x ~@2 x ~ x ~@3 x ~@3", AI: "x ~@6 x ~@24",
  AJ: "~@6 x!3 ~ x ~ x ~ x ~", AK: "~ x!2 ~@5", AL: "~@19 x ~@3 x ~@3 x ~@3 x", AM: "~@11 x ~@6 x ~@4 x ~@2 x ~@4 x",
  AN: "~@3 x ~ x ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@21 A ~ B ~ C ~ C ~ D ~@4 E A ~@3 F ~@3 D ~@7 A ~@3 G H ~@2 G ~@2 I J ~@4 C A ~@3 D ~@11 D ~@3 A ~@3 K I E I J ~@4 C
  ~
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~@15 x ~@16", D: "~ x", E: "~@7 x ~@24", F: "~@5 x ~@10 x ~@15", G: "x!2 ~@2",
  H: "~@11 x ~@4", I: "~@31 x", J: "~@3 x ~@12", K: "x ~@6 x ~@24",
})).gain(0.56)

// drums · ride bell
const ride_bell = s("rd").struct("<~@38 [~@6 x!2] x ~@64>").gain(0.4)

stack(bass, bass_2, trumpet, trumpet_2, rim, kick, snare, low_tom, hihat, open_hat, mid_tom, high_tom, crash, ride_bell)

More by James Brown