Strudelify

Two Can Play That Game

Bobby Brown

KeyG minorTempo122 bpm
0:00/0:00
// Two Can Play That Game — Bobby Brown
// 122 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/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 · piano · "A.PIANO 3"
const piano = note(`<
  A B C D C E C E F B G B G H G I J K L K L K L K ~ M N M O M O P Q B R B S H R I S H R I S K L K L K L K ~ M N M O B R
  B T K L K L K L K ~ M N M O M O P Q B S B S B S B S K L K L K L K ~ M N M O M O M O P Q M N M O M U ~
>`.pickRestart({
  A: "~@5 g2 [g3,bb3,d4,f4] g2", B: "[c2,c4,eb4,g4,bb4]@15 ~",
  C: "[g2,g3,bb3,d4,f4]@3 [g2,g3,bb3,d4,f4] ~@2 [g3,bb3,d4,f4]@4 ~@4 d4@2, ~@6 g2@9 ~, ~@5 g3@3, ~@3 bb3", // Gm7
  D: "[c2,c4,eb4,g4,bb4]@4 ~@3 g4, ~@5 c4@3, ~@3 eb4", E: "[c2,c4,eb4,g4,bb4]@4 ~@3 eb4, ~@5 c2@3, ~@3 c4",
  F: "[g2,g3,bb3,d4,f4]@3 [g2,g3,bb3,d4,f4] ~@2 [g2,g3,bb3,d4,f4]@4 g2@2 [g3,bb3,d4,f4]@2 g2@2", // Gm7
  G: "g2@4 ~@3 d3, [g3,bb3,d4,f4]@15 ~, ~@5 g2@3, ~@3 bb2", H: "c2@11 ~@3 eb3@2, [c4,eb4,g4,bb4]@15 ~, ~@3 c3",
  I: "c2@6 ~ eb3, [c4,eb4,g4,bb4]@15 ~, ~@3 c3", J: "[g2,g3,bb3,d4,f4]@6 ~ g2",
  K: "[c2,c4,eb4,g4,bb4]@3 [c2,c4,eb4,g4,bb4] ~@2 [c2,c4,eb4,g4,bb4]@3 ~ [eb4,bb4]@2 c3@2 [c4,eb4,g4,bb4] ~, ~@10 [c4,g4] ~@3 eb3@2", // Cm7 Eb5 Cm7 C5
  L: "[g2,g3,bb3,d4,f4]@3 [g2,g3,bb3,d4,f4] ~@2 [g2,g3,bb3,d4,f4]@3 ~ [bb3,f4]@2 bb2@2 [g3,bb3,d4,f4] ~, ~@10 [g3,d4] ~@3 eb3@2", // Gm7 Bb5 Gm7 G5
  M: "[c2,c4,eb4,g4,bb4] ~@3 [c2,c4,eb4,bb4] ~@3 [c2,c4,eb4,g4,bb4]@2 ~ [c2,c4,eb4,g4,bb4] ~@2 [c2,eb4,g4,bb4,eb5]@2, ~@4 g4@2 ~@8 c4 ~", // Cm7
  N: "[g2,c4,d4,f4,a4,d5] ~@3 [g2,c4,d4,f4,a4,d5] ~@3 [a2,c4,e4,b4]@2 ~ [a2,d4,f4,a4,c5] ~@2 [bb2,f4,a4,c5]@2, ~@8 g4 ~@5 d4 ~", // Dm7 Am Dm7 F
  O: "[g2,c4,d4,f4,a4,d5] ~@3 [g2,c4,d4,f4,a4,d5] ~@3 [a2,d4,f4,c5]@2 ~ [a2,d4,f4,a4,c5] ~@2 [bb2,f4,a4,c5]@2, ~@8 a4 ~@5 d4 ~", // Dm7 F
  P: "[c2,c4,eb4,g4,bb4] ~@3 [c2,c4,eb4,bb4] ~@3 [c4,eb4,g4,bb4]@2 ~ [c2,c4,eb4,g4,bb4] ~@2 [c2,eb4,g4,bb4,eb5]@2, ~@4 g4@2 ~@2 c2 ~@5 c4 ~", // Cm7
  Q: "[g2,c4,d4,f4,a4,d5] ~@3 [g2,c4,d4,f4,a4,d5] ~@3 [d4,f4,c5]@2 a2 [d4,f4,a4,c5] ~@2 [bb2,f4,a4,c5]@2, ~@8 [a2,a4] ~@5 d4 ~", // Dm7 F A
  R: "g2@4 ~@3 eb3, [g3,bb3,d4,f4]@15 ~, ~@5 g2@3, ~@3 bb2", S: "g2@4 ~@3 eb3, [g3,bb3,d4,f4]@15 ~, ~@3 bb2",
  T: "g2@4 ~@3 d3, [g3,bb3,d4,f4]@15 ~, ~@3 bb2", U: "[g2,c4,d4,f4,a4,d5] ~@3 [g2,c4,d4,f4,a4,d5] ~@11",
})).s("gm_piano").gain(0.56)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@17 A B A C A B A ~ D E D E D E D F A B A C A B A C A B A C A B A C A B A ~ D E D E A B A G A B A C A B A ~ D E D E D
  E D F A B A C A B A C A B A C A B A ~ D E D E D E D E D F ~@7
