Strudelify
KeyE majorTempo120 bpm
0:00/0:00
// Stop — Jane's Addiction
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 113 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 · "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 · electric bass pick · "ERIC AVERY"
const bass = note(`<
  ~@4 A B A C A B A D E@11 F A B A D E@11 F@2 ~@3 G@2 H@2 I@2 J K L M N O P Q R S T U V W X Y Z AA X@2 V W X Y Z AA X@2
  V W X Y AB AC A E@8 AD AE AF AG AH ~@6 AI AJ AK AL A B A F AM
>`.pickRestart({
  A: "e2@4 e2@3 b1 d2@2 c#2@2 a1@2 b1@2", B: "e2@4 e2@3 b1 d2@2 d2@2 c#2@4", C: "e1", D: "a1",
  E: "e1@4 ~ e1 ~@2 d2!2 g1 ~ a1 b1 d2 e2", F: "e1 ~@3", G: "[[e1,e2]@4 [e1,e2]@3 [e1,e2]@4 ~@2 g2@2 ~]/2",
  H: "[e1,e2]/2", I: "[~@13 g2@2 ~, [e1,e2]]/2", J: "[e1,e2] ~ [e1,e2]@7 ~@7",
  K: "[e1,e2] ~ [e1,e2]@5 ~@3 g2@2 f#2@2 g2@2", L: "[e1,e2]@5 ~@3", M: "~@5 e2!3", N: "g2@4 g2 g2@3",
  O: "g2@4 ~ g2 e2 d2", P: "d2@2 e2 ~ e1@2 e2@2 e2@2 e2@2 e2@2 e2@2", Q: "e1@3 ~ e2@4 e1@4 e2@4",
  R: "g2@2 ~@2 g2 ~ g2 ~", S: "g2@4 g2@2 e2 d2", T: "d2 ~@2 e2 ~ e2@3, ~@2 e1 ~", U: "~ e2@3 e1@2 e2!2, e1 ~@3",
  V: "g2@4 ~@6 g2 ~ g2 ~ g2@2", W: "g2 ~ g2@6 ~@4 g2 e2 ~ d2", X: "d2@2 e2@2 e1@3 ~ d2@2 e2@2 e1@3 ~",
  Y: "d2@2 e2@2 e1@3 ~ d2@2 e2@2 e1@2 e2@2", Z: "g2@2 ~@2 g2!2 g2@2", AA: "g2 g2@3 g2 e2 d2 ~", AB: "g2",
  AC: "~@4 g2 ~@3 g2 ~@7", AD: "~ e1@4 ~ e1 ~@2 d2!2 g1 ~ a1 b1 d2", AE: "e1@7 e1 f#1@2 c#2 c#2@2 ~ f#1@2, e2 ~@15",
  AF: "g1@4 g#1@2 ~ g#1", AG: "a1 a#1", AH: "c2 c#2 d2 e2", AI: "[e2,b2,e3]@3 [b2,d#3]", AJ: "[d3,f#3]@3 [d3,f#3]",
  AK: "[e3,g#3]@3 [e3,g#3]", AL: "[d4,g4]", AM: "e1 ~@7",
})).s("gm_electric_bass_pick").gain(0.57)

