Strudelify

It's on You

Real McCoy

KeyE minorTempo119 bpm
0:00/0:00
// It's on You — Real McCoy
// 119 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(119/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 · synth bass 2 · "SYNTH BASS"
const bass = note(`<
  A B C D E ~@7 F G H D H I H D H J H ~ K L M D ~@4 A N H O P B Q ~ K R S D S T M U ~@4 K R V W ~@4 K X S D S Y Z ~ A L
  M D M X K D K AA AB D M L S W A AC C AD K L H U ~@4 C AE P D K AF AG ~ K L AB AH M AA M D P AC AI AH P AJ C D AB AF A
  AH P B AB AH AK L K D H X P D AL
>`.pickRestart({
  A: "a1@2 ~@2 a1@2 ~ d1@2 ~ d1@2 ~@2 d1@2", B: "g1@2 ~@2 g1@3 e1@2 ~ e1@2 ~@2 e1@2",
  C: "a1@2 ~@2 a1@3 d1@2 ~ d1@2 ~@2 d1@2", D: "g1@2 ~@7 e1 ~ e1 g1 a1 b1@2", E: "a1@3 ~@13",
  F: "a1@2 ~@2 a1@2 ~ d1 ~@2 d1 ~@3 d1@2", G: "g1@2 ~@2 g1@2 ~ e1 ~@2 e1@2 ~@2 e1 ~",
  H: "a1@2 ~@2 a1@2 ~ d1 ~@2 d1@2 ~@2 d1 ~", I: "g1@2 ~@2 g1@2 ~ e1 ~@2 e1@2 g1@2 e1 ~",
  J: "g1@2 ~@2 g1@2 ~ e1 ~@2 e1 ~@3 g1@2", K: "a1@2 ~@2 a1@2 ~ d1 ~@2 d1@2 ~@2 d1@2",
  L: "g1@2 ~@2 g1@2 ~ e1 ~@2 e1@2 ~@2 e1@2", M: "a1@3 ~ a1@2 ~ d1 ~@2 d1@2 ~@2 d1@2",
  N: "g1@2 ~@2 g1@2 ~ e1@2 ~ e1@2 ~@2 e1@2", O: "g1@2 ~@2 g1@2 ~@3 e1 ~ e1 g1 a1 b1@2",
  P: "a1@3 ~ a1@3 d1 ~@2 d1@2 ~@2 d1@2", Q: "a1@3 ~ a1@3 d1@2 ~ d1@2 ~@2 d1 ~",
  R: "g1@2 ~@2 g1@2 ~ e1@2 ~ e1@2 ~@2 g1@2", S: "a1@3 ~ a1@2 ~ d1@2 ~ d1@2 ~@2 d1@2",
  T: "g1@2 ~@2 g1@3 e1 ~@2 e1@2 g1@2 e1@2", U: "g1@2 ~@2 g1 ~@4 e1 ~ e1 g1 a1 b1 ~",
  V: "a1@3 ~ a1@3 d1@2 ~ d1@2 ~@2 d1@2", W: "g1@2 ~@7 e1 ~ e1 g1 a1 b1 ~", X: "g1@2 ~@2 g1@2 ~ e1 ~@2 e1@2 ~@2 g1@2",
  Y: "g1@2 ~@2 g1@3 e1@2 ~@5 g1@2", Z: "a1@2 ~@2 a1@3 d1 ~@2 d1@2 ~@2 d1 ~",
  AA: "g1@2 ~@2 g1@2 ~ e1 ~@2 e1@2 g1@2 e1@2", AB: "a1@2 ~@2 a1@3 d1 ~@2 d1@2 ~@2 d1@2",
  AC: "g1@2 ~@2 g1@3 e1 ~@2 e1@2 ~@2 g1@2", AD: "g1@2 ~ g1@2 ~ g1@2 ~@8", AE: "g1@3 ~ g1@3 e1@2 ~ e1@2 ~@2 e1@2",
  AF: "g1@2 ~@2 g1@3 e1 ~@2 e1@2 ~@2 e1@2", AG: "a1@2 ~@2 a1@3 d1 ~@2 d1@3 ~@3", AH: "g1@3 ~@6 e1 ~ e1 g1 a1 b1@2",
  AI: "a1@3 ~ a1@3 d1 ~@2 d1@3 ~ d1@2", AJ: "g1@2 ~@2 g1@2 ~ e1 ~@2 e1@3 ~ g1@2",
  AK: "a1@3 ~ a1@2 ~ d1 ~@2 d1@2 ~@2 d1 ~", AL: "a1 ~@7",
})).s("gm_synth_bass_2").gain(0.71)

