Strudelify

What the Hell Have I

Alice in Chains

KeyA♭ majorTempo98 bpm
0:00/0:00
// What the Hell Have I — Alice in Chains
// 98 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 98 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): Cantrell Overdr..
setcpm(98/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 · oboe · "Staley&Cantrell"
const oboe = note(`<
  ~@8 A@3 ~ A@3 ~ B@3 C A@3 C D E@2 ~ F G@3 H ~@7 A@3 ~ I@3 ~ B@3 J I@3 C D E@2 ~ F G@3 H ~@7 D K@3 F G@3 L M@3 F N@3 H
  ~@2 O A@3 P@2 ~
>`.pickRestart({
  A: "[~@14 [ab3,db4]@4 [gb3,c4]@3 ~ [db3,gb3]@4 [eb3,gb3]@3 ~ [eb3,ab3]@16 ~@2]/3", // Db5 Gbdim Gb5 Ebm Ab5
  B: "[~@6 c4@4 ab3@3 ~ eb3@5 ~ ab3@2 gb3@6 ab3@2 [eb3,ab3]@13 ~@5]/3", C: "~@4 [eb3,ab3] eb3 [eb3,ab3]@10",
  D: "~@6 [eb4,g4]!2", E: "[[eb4,f4]@3 ~ [db4,f4]@2 [db4,f4]@4 [bb3,eb4]@3 ~ [eb4,g4]@4 [bb3,eb4]@7 ~@7]/2",
  F: "~@5 [eb4,g4]!3", // Eb
  G: "[[eb4,f4]@3 ~ [db4,f4]@2 [db4,f4]@4 [bb3,eb4]@3 ~ [eb4,g4]@4 [bb3,eb4]@3 ~@5 [g3,eb4]@2 [g3,eb4]@2 f4@4 eb4@4 db4@8 [eb3,bb3]@2, ~@15 ab3@8 ~]/3", // Ebsus2 Db Eb5 Eb Eb5 Cm Eb5
  H: "[ab3,eb4] ~@3", I: "[~@12 [ab3,db4]@2 [ab3,db4]@4 [gb3,c4]@3 ~ [db3,gb3]@4 [eb3,gb3]@3 ~ [eb3,ab3]@16 ~@2]/3",
  J: "~@2 eb3 [eb3,ab3]@5, ~@4 ab3 ~@11", // Ab5
  K: "[[eb4,f4]@3 ~ [db4,f4]@2 [db4,f4]@4 [bb3,eb4]@3 ~ [eb4,g4]@4 [bb3,eb4]@12 db4@8 eb4@10]/3", // Ebsus2 Db Eb5 Eb Eb5
  L: "[eb4,g4]@3 ~@9 [eb4,g4]@2 [eb4,g4]@2", // Eb
  M: "[[eb4,f4]@3 ~ [db4,f4]@2 [db4,f4]@4 [bb3,eb4]@3 ~ [eb4,g4]@4 [bb3,eb4]@12 db4@8 bb3@10]/3", // Ebsus2 Db Eb5 Eb Eb5
  N: "[[eb4,f4]@3 ~ [db4,f4]@2 [db4,f4]@4 [bb3,eb4]@3 ~ [eb4,g4]@4 [bb3,eb4]@3 ~@5 [g3,eb4]@2 [g3,eb4]@2 ab4@8 gb4@8 [eb3,bb3]@2, ~@15 ab3@8 ~]/3", // Ebsus2 Db Eb5 Eb Eb5 Cm Eb5
  O: "~ eb3!2 eb3@5", P: "[~@2 eb3@3 ~ eb3@13 ~@13]/2",
})).s("gm_oboe").gain(0.64)

// other · distortion guitar · "Cantrell Dist."
const distortion_guitar = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@2 D@2 C@2 D@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@2
  D@2 C@2 D@2 A@2 B@2 A@2 B@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 A@2 B@2 A@2 E@3 ~
>`.pickRestart({
  A: "[ab3 a3 ab3@2 db3@2 c3@2 gb2@2 ab2@2 a2@2 ab2@4 eb3 e3 eb3@2 e2@4 b2@2 e3@2 ab3@2]/2",
  B: "[ab3 a3 ab3@2 db3@2 c3@2 gb2@2 ab2@2 a2@2 ab2@4 eb3 e3 eb3@2 [ab2,db3,ab3,db4]@10]/2", // Db5
  C: "[[eb2,bb2,eb3]@3 ~ [e2,b2,e3]@2 [eb2,bb2,eb3]@4 c3@2 bb2@2 [ab2,db3,ab3]@4 [ab2,db3,ab3]@2 [ab2,eb3,ab3]@11 ~]/2", // Eb5 E5 Eb5 Db5 Ab5
  D: "[[eb2,bb2,eb3]@2 [e2,b2,e3]@2 [eb2,bb2,eb3]@3 ~ c3@2 bb2@2 ab2@2 [ab2,db3,ab3]@4 [ab2,db3,ab3]@2 [ab2,eb3,ab3]@11 ~]/2", // Eb5 E5 Eb5 Db5 Ab5
  E: "[ab3 a3 ab3@2 db3@2 c3@2 gb2@2 ab2@2 a2@2 ab2@4 eb3 e3 eb3@2 [e2,b2,e3,ab3]@21 ~@5]/3", // E
})).s("gm_distortion_guitar").gain(0.42)

// chords · overdriven guitar · "Cantrell Overdr."
const overdriven_guitar = note(`<
  ~@8 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@10 B ~@2 C D@2 ~ E A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@10 F G H I J ~@29
>`.pickRestart({
  A: "[~@14 db4@4 c4@3 ~ gb3@4 eb3@3 ~@3]/2", B: "~@6 db3@6 ab2@3 ~", C: "~@4 ab2@3 ~@9", D: "[~@14 f2@5 ~@13]/2",
  E: "~@2 gb3@3 ~@3", F: "~@3 ab4 eb4 ~ gb3 db4", G: "gb3 ~ b3 ~ db3 ab3 eb3 ~", H: "eb3 b2 ab2 ~@2 e2 b2 db3",
  I: "db3!3 e3@5", J: "eb3@3 ~@13",
})).s("gm_overdriven_guitar").gain(0.48)

// bass · electric bass pick · "Inez"
const bass = note(`<
  ~@7 A B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 D@2 E@2 D@2 E@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 D@2 E@2 D@2 E@2
  B@2 C@2 B@2 C@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 B@2 C@2 B@2 F G@2 ~
>`.pickRestart({
  A: "~@3 db3@5", B: "[ab3 a3 ab3@2 db3@2 c3@2 gb2@2 ab2@2 a2@2 ab2@4 eb3 e3 eb3@2 e2@4 b2@2 e3@2 ab3@2]/2",
  C: "[ab3 a3 ab3@2 db3@2 c3@2 gb2@2 ab2@2 a2@2 ab2@4 eb3 e3 eb3@2 db3@8 ab2@2]/2",
  D: "[eb2@3 ~ e2@2 eb2@6 ~@2 ab2@4 ab2@2 ab2@11 ~]/2", E: "[eb2@2 e2@2 eb2@3 ~@5 ab2@6 ab2@2 ab2@11 ~]/2",
  F: "ab3 a3 ab3@2 db3@2 c3@2 gb2@2 ab2@2 a2@2 ab2@2", G: "[~@2 b2 e3 b2@2 e2@6 ~@2 e2@15 ~@3]/2",
})).s("gm_electric_bass_pick").gain(0.48)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@30 A ~@24 B ~@6 A ~@8 C ~@6 A ~@7 A ~@7 D E ~@2>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@4 x!2 ~@10", C: "~@11 x ~@4", D: "~@7 x", E: "x",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@8 ~@16 A@16 ~@16 A@6 B ~@17 A@6 C ~@3>".pickRestart({
  A: "x!2 ~@2 x ~ x!4 ~@2 x ~ x!2", B: "x!2 ~@2 x ~ x!4 ~@2 x ~ x ~", C: "x!2 ~@2 x ~ x ~@9",
})).gain(0.42)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@11 A ~@3 A ~@3 A ~@3 B ~@7 C ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 D ~@7 C ~@3 A ~@3 E ~@7 C ~@7 C ~@3 A ~@3 F ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@4 x!2 ~@4 x ~@3 x ~", C: "~@2 x!2 ~@12", D: "~@2 x!2 ~@6 x ~@5", E: "~@4 x!2 ~@4 x ~@5",
  F: "~@2 x!4 ~@10",
})).gain(0.56)

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

// drums · high tom
const high_tom = s("ht").struct("<~@31 A ~@23 B ~@7 A ~@7 C ~@7 A ~@7 A ~@10>".pickRestart({
  A: "x!2 ~@14", B: "~@13 x ~@2", C: "~@7 x",
})).gain(0.56)

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

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@8 A@16 ~ B ~ B ~ B ~ B A@24 ~ B ~ B ~ B ~ B A@8 ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B A@6 C ~@3
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@14 x!2", C: "~ x ~@6",
})).gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct("<~ A B C D E F G ~@90>".pickRestart({
  A: "~@15 x", B: "x ~@2 x ~@4", C: "~ x ~@2 x ~@3", D: "x ~@9 x ~@4 x", E: "x ~@5 x ~@5 x ~@2 x", F: "x ~@4 x ~ x",
  G: "~ x ~@6",
})).gain(0.42)

stack(
  oboe, distortion_guitar, overdriven_guitar, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  ride_bell, tambourine
)

More by Alice in Chains