Strudelify

Regulate

Warren G

KeyE minorTempo97 bpm
0:00/0:00
// Regulate — Warren G
// 97 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/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.

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~ A@3 B C D C E ~@16 C D C E C D C E ~@8 C D C E C D C E ~@12 C D C E C D C E ~@8 C D C E C D C E F
>`.pickRestart({
  A: "~@2 e4 ~ d4 e4 ~ d4 e4 ~ e4 ~ d4 e4 ~ e4", B: "~@2 e4 ~ d4 e4 ~ d4 ~@8",
  C: "e3!2 [e3,e4] e3 [e3,d4] [e3,e4] e3 [e3,d4] [e3,e4] e3 [e3,e4] e3 [e3,d4] [e3,e4] e3 [e3,e4]", // E E7 E E7 E E7 E
  D: "e3!2 [e3,e4] e3 [e3,d4] [e3,e4] e3 [e3,d4] [e3,e4] e3 [e3,e4] e3 [e3,f#4] [e3,d4] [e3,b3] [e3,e4]", // E E7 E E7 E Esus2 E7 E5 …
  E: "e3!2 [e3,e4] e3 [e3,d4] [e3,e4] e3!6 [e3,a3] [e3,g3] e3!2", F: "e3 ~@15",
})).s("gm_electric_guitar_muted").gain(0.28)

// other · ocarina
const ocarina = note(`<
  ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B
  C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ D
>`.pickRestart({
  A: "e6 ~ e6 ~ f#6 ~ g6 ~ f#6 ~ g6 f#6@3 e6 ~", B: "~@6 f#6 e6 b6@3 a6@3 g6 ~",
  C: "f#6 ~ e6 ~ f#6 ~ g6 ~ f#6 g6 ~ f#6@3 ~@2", D: "e6 ~ e6 ~ f#6 ~@11",
})).s("gm_ocarina").gain(0.1)

// other · string ensemble 1
const string_ensemble_1 = note("<~ A@40 B@4 C@4 A@12 B@8 A@8 B@8 D>".pickRestart({
  A: "[e3@27 d3@3 g3@14 a3@2 g3@6 f#3@12]/4", B: "[e3@27 d3@3 g3@14 a3@2 g3@6 f#3@12, e6]/4",
  C: "[e5@16 ~@11 d3@3 ~@14 a3@2 g3@6 f#3@12, e6, e3@27 ~@3 g3@14 ~@20, ~@16 d5@16 b4@29 ~@3]/4", D: "[e3,e6]",
})).s("gm_string_ensemble_1").gain(0.18)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A E C F A B C D A B C D A B
  C D A B C D A B C D A B C D A B C D A B C D A B C D G
>`.pickRestart({
  A: "e1 ~@6 e1!2 ~@5 d2 ~", B: "~@2 e1 ~@2 e1 ~ e1!2 ~@4 e1 b1 ~", C: "c2 ~@6 c2!2 ~@7",
  D: "~@2 c2@2 b1 ~ a1 ~ f#1@3 b1@2 e1 d2 ~", E: "~@2 e1 ~@2 e1 ~ e1!2 ~@2 b1 d2 e1 b1 ~",
  F: "~@2 c2 ~ b1 c2 a1 b1 f#1@3 b1@2 e1 d2 ~", G: "e1 ~@15",
})).s("gm_electric_bass_finger").gain(0.59)

// bass · electric bass finger · soft notes
const bass_soft = note(`<
  ~ A B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B
  ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A ~
>`.pickRestart({
  A: "~@15 e2", B: "~@15 c2",
})).s("gm_electric_bass_finger").gain(0.39)

// chords · percussive organ
const percussive_organ = note("<~@4 A@5 ~@15 B@8 C ~@7 B@8 C ~@11 D@8 C ~@7 D@8 E@2>".pickRestart({
  A: "[~@14 [d5,e5,g5]@26 g5@3 a5@2 ~ [e5,g5,b5]@19 ~ [e5,g5] ~ [d5,f#5] ~ [b4,d5,f#5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~@3, ~@40 [d5,e5]@5 ~@21 b4@2 ~@12]/5", // Em7 Em D Bm D Dsus2
  B: "[~@14 [d5,e5,g5]@26 g5@3 a5@2 ~ [e5,g5,b5]@19 ~ [e5,g5] ~ [d5,f#5] ~ [b4,d5,f#5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,e5,g5]@26 g5@3 a5@2 ~ [e5,g5,b5]@18, ~@40 [d5,e5]@5 ~@21 b4@2 ~@36 [d5,e5]@5 ~@19]/8", // Em7 Em D Bm D Em7 Em Dsus2
  C: "~@2 [e5,g5] ~ [d5,f#5] ~ [b4,d5,f#5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~@3, ~ b4 ~@6", // Em D Bm D
  D: "[~@2 [e5,g5] ~ [d5,f#5] ~ [b4,d5,f#5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,e5,g5]@26 g5@3 a5@2 ~ [e5,g5,b5]@19 ~ [e5,g5] ~ [d5,f#5] ~ [b4,d5,f#5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,e5,g5]@26 g5@3 a5@2 ~ [e5,g5,b5]@18, ~@2 b4@2 ~@36 [d5,e5]@5 ~@21 b4@2 ~@36 [d5,e5]@5 ~@19]/8", // Em D Bm D Em7 Em D Bm …
  E: "[~@2 [e5,g5] ~ [d5,f#5] ~ [b4,d5,f#5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,e5,g5]@18, ~ b4 ~@14]/2", // Em D Bm D Em7
})).s("gm_percussive_organ").gain(0.27)

