Strudelify
KeyG majorTempo100 bpm
0:00/0:00
// Would — Alice in Chains
// 100 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 95 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · synth bass 2
const bass = note(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B ~@19
>`.pickRestart({
  A: "e1 f#1!4 e1!2 e1@2 f#1 g1@2 g1@2 g1!2", B: "g1@2 e1@2 e1@2 e1 g1@2 e1 e1@2 e1@2 e1!2",
})).s("gm_synth_bass_2").gain(0.26)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~ A B C D@2 E F D@2 G@2 H@2 I@2 H@2 I@2 J K J K J K J K D@2 E F D@2 G@2 H@2 I@2 H@2 I@2 J K J K J K J K J K J K J K J
  K ~@8 J K J K J K J K L M N O L M N O L M N O L M N O P@2 Q
>`.pickRestart({
  A: "~ e3 a3@3 e3 a3 e4", B: "c#4", C: "~ [g4,b4]@7",
  D: "[b3 c#4@5 b3 c#4@3 [f#3,b3]@2 [b3,g4]@20, f#3@3 f#3@2 ~@11]/2", // B5 Em
  E: "b3 c#4@5 b3 c#4@3 [f#3,b3]@2 [b3,g4]@4, f#3@3 f#3@2 ~@3", F: "g4@2 ~@2 f#3 g3 b3 e4, b3 ~@7",
  G: "[b3 c#4@5 b3 c#4@3 [f#3,b3]@2 [b3,g4]@10 ~@4 g2@2 b2@2 e3@2, f#3@3 f#3@2 ~@11]/2", // B5 Em
  H: "[b2@2 c#3@4 b2 c#3@3 [f#2,b2]@2 [g2,b2]@20, f#2@3 f#2@2 ~@11]/2", // B5 G
  I: "[b2@2 c#3@4 b2 c#3@3 [f#2,b2]@2 [g2,b2]@14 g2@2 b2@2 e3@2, f#2@3 f#2@2 ~@11]/2", // B5 G
  J: "[b2,f#3,b3]@6 [b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3] [g2,d3,g3,d4,g4]@2 [g2,d3,g3,d4,g4]@4", // B5 G5
  K: "[g2,d3,g3,d4,g4]@2 [g2,d3,g3,d4,g4]!5 [g2,d3,g3,d4,g4]@2 [g2,d3,g3,d4,g4] [g2,d3,g3,d4,g4]@2 [g2,d3,g3,d4,g4]@2 [g2,d3,g3,d4,g4]@2", // G5
  L: "[a2,d3,a3,d4,f#4]@3 [a2,d3,a3,d4,f#4] [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!2 [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!2 [a2,d3,a3,d4,f#4]@2", // D
  M: "[g#2,d#3]@2 [g#2,d#3]@2 [g#2,d#3]@2 [g#2,d#3]!4 [g#2,d#3]@2 [g#2,d#3]@2 [g#2,d#3]!2", // G#5
  N: "[g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]!4 [g2,d3]@2 [g2,d3]!4", // G5
  O: "[e2,b2]@2 [e2,c#3]@2 [e2,b2]@2 [e2,c#3] [e2,d3]@2 a2 c#3 a2 b2 a2 c#3 a2", // E5 C#m E5 C#m E7
  P: "[f2,f3,a3,b3,f4]@3 ~ [f2,f3,a3,b3,f4]@3 ~", Q: "[f3,a3,g4] ~, f2@3 ~@5",
})).s("gm_overdriven_guitar").gain(0.26)

// other · distortion guitar
const distortion_guitar = note("<~@60 A@2 B@4 C D@2 ~@26>".pickRestart({
  A: "[[b3,c#4]!2 b3 [b3,c#4]!5 c#4 [b3,c#4]!3 f#4@14 c#4@4 a4@2]/2", // Bsus2
  B: "[b3@2 c#4!2 c#4@6 b3@16 a3@18 f#4 a3 ~@12 f#4@3 e4@3, ~@13 a4@3 ~@7 f#3@7 ~@2]/4", C: "c#3@5 c5 b2!2",
  D: "[b2 [e4,a4]@7]/2", // A5
})).s("gm_distortion_guitar").gain(0.35)