// chords · synth strings 2 · "SYN STRING"
const synth_strings_2 = note(`<
  ~@4 A@4 B@4 ~@4 C@4 D@3 ~@9 E@7 ~ F@8 ~@12 G@4 H@3 ~ I@8 J@4 K@4 L ~@11 M@4 D@3 ~ N@4 O@8 P@4 Q@4 R@4 S@4 T@4 U
>`.pickRestart({
  A: "[[a3,c4]@15 [g3,b3]@16 ~ [a3,c4]@16 ~@7 d4@8 ~, e4@7 ~, ~@48 [g3,b3]@15 ~]/4", // Am G Am G
  B: "[[a3,c4]@16 [g3,b3]@16 [a3,c4]@16 [g3,b3]@7 ~@9, e4@55 ~@9]/4", // Am G Am G
  C: "[[a3,c4]@16 [g3,b3]@16 [a3,c4]@16 ~@7 d4@8 ~, e4@7 ~, ~@3 [g3,b3]]/4", // Am G Am G
  D: "[[a3,c4]@8 [g3,b3]@8 [a3,c4]@7 ~, e4@23 ~]/3", // Am G Am
  E: "[[a3,c4]@15 [g3,b3]@16 [a3,c4]@16 ~@8 d4@8 [a3,c4]@16 [g3,b3]@16 [a3,c4]@15 ~@2, e4@56 ~@7 e4@47 ~@2, ~@47 [g3,b3]@16 ~@49]/7", // Am G Am G Am G
  F: "[[a3,c4]@16 [g3,b3]@15 [a3,c4]@16 ~@8 d4@8 [a3,c4]@16 ~ [g3,b3]@15 [a3,c4]@16 ~@8 d4@7 ~@2, e4@56 ~@7 e4@56 ~@9, ~@47 [g3,b3]@16 ~@48 [g3,b3]@15 ~@2]/8", // Am G Am G Am G
  G: "[c4@2 [g3,b3]@2 [a3,c4]@2 ~ d4, e4@7 ~, a3@7 ~@17 [g3,b3]@8]/4", // G Am G
  H: "[[a3,c4]@15 [g3,b3]@16 [a3,c4]@15 ~@2, e4@47 ~]/3", // Am G Am
  I: "[[a3,c4]@16 [g3,b3]@15 [a3,c4]@16 ~@9 d4@7 ~ [a3,c4]@16 [g3,b3]@16 c4@15 ~@8 d4@7 ~@2, e4@56 ~@7 e4@56 ~@9, ~@47 [g3,b3]@15 ~@34 a3@14 ~ [g3,b3]@15 ~@2]/8", // Am G Am G
  J: "[[a3,c4]@16 [g3,b3]@16 [a3,c4]@15 ~@9 d4@7 ~, e4@7 ~, ~@47 g3@15 ~@2, ~@48 b3@15 ~]/4", // Am G Am
  K: "[[a3,c4]@16 [g3,b3]@16 [a3,c4]@15 ~@8 d4@8 ~, e4@7 ~, ~@47 [g3,b3]@16 ~]/4", L: "[a3,c4,e4] ~@7",
  M: "[[a3,c4]@15 ~ g3@15 ~ c4@15 ~@8 d4@8 ~, e4@7 ~, ~@15 b3@16 ~ a3@14 ~ [g3,b3]@16 ~]/4", // Am G
  N: "[[a3,c4]@15 [g3,b3]@16 ~ [a3,c4]@16 ~@8 d4@7 ~, e4@57 ~@7, ~@3 [g3,b3]]/4", // Am G Am G
  O: "[c4@15 ~ b3@16 [a3,c4]@15 ~@8 d4@8 ~ c4@16 b3@15 ~ c4@16 ~@7 d4@7 ~@2, e4@55 ~@9 e4@56 ~@8, a3@14 ~ g3@15 ~@17 [g3,b3]@15 ~ a3@15 ~@2 g3@14 ~ a3@15 ~@2 [g3,b3]@15 ~]/8", // Am G
  P: "[[a3,c4]@15 ~ b3@16 [a3,c4]@16 ~@8 d4@5 ~@3, e4@7 ~, ~@15 g3@15 ~@18 [g3,b3]@13 ~@3]/4", // Am G
  Q: "[[a3,c4]@16 [g3,b3]@16 [a3,c4]@15 ~@9 d4@8, e4@7 ~, ~@47 [g3,b3]@15 ~@2]/4", // Am G Am G
  R: "[[a3,c4]@16 [g3,b3]@16 c4@16 ~@7 d4@7 ~@2, e4@7 ~, ~@16 a3@7 ~ [g3,b3]@7 ~]/4", // Am G
  S: "[[a3,c4]@16 [g3,b3]@16 c4@15 ~@8 d4@8 ~, e4@7 ~, ~@32 a3@14 ~ g3@15 ~@2, ~@48 b3@15 ~]/4", // Am G
  T: "[[a3,c4]@16 [g3,b3]@16 [a3,c4]@16 ~@8 d4@7 ~, e4@7 ~, ~@48 [g3,b3]@15 ~]/4", U: "[a3,c4,e4] ~@3",
})).s("gm_synth_strings_2").gain(0.35)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@76 A B C D E B F@2 ~@53>".pickRestart({
  A: "e5 g5@4 e5 g5 e5", B: "d5@8 e5@7 ~", C: "a4 g4 e4 b4 g4 e4 c5 b4 a4 b4 ~ c5 ~@2 d5 ~", D: "d5@12 ~ d5 ~@2",
  E: "e5@2 g5@7 ~ e5@2 g5@2 e5 ~", F: "[a4 g4 e4 b4 a4 e4 c5 b4 a4 b4 ~ c5 ~ d5 ~ e5@9 a5@5 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.42).pan(0.4)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note("<~@4 A B C D E B C F ~@36 G H G I ~@85>".pickRestart({
  A: "e3 ~@2 e3 ~@2 e3 ~@2 e3 ~ d3 e3 ~ d3 ~", B: "e3 ~@2 e3 ~@2 e3 ~@2 d3 ~ d3 e3!2 d3 ~",
  C: "e3 ~@2 e3 ~@2 e3 ~@2 d3 ~ d3 e3 ~ d3!2", D: "e3 ~@2 e3 ~@2 e3 ~@2 d3 ~ d3 e3 g3 e3 d3",
  E: "e3 ~@2 e3 ~@2 e3 ~@2 d3 ~ d3 e3 ~ d3 ~", F: "e3 ~@2 e3 ~@6 [g3,a3,c4,e4]!2 [g3,a3,c4,e4]@4",
  G: "g3 a3 ~ a3 ~@2 a3 ~@2 a3 ~@2 a3 ~ a3 ~", H: "g3 a3 ~ a3 ~@2 a3 ~@2 a3 ~ a3!2 ~ a3 ~",
  I: "g3 a3 ~ a3 ~@2 a3 ~@3 [g3,a3,c4,e4]!2 [g3,a3,c4,e4]@4", // Am7
})).s("gm_electric_guitar_muted").gain(0.45).pan(0.7)