>`.pickRestart({
  A: "c2@2 ~ c2 ~@2 c2@2 ~ c2 ~@2 c2@2 eb2@2", B: "bb1@2 ~ bb1 ~@2 bb1 ~@2 bb1 ~@2 bb1@2 eb2@2",
  C: "bb1@2 ~ bb1 ~@2 bb1 ~@2 bb1 ~@2 bb1@2 eb3@2", D: "c2@2 ~@2 c2 ~@3 c2@2 ~ c2@2 ~ c3@2",
  E: "g1@2 ~@2 g1 ~@3 a1@2 ~ a2 ~ a1 bb2@2", F: "g1@2 ~@2 g1 ~@3 a1@2 a2 a1 ~ a1 bb2@2",
  G: "bb1@2 ~ bb1 ~@2 bb1 ~@2 bb1 ~@6",
})).s("gm_synth_bass_1").gain(0.52)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<A@7 B@16 ~@9 C@4 A@7 B@8 ~@5 A@7 D@5 ~@8 A@7 B@8 ~@11 E@7 ~>".pickRestart({
  A: "[~@15 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]]/7", // Cm7 Gm7 Cm7 Gm7 Cm7 Gm7 Cm7
  B: "[~@15 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]]/8", // Gm7 Cm7 Gm7 Cm7 Gm7 Cm7 Gm7 Cm7
  C: "[~@15 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]@16 ~]/4", // Cm7 Gm7 Cm7
  D: "[~@15 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]@16 ~]/5", // Gm7 Cm7 Gm7 Cm7
  E: "[~@15 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@16 [c5,eb5,g5,bb5]@16 [g4,bb4,d5,f5]@17]/7", // Cm7 Gm7 Cm7 Gm7 Cm7 Gm7
})).s("gm_string_ensemble_2").gain(0.26)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@33 A B C B ~@18 D@2 A B C B ~@34 E F G H G H G H G H G H G H ~>".pickRestart({
  A: "bb5@2 c6@2 ~@2 c6 ~@9", B: "bb5 c6 ~@6", C: "bb5@2 c6@2 ~@2 c6 ~@7 c6 ~", D: "[~ [eb5,eb6]@3]/2", E: "~ c6",
  F: "f6@7 eb6@9", G: "bb5@7 c6@9", H: "bb5@3 c6@4 [eb6,f6] ~@8",
})).s("gm_string_ensemble_1").gain(0.48)

// other · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note("<~@33 A ~ B ~@21 A ~ B ~@50>".pickRestart({
  A: "~@2 eb6 ~@5", B: "~@2 eb6 ~@3 eb6 ~",
})).s("gm_string_ensemble_1").gain(0.24)

// other · tenor sax
const tenor_sax = note("<~@60 [~@11 g3 bb3@2 d4@2] ~@49>").s("gm_tenor_sax").gain(0.56)

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

// drums · clap
const clap = s("cp").struct("<~ A@23 ~ A@11 ~ A@15 ~ A@7 B A@7 ~ A@23 ~ A@10 ~@7>".pickRestart({
  A: "~ x ~ x", B: "~@3 x",
})).gain(0.56)

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

// drums · hihat
const hihat = s("hh").struct("<~@17 A@7 B A@11 B A@15 B A@7 B A@7 B A@23 B A@10 B ~@6>".pickRestart({
  A: "x ~@3 x!2 ~@2 x ~@3 x ~@3", B: "x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@17 A@7 ~ A@11 ~ A@15 ~ A@7 ~ A@7 ~ A@23 ~ A@10 ~@7>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@20 A ~@7 A ~@11 A ~@3 A ~@3 A ~@15 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@21
>`.pickRestart({
  A: "~@15 x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@3 A ~@2 B 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 ~@5 A ~@3 A ~ A ~ A ~@2
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@20 A ~@7 A ~@11 A ~@3 A ~@3 A ~@15 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@21
>`.pickRestart({
  A: "~@15 x",
})).gain(0.32)

// drums · ride
const ride = s("rd").struct("<[x!8]!36 ~ [x!8]!72 ~>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 [x!8]!100 ~>").gain(0.24)

// drums · shaker
const shaker = s("sh").struct("<~@25 A@8 B@3 C ~@16 A@4 B@3 C A@7 ~ A@8 ~@16 A@10 ~@7>".pickRestart({
  A: "~@3 x ~@12", B: "x!6 ~ x!9", C: "x!6 ~ x!8 ~",
})).gain(0.32)

stack(
  piano, bass, string_ensemble_2, string_ensemble_1, string_ensemble_1_soft, tenor_sax, kick, clap, snare, hihat,
  open_hat, mid_tom, crash, high_tom, ride, tambourine, shaker
)

More by Bobby Brown