Strudelify

Don't Be Cruel

Bobby Brown

KeyF♯ minorTempo101 bpm
0:00/0:00
// Don't Be Cruel — Bobby Brown
// 101 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(101/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 · slap bass 1 · "SLAPBASS 1"
const bass = note(`<
  ~@4 A ~ B ~ A ~ B ~ A ~ B ~ C D E F G D H I A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ C D E F G D J I A ~ B ~ A
  ~ B ~ A ~ B ~ A ~ B ~ C D E F G D J I@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ K@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B
  ~ A ~ B ~ K@2
>`.pickRestart({
  A: "[f#2,f#3]@2 ~@6 [d2,d3]@3 [c#2,c#3]@3 [b1,b2]@2", // F# D C# B
  B: "[f#2,f#3] ~ [f#2,f#3] ~@3 [c#2,c#3] ~ [d2,d3]@3 [c#2,c#3]@3 [b1,b2]@2", // F# C# D C# B
  C: "[b1,b2] ~@7 [b1,b2] ~@2 [a1,a2]@3 [b1,b2] ~", D: "[c#2,c#3]@2 ~@8 [f#1,f#2] ~ [f#1,f#2]@2 [a1,a2]@2",
  E: "[d2,d3] ~ [d2,d3] ~@5 [d2,d3] ~@2 [c#2,c#3]@2 ~ [d2,d3]@2", // D C# D
  F: "[f#2,f#3] ~@9 [f#2,f#3] ~ [f#2,f#3]@2 [c#2,c#3]@2", G: "[b1,b2]@2 ~@6 [b1,b2] ~@2 [a1,a2]@3 [b1,b2]@2",
  H: "[d2,d3] ~ [d2,d3] ~@5 [d2,d3] ~@2 [c#2,c#3]@3 d2@2, ~@14 d3 ~", I: "[e2,e3] ~ [e2,e3] ~@13",
  J: "[d2,d3] ~ [d2,d3] ~@5 [d2,d3] ~@2 [c#2,c#3]@3 [d2,d3]@2", K: "[f#2,f#3] ~ [f#2,f#3] ~@13",
})).s("gm_slap_bass_1").gain(0.72)

// bass · acoustic bass · "ACOU BASS"
const bass_2 = note(`<
  ~@4 A ~ B ~ A ~ B ~ A ~ B ~ C D E F G D H I A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ C D E F G D H I A ~ B ~ A
  ~ B ~ A ~ B ~ A ~ B ~ C D E F G D H I@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ J@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B
  ~ A ~ B ~ J@2
>`.pickRestart({
  A: "f#3@2 ~@6 d3@3 c#3@3 b2@2", B: "f#3 ~ f#3 ~@3 c#3 ~ d3@3 c#3@3 b2@2", C: "b2 ~@7 b2 ~@2 a2@3 b2 ~",
  D: "c#3@2 ~@8 f#2 ~ f#2@2 a2@2", E: "d3 ~ d3 ~@5 d3 ~@2 c#3@2 ~ d3@2", F: "f#3 ~@9 f#3 ~ f#3@2 c#3@2",
  G: "b2@2 ~@6 b2 ~@2 a2@3 b2@2", H: "d3 ~ d3 ~@5 d3 ~@2 c#3@3 d3 ~", I: "e3 ~ e3 ~@13", J: "f#3 ~ f#3 ~@13",
})).s("gm_acoustic_bass").gain(0.61)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@4 A ~ A ~@12 B ~@3 C ~@8 D@2 E F G H I@2 ~@11 J ~@3 C ~@8 K@2 E F G H L@2 ~@3 B ~@3 C@2 ~@4 D@2 E F G H I@2 D@2 E F
  G H M@2 ~@24 N@2
