Strudelify
KeyC majorTempo105 bpm
0:00/0:00
// Wanted — The Cranberries
// 105 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 57 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/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 · pad poly
const pad_poly = note(`<
  ~@4 A B C@2 D E F G H I J K H I J L A B M@2 D E F G H I J K H I J N O ~@3 P Q P Q R S@3 T U T U ~@5
>`.pickRestart({
  A: "[f4,a4,d5] c5@2 [f4,a4,d5]@2 e5 [a#4,d5,f5]@4 e5@2 a4@2 a4@2", B: "a4@2 a4 a4@2 c5@2 ~ [e4,g4]@6 ~ c5",
  C: "[[f4,a4,d5] c5@2 [f4,a4,d5]@2 e5@2 [a#4,d5,f5]@2 e5@2 [f4,a#4,d5]@2 a4!2 a4@2 a4 a4@2 c5@2 d5@4 c5@5 ~, ~@11 [e4,g4]@4 ~]/2", // Dm A# Em
  D: "[f4,a4,d5] c5@2 [f4,a4,d5]@2 e5@2 [a#4,d5,f5]@2 e5@2 ~ d5@2 a4@2", E: "a4@2 g4 a4@2 c5 [e4,g4]@8 ~ c5",
  F: "[f4,a4,d5] c5@2 [f4,a4,d5]@2 e5@2 [a#4,d5,f5]@2 e5@2 [f4,a#4,d5]@2 a4 a4@2", // Dm A#
  G: "a4!2 a4@2 [a4,c5]@2 d5@2 [e4,g4,c5]@6 ~@2", H: "[f4,a4,d5]@4 e5@2 [a#4,d5,f5]@9 c5",
  I: "f5 f5@2 f5 f5@2 g5 [g4,c5,f5]@2 [g4,c5,e5]@2 ~ [g4,c5,e5]@3 ~, [a4,c5]@3 ~@5", // Csus4 C Am
  J: "[f4,a4,d5]@3 ~ e5@2 [a#4,d5,f5]@7 ~ a4@2", K: "a4 g4 a4@2 c5@2 [e4,g4]@10", L: "a4 g4 a4@2 c5@2 [e4,g4]@8 ~ a4",
  M: "[[f4,a4,d5] c5@2 [f4,a4,d5]@2 e5@2 [a#4,d5,f5]@2 e5@2 [f4,a#4,d5]@2 a4!2 a4@2 a4 a4@2 c5@2 d5@4 c5@5 a4, ~@11 [e4,g4]@4 ~]/2", // Dm A# Em
  N: "a4 g4 a4@2 c5@2 [e4,g4]@4 f4@2 e4@2 f4 e4", O: "d4@3 ~@5", P: "f5 d5 e5 f5 d5@3 ~, [f4,a4]@5 ~ [f4,a#4]@8 ~@2",
  Q: "f5 d5 e5 f5 d5@3 ~, [a4,c5]@5 ~ [g4,c5]@8 ~@2", R: "[d5,f5]@3 [d5,f5]@5, a5",
  S: "[[f5,a5]@3 ~ c6 a5 g5 ~ [d5,f5]@3 g5@2 a5@2 g5@2 a5@2 [c5,e5,g5]@5, c6@4 ~@3 a5@4 ~@13, ~@3 e5@5 ~@3 [a#4,d5]@4 [c5,f5]@4 ~@5]/3", // F Dm C A# F5
  T: "g5 a5@2 [d5,f5,g5]@2 [d5,f5,a5]@3, [d5,f5]@3 ~@5", U: "g5 a5@2 [c5,e5,g5]@5, [c5,f5]@3 ~@5",
})).s("gm_pad_poly").gain(0.48)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<A@4 B C@24 D@8 E@8 F@8 G H I@2>".pickRestart({
  A: "[[a3,f4]@2 ~ [a3,f4]@3 [a#3,f4]@5 ~ [a#3,f4]@3 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,f4]@5 d4 [e4,f4] f4 e4 ~ [a3,f4]@2 ~ [a3,f4]@3 [a#3,f4]@5 ~ [a#3,f4]@3 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,f4]@5 ~ [g3,c4,f4]@3 ~, d4@26 ~@2 [g3,c4]@3 d4@30 ~@3]/4", // Dm A#5 F Csus4 Fmaj7 Dm A#5 F …
  B: "[a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3", // Dm A#
  C: "[[a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3, ~@15 g3@23 ~@9 g3@23 ~@9 g3@23 ~@9 [g3,c4]@17, ~@15 c4@17 ~@15 c4@17 ~@15 c4@17 ~@32]/8", // F C Dm A# F C Dm A# …
  D: "[[a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [f3,a3,d4]@2 ~ [f3,a3,d4]@3 [f3,a#3,d4]@4 [f3,a#3,d4]@3 [f3,a#3,d4]!3, ~@15 g3@23 ~@9 g3@23 ~@9 g3@23 ~@9 [g3,c4]@17, ~@15 c4@17 ~@15 c4@17 ~@15 c4@17 ~@32]/8", // F C Dm A# F C Dm A# …
  E: "[[a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [f3,a3,d4]@2 ~ [f3,a3,d4]@3 [f3,a#3,d4]@4 [f3,a#3,d4]@3 [f3,a#3,d4]!3 [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [g3,c4,e4]@4 [g3,c4,e4]@3 [g3,c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3, ~@15 g3@23 ~@9 g3@23 ~@9 g3@23 ~@9 [g3,c4]@17, ~@15 c4@17 ~@15 c4@17 ~@15 c4@17 ~@32]/8", // F C Dm A# F C Dm A# …
  F: "[[a3,c4,f4]@2 ~ [a3,c4,f4]@3 [c4,e4]@4 [c4,e4]@3 [c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,c4,f4]@2 ~ [a3,c4,f4]@3 [c4,e4]@4 [c4,e4]@3 [c4,e4]!2 e4 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,f4]@2 ~ [a3,f4]@3 e4@4 e4@3 e4!3 [a3,d4,f4]@2 ~ [a3,d4,f4]@3 [a#3,d4,f4]@4 [a#3,d4,f4]@3 [a#3,d4,f4]!3 [a3,f4]@2 ~ [a3,f4]@3 e4@4 e4@3 e4!3 [f3,a3,d4]@2 ~ [f3,a3,d4]@3 [f3,a#3,d4]@4 [f3,a#3,d4]@3 [f3,a#3,d4]!3, ~@3 g3@61, ~@15 c4@17 ~@15 c4@81]/8", // F C Dm A# F C Dm A# …
  G: "[a3,f4]@2 ~ [a3,f4]@3 e4@4 e4@3 e4!3", H: "[f3,a3,d4]@2 ~ [f3,a3,d4]@3 [f3,a#3,d4]@10",
  I: "[[a3,f4]@2 [a3,f4]@2 [a3,f4]@2 e4@23 ~@3]/2", // Dm
})).s("gm_acoustic_guitar_nylon").gain(0.19)

