Strudelify

Smells Like Teen Spirit

Tori Amos

KeyA♭ majorTempo120 bpm
0:00/0:00
// Smells Like Teen Spirit — Amos, Tori
// 120 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · piano · "Left Hand"
const piano = note(`<
  ~ A@4 B@2 C@2 D@2 E@6 F@4 G@2 H@2 I@2 J@2 K@4 L M N@4 O@4 P@6 Q@4 R S T U V@2 W@6 X@2 Y Z AA@2
>`.pickRestart({
  A: "[~@14 bb5@16 ab5@5 ~ g5@5 ~ f5@8 eb5@13 ~]/4",
  B: "[~@2 c5@2 g4@2 ab4@4 eb5@2 ab4@2 eb5@4 g4@2 ab4@3 ~ [db5,bb5]@2 [c5,ab5]@5 ~]/2", // Gb Fm
  C: "[~@2 g4@2 [ab4,db5]@2 [c5,eb5]@4 bb4@2 [ab4,eb5]@7 ~ g4@3 ~ [c5,ab5]@3 ~ [db5,bb5]@3 ~]/2", // Db5 Cm Ab5 Fm Gb
  D: "[[c5,c6]@2 g4@2 ab4@5 ~ c5@2 [eb5,ab5]@6 ab4@2 c5@3 ~ [db5,bb5]@3 ~ [c5,ab5]@3 ~]/2", // C Ab5 Gb Fm
  E: "[[c5,g5]@2 g4@2 [ab4,db5]@2 [ab4,c5]@4 [bb4,eb5]@2 ab4@2 [bb4,eb5]@4 eb4@2 ab4@3 ~ c5@2 f4@2 g4@6 c4@2 ab4@2 g4@4 c4@2 ab4@2 g4@4 c4@2 ab4@2 g4@4 c4@2 ab4@2 f4@4 c4@2 [ab4,c5]@2 [g4,c5]@4 c4@2 [ab4,c5]@2 [g4,c5]@4 c4@2 [ab4,c5]@5 ~ g4@6]/6", // C5 Db5 Ab Eb5 Ab C5 Ab C5 …
  F: "[~@2 g4@2 c5@2 f4@4 db4@2 bb4@7 ~ ab4@3 ~ db4@2 db5@4 [c4,c5]@5 ~ [f4,f5]@7 ~ [bb4,bb5]@9 ~ ab5@4 g5@4 eb5@2]/4", // C F Bb
  G: "[[g4,c5]@2 g4@2 [ab4,c5]@2 [c5,ab5]@4 ab4@2 [db5,bb5]@2 [c5,ab5]@4 [db5,ab5]@2 [c5,ab5]@3 ~ [db5,bb5]@2 [c5,ab5]@2 [bb4,g5]@3 ~]/2", // C5 Ab Fm Gb Fm Db5 Fm Gb …
  H: "[[ab4,c5]@2 g4@2 [bb4,db5]@3 ~ [bb4,db5]@2 ab4@2 eb5@7 ~ [ab4,eb5]@3 ~ [c5,ab5]@3 ~ [bb4,g5]@3 ~]/2", // Ab Bbm Ab5 Fm Eb
  I: "[c5@2 g4@2 ab4@2 [c5,eb5]@4 [db5,bb5]@2 c5@2 [c5,ab5]@4 [db5,ab5]@2 [c5,ab5]@3 ~ [db5,bb5]@3 ~ [c5,ab5]@3 ~]/2", // Cm Gb Fm Db5 Fm Gb Fm
  J: "[[ab4,c5]@2 g4@2 [bb4,db5]@2 [ab4,c5]@4 [ab4,eb5]@2 eb4@2 [ab4,eb5]@4 [bb4,eb5]@2 eb4@3 ~ [ab4,c5]@3 ~ [g4,c5]@3 ~]/2", // Ab Bbm Ab Ab5 Eb5 Ab C5
  K: "[[g4,c5]@2 f4@2 [ab4,c5]@2 [g4,c5]@4 f4@2 [ab4,c5]@2 [g4,c5]@4 f4@2 [ab4,c5]@2 [g4,c5]@4 [ab4,c5]@4 [f4,c5]@4 f4@2 [ab4,c5]@2 [g4,c5]@4 f4@2 [ab4,c5]@2 [g4,c5]@4 f4@2 [ab4,c5]@5 ~ bb4@2 ab5@3 ~]/4", // C5 Ab C5 Ab C5 Ab C5 Ab …
  L: "g5 c6 f5 g5 f5 bb5 db6 bb5", M: "c6 eb5 ab5 eb6 ab5 f5 db6 [f5,db6]",
  N: "[[g5,c6]@2 ab5@2 f5@2 g5@4 [db5,bb5]@2 [db5,bb5]@2 [db5,bb5]@4 [c5,ab5]@2 db5@2 c5@2 db5@2 [c5,ab5]@2 [c5,ab5]@2 [c5,g5]@4 f5@2 c5@2 f5@4 [db5,bb5]@2 [db5,bb5]@2 [db5,bb5]@4 ab5@2 c5@2 db5@2 bb4@2 [db6,bb6]@5 ~]/4", // C5 Gb Fm C5 Gb
  O: "[[c6,ab6]@2 db6@2 c6@3 ~@3 db6@2 bb6@6 [c6,ab6]@2 db6@3 ~@5 [c5,ab5]@6 g5@2 c5@2 g5@4 db5@2 f5@6 eb5@2 bb5@2 bb5@2 bb5@2 c6@2 c5@2 ab5@2]/4", // Fm
  P: "[g5@2 bb4@2 g5@2 ab4@4 db5@2 f4@2 c5@4 eb4@2 ab4@2 eb4@2 [g4,eb5]@2 ab4@2 g4@2 [bb4,eb5]@4 f4@2 [ab4,bb4]@2 ab4@2 [ab4,bb4]@3 ~ c5@2 [ab4,c5]@4 g4@2 [bb4,eb5]@2 [ab4,eb5]@2 [g4,eb5]@2 ab4@2 [bb4,eb5]@2 c5@4 ab4@2 ab5@2 g4@4 g4@2 ab5@2 g5@4 c5@2 ab5@2 c5@2 g5@2 c5@2 ab5@2 g5@2]/6", // Cm Eb5 Absus2 Ab Eb5 Ab5 Cm Eb5
  Q: "[c5@2 c5@2 [f5,ab5]@2 [bb4,g5]@4 bb4@2 [bb4,g5]@6 c5@2 [db5,ab5]@2 [c5,ab5]@4 [ab4,ab5]@4 [g4,g5]@4 [f4,f5]@2 f4@2 f5@4 [bb4,db5]@2 [bb4,db5]@2 [bb4,db5]@4 [c5,eb5]@2 ab4@2 c5@4 g4@2 [bb4,eb5]@3 ~]/4", // Fm Eb Db5 Fm Ab G F Bbm …
  R: "[f4,c5] g4 f4 [g4,c5]@2 [bb4,db5]!3", S: "[ab4,c5]@2 eb4@2 bb4@2 c5@2 [ab4,eb5]@2 ab5@2 [ab4,eb5]@3 ab5",
  T: "[g4,g5] f5 [g4,c5] [g4,c5]@2 [db5,bb5]!3", U: "[c5,ab5] db5 [c5,ab5]!3 [db5,bb5]!3",
  V: "[[c5,ab5]@2 g5@4 f5@2 ~@2 [db6,bb6]@2 [db6,bb6]@2 [db6,bb6]@4 [c6,ab6]@2 db6@2 [c6,ab6]@4 [bb5,g6]@2 [bb5,g6]@3 ~]/2", // Fm Gb Fm Eb
  W: "[[g5,c6]@2 ab5@2 [g5,c6]@2 [f5,ab5,c6]@4 [bb5,db6]@2 [bb5,db6]@2 eb5@4 c6@2 eb5@2 bb5@4 db5@2 bb5@2 c5@4 ab5@2 c5@2 ab5@4 [db5,bb5]@2 [db5,bb5]@2 [db5,bb5]@4 [db5,ab5]@2 c5@2 [db5,ab5]@4 ab5@2 ab5@2 g5@4 f5@2 c5@2 f5@4 [ab5,c6]@2 [ab5,c6]@2 [g5,bb5,c6]@4 [eb5,ab5,eb6]@2 [eb5,eb6]@2 [ab5,eb6]@4 [ab5,eb6]@2 [ab5,eb6]@3 ~]/6", // C5 Fm Bbm Gb Db5 Ab C7 Ab5 …
  X: "[[g5,c6] f5 [g5,c6] f5@2 [ab5,c6]!2 [g5,bb5,c6]@2 [f5,ab5,c6] [eb5,eb6] [eb5,ab5]@2 eb5 [db5,ab5] db5]/2", // C5 Ab C7 Fm Eb Ab5 Db5
  Y: "[c5,g5] c5 [f5,c6] c5 ab5 eb5 bb5 eb5", Z: "bb5@2 c6@2 eb5@2 ab5@2 eb6@2 [g5,eb6] ab5 [ab5,eb6]@3 ~",
  AA: "[[f5,c6]@31 ~]/2", // F5
})).s("gm_piano").gain(0.72)

// drums · kick
const kick = s("bd").struct("<~@2 [x!2]!67 ~@2>").gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@5 [~ x ~ x]!64 ~@2>").gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~ [x!2 ~@14] ~@69>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~ [~@2 x!6] [x!8]!67 ~@2>").gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@2 x ~ x ~@7 x ~ x!2] ~@70>").gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<[x ~@7 x ~ x ~@2 x ~@2] ~@70>").gain(0.72)

stack(piano, kick, snare, low_tom, hihat, mid_tom, high_tom)

More by Tori Amos