Strudelify
Plush cover art

1992 · Core

Plush

Stone Temple Pilots

KeyG minorTempo144 bpm
0:00/0:00
// Plush — Stone Temple Pilots
// 144 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: track names are the Roland MT-32 patch names at their program numbers ("Guitar1" on 61, "Guitar2" on 61), so with no bank select the whole file is read through the MT-32 patch table: ch 4 "Guitar1" Elec Gtr 1 -> electric guitar clean; ch 2 "Guitar2" Elec Gtr 1 -> electric guitar clean; ch 3 "Bass Guitar" Acou Bass 1 -> acoustic bass
// note: Full arrangement: all 181 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(144/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 · electric guitar clean · "Guitar1"
const electric_guitar_clean = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@3 D E F G H I D E F G H I J@6 K@2 L M@2 N O P Q R S T U@2 H V@3 W@2 B@2 W@2 C@3 D E F G
  H I D E F G H I J@6 K@2 L M@2 N O P Q R S T U@2 H V@3 X Y Z AA X Y Z AB X Y Z AC X AD Z AC AE@2 AF@2 A@2 B@2 A@2 AG@2
  A@2 C@3 L M@2 N O P Q R S T U@2 H V@3 X Y Z AA X Y Z AB X Y Z AC X AD Z AC AE@2 AF@2 A@2 B@2 A@2 AG@2 A@2 AH@4