// other · distortion guitar
const distortion_guitar = note("<~@36 A@2 B C D ~@16>".pickRestart({
  A: "[d4@3 a4@11 f4 e4]/2", B: "d4", C: "d4!2", D: "d4!4",
})).s("gm_distortion_guitar").gain(0.17)

// bass · acoustic bass
const bass = note(`<
  ~@4 A B A C A B A B A B A C A B A B A B A C A B A B A B A C A B A C A B A B A C A C A B A B A C A C A B D E@2
>`.pickRestart({
  A: "d2@3 ~ d2@2 a#1@4 a#1@2 a#1@3 ~", B: "f1@2 f1@2 f1@2 c2@4 c2@2 c2@3 ~", C: "f1!3 c2@2 d1 f1 g1",
  D: "d2@3 ~ d2@2 a#1@8 ~@2", E: "[f1@2 f1@2 f1@2 c2@23 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B D B C B C B C B C B C E@2 ~
>`.pickRestart({
  A: "x!2", B: "x ~@2 x ~ x ~@2", C: "x!2 ~ x ~ x ~@2", D: "x!2 ~ x ~@4", E: "x ~@2 x ~@4",
})).gain(0.19)

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

// drums · hihat
const hihat = s("hh").struct("<[~@3 x]!3 ~ [x!16]!50 [x!7 ~@9] [x!4 ~@4] ~>").gain(0.19)

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@5 x ~@2] ~@53>").gain(0.19)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@5 x ~@2] ~@53>").gain(0.19)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@12 A@3 B A@3 ~@9 A@3 B A@3 B A@4 C A@2 B A@8 C A D E ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x", D: "~@4 x ~@10 x", E: "~@3 x ~@4",
})).gain(0.19)

// drums · ride
const ride = s("rd").struct("<~@39 [~@7 x] ~@11 [~@7 x] ~@5>").gain(0.19)

stack(
  pad_poly, acoustic_guitar_nylon, distortion_guitar, bass, kick, snare, hihat, low_tom, mid_tom, crash, tambourine,
  ride
)

More by The Cranberries