// chords · distortion guitar · "DAVE NAVARRO"
const distortion_guitar = note(`<
  A B C D E F E G H I J K L M N O P@7 Q H I J K L M N O P@7 Q C B C D R@2 S@2 R@2 S@2 T@2 U@2 V@2 W@2 X@2 Y@2 T@2 U@2
  V@2 W@2 X@2 Y@2 T@2 U@2 V@2 Z@2 E P@8 AA AB AC AD AE ~@10 E F E AF AG
>`.pickRestart({
  A: "~@2 e4 [e4,g#4,d5] ~ e4 [e4,g#4,d5] ~ e4 [e4,g#4,d5] ~ e3 [d#4,f#4,c#5] [e4,g#4,d5]!3", // E7 D#m7 E7
  B: "[e4,g#4,d5] ~ e4 [e4,g#4,d5] ~ e4 [e4,g#4,d5] ~ e4!2 ~ [f#4,a4,d#5]!5", // E7 D#dim
  C: "[e4,g#4,d5] ~ e4 [e4,g#4,d5] ~ e4 [e4,g#4,d5] ~ e4 [e4,g#4,d5] ~ e3 [d#4,f#4,c#5] [e4,g#4,d5]!3", // E7 D#m7 E7
  D: "[e4,g#4,d5] ~ e4 [e4,g#4,d5] ~ e4 [e4,g#4,d5] ~ e4!2 ~ [f#4,a4,d#5] [f#4,a4,d#5,a5]!4", // E7 D#dim
  E: "[e4,b4,e5]@4 [e4,b4,e5]@3 [b3,f#4] [d4,a4] ~ [c#4,a4] ~ [a3,e4] ~ [b3,f#4] ~", // E5 B5 D5 F#m A5 B5
  F: "[e4,b4,e5]@4 [e4,b4,e5]@3 [b3,f#4] [d4,a4] ~ [d4,a4] ~ [c#4,a4]@4", G: "[e3,b3,e4]",
  H: "[e4,b4,e5,b5,d6]@4 [e4,b4,e5,b5,d6]@3 [b3,f#4,e6] [d4,a4,a6,c#7] [a6,c#7] [c#4,a4] [a6,c#7] [a3,e4,g6,b6] [g#6,b6] [b3,f#4] ~", // E7 Bsus4 Dmaj7 A F#m A Em G#m …
  I: "[e4,b4,e5,b5,d6]@4 [e4,b4,e5,b5,d6]@3 [b3,f#4,e6] [d4,a4,a6,c#7] [a6,c#7] [d4,a4] [a6,c#7] b6 [g#6,b6] ~@2, ~@3 [c#4,a4], ~@6 g6 ~", // E7 Bsus4 Dmaj7 A D5 A G#m F#m
  J: "[e4,b4,e5,b5,d6]@4 [e4,b4,e5,b5,d6]@3 [b3,f#4] [d4,a4,a6,c#7] [g6,b6] [c#4,a4,a6,c#7] [g6,b6] [a3,e4,a6,c#7] [a6,c#7] [b3,f#4,a#6,d7] [a6,c#7]", // E7 B5 Dmaj7 G F#m G A Bm …
  K: "[e6,a6,c#7] [e6,a6]@2 ~, [a3,e4,a4], [g6,b6] ~@15", // A A5 G
  L: "~ e3!2 [e3,b3,e4,g4,a4] [b5,e6] [e3,b5,e6] [e3,b3,e4,e6] ~ [g3,d6,e6] g3 [g3,d4,g4,e6] ~ [a3,e4,a4] [a3,a4,c#5] [a3,e4,a4,a#4,d5] [a4,c#5], [e3,a4]@2 ~@5 f#6@2 ~@7", // Em E5 Em7 A5 A Asus4 A A5
  M: "[e3,a4] [e3,a#4] [e3,a4] [e3,b3,e4,g4] e4 e3 [e3,b3,e4,d5,b5] ~ [g3,b4] [g3,d5] [g3,d4,g4,b5] ~ [a3,d5] [a3,e5] [a3,e4,a4,c#6] ~, ~ [b4,e5] ~@2", // A5 Edim A5 Em E7 G G5 G …
  N: "[e3,a4] [e3,a#4] [e3,a4] [e3,b3,e4,g4] ~ e3 [e3,b3,e4,b4,e5] ~ [g3,d5] [g3,e5] [g3,d4,g4,c#6] ~ a3!2 [a3,e4,a4,b5] ~, ~@2 [e4,b4,e5] ~@5", // A5 Edim A5 Em E5 G5 C G …
  O: "e3!2 ~ [e3,b3,e4] ~ e3 [e3,b3,e4,a#5] ~ [g3,g6] g3 [g3,d4,g4,a5,f#6] ~@2 a3 [a3,e4,a4,g#5,e6] ~, g#6 [e3,b5] g#6 ~@3 [a3,f5] ~", // E5 E G D Amaj7 E5 Dm
  P: "[e3,b3,e4] e3!2 [e3,b3,e4,b4,e5] ~ [e3,e4,b4,e5] [e3,b3,e4,b4,e5] ~ g3!2 [g3,d4,g4] ~ a3!2 [a3,e4,a4] ~", // E5 G5 A5
  Q: "[e3,b3,e4] ~@3", R: "[~@12 d5@9 ~@3 [f4,a4,d#5]@2 [f4,a4,d#5]@5 ~, e3, ~@8 e4@11 ~@13, ~@5 g#4@5 ~@6]/2",
  S: "[~@9 g4 ~@2 d5@9 ~@3 [e4,g#4,d5]@2 [f4,a4,d#5]@5 ~, e3, ~@8 e4@11 ~@13, ~@5 g#4@5 ~@6]/2", // E7 F7
  T: "[~@4 [b4,e5]@9 ~ b4 e5, e3]/2", U: "[d4@8 ~@7 d5, [g3,g4], g5@11 d5@3 e5@2, d5@5 f#5 g5@2, b3 ~@3 d4@4]/2",
  V: "[~@12 e5@4 b4@4 ~@4 b4@7 ~, e3, ~@20 e5@7 ~@5]/2", W: "[g3,b3,d4,g4,d5,g5]/2", X: "[~@2 [b4,e5]@4 e5 b4, e3]/2",
  Y: "[[d5,g5]@16 f#5@4 f#5@2 f#5 ~@3 d5@4 ~@2, [g3,b3,d4,g4], ~@6 e5 ~]/2", // G5 G
  Z: "[[g3,b3,d4]@20 [g3,b3,d4]@4 [g3,b3,d4,g4,d5,g5] ~@7, [g4,d5,g5]@3 ~]/2", // G G5
  AA: "~ [e3,b3,e4] e3!2 [e3,b3,e4,b4,e5] ~ [e3,e4,b4,e5] [e3,b3,e4,b4,e5] ~ g3!2 [g3,d4,g4] ~ a3!2 [a3,e4,a4]", // E5 G5 A5
  AB: "e3@2 ~ [b3,e4] f#3 ~ [f#3,c#4] ~, ~ e3 ~@2", AC: "[g3,d4] g#3", AD: "a3 a#3", AE: "c4 c#4 d4 [e3,e4]",
  AF: "[e3,b3] ~ [g5,a5]@6", AG: "[e3,b3] ~@7",
})).s("gm_distortion_guitar").gain(0.4)