// chords · synth brass 1 · "SYNTHBRASS"
const synth_brass_1 = note(`<
  A B C D ~@12 A B C D A B E ~@17 A B C D A B C D ~@20 A B C D A B C F A B G D A B C H ~@20 A B C D A B I D A B C D A B
  C D A B C D A B C D A B J D A B C D ~
>`.pickRestart({
  A: "~@2 [a4,c5,e5] ~ [a4,c5,e5]!2 ~ [d4,f4,a4] ~ [d4,f4,a4]!2 ~ [d4,f4,a4] ~ [d4,f4,a4] ~", // Am Dm
  B: "~@2 [d4,g4,b4] ~ [d4,g4,b4]!2 ~ [e4,g4,b4] ~ [e4,g4,b4]!2 ~ [e4,a4,c5] ~ [e4,a4,c5] ~", // G Em Am
  C: "~@2 [a4,c5,e5] ~ [a4,c5,e5]!2 ~ [d4,f4,a4] ~ [d4,f4,a4]!2 ~ [d4,f4,a4] ~ [a4,c5,e5] ~", // Am Dm Am
  D: "[g4,b4,d5] ~@2 [g4,a4,d5] ~@2 [g4,a4,d5] ~@2 [g4,b4,d5] ~@2 [g4,b4,d5] ~ [a4,c5,e5] ~", // G Gsus2 G Am
  E: "~@2 [a4,c5,e5] ~ [a4,c5,e5]!2 ~ [d4,f4,a4] ~ [d4,f4,a4]!2 ~ [d4,f4,a4] ~ [d4,g4,b4] ~", // Am Dm G
  F: "[g4,b4,d5] ~@2 [g4,b4,d5] ~@2 [g4,a4,d5] ~@2 [g4,b4,d5] ~@2 [g4,b4,d5] ~ [a4,c5,e5] ~", // G Gsus2 G Am
  G: "~@2 [a4,c5,e5] ~ [a4,c5,e5]!2 ~ [d4,f4,a4,b4] ~ [d4,f4,a4]!2 ~ [d4,f4,a4] ~ [a4,c5,e5] ~", // Am Bm7b5 Dm Am
  H: "[g4,a4,b4,d5] ~@2 [g4,a4,d5] ~@2 [g4,a4,d5] ~@2 [g4,b4,d5] ~@2 [g4,b4,d5] ~ [a4,c5,e5] ~", // G Gsus2 G Am
  I: "~@2 [a4,c5,e5] ~ [a4,c5,e5]!2 ~ [d4,f4,a4] ~ [d4,f4,a4]!2 ~ [d4,f4,a4] ~ [c5,e5] ~", // Am Dm C
  J: "~@2 [a4,c5,e5] ~ [a4,c5,e5]!2 ~ [d4,e4,f4,a4] ~ [d4,f4,a4]!2 ~ [d4,f4,a4] ~ [a4,c5,e5] ~", // Am Dm Am
})).s("gm_synth_brass_1").gain(0.4)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@4 A B C D E B C F ~@36 G H G I ~@85>".pickRestart({
  A: "e4 ~@2 e4 ~@2 e4 ~@2 e4 ~ d4 e4 ~ d4 ~", B: "e4 ~@2 e4 ~@2 e4 ~@2 d4 ~ d4 e4!2 d4 ~",
  C: "e4 ~@2 e4 ~@2 e4 ~@2 d4 ~ d4 e4 ~ d4!2", D: "e4 ~@2 e4 ~@2 e4 ~@2 d4 ~ d4 e4 g4 e4 d4",
  E: "e4 ~@2 e4 ~@2 e4 ~@2 d4 ~ d4 e4 ~ d4 ~", F: "e4 ~@2 e4 ~@6 [g4,a4,c5,e5]!2 [g4,a4,c5,e5]@4",
  G: "g4 a4 ~ a4 ~@2 a4 ~@2 a4 ~@2 a4 ~ a4 ~", H: "g4 a4 ~ a4 ~@2 a4 ~@2 a4 ~ a4!2 ~ a4 ~",
  I: "g4 a4 ~ a4 ~@2 a4 ~@3 [g4,a4,c5,e5]!2 [g4,a4,c5,e5]@4", // Am7
})).s("gm_electric_guitar_jazz").gain(0.25).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@4 A@19 ~ A@15 ~ A@27 ~ A@19 B A@15 ~ A@32 C>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x",
})).gain(0.8)

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