>`.pickRestart({
  A: "[[g3,d4,g4]!2 ~ [bb3,db4,g4]@5]/2", // G5 Gdim
  B: "[[a3,c4,g4]@2 [a3,c4,g4]@2 ~@2 [g3,b3,g4]@6 [g3,b3,g4] [g3,c4,g4] [g3,db4,g4]@2]/2", // Am7 G C5 Gdim
  C: "[[a3,c4,g4]!2 ~ [d3,g3,b3,g4]@9]/3", D: "[g2,b2,d3,g3,d4,g4]@2 [g2,b2,d3,g3,d4,g4]@2 ~@3 [d3,a3,d4]",
  E: "[d3,a3,d4]@2 [d3,a3,d4]@2 ~@3 [f2,c3,f3,a3], [gb2,a2] ~", F: "[f2,c3,f3,a3]@2 [f2,c3,f3,a3]@2 ~@3 [c3,e3,g3,c4]",
  G: "[c3,e3,g3,c4]@2 [c3,e3,g3,c4]@2 ~@3 [g3,bb3,d4]", H: "[eb3,g3,bb3,d4]@2 [eb3,g3,bb3,d4]@2 ~@3 [g3,bb3,d4]",
  I: "[eb3,g3,bb3,d4]@3 [g3,bb3] [c3,f3,a3,c4]@4", // Ebmaj7 Gm F
  J: "[[d3,a3,d4,e4]@2 [d3,a3,d4,e4] [d4,e4] [g3,d4]@2 [g3,d4] g3@2 g3 [c3,g3,d4,e4]@3 b2 c3 [a2,a3,d4], ~@4 [c3,e4]@3 [b2,d3,d4,e4]@3 ~@3 [g3,d4,e4]@2 ~]/2", // Dsus2 G5 C D5 C E7 Em7
  K: "[[d3,a3,d4,e4]@2 [d3,a3,d4,e4] [d4,e4] [g3,d4]@2 [g3,d4] g3@2 g3 [c3,g3,d4,e4]@6, ~@4 [c3,e4]@3 [b2,d3,d4,e4]@3 ~@6]/2", // Dsus2 G5 C E7
  L: "[eb3,g3,bb3]@2 [eb3,g3,bb3]@2 ~@3 [eb3,g3,bb3]", // Eb
  M: "[[eb3,ab3,bb3,d4]@2 [eb3,ab3,bb3,d4]@2 ~@3 [f2,c3,f3,a3] [f2,c3,f3]@2 [f2,c3,f3]@2 ~@3 [c3,f3,a3,c4], ~@7 c4@5 ~@4, ~@2 a3 ~]/2", // Ebsus4 F F5 F
  N: "[f2,c3,f3]@2 [f2,c3,f3]@2 ~@3 [eb3,g3,bb3,d4]", O: "[eb3,g3,bb3,d4]@2 [eb3,g3,bb3,d4]@2 ~@3 [gb3,bb3,d4]",
  P: "[eb3,gb3,bb3,d4]@2 [eb3,gb3,bb3,d4]@2 ~@2 c3 [f2,c3,f3,a3,c4]", // Ebm F
  Q: "[f2,c3,f3]@2 f2@2 f2 e2!2 [f2,c3,f3,a3], [a3,c4]@5 ~@3, ~@2 [c3,f3]@3 ~@3", // F5 F Am F5
  R: "[f2,c3,f3]@2 [f2,c3,f3] e2 ~ [f2,c3,f3]@3, [a3,c4]@3 ~@5", S: "[eb3,g3,bb3]@2 [eb3,g3,bb3]@2 ~@3 [g3,bb3,d4]",
  T: "[eb3,g3,bb3,d4]@2 [eb3,g3,bb3,d4]@2 ~@2 c3 [f2,c3,f3,a3]", // Ebmaj7 F
  U: "[[f2,c3,f3,a3]@2 [f2,c3,f3,a3,c4]@2 ~@3 [f2,c3,f3,a3] [f2,c3,f3,a3]@2 [f2,c3,f3,a3,c4]@2 ~@3 c3, ~@7 c4@3 ~@3 f2@3, ~@7 [f3,c4]]/2", // F F5
  V: "[[eb3,g3,bb3,d4]@2 [eb3,g3,bb3,d4]@2 ~@2 c3 [f2,c3,f3,a3] [f2,c3,f3,a3]@2 [f2,c3,f3,a3,c4]@2 ~@3 [f2,c3,f3,a3] [f2,c3,f3,a3]@2 [a3,c4] a3!4 [a3,c4], ~@7 c4@3 ~@5 c4@3 f2@6, ~@9 [c3,f3]!3, ~@19 c4@2 c4@2 ~]/3", // Ebmaj7 F Am F5
  W: "[[ab3,d4,g4]!2 ~ [bb3,db4,g4]@5]/2", X: "[g2,d3]!5 ~@2 [g2,d3]", Y: "[f2,c3]!3 ~@2 [f2,c3]@3",
  Z: "[e2,c3]!5 ~@2 [d3,a3]", AA: "[eb3,bb3]@3 [eb3,bb3] [d3,a3]@3 e2", AB: "[eb3,bb3]!2 [d3,a3]@2",
  AC: "[eb3,bb3] [d3,a3]", AD: "[f2,c3]@2 [f2,c3] f2 ~ [f2,c3]@3", AE: "[[g3,d4,g4]!2 ~ [d3,bb3,db4,g4]@5]/2",
  AF: "[[a3,c4,g4]@2 [a3,c4,g4]@2 ~@2 [d3,g3,b3,g4]@6 [g3,b3,g4] [g3,c4,g4] [g3,db4,g4]@2]/2", // Am7 G C5 Gdim
  AG: "[[a3,c4,g4]@2 [a3,c4,g4]@2 ~@2 [g3,b3,g4]@7 [g3,c4,g4] [g3,db4,g4]@2]/2", // Am7 G C5 Gdim
  AH: "[[a3,c4,g4]@2 [a3,c4,g4]@2 ~@2 [d3,g3,b3,g4]@25 ~]/4", // Am7 G
})).s("gm_electric_guitar_clean").gain(0.4)

// chords · electric guitar clean · "Guitar2"
const electric_guitar_clean_2 = note(`<
  ~@98 A B C D E F C G A B C H I J C K ~@33 A B C D E F C G A B C H I J C K ~@18