>`.pickRestart({
  A: "~@8 [g#4,b4]@3 [f#4,a4]@3 [e4,g#4]@2", B: "c#6 e6 f#6 c#6 ~@4 c#6 e6 f#6 c#6!2 e6 f#6 c#6",
  C: "[f#5,a5,c#6] ~ [f#5,a5,c#6] ~@13", // F#m
  D: "[~@4 a5@4 g#5@4 f#5@4 c#6 ~@2 f#6 ~@2 c#6 ~@5 d5@4, c#5@31 ~, f#4@16 e5@13 ~@3, ~@8 f#6 ~@7 g#4@8 a4@8]/2",
  E: "[b4,c#6] ~@2 f#6 ~@2 c#6 ~ f#6 ~@3 d5@4, c#5@13 ~@3", // Bsus2
  F: "c#6 ~@2 f#6 ~@2 c#6 ~ [a4,f#5]@4 g#5@4, [g#4,e5]@9 ~@3 b4 ~@3", // D C#m
  G: "c#6 ~@2 f#6 ~@2 c#6 ~ g#5@4 f#5@4, c#5, a5@9 ~@7",
  H: "c#6 ~@2 f#6 ~@2 c#6 ~ [f#4,d5]@4 [e4,e5]@4, c#5, [g#4,e5] ~", // D E C#m
  I: "[c#6 ~@2 f#6 ~@2 c#6 ~ f#6 ~@3 d5@4 c#6 ~@2 f#6 ~@2 c#6 ~ f#5@4 g#5@4, [f#4,b4]@31 ~, c#5@13 ~@3 e5@9 ~@7]/2", // B5
  J: "c#6 e6 f#6 c#6 ~@4 [f#5,c#6] e6 f#6 c#6!2 e6 f#6 c#6, [f#5,b5] ~@3 b5 ~ [f#5,b5] ~", // F#5 B5
  K: "[~@4 a5@4 g#5@4 f#5@4 c#6 ~@2 f#6 ~@2 c#6 ~@5 d5@4, c#5@31 ~, f#4@4 e5@3 ~, ~@8 f#6 ~@7 g#4@8 a4@8]/2",
  L: "[c#6 ~@2 f#6 ~@2 c#6 ~ f#6 ~@3 d5@4 e5@15 ~, [f#4,b4]@31 ~, c#5@13 ~@19]/2", M: "[f#4,a4,c#5,f#5]/2",
  N: "[f#4,c#5,f#5] ~ [f#4,c#5,f#5] ~@13", // F#5
})).s("gm_synth_strings_1").gain(0.43)

// other · orchestra hit · "ORCH.HIT" · F#
const orchestra_hit = note("<~@4 [[f#3,f#4] ~@3] ~@76 [[f#3,f#4] ~@3] ~@43 [[f#3,f#4]!2 ~@6]!2>")
  .s("gm_orchestra_hit").gain(0.62)

// other · flute
const flute = note("<~@4 [~@6 a4 ~ g#4@3 f#4@3 e4@2] ~ [~@6 a4 ~ g#4@3 f#4@3 e4@2] ~@120>").s("gm_flute").gain(0.74)

// chords · brass section · "BRASS 1" · F#5
const brass_section = note("<~@3 [[f#2,c#3,f#3]] ~@123>").s("gm_brass_section").gain(0.64)

// other · tubular bells · "TUBULARBEL" · A C# A F F#
const tubular_bells = note(`<
  [[a4,a5]@7 ~ [c#4,c#5]@7 ~]
  [d5 [a3,a4], d4@5 ~@11]
  [g#5 [f4,f5], g#4@3 ~@5]
  [[f#1,f#2,f#4,f#5]@11 ~@5]
  ~@123
>`).s("gm_tubular_bells").gain(0.62)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@4 A B A B ~@8 C ~ D ~ C ~ D E F ~ A ~ F ~ A ~@17 C ~ D ~ C ~ D E F ~ A ~ F ~ A ~@9 C ~ D ~ C ~ D E@2 ~@18 G H F ~ A
  ~ F ~ A ~ F ~ A ~ F ~ A ~ F ~ A ~ F ~ A ~@3
>`.pickRestart({
  A: "e4 f#4!2 a4 ~@12", B: "c#5 f#5@3 ~@4", C: "~@4 c#5 ~@3", D: "~@4 [b4,e5] ~@3",
  E: "[d5,f#5,a5] ~ [d5,f#5,a5] ~@13", F: "e4 f#4 ~ a4 ~@12", G: "[a4,c#5,f#5] ~ [a4,c#5,f#5] ~@13",
  H: "[a4,c#5,f#5] ~ [a4,c#5] ~@13", // F#m A
})).s("gm_acoustic_guitar_nylon").gain(0.48)

// other · acoustic guitar nylon · "NYLON GTR" · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@24 A ~@3 A ~@27 A ~@3 A ~@39 B A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5
>`.pickRestart({
  A: "~@2 f#4 ~@13", B: "~@2 f#5 ~@13",
})).s("gm_acoustic_guitar_nylon").gain(0.32)

// drums · kick
const kick = s("bd").struct(`<
  [x ~ x ~@2 x!2 ~@3 x ~@2 x!2 ~]!23
  [x!2 ~@6]
  [x ~ x ~@2 x!2 ~@3 x ~@2 x!2 ~]!102
  [x!2 ~@6]
>`).gain(0.58)

// drums · rim
const rim = s("rim").struct("<~@32 A@8 ~@24 A@8 ~@13 A@14 B ~@25 B ~>".pickRestart({
  A: "x ~@2 x ~@12", B: "~@3 x ~@12",
})).gain(0.58)

// drums · snare
const snare = s("sd").struct("<A@23 B A@31 C A@23 C D A@18 C@2 A@24 C@2>".pickRestart({
  A: "~ x ~ x", B: "x ~ x ~@8 x ~@4", C: "x!2 ~@6", D: "x!2 ~@4 x!2",
})).gain(0.58)

// drums · hihat
const hihat = s("hh").struct("<A@23 B A@31 B A@23 B ~ A@15 C A@2 B@2 A@24 B@2>".pickRestart({
  A: "~ x ~ x", B: "x!2 ~@6", C: "~@4 x ~@3 x!2 ~@2 x ~@3",
})).gain(0.58)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A ~@3 B ~@7 B ~@6 C D ~@7 A ~@15 B ~@3 E ~@2 C ~@8 A ~@7 D ~@3 E ~@2 C ~ C ~ C ~ C ~@7 B ~@7 C ~@7 A ~@7 B ~@7 A
  ~@2
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@8 x ~@2 x ~@4", C: "~@13 x ~@2", D: "~@7 x", E: "~@12 x!2 ~@2",
})).gain(0.58)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@3 B ~@7 B ~@6 C D C ~@3 C ~@2 A ~@15 B ~@3 C ~@2 C ~ C ~@3 C ~@2 A ~@7 C ~@3 C ~@2 C ~ C ~ C ~ C ~@7 B ~@7 E C
  ~@3 C ~@2 A C ~@3 C ~@2 B C ~@3 C ~@2 A F@2
>`.pickRestart({
  A: "~ x", B: "~@3 x ~@4", C: "~@11 x ~@4", D: "~@13 x ~@2", E: "~@3 x", F: "x!2 ~@6",
})).gain(0.46)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@26 A ~@3 A ~@27 A ~@3 A ~@40 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3>".pickRestart({
  A: "~@11 x ~@4",
})).gain(0.29)

