Strudelify

She's Got Issues

The Offspring

KeyE minorTempo125 bpm
0:00/0:00
// She's Got Issues — The Offspring
// 125 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 115 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): Dexter.
setcpm(125/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · overdriven guitar · "Noodles"
const overdriven_guitar = note(`<
  A B C D E F C D E F G ~@6 H I J K L I J K M N O P M N O P M G ~@2 H I J K M N O P M N O P M Q R S T Q R A B C D E F C
  D E F G ~@6 H I J K L I J K M N O P M N O P M N O P M N O P M Q R S T Q R S T Q R S T Q R A B U
>`.pickRestart({
  A: "[b2,f#3] b2!7", B: "[b2,f#3]!4 [b2,f#3,b3]!4", C: "[e3,b3,e4]!2 ~@3 [e3,b3,e4]!3",
  D: "[b2,f#3,b3]!2 ~@3 [b2,f#3,b3]!3", E: "[d3,a3,d4]!2 ~@3 [d3,a3,d4]!3", F: "[a2,e3,a3]!2 ~@3 [a2,e3,a3]!3",
  G: "[e3,b3,e4]!2 ~@6", H: "~@5 [a2,e3,a3] [e4,e5]!2", I: "[e3,b3,e4]!2 ~@3 [e3,b3,e4] [e4,b5]!2",
  J: "[b2,f#3,b3]!2 ~@3 [b2,f#3,b3] [b3,f#5]!2", K: "[d3,a3,d4]!2 ~@3 [d3,a3,d4] a4!2",
  L: "[a2,e3,a3]!2 ~@3 [a2,e3,a3] [e4,e5]!2", M: "[a2,e3,a3]!8", N: "[e3,b3,e4]!8", O: "[b2,f#3,b3]!8",
  P: "[d3,a3,d4]!8", Q: "[c3,g3,c4]", R: "[g2,d3,g3]", S: "[a2,e3,a3]", T: "[e3,b3,e4]", U: "[e2,e3,b3,e4]",
})).s("gm_overdriven_guitar").gain(0.29)

// chords · distortion guitar · "Dexter"
const distortion_guitar = note("<~@6 A B C D ~@28 A B C E ~@16 A B C D A B C D ~@24 F G H E F G H E ~@17>".pickRestart({
  A: "~@2 b3 e4 g#4 ~@3", B: "~@2 f#3 b3 d#4 ~@3", C: "~@2 a3 d4 f#4 ~@3", D: "~@2 e3 a3 c#4 ~@3", E: "~@4 c#4 ~@3",
  F: "~@4 g#4 ~@3", G: "~@4 d#4 ~@3", H: "~@4 f#4 ~@3",
})).s("gm_distortion_guitar").gain(0.42)

// bass · electric bass pick · "Greg"
const bass = note(`<
  A@2 B C D E B C D E B C D E B C D E B C D E B C D F G A H F G A H F B C D E B C D F G A H F G A H F I J K L I J A@2 B
  C D E B C D E B C D E B C D E B C D E B C D F G A H F G A H F G A H F G A H F I J K L I J K L I J K L I J A@2 M
>`.pickRestart({
  A: "b1!8", B: "e2!2 ~@3 e2!3", C: "b1!2 ~@3 b1!3", D: "d2!2 ~@3 d2!3", E: "a1!2 ~@3 a1!3", F: "a1!8", G: "e2!8",
  H: "d2!8", I: "c2@3 c2!5", J: "g1@3 g1!5", K: "a1@3 a1!5", L: "e2@3 e2!5", M: "[e1,e2]",
})).s("gm_electric_bass_pick").gain(0.29)

// drums · kick
const kick = s("bd").struct("<A@2 B@23 A B@15 A B@14 A@2 B@23 A B@30 A@2 C>".pickRestart({
  A: "x!8", B: "x!2 ~@3 x ~ x", C: "x",
})).gain(0.48)

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

// drums · low tom
const low_tom = s("lt").struct("<A B ~@54 A B ~@54 A B ~>".pickRestart({
  A: "~ x!7", B: "~ x!3 ~@4",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A B@7 A B@7 A B@6 ~ A@9 B@6 ~ A@9 B@5 ~@2 A B@7 A B@7 A B@6 ~ A@17 B@3 A B@3 A B@5 ~@3
>`.pickRestart({
  A: "~ x!3", B: "x!4",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  A B A ~@7 A ~@7 A ~@7 A@9 ~@7 A@9 ~@5 A B A ~@7 A ~@7 A ~@7 A@17 ~@3 A ~@3 A ~@5 A B A
>`.pickRestart({
  A: "x", B: "x!2",
})).gain(0.48)

stack(overdriven_guitar, distortion_guitar, bass, kick, snare, low_tom, open_hat, crash)

More by The Offspring