>`.pickRestart({
  A: "~ a3 ~@5 b3, g3@3 g3, ~@2 b3@3 b3@2 ~, ~@3 d4@5", B: "~@2 d4@2 ~@2 g3 a3, f3@4 ~ f3@3, ~ b3@3 ~@4",
  C: "~@2 c4@2 ~@3 g3, e3@3 e3, ~ g3@4 g3@2 ~, ~ c4", D: "~@4 c4@3 c4 d4@2 c4@6, eb3, ~ g3@7",
  E: "~ a3 ~@5 g3, g3@5 g3@2 ~, ~ bb3!3, ~@3 d4@5", F: "~@2 d4@2 ~ g3@2 a3, f3 ~, ~ bb3@3 ~@4",
  G: "~@2 c4 d4@2 ~@2 a3, eb3, ~ g3@6 ~, ~@5 c4@3", H: "~@4 c4@3 c4 d4@2 ~@4 a3@2, eb3, ~ g3@6 ~, ~@5 c4@3",
  I: "~ a3 ~@5 d3, g3@5 g3@3, ~ bb3!3, ~@3 d4@5", J: "~@3 f3 ~ g3@2 a3, f3@3 ~@5, ~ bb3@3 ~@4, ~ d4 ~@2",
  K: "[g3,bb3,d4] [d3,ab3,c4]", // Gm Dm7b5
})).s("gm_electric_guitar_clean").gain(0.48).pan(0)

// bass · acoustic bass · "Bass Guitar"
const bass = note(`<
  A@2 B@2 C@2 D@2 E@2 B@2 F@2 G@3 H I J K L M H I J N O M P@2 Q@2 P@2 R@2 L S T U O V T U W V T X L Y T Z AA@2 B@2 AB@2
  G@3 AC I J AD L AE AF I J N L AG P@2 AH@2 P@2 AI@2 AJ Y T U L Y T U L Y T U L Y T AK AL AM AN AO AL AM AN AO AL AM AN
  AP AL AM AN AQ A@2 AR@2 AS@2 B@2 AS@2 AT@2 AS@2 AU@3 L V T X L V AV U L AW T X L V AV AK AL AM AN AP AL AM AN AO AL AM
  AN AP AL AM AN AQ AX@2 AT@2 AY@2 B@2 AS@2 B@2 AZ@2 BA@2 ~@2
