Strudelify

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: edit a riff to change every repeat.

// bass · fretless bass · "frettless"
const bass = note(`<
  ~ A B C D A D A E A E A B C F A D A G C E H I J@2 K L M N@2 O P ~ Q R A B C D A D A S A E A B C D A D A E C D H I J@2
  K L M N@2 O P ~ T U A B C D A D A E A E A B C D A D A E C B H I J@2 K L M N@2 O P ~ V W@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@3 ~@4 d1@4 ~ d2@4 c2@4 a1@3 ~@5 d2@4", D: "d1@4 f#1@4 ~@4 g1@8 g#1@8 a1@3 ~", E: "d1 f#1 ~ g1@2 g#1@2 a1",
  F: "d1@4 f#1@4 ~@4 g1@8 g#1@8 a1 a1@2 ~", G: "d1@4 f#1@4 ~@4 g1@8 g#1@7 a1@4 ~", H: "c2@3 ~@5 c2@3 ~@8 g1@3 ~@5 f1@5",
  I: "~@4 f1@3 ~ a1@2 ~ a1@2 ~@2 a#1@2 ~@2 a#1@2 ~@2 b1@2 ~@2 b1@2 ~@3",
  J: "[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",
  K: "c2@3 ~@5 c2@3 ~@9 g1@3 ~@5 f1@4", L: "~@2 f1 ~ a1 ~ a1 ~ a#1 ~ a#1 ~ b1 ~ b1 ~",
  M: "c2@3 ~@4 c2@3 ~@9 g1@3 ~@5 f1@5",
  N: "[~@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",
  O: "~@4 f1@3 ~ a1@8 a#1@7 b1@6 ~@3", P: "~@3 e1@3 ~@5 f1@3 ~@5 f#1@4 ~@4 g1@4 ~", Q: "~@3 e1@3 ~@5 f1@4 ~@4 g1@5 ~@8",
  R: "~@7 g1@24 ~", S: "d1@4 f#1@4 ~@4 g1@8 g#1@7 a1@5", T: "e1@4 ~@3 f1@3 ~@5 g1@4 ~@13", U: "~@7 g1@9",
  V: "e1@3 ~@6 f#1@3 ~@3 g1@4 ~@13", W: "[~@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 E@2 F@2 ~ G ~ H I ~ A B ~@2 A J ~@2 A B ~@2 A K ~@2 A B ~ C F@2 ~@7 L ~ M N ~ O@2 A B
  P B A B A B A B P J A B A B ~ Q R@2 ~ S T@2 U@2 ~ V ~ W X@2
>`.pickRestart({
  A: "~@7 c2", B: "d2@3 ~@29", C: "c2 ~ c2 ~@5", D: "[~@31 c2@3 ~@6 c2@4 ~@20]/2", E: "[~@31 c2@4 ~@4 c2@3 ~@22]/2",
  F: "[~@31 c2@4 ~@4 c2@4 ~@21]/2", G: "~@3 e2@4 ~@4 f2@4 ~@4 f#2@4 ~@4 g2@4 ~", H: "~@4 f2@3 ~@4 f#2@3 ~@6 g2@4 ~@8",
  I: "~@3 g2@12 ~", J: "d2 ~@15", K: "d2 ~@7", L: "~@4 e2@4 ~@3 f2@3 ~@5 f#2@3 ~@4 g2@4 ~@2",
  M: "f2@3 ~@5 f#2@3 ~@4 g2@3 ~@14", N: "~@7 g2@5 ~@4", O: "[~@28 c2@3 d2@3 ~@30]/2", P: "~@27 c2@5",
  Q: "c2@3 ~@5 c2@3 ~@21", R: "[~@31 c2@4 ~@5 c2@4 ~@20]/2", S: "c2@4 ~@4 c2@3 ~@21", T: "[~@31 c2@3 ~@5 c2@3 ~@22]/2",
  U: "[~@31 c2@3 ~@5 c2@2 ~@23]/2", V: "~@3 e2@4 ~@4 f2@4 ~@4 f#2@4 ~@3 g2@4 ~@2", W: "~ f2@3 ~@4 f#2@3 ~@4 g2@4 ~@13",
  X: "[~@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@2 D@2 E@2 F ~@2 G ~@20 A@2 B@2 C@2 D@2 E@2 F ~@2 H ~@20 A@2 B@2 C@2 D@2 E@2 F ~@2 I@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: "[~@15 f4@4 g4@3 ~@5 a4@33 ~@4]/2",
  F: "~@3 e4@4 ~@4 f4@4 ~@4 f#4@4 ~@4 g4@4 ~", G: "~@5 [f4,a4]@24 ~@3", H: "~@7 [f4,a4]@8 ~",
  I: "[~@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 H I J G H K L G B ~@3 M C F N F C E C E C F C F C F C E C E C F O B P B K
  Q R L G E ~@3 S C F N F C E C E C F C F C F C E C E C F O B P B K Q R L G E ~@3 S ~
>`.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: "~@4 x ~ x ~@5 x ~@2 x ~@8 x ~@7", I: "~@4 x!2 ~ x", J: "~@5 x!2 ~@5 x ~@3 x ~@7 x ~@7",
  K: "~@15 x ~@3 x ~@8 x ~@3", L: "~@3 x ~ x ~@5 x ~@3 x ~@7 x ~@8", M: "~ x ~@2", N: "x ~ x ~@4 x",
  O: "~@16 x ~@2 x ~@8 x ~@3", P: "x ~@3 x!2 ~ x", Q: "~@4 x ~ x ~@5 x ~@2 x ~@7 x ~@8", R: "~@15 x ~@3 x ~@7 x ~@4",
  S: "~@7 x ~@8",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B A C A B A B A D A D A D A B A B A E F G H B H I J K L M N ~ O P A D A D A B A B A D A D A D A B A B A E H C H Q
  J R S K T B U ~ V W A D A D A B A B A D A D A D A B A B A E H C H Q J R S K T B U ~ X W ~
>`.pickRestart({
  A: "~ x", B: "~@3 x ~@4 x ~@11 x ~@7 x ~@3", C: "~ x ~@2 x ~@5 x ~@3 x ~", D: "~ x!2 ~@2 x ~ x", E: "~ x!2 ~@2 x ~@2",
  F: "x ~@7 x ~@5 x ~@8 x ~@8", G: "~@2 x ~@4 x ~@12 x ~@7 x ~@3", H: "x ~@3 x ~@2 x ~@4 x ~@3",
  I: "~@2 x ~@5 x ~@11 x ~@7 x ~@2 x", J: "x ~@6 x ~@6 x ~@8 x ~@8", K: "~@2 x ~@4 x ~@11 x ~@7 x ~@3 x",
  L: "~@4 x ~@2 x ~@4 x ~@3", M: "~@3 x ~@4 x ~@10 x ~@7 x ~@4", N: "~ x ~ x ~ x ~ x", O: "~@2 x ~@3 x ~@3 x ~@3 x!2",
  P: "x", Q: "~@2 x ~@5 x ~@11 x ~@6 x ~@4", R: "~@2 x ~@5 x ~@10 x ~@7 x ~@3 x", S: "~@7 x ~@6 x ~@8 x ~@8",
  T: "~@7 x ~@5 x ~@10 x ~@7", U: "~@4 x ~@7 x ~@6 x ~@6 x ~@5", V: "~ x ~@6 x ~@6 x ~@14 x!2",
  W: "x!2 ~@3 x ~@8 x ~@17", X: "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 G C F ~ D H I C ~@2 J K L M N O P H ~ Q R ~@7 F C D S T U ~ V G C ~ W ~ X ~@2 Y ~ Z ~ AA C AB ~ AC
  ~ AD AE ~@4 D AF AG C D C G AH G AI D C ~ AJ C F ~@2 AK AL AM AN AO ~ AP H AQ ~@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: "~@23 x ~@4 x ~@3", H: "~@7 x ~@24", I: "~@5 x!3", J: "~@27 x ~@3 x", K: "~@3 x ~@3 x ~@24",
  L: "~@20 x ~@4 x ~@4 x ~", M: "~@3 x ~@12", N: "~@8 x ~@12 x ~@7 x ~@2", O: "~@5 x ~@26", P: "~@19 x ~@3 x ~@3 x ~@4",
  Q: "~@3 x ~@4 x ~@23", R: "~@6 x ~@4 x ~@4 x ~@7 x ~@7", S: "x!2 ~@2", T: "~@20 x ~@4 x ~@2 x ~@3",
  U: "~ x ~@10 x ~@3 x ~@15", V: "~ x!3 ~@4", W: "~@8 x ~@3 x ~@4 x ~@2 x ~@11",
  X: "~@11 x ~@4 x ~@3 x ~@3 x ~@3 x ~@3", Y: "~@3 x ~@6 x ~@4 x ~@16", Z: "~@7 x ~@5 x ~@6 x ~@6 x ~@4",
  AA: "~@3 x ~@7 x ~@8 x ~@6 x ~@4", AB: "~@2 x ~@3 x ~@4 x ~@6 x ~@4 x ~@3 x ~@4", AC: "~@4 x ~@6 x ~@8 x ~@6 x ~@4",
  AD: "~ x ~@3 x ~@3 x ~@6", AE: "~@23 x ~@3 x ~@4", AF: "x ~@4 x ~@26", AG: "~@11 x ~@8 x ~@7 x ~@3", AH: "~ x ~@6",
  AI: "x ~@4 x ~@5 x ~@20", AJ: "~@19 x ~@2 x ~ x ~@3 x ~@3", AK: "~@21 x ~@5 x ~@4", AL: "x ~@6 x ~@24",
  AM: "~@6 x!3 ~ x ~ x ~ x ~", AN: "~ x!2 ~@5", AO: "~@19 x ~@3 x ~@3 x ~@3 x", AP: "~@11 x ~@6 x ~@4 x ~@2 x ~@4 x",
  AQ: "~@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