// drums · clap
const clap = s("cp").struct("<~@23 A ~@15 A ~@27 A ~@35 A ~@33>".pickRestart({
  A: "~@5 x!2 ~",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@19 ~ A@15 ~ A@27 ~ A@19 B A@15 ~ A@32 C>".pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "x",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@4 A B C B D B D E A B F G D H I D B J A ~ B F K B F@2 D L I M B D F N K ~ F@2 O P Q B A G B C B R B K B N L S I D B
  D A D I D K ~ A@3 B A B K B D G T U A G K V G J W X D@2 B Y I Z W P D@3 AA AB AC AD ~ D AE W G K B W U W AF R AG A@3 B
  AH D W AI AJ N@2 AK AL AM AN AO AP AQ AR AS AT
>`.pickRestart({
  A: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~@3", B: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~@2 x", C: "x ~ x ~ x ~@2 x ~@2 x ~ x ~@2 x",
  D: "x ~@3 x ~@2 x!2 ~ x ~ x ~@2 x", E: "x ~@3 x ~@2 x!4 ~ x ~@2 x", F: "x ~@3 x ~@2 x!2 ~ x ~ x ~ x ~",
  G: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~ x!2", H: "x ~@3 x ~@2 x ~ x!2 ~ x ~ x!2", I: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~ x ~",
  J: "x ~@3 x ~@2 x!2 ~ x ~ x ~ x!2", K: "x ~@3 x ~@2 x!2 ~ x ~ x ~@3", L: "x!3 ~ x!3 ~", M: "x ~@3 x ~@2 x!6 ~ x ~",
  N: "x ~@3 x ~@3 x ~ x ~ x ~@2 x", O: "~@3 x!2 ~@2 x!2 ~ x ~ x ~@3", P: "x ~@2 x!2 ~@2 x!2 ~ x ~ x ~@2 x",
  Q: "~@2 x ~ x ~@2 x!2 ~ x ~ x ~@3", R: "x ~ x ~ x ~@2 x!2 ~@3 x ~@2 x", S: "x ~ x ~ x ~ x!3 ~ x ~ x ~@2 x",
  T: "x ~ x ~ x ~ x ~@3 x ~ x ~@2 x", U: "x ~ x ~ x ~@2 x ~ x!4 ~ x!2", V: "x ~ x ~ x ~@2 x!4 ~ x ~@2 x",
  W: "x ~ x ~ x ~@3 x ~ x ~ x ~@2 x", X: "x!4 ~@4", Y: "x ~ x ~ x ~@6 x!2 ~ x!2", Z: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x",
  AA: "x ~@3 x ~@2 x!2 ~ x!2 ~ x!3", AB: "x ~@3 x ~@2 x!4 ~ x ~ x!2", AC: "x ~@3 x ~@2 x!2 ~ x ~@4 x",
  AD: "x ~@3 x ~@2 x!2 ~ x ~@5", AE: "x ~ x ~ x ~@2 x ~ x!2 ~ x ~@2 x", AF: "x ~ x ~ x ~@2 x!2 ~ x ~@3 x!2",
  AG: "x ~ x ~ x ~@3 x!2 ~ x!4 ~", AH: "x ~@3 x ~@2 x ~ x!2 ~ x ~@2 x", AI: "x ~@3 x ~@2 x!2 ~@2 x!2 ~@2 x",
  AJ: "x!2 ~ x!2 ~@2 x!2 ~ x ~ x ~@2 x", AK: "x ~ x ~ x ~@2 x!3 ~ x!2 ~ x!2", AL: "x ~@3 x ~@3 x ~ x ~ x!2 ~ x",
  AM: "x ~ x ~ x ~ x!7 ~@2 x", AN: "x ~ x ~ x ~ x!3 ~@2 x!2 ~@2 x", AO: "x!2 ~ x!2 ~@2 x!3 ~ x ~ x!3",
  AP: "x ~@6 x!2 ~ x ~ x ~@2 x", AQ: "x ~@3 x ~@2 x!2 ~@3 x ~@2 x", AR: "x ~ x ~ x ~@2 x!3 ~ x!2 ~@2 x",
  AS: "x ~ x ~ x ~@2 x!3 ~ x ~ x!3", AT: "x",
})).gain(0.4)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct(`<
  ~@5 A ~@3 A@2 ~@2 B ~ C B ~ C B@2 D ~@2 A ~ A B ~@3 E ~@2 B ~@2 B ~@3 C A C ~ D ~@4 B@2 A F B A ~@4 A@2 ~ A C A ~@2 C
  B ~ B ~ A ~ A G ~ A C B C@2 B ~@2 A ~ A H C ~@3 A ~ A H B I ~ A C ~ H B ~@3 A ~@2 A D ~ E ~@3 A J A ~@6 A ~@3 A ~ A
  ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@3 x", C: "~@3 x ~@4", D: "~@9 x ~@6", E: "~@7 x ~@8", F: "~ x ~@6", G: "~ x ~@5 x",
  H: "~ x ~ x ~@3 x", I: "~ x ~ x ~@4", J: "~ x",
})).gain(0.24)

stack(
  bass, synth_strings_2, overdriven_guitar, electric_guitar_muted, synth_brass_1, electric_guitar_jazz, kick, snare,
  clap, hihat, high_tom, high_tom_soft
)

More by Real McCoy