>`.pickRestart({
  A: "[g1@2 g1@2 ~@2 bb1@3 bb1!4 g1 bb1 b1]/2", B: "[c2@2 c2@2 ~@2 g1@3 g1!3 bb1 c2 db2@2]/2",
  C: "[d2!2 g1@2 ~@2 bb1@3 bb1!4 g1 bb1 b1]/2", D: "[c2@2 c2!2 ~@2 g1@3 g1!3 bb1 c2 db2@2]/2",
  E: "[d2@2 g1@2 ~@2 bb1@3 bb1 bb1@2 g1 bb1 b1@2]/2", F: "[d2@2 g1@2 ~@2 bb1@3 bb1 bb1@2 ~ g1 bb1 b1]/2",
  G: "[c2!2 ~ g1@9]/3", H: "g1@2 g1@2 ~@3 g2", I: "gb2@2 d2@2 ~@3 e2", J: "f2@2 f2@2 ~@3 f2", K: "e2@2 c2@2 ~@3 d2",
  L: "eb2@2 eb2@2 ~@3 bb1", M: "eb2 eb2@2 f2@5", N: "e2@2 c2!2 ~@3 d2", O: "eb2@2 eb2!2 ~@3 bb1",
  P: "[d2@2 d2!2 c2@3 b1@3 c2@3 d2 e2 gb2]/2", Q: "[d2@2 d2!2 c2@3 b1@2 d2 g1@2 a1 b1 c2 a1]/2",
  R: "[d2@2 d2!2 c2@2 c2 b1@3 c2@3 c2 d2!2]/2", S: "eb2 eb2@5 c3 bb2", T: "a2@2 f2@2 ~@3 c2",
  U: "f2 f2@2 c2 f2 g2 e2 eb2", V: "eb2 eb2@2 bb1 eb2 f2 c3 bb2", W: "eb2!4 ~@3 bb1", X: "f2 f2@2 c2 f2!2 e2@2",
  Y: "eb2 eb2@2 bb1 eb2!2 c3 bb2", Z: "f2 f2@2 c2 f2!2 c2@2", AA: "[g1!4 ~@2 bb1@3 bb1 bb1@3 g1 bb1 b1]/2",
  AB: "[d2@2 g1@2 ~@2 bb1@3 bb1!4 g1 bb1 b1]/2", AC: "g2@2 g2@2 ~@3 g2", AD: "e2!2 c2@2 ~@3 d2",
  AE: "eb2 eb2@2 eb2 f2@4", AF: "g1!2 g1@2 ~@3 g2", AG: "eb2 eb2@2 eb2 f2 f2@3",
  AH: "[d2@2 d2!2 c2@2 c2 b1@2 d2 g1@2 a1 b1 c2 a1]/2", AI: "[d2@2 d2!2 c2@3 b1@3 c2@3 c2 d2!2]/2",
  AJ: "e2@2 e2!2 ~@3 bb1", AK: "f2!2 c2 f2!3 c2@2", AL: "g1!4 ~@3 g1", AM: "f1@2 f1!2 ~ f1@3", AN: "e1!4 ~@3 d2",
  AO: "eb2!4 d2!4", AP: "eb2 eb3!3 d3!2 d3@2", AQ: "eb2 d2", AR: "[c2@2 c2@2 ~@2 g1@3 g1 g1@2 bb1 c2 db2@2]/2",
  AS: "[d2@2 g1@2 ~@2 bb1@3 bb1 bb1@3 g1 bb1 b1]/2", AT: "[c2@2 c2@2 ~@2 g1@4 g1!2 bb1 c2 db2@2]/2",
  AU: "[c2!2 ~@4 g1@18]/3", AV: "a2@2 f2!2 ~@3 c2", AW: "d2 d2@2 bb1 d2 e2 c3 bb2",
  AX: "[g1@2 g1@2 ~@2 bb1@4 bb1@3 g1 bb1 b1]/2", AY: "[d2@2 g1!2 ~@2 bb1@3 bb1 bb1@3 g1 bb1 b1]/2",
  AZ: "[d2@2 g1@2 ~@2 bb1@4 bb1@3 g1 bb1 b1]/2", BA: "[c2!2 ~ g1@5]/2",
})).s("gm_acoustic_bass").gain(0.41)

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

// drums · snare
const snare = s("sd").struct(`<
  A@13 B A C D A@5 B A@5 E F A F A F A F B A@23 C D A@5 B A@5 E F A F A F A F B A@16 F A F A F A F B F A F A F A F B
  A@13 B A ~ G A@16 F A F A F A F B F A F A F A F B A@13 B A ~@3
>`.pickRestart({
  A: "~ x", B: "~@4 x ~ x!2", C: "~@7 x", D: "~ x!2 ~ x!4", E: "~@8 x ~ x!5 ~", F: "~@4 x ~@2 x",
  G: "x ~@3 x ~ x ~@3 x ~ x!3 ~",
})).gain(0.31)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@30 A ~ A ~ A ~@40 A ~ A ~ A ~@19 A ~ A ~ A ~@3 A ~ A ~ A ~@36 A ~ A ~ A ~@3 A ~ A ~ A ~@20
>`.pickRestart({
  A: "~@7 x",
})).gain(0.31)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@14 B ~@2 A@6 C A@4 D A@30 B ~@2 A@6 C A@4 D A@24 E@16 A@14 B ~@2 A@16 E@16 A@14 B ~@3
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "~ x!3", D: "x!2 ~@2", E: "x!8",
})).gain(0.31)

// drums · crash
const crash = s("cr").struct("<~@14 A ~@8 B ~@35 A ~@8 B ~@59 A ~@48 A ~@3>".pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.31)

stack(electric_guitar_clean, electric_guitar_clean_2, bass, kick, snare, mid_tom, open_hat, crash)

More by Stone Temple Pilots