// bass · electric bass pick
const bass_2 = note("<~@76 A B C D A B C D A B C D A B C D E@2 F>".pickRestart({
  A: "d2@3 d2 d2@2 d2!2 d2@2 d2@2 d2!2 d2@2", B: "g#1@2 g#1@2 g#1@2 g#1!4 g#1@2 g#1@2 g#1!2",
  C: "g1@2 g1@2 g1@2 g1!4 g1@2 g1!4", D: "e1!8", E: "f#1@3 ~ f#1@3 ~", F: "f#1 ~",
})).s("gm_electric_bass_pick").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A@5 B C A@2 D E A@4 B A@2 F A@10 F A B F B G A@5 F A@2 H I A F A@4 J A@15 K A L ~ A@3 ~ M A@2 ~ N O P ~@3 Q
>`.pickRestart({
  A: "x ~ x ~@3 x!2 ~ x!2 ~@3 x ~", B: "x ~ x ~@3 x!2 ~ x!2 ~@5", C: "x ~ x ~@3 x ~@2 x!2 ~@3 x ~",
  D: "~@2 x ~@3 x!2 ~ x!2 ~@4 x", E: "x ~ x ~@3 x!4 ~@4 x ~", F: "x ~ x ~@4 x ~ x!2 ~@3 x ~",
  G: "x ~ x ~@2 x ~ x!3 ~@4 x ~", H: "x ~ x ~@3 x!2 ~ x!2 ~@2 x ~ x", I: "~ x ~@5 x ~ x!2 ~@3 x ~",
  J: "x ~ x ~@3 x ~ x ~ x!2 ~@2 x ~", K: "x ~@6 x ~ x!2 ~@5", L: "x ~ x ~@3 x ~ x!3 ~@3 x ~",
  M: "~ x!2 ~@3 x!2 ~ x!2 ~@3 x ~", N: "~@2 x ~@3 x!2 ~ x!2 ~ x ~ x ~", O: "x ~ x ~@3 x!2 ~ x!2 ~@4 x",
  P: "~ x ~ x ~@2 x!2 ~ x!2 ~@3 x ~", Q: "~@5 x ~@2",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@9 A@67 B A@2 ~ A@3 ~ C A@2 ~ D A@2 ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@8 x ~@2", C: "x!2 ~ x", D: "x!3 ~@5",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@79 A ~@3 A ~@3 B ~@3 B ~@2 C>".pickRestart({
  A: "~@13 x ~@2", B: "~@11 x!4 ~", C: "~@8 x!2 ~@6",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<~@79 A ~@3 A ~@3 A ~@3 B ~@3>".pickRestart({
  A: "~@6 x!7 ~@3", B: "~@6 x!6 ~@4",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@79 A ~@3 A ~@3 A ~@3 A ~@3>".pickRestart({
  A: "~ x!2 ~ x!3 ~@9",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  ~@20 A B C@2 D C@3 ~@16 E C@18 F C@3 G C@8 H E C ~ A C@2 ~ A C@2 ~ A C@2 I J K L
>`.pickRestart({
  A: "x ~@2 x", B: "~@4 x ~@2 x ~ x!2 ~@5", C: "~ x ~ x", D: "~@4 x ~@2 x ~@4 x ~@3", E: "~@3 x", F: "~@2 x ~@3 x!2",
  G: "~@4 x ~ x!2 ~ x!6 ~", H: "~@2 x ~ x!4", I: "~@7 x", J: "x!2", K: "x!2 ~@6 x ~@6 x", L: "x",
})).gain(0.41)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@3 A@17 B C D E F@4 A@16 B F@4 G D E F@8 H F@3 D E F I F@8 I B F ~ B F@2 ~ J F@2 ~ K F@2 ~@2 L M
>`.pickRestart({
  A: "x!16", B: "~@4 x ~@2 x ~ x!2 ~@5", C: "x!2 ~@4 x ~", D: "x ~ x ~@4 x ~ x!2 ~@4 x", E: "~@2 x ~@4 x ~ x!2 ~@5",
  F: "x ~ x ~@4 x ~ x!2 ~@5", G: "x ~ x ~ x ~@2 x ~ x!2 ~@5", H: "x ~@6 x ~ x!2 ~@5", I: "x!2 ~@6",
  J: "~@4 x ~@2 x ~@2 x ~@5", K: "~@4 x ~@2 x ~ x ~@6", L: "x!2", M: "x",
})).gain(0.26)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@2 [~@3 x] ~@92>").gain(3.01)

stack(
  bass, overdriven_guitar, distortion_guitar, bass_2, kick, snare, low_tom, mid_tom, high_tom, crash, ride_bell,
  vibraslap
)

More by Alice in Chains