Strudelify

Keep Their Heads Ringing

Dr. Dre

KeyE minorTempo91 bpm
0:00/0:00
// Keep Their Heads Ringing — Dr. Dre
// 90.8 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90.8/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 · fretless bass · "killer bass"
const bass = note(`<
  A B C B C D C E C F C B C F C G C D C E C F C B C F C G C F C G C D C E C F C B C F C G C D C E C F C B C F C G C D C
  E C D C E C F C B C F C G C D C E C F C B C D C E C D C E C D C E C D C E C D C E C D C E C D C E C D C E ~
>`.pickRestart({
  A: "[a1,a2]@5 ~@5 [f1,f2]@6", B: "[e1,e2]", C: "[a1,a2]@2 ~@3 [f1,f2]@3", D: "[e1,e2]@7 ~", E: "[e1,e2]@3 [c2,c3]",
  F: "[e1,e2]@15 ~", G: "[e1,e2]@12 [c2,c3]@3 ~",
})).s("gm_fretless_bass").gain(0.64)

// other · celesta · "ringin' ding dongs!"
const celesta = note("<A@14 B@2 A@10 B@2 A@2 B@2 A@10 B@2 A@10 B@2 A@14 B@2 A@40 ~>".pickRestart({
  A: "[b5 d6 e6@9 d6@3 c6@2]/2", B: "[b5@2 d6@2 e6@18 d6@6 c6@3 ~]/2",
})).s("gm_celesta").gain(0.72)

// other · pad metallic · "metallic pad"
const pad_metallic = note(`<
  ~@4 A B A B C@2 D@2 E@4 F@4 G@4 H@4 I@3 ~ A B A B C@2 D@2 E@4 F@4 G@4 H@4 A B A B A B A B C@2 D@2 E@4 F@4 G@4 H@4 J@4
  K B L@2 M@4 N@2 L@4 M@4 N@2 M@2 O@2 ~
>`.pickRestart({
  A: "[a4,a5]@5 [f4,f5]@3", B: "[e4,e5]@3 [d5,d6]@3 [c5,c6]@2", C: "[[b4,b5]@27 ~ [c5,c6]@4]/2",
  D: "[[b4,b5]@7 [g4,g5]]/2", E: "[[a4,a5]@15 [c5,c6]]/4", F: "[[b4,b5]@15 [g4,g5]]/4",
  G: "[~@15 [c5,c6], [a4,a5]@31 ~]/4", H: "[[b4,b5]@29 ~ [g4,g5]@2]/4", I: "[a4,a5]/3",
  J: "[[a4,a5]@50 ~@10 [g4,g5]@3 ~]/4", K: "[b4,b5]@5 [f4,f5]@3",
  L: "[~@5 [f4,f5]@3 [e4,e5]@3 [d5,d6]@3 [c5,c6]@2, [b4,b5]@7 ~]/2", // F E D C B
  M: "[~@5 [f4,f5]@3 [e4,e5]@3 [d5,d6]@3 [c5,c6]@2, [b4,b5]@29 ~@3]/2", // F E D C B
  N: "[~@5 [f4,f5]@3 [e4,e5]@3 [d5,d6]@3 [c5,c6]@2, [b4,b5]@15 ~]/2", // F E D C B
  O: "[~@5 [f4,f5]@3 [e4,e5]@3 [d5,d6]@3 [c5,c6]@2, [b4,b5]@23 ~@9]/2", // F E D C B
})).s("gm_pad_metallic").gain(0.64)

// other · tubular bells · "bong"
const tubular_bells = note(`<
  ~@4 A ~@27 A ~@23 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "a4 ~@15",
})).s("gm_tubular_bells").gain(0.64)

// chords · epiano1 · "dunno"
const epiano1 = note(`<
  A B A B C B C B C B C B C B C D C D C D C D C D C D C D C D C D C B C B C B C B C B C D C D C D C D C D C D C D C B C
  B C B C B C B C B C B C D C D C D C D C D C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B ~
>`.pickRestart({
  A: "~@7 [f4,a4,c5]", B: "[e4,g4,b4]", C: "~@5 [f4,a4,c5]@3", D: "[e4,g4,b4]@15 ~",
})).s("gm_epiano1").gain(0.64)

// drums · kick
const kick = s("bd").struct("<[x ~@6 x!2 ~ x ~@5]!112 ~>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!112 ~>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<[x ~@6 x!2 ~ x ~@5]!112 ~>").gain(0.64)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A B A B A B C B A B A B A B C B A B C B A B A B A B C B A B C B A B C B A B A B A B C B A B C B A B A B A B C B A B C
  B A B C B A B A B A B C B A B C B A B A B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B ~
>`.pickRestart({
  A: "x!2 ~@2 x!4", B: "x ~ x!5 ~", C: "x!3 ~ x!4",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").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 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: "~@3 x ~@4", B: "~ x ~@5 x",
})).gain(0.64)

stack(bass, celesta, pad_metallic, tubular_bells, epiano1, kick, snare, low_tom, pedal_hat, open_hat)

More by Dr. Dre