// other · church organ · "Wah tone"
const church_organ = note("<~@85 A@3 B C D E F G ~@19>".pickRestart({
  A: "[[b6,d7]!14 [g4,b6,d7] d6@5 a4 ~ d6@5 ~ d4 g4 ~@2 b5 d6 b5 g5 b5 [b5,d6] a5 [a5,b5,d6] b5 ~ d6 [g#5,b5] [f#5,a5] [b5,c6] [d6,f#6] g6, ~@31 d6@2 ~@15]/3", // Bm G Bm Bm7 G#m F#m Cmaj7 D
  B: "b6 [c#6,b6] c#6 [c#6,b6] f#5 [g5,a5] [a5,b5] [g5,a5] [f#5,g5] [g5,a5] b5 [g5,a5] b5 [f#5,g5] g5 [a5,b5]", // C#7 Gsus2 Asus2 Gsus2 Gmaj7 Gsus2 Gmaj7 Asus2
  C: "g5 [g5,a5] f#5 [e5,f#5] d5 e5 d5 e5@7 ~@2", D: "e5@2 e5@2 e5@2 e5@3 ~ e5@2 e5@2 e5@2",
  E: "~@2 b4 e5 [b4,e5]@2 [b4,e5]@2 b4!2 e5 [b4,e5]@2 [b4,e5]@2 [b4,e5], ~@4 e5 ~@3", F: "d#5 e5", G: "e5 ~",
})).s("gm_church_organ").gain(0.48)