// chords · epiano1
const epiano1 = note("<~ A@7 B@40 C@8 B@24 D@6>".pickRestart({
  A: "[[b3,d4,e4,g4]@24 [b3,d4,e4,g4]@3 [b3,d4,e4,a4]@3 [b3,c4,e4,g4]@20 e4@2 [a3,d4] ~ [a3,d4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]@2 [b3,d4,e4,g4]@26 [b3,d4,e4,g4]@3 [b3,d4,e4,a4]@3 [b3,c4,e4,g4]@18, ~@50 b3 ~@61]/7", // Em7 Bm7 Cmaj7 D5 D Em7 Bm7 Cmaj7
  B: "[~@2 e4@2 [a3,d4] ~ [a3,d4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]@2 [b3,d4,e4,g4]@26 [b3,d4,e4,g4]@3 [b3,d4,e4,a4]@3 [b3,c4,e4,g4]@20 e4@2 [a3,d4] ~ [a3,d4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]@2 [b3,d4,e4,g4]@26 [b3,d4,e4,g4]@3 [b3,d4,e4,a4]@3 [b3,c4,e4,g4]@18, ~@2 b3 ~@63 b3 ~@61]/8", // D5 D Em7 Bm7 Cmaj7 D5 D Em7 …
  C: "[~@2 e4@2 [a3,d4] ~ [a3,d4] ~ [d4,f#4] ~ [d4,g4]@2 [e4,a4]@2 [b3,e4]@26 [b3,d4,e4,g4]@3 [b3,d4,e4,a4]@3 [b3,c4,e4,g4]@20 e4@2 [a3,d4] ~ [a3,d4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]@2 [b3,d4,e4,g4]@26 [b3,d4,e4,g4]@3 [b3,d4,e4,a4]@3 [b3,c4,e4,g4]@18, ~@2 b3 ~@11 [d4,g4] ~@51 b3 ~@61]/8", // D5 D G5 A5 E5 Em7 Bm7 Cmaj7 …
  D: "[~@2 e4@2 [a3,d4] ~ [a3,d4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]@2 [b3,d4,e4,g4]@26 [b3,d4,e4,g4]@3 [b3,d4,e4,a4]@3 [b3,c4,e4,g4]@20 e4@2 [a3,d4] ~ [a3,d4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4]@2 [b3,d4,e4,g4]@18, ~@2 b3 ~@63 b3 ~@29]/6", // D5 D Em7 Bm7 Cmaj7 D5 D Em7
})).s("gm_epiano1").gain(0.4)

// other · clavinet
const clavinet = note(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A B C B A B C B A ~@3 A ~@3 A ~@3 A B C B A B C B A ~@3 A
  ~@3 A B C B A B C B A ~
>`.pickRestart({
  A: "~@4 a3 ~ a3 ~ a3 ~ a3 f#3 e3 ~@3", B: "~@2 g3!2 ~ f#3 ~ d3 e3 ~@7", C: "~@2 g3!2 ~ f#3 ~ d3 e3 ~@2 f#3@3 g3 ~",
})).s("gm_clavinet").gain(0.18).pan(0.6)

// other · synth brass 1
const synth_brass_1 = note("<~@61 A@2 B@2 A@2 B@2 ~@8 A@2 B@2 A@2 ~@3>".pickRestart({
  A: "[g6 b5 d6 e6 a5@28]/2", B: "[g6 b5 d6 e6 g5@28]/2",
})).s("gm_synth_brass_1").gain(0.33)

// other · synth brass 1 · soft notes
const synth_brass_1_soft = note("<~@83 A@2 ~>".pickRestart({
  A: "[g6 b5 d6 e6 g5@28]/2",
})).s("gm_synth_brass_1").gain(0.13)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2
  B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~ A@2 B ~@2
>`.pickRestart({
  A: "~@7 x ~@8", B: "~@2 x ~@4 x ~@8",
})).gain(0.23)

// drums · snare
const snare = s("sd").struct("<~ A@47 B A@11 C A@15 D A@8 E>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x!2 ~@3 x!2 ~ x", C: "~@4 x ~@7 x!3 ~", D: "~@4 x ~@3 x!3 ~ x ~@3", E: "~ x ~@2",
})).gain(0.46)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!84 [~ x ~@2]>").gain(0.52)

// drums · hihat
const hihat = s("hh").struct("<~ [x!14 ~@2]!84 [x!5 ~@11]>").gain(0.17)

// drums · low tom
const low_tom = s("lt").struct("<~@48 [~@7 x] ~@27 [~@14 x!2] ~@9>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@48 [~@10 x!2 ~@4] ~@27 [~@13 x ~@2] ~@9>").gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<[~@14 x!2] [~@7 x]!84 ~>").gain(0.29)

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

// drums · ride
const ride = s("rd").struct(`<
  ~ 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
  ~@3 A ~@2 B A
>`.pickRestart({
  A: "x", B: "~@8 x ~@2 x ~@4",
})).gain(0.35)

stack(
  electric_guitar_muted, ocarina, string_ensemble_1, bass, bass_soft, percussive_organ, epiano1, clavinet,
  synth_brass_1, synth_brass_1_soft, kick, kick_soft, snare, clap, hihat, low_tom, mid_tom, open_hat, splash, ride
)