Strudelify
Tempo165 bpm
0:00/0:00
// Meatplow — Stone Temple Pilots
// 165 bpm, 4/4, key unknown. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 "lead guitar" overdriven guitar (copy of ch 1 "clean guitar" electric guitar clean); ch 5 "bass 2" electric bass pick (copy of ch 2 "bass" electric bass finger)
// note: Full arrangement: all 150 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): clean guitar.
setcpm(165/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · electric bass finger · "bass"
const bass = note(`<
  A B C@2 D E@5 F@4 G@3 H I J@2 K L M@8 N@8 O@5 P@8 Q R@3 S@4 T U V W X Y Z AA AB@8 AC@8 AD@8 AE@8 AF@4 AG@3 AH@2 AI AJ
  AK@2 AL AM@8 AN@8 AO@8 AP@6 AQ@5 ~
>`.pickRestart({
  A: "e1 g1 a1 c2", B: "f#1@4 f#1@2 ~ f#1", C: "[e1@4 f#1@4 ~@4 f#1@8 ~ e1@4 f#1@7]/2", D: "~ e1@4 g1@4 a1@4 c2@3",
  E: "[~ f#1@8 f#1@4 ~@2 f#1@2 e1@4 f#1@4 ~@4 f#1@8 ~ e1@4 f#1@8 e1@4 g1@4 a1@4 c2@4 f#1@8 f#1@4 ~@2]/5",
  F: "[f#1@2 e1@4 f#1@4 ~@4 f#1@8 ~ e1@4 f#1@8 e1@4 g1@4 a1@4 c2@4 f#1@8 f#1@4 ~]/4",
  G: "[~ f#1@2 e1@4 f#1@4 ~@4 f#1@8 ~ e1@4 f#1@8 e1@4 g1@4 a1@4]/3", H: "c2 f#1@2 f#1", I: "~ f#1 e1@2 f#1@2 ~@2",
  J: "[f#1@8 ~ e1@4 f#1@8 e1@4 g1@4 a1@3]/2", K: "~ c2@4 f#1@8 f#1@3", L: "~@3 f#1@2 e1@4 f#1@4 ~@3",
  M: "[~ f#1@8 ~ e1@4 f#1@8 e1@4 g1@4 a1@4 c2@4 b1@8 b1@8 b1@4 b1@4 b1@4 c2@8 c2@4 c2@8 c2@4 c2@4 c2@4 f1@8 f1@4 f1@8 f1@4 f1@4 f1@2]/8",
  N: "[c2 f2@4 c2@2 f2@3 c2 f2 c2 f2@2 c2@2 b1@4 b1@2 b1@4 b1@2 b1@2 b1@2 c2@4 c2@2 c2@4 c2@2 c2@2 c2@2 d2@4 a1@2 a1@4 a1@2 a1@2 c2]/8",
  O: "[~ d2@4 a1@2 a1@4 a1@2 a1@2 f1@2 a#1@4 g1@2 g1@4 g1@4 g1@2 g1@2 f1@2 a#1@2 ~]/5",
  P: "[~@3 c2@2 g1@2 c2@2 d2@4 a1@2 a1@4 a1@2 a1@2 c2@2 d2@4 a1@2 a1@4 a1@2 a1@2 f1@2 a#1@4 g1@2 g1@4 g1@4 g1@2 g1@2 f1@2 a#1@2 ~]/8",
  Q: "~@3 c2@2 g1@2 ~", R: "[~ e1@4 g1@2 a1@2 c2@2 f#1@4 f#1@2 ~ f#1 e1@2 f#1@2 ~]/3",
  S: "[~@2 f#1@8 ~ e1@4 f#1@8 e1@4 g1@4 a1@4 c2@4 f#1@8 f#1@4 ~@2 f#1@2 e1@4 f#1@4 ~]/4", T: "~@3 f#1@8 ~ e1@4",
  U: "f#1@2 e1 g1", V: "a1 c2 f#1@2", W: "f#1@2 ~ f#1 e1@2 f#1@2", X: "~@4 f#1@8 ~ e1@3", Y: "~ f#1@8 e1@4 g1@3",
  Z: "~ a1@4 c2@4 f#1@7", AA: "~ f#1@4 ~@2 f#1@2 e1@4 f#1@3",
  AB: "[~@5 f#1@8 ~ e1@4 f#1@8 e1@4 g1@4 a1@4 c2@4 b1@8 b1@8 b1@4 b1@4 b1@4 c2@8 c2@4 c2@8 c2@4 c2@4 c2@4 f1@8 f1@4 f1@8 f1@4 f1@2]/8",
  AC: "[~ f1 c2 f2@4 c2@2 f2@3 c2 f2 c2 f2@2 c2@2 b1@4 b1@2 b1@4 b1@2 b1@2 b1@2 c2@4 c2@2 c2@4 c2@2 c2@2 c2@2 d2@4 a1@2 a1@4 a1@2 a1]/8",
  AD: "[~ c2@2 d2@4 a1@2 a1@4 a1@2 a1@2 f1@2 a#1@4 g1@2 g1@4 g1@4 g1@2 g1@2 f1@2 a#1@2 ~@4 c2@2 g1@2 c2@2 d2@4 a1@2 a1@4 a1@2 a1]/8",
  AE: "[~ c2@2 d2@4 a1@2 a1@4 a1@2 a1@2 f1@2 a#1@4 g1@2 g1@4 g1@4 g1@2 g1@2 f1@2 a#1@2 ~@4 c2@2 g1@4 e1@4 g1@2 a1@2 c2@2 f#1@3]/8",
  AF: "[~@2 f#1@4 ~@2 f#1@2 e1@4 f#1@4 ~@4 f#1@8 ~ e1@4 f#1@8 e1@4 g1@4 a1@4 c2@4 f#1@4 ~]/4",
  AG: "[~ f#1@2 f#2@2 e2@2 c#2@2 b1@6 a1@4 b1@4 c#2@2 f#1@6 e1@4 ~ f#1@8 e1@4]/3",
  AH: "[g1@2 a1@2 c2@2 f#1@4 f#1@2 ~ f#1 e1@2]/2", AI: "f#1 ~ f#1@2", AJ: "~ e1@4 f#1@8 e1@3",
  AK: "[~ g1@4 a1@4 c2@4 f#1@8 f#1@4 ~@2 f#1@2 e1@3]/2", AL: "~ f#1@4 ~@4 f#1@7",
  AM: "[~ e1@2 f#1@4 e1@2 g1@2 a1@2 c2@2 b1@4 b1@4 b1@2 b1@2 b1@2 c2@4 c2@2 c2@4 c2@2 c2@2 c2@2 f1@4 f1@2 f1@4 f1@2 f1@2 f1@2 f1@3]/8",
  AN: "[~ f1@2 f1@4 f1@2 f1@2 f1@2 b1@4 b1@2 b1@4 b1@2 b1@2 b1@2 c2@4 c2@2 c2@4 c2@2 c2@2 c2@2 d2@4 a1@2 a1@4 a1@2 a1@2 c2@2 d2@3]/8",
  AO: "[~ a1@2 a1@4 a1@2 a1@2 f1@2 a#1@4 g1@2 g1@4 g1@4 g1@2 g1@2 f1@2 a#1@2 ~@4 c2@2 g1@2 c2@2 d2@4 a1@2 a1@4 a1@2 a1@2 c2@2 d2@3]/8",
  AP: "[~ a1@2 a1@4 a1@2 a1@2 f1@2 a#1@4 g1@2 g1@4 g1@4 g1@2 g1@2 f1@2 a#1@2 ~@4 c2@2 g1@2 ~@2 e1@3]/6",
  AQ: "[~ g1@2 a1@2 c2@2 f#1@12 f1@20 ~]/5",
})).s("gm_electric_bass_finger").gain(0.37)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C D@2 E F G H I J K I L M N C N O P Q R O R S T U R V R H P V W U R U W V W O W X W V W V W V W@3 V X W V Y Z AA
  AB AC AD AE AF AE AG AH AI AJ AK AL AM AL AM AL S AN AM AL AO AE AP AE AM AL AM AQ AR AS AM AL AM AL AM AL AJ AN AM AQ
  AS AT AU AV AW AX AK AW AY AZ AW@2 BA O BB BC BD BE BA V BF V BF V BD V BG V BF BH ~ AQ BF BI BF V BF V BF BC BJ BF@2
  V BH ~@5
>`.pickRestart({
  A: "x ~@6 x ~@8", B: "~ x ~@2 x ~@7 x ~@3", C: "~ x ~@2", D: "~ x ~@3 x ~@10", E: "~ x ~@3 x ~@7 x ~@2",
  F: "~@5 x ~@10", G: "~ x ~ x ~@4", H: "~@2 x ~@6 x ~@6", I: "~@3 x ~@3 x ~@8", J: "~ x ~@5 x ~@8",
  K: "~@3 x ~@4 x ~@7", L: "~@3 x ~@3 x ~@7 x", M: "~@7 x ~@8", N: "~ x!2 ~", O: "~ x ~@7 x ~@6", P: "~@5 x ~@3 x ~@6",
  Q: "~@5 x ~@5 x ~@4", R: "~@5 x ~@4 x ~@5", S: "~@6 x ~@6 x ~@2", T: "~@6 x ~@4 x ~@4", U: "~ x ~@8 x ~@5",
  V: "~ x ~@3 x ~@2", W: "~@3 x ~ x ~@2", X: "~@3 x ~@4", Y: "~@7 x ~@3 x ~@4", Z: "~@7 x ~@5 x ~@2",
  AA: "~@3 x ~@2 x ~", AB: "~@3 x ~@7 x ~@4", AC: "~@3 x ~@3 x ~@4 x ~@3", AD: "~@4 x ~@2 x", AE: "~@9 x ~@3 x ~@2",
  AF: "~@5 x ~@6 x ~@3", AG: "~@9 x ~@5 x", AH: "~@9 x ~@2 x ~@3", AI: "~@8 x ~@4 x ~@2", AJ: "~@9 x ~@4 x ~",
  AK: "~@3 x", AL: "~@5 x ~ x", AM: "~@3 x ~@3 x", AN: "~@11 x ~@2 x ~", AO: "~@7 x ~@6 x ~", AP: "~@5 x ~@8 x ~",
  AQ: "~@5 x ~@2", AR: "~ x ~@3 x ~ x", AS: "~@10 x ~@4 x", AT: "~@6 x ~@8 x", AU: "~@11 x ~@3 x", AV: "~@11 x ~@4",
  AW: "~ x ~@10 x ~@3", AX: "x ~@10 x ~@4", AY: "x ~@2 x", AZ: "~ x ~@6 x ~@7", BA: "~ x ~@11 x ~@2", BB: "~ x ~@13 x",
  BC: "~@3 x ~@10 x ~", BD: "~@2 x ~@10 x ~@2", BE: "~@3 x ~@6 x ~@5", BF: "~ x ~@5 x", BG: "~ x ~@12 x ~",
  BH: "~ x ~@6", BI: "~@7 x", BJ: "~@15 x",
})).gain(0.26)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B@2 C A B D E F@2 G H F I G J K L M N O P Q R S T Q@5 M Q@21 U T V S W X Y Z AA AB AC AD AE AB AC@2 AF AG AH AI
  AH@8 AC AH AC AH@3 AJ AH@6 AI AH@4 AK AH AL AM AN AI AO AP AQ AO AR AS AT X AJ AU AT AJ AT AJ AT AJ@3 AT AJ AT AJ AT
  AV AW AX AJ AV AJ@11 ~ AH ~@3
>`.pickRestart({
  A: "~@9 x ~@5 x", B: "~@9 x ~@6", C: "~@9 x ~@3 x ~ x", D: "~@10 x ~@2 x ~ x", E: "~@5 x ~@2", F: "~ x ~@9 x ~@4",
  G: "~@11 x ~@4", H: "~@11 x ~@2 x ~", I: "~@2 x ~@8 x ~@4", J: "x!2 ~@4 x ~", K: "x ~@2 x", L: "~ x ~@4 x ~",
  M: "~@13 x ~@2", N: "~ x ~ x ~@9 x ~@2", O: "~@3 x ~@8 x ~@3", P: "~@3 x ~@9 x ~@2", Q: "~@7 x", R: "~ x!2 ~@4 x",
  S: "~@2 x ~ x ~@10 x", T: "~@2 x ~@4 x", U: "~ x ~@12 x ~", V: "~@15 x", W: "~@3 x ~@11 x", X: "~@5 x ~@10",
  Y: "x ~@14 x", Z: "~@3 x ~ x ~@10", AA: "x ~ x!2 ~@4", AB: "~ x ~@5 x ~@8", AC: "~ x ~@14", AD: "~@3 x ~ x ~ x ~@8",
  AE: "~ x ~@3 x ~@10", AF: "~ x ~ x!2 ~@3", AG: "~@3 x ~@4 x ~@7", AH: "~ x ~@6", AI: "~@3 x ~@12", AJ: "~@3 x ~@4",
  AK: "~@2 x ~@6 x ~@6", AL: "~@3 x ~@3 x ~ x ~@6", AM: "~@3 x ~@3 x ~@8", AN: "~@3 x ~@6 x ~@5", AO: "~ x ~@2",
  AP: "~@2 x ~ x!2 ~@2", AQ: "~@2 x ~@2 x ~@2", AR: "~@5 x ~@3 x ~ x ~@4", AS: "~@4 x ~@4 x ~ x ~@4",
  AT: "~@3 x ~@2 x ~", AU: "~@3 x ~ x!2 ~", AV: "~@3 x ~ x ~@2", AW: "~ x ~@4 x ~@5 x ~ x ~", AX: "~ x ~ x ~@4",
})).gain(0.26)

stack(bass, kick, snare)

More by Stone Temple Pilots