// chords · overdriven guitar · "Fills/solo"
const overdriven_guitar = note(`<
  ~@52 A@2 B C D@2 ~@2 E F G H I@2 J@2 ~@17 K@3 L M N O P Q R S T U V ~@14
>`.pickRestart({
  A: "[~@4 [e5,g#5]@3 ~ [e5,g#5]@2 [e5,g#5]@2 [e4,e5]@2 [e4,e5]@2 [f#4,f#5]@2 [f#4,f#5]@2 [f#4,f#5]@2 [g#4,g#5]@2 [g#4,g#5]@3 ~ [a4,a5]@2 [a4,a5]@2, e3]/2", // E F# G# A
  B: "[a4,a5]@3 ~ [g4,g5]@2 [f#4,f#5]@2 [g4,g5]@2 [f#4,f#5]@2 [e4,e5]@2 [d4,d5]@2", // A G F# G F# E D
  C: "[d4,d5] [d#4,e5] [e4,e5]@2 [d4,d5] [c#4,c#5] [b3,b4]@2", D: "[~ [b4,e5] ~@2, e3]/2",
  E: "~@2 [e4,e5]@2 [d4,d5]@2 [d4,d5,f#5]!2", F: "[c#4,c#5]@2 [c#4,c#5]!2 [b3,b4]@2 [b3,b4]@2",
  G: "[g3,b3,d4,g4,d5,g5] [d5,e5] [g4,d5,f#5]!2", H: "[g4,d5,f#5] [g4,b4,d5] [d5,f#5] [b4,e5]",
  I: "[~@3 e5, e3, ~ b4]/2", J: "[g3,d4,g4]/2",
  K: "[[b6,d7]!2 [b6,d7,e7] [b6,d7]!11 [g4,b6,d7] d6@5 a4 ~ d6@5 ~ d4 g4 ~@2 b5 d6 b5 g5 b5 [b5,d6] a5 [a5,b5,d6] b5 ~ d6 [g#5,b5] [f#5,a5] [b5,c6] [d6,f#6] g6, ~@31 d6@2 ~@15]/3", // Bm E7 Bm G Bm Bm7 G#m F#m …
  L: "b6 [c#6,b6] c#6 [c#6,b6] f#5 [g5,a5] [a5,b5] [g5,a5] [f#5,g5] [g5,a5] b5 [g5,a5] b5 [f#5,g5] g5 [a5,b5]", // C#7 Gsus2 Asus2 Gsus2 Gmaj7 Gsus2 Gmaj7 Asus2
  M: "g5 [g5,a5] f#5 [e5,f#5] d5 e5 d5 e5@7 ~@2", N: "e5@2 e5@2 e5@2 e5@3 ~ e5@2 e5@2 e5@2",
  O: "~@2 b4 e5 [b4,e5]@2 [b4,e5]@2 ~ b4 e5 [b4,e5]@2 [b4,e5]@2 [b4,e5], ~@4 [b4,e5] ~@3", P: "d#5 e5", Q: "e5 d5",
  R: "[b6,d7]!10 [b6,d7]@2 [c#5,d5,a#5,b5]@2 [d5,b5]@2", // Bm G
  S: "a4 a#4 a4 g4 e4 ~@2 e5 a4 ~ b5@2 ~@2 b5@2, ~@5 [b4,e5]@2 ~@9, ~@6 c#5@2 ~ e5@3 e5@4", // E5
  T: "d#5 ~ [d#5,a#5]!6 [e5,b5]@2 [e5,b5]!6", U: "[e5,c6] [f#5,c#6] [g5,d6] [g#5,f6]", V: "[a5,f#6] ~@7",
})).s("gm_overdriven_guitar").gain(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@4 A@3 ~ A@3 B C@11 ~ D A@2 B C@11 ~@5 E@40 A C@8 F G E H I ~@10 A@3 ~@2>".pickRestart({
  A: "x ~@3 x ~@4 x!2 ~@3 x!2", B: "~@3 x", C: "~@3 x ~@2 x ~@3 x ~@3 x ~", D: "~@3 x ~@5 x!2 ~@3 x!2", E: "~ x",
  F: "~@4 x ~@2 x ~@3 x ~@3 x", G: "~@2 x ~ x ~@5 x ~ x!4", H: "~@4 x ~ x!2 ~@4 x!3 ~", I: "~ x!2 ~",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@16 A@5 B A ~@9 A@7 ~@46 C@8 D ~@17 E ~>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "~ x!7", D: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x", E: "~ x!3",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A@3 ~ A@3 ~@13 B A@2 ~@57 A ~@23 A@3 ~@2>".pickRestart({
  A: "~@3 x!2 ~ x ~", B: "~@2 x!3 ~ x ~",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@7 A ~@3 A ~@11 A ~@3 A ~@11 A@2 ~@3 A ~@3 A ~@45 B C D E ~@15>".pickRestart({
  A: "x", B: "x!4", C: "x!4 ~ x!3", D: "x!5 ~@3", E: "x ~@2 x!2 ~ x ~ x ~@7",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@12 A@4 ~@5 B ~@6 A@4 ~@12 C D@3 C D@34 E ~@29>".pickRestart({
  A: "x!8", B: "~@7 x", C: "~ x!3", D: "x!4", E: "x!3 ~",
})).gain(0.64)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@85 x!8 [~ x ~@14] ~@19>").gain(3.24)

stack(bass, distortion_guitar, church_organ, overdriven_guitar, kick, snare, hihat, mid_tom, crash, ride, cabasa)

More by Jane's Addiction