// drums · high tom
const high_tom = s("ht").struct(`<
  A@3 B A@3 C A@7 C A@6 D E A@7 B A@15 C A@3 D A@2 D ~ A@7 B A@7 F A@3 D A@2 D ~ G A B A B A@7 C A@7 H A@7 B A@7 C A@7 B
  A ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "x ~@2 x!2 ~@7 x ~ x ~", D: "~@2 x ~ x ~ x!2", E: "~@3 x", F: "~ x!3",
  G: "~@7 x", H: "~@4 x ~@6 x!2 ~ x ~",
})).gain(0.58)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@15 A ~@15 A ~@3 A ~@11 A ~@7 A ~@3 A ~@8 A ~@7 A ~@7 A ~@7 A ~@7 A ~@9
>`.pickRestart({
  A: "x",
})).gain(0.58)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B A B A B A B ~ C ~ C ~ C ~ C D E D E D E D F A G A G A G A C ~ C ~ C ~ C ~ C H I H I H I H I D E D E D E D F A G A
  G A G A C ~ C ~ C ~ C ~ C D E D E D E D F@2 A B A B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C A G A G A G A C A G A G A G A C A
  G A G A G A C J@2
>`.pickRestart({
  A: "~@3 x ~ x ~ x", B: "~ x ~@4 x!2", C: "~@6 x!2", D: "~ x ~ x ~ x ~ x", E: "~ x ~ x ~ x!3", F: "x!2 ~@4 x!2",
  G: "~@5 x!3", H: "~@3 x ~@4", I: "~ x ~ x ~@2 x!2", J: "x!2 ~@6",
})).gain(0.4)

// drums · congas
const congas = s("conga:33").struct(`<
  ~@24 A ~ A ~ A ~ A ~@25 A ~ A ~ A ~ A ~@38 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@7 x",
})).gain(0.93)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  ~@24 A B A B A B A B ~@24 A B A B A B A B ~@37 A B A B A B A B A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "~@4 x ~@2 x", B: "x",
})).gain(2.21)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@24 A ~ A ~ A ~ A ~@25 A ~ A ~ A ~ A ~@38 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@11 x ~@4",
})).gain(1.76)

// drums · whistle
const whistle = s("ballwhistle:1").struct(`<
  ~@24 A B A B A B A B ~@24 A B A B A B A B ~@37 A B A B A B A B A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "~ x", B: "x",
})).gain(0.45)

// drums · guiro
const guiro = s("guiro:0").struct("<~@125 [x!2 ~@6]!2>").gain(8.56)

// drums · shaker
const shaker = s("sh").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 C 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 D
>`.pickRestart({
  A: "x ~ x ~ x!3 ~ x ~ x!3 ~ x ~", B: "x!3 ~@2 x!2 ~ x ~ x!3 ~ x ~", C: "x ~ x ~ x!5 ~ x ~ x!3 ~", D: "x!3 ~@13",
})).gain(0.58)

// … 5 more lines

More by Bobby Brown