Strudelify
KeyA minorTempo82 bpm
0:00/0:00
// Away — The Cranberries
// 82 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 49 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(82/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.

// other · pad poly
const pad_poly = note("<~@3 A B C D E F@3 G H I@2 J K@2 L@2 M@2 D E N@3 O ~@7 A M@2 D E N@3 O ~@5>".pickRestart({
  A: "~@5 c5 g4 d5", B: "e5@5 e5!3", C: "f5 e5 d5 c5 ~@2 g4 d5", D: "e5@3 ~@3 b4!2", E: "a4@3 ~@2 c5 g4 d5",
  F: "[e5@5 e5!2 f5@2 e5 d5 c5 ~ c5 d5 g4@2 c5 d5 g4@2 c5 d5 g4]/3", G: "a4@3 ~ g4@3 ~ f4@2 ~ c5 c5@2 b4@2",
  H: "a4 g4@6 ~", I: "[a4@2 c5@3 ~ c5 d5@3 c5 b4@3 g4 g4@11 ~@6]/2", J: "~@5 c5 d5 e5", K: "~ c5 f5 e5 ~ c5 f5 e5",
  L: "[~@2 c5@2 f5@2 e5@2 ~@2 c5@2 f5@2 c5@4 b4@3 ~ a4@4 c5@2 g4@2 d5@2]/2", M: "[e5@5 e5!2 f5@2 e5 d5 c5 ~@2 g4 d5]/2",
  N: "[e5@5 e5 g5 f5@2 e5 d5 c5 ~ c5 d5 g4@2 c5 d5 g4@2 c5 d5 g4]/3", O: "a4@3 ~ g4@3 ~ f4@6 ~@2",
})).s("gm_pad_poly").gain(0.48)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<A@8 B@3 C@16 D@8 E@2 F@3 G@8 H>".pickRestart({
  A: "[[g3,b3,e4]@3 ~ [g3,b3,e4]@2 ~ [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 [a3,c4,e4]@4 [a3,c4,e4]@2 ~ [a3,c4,e4]@2 [a3,c4,e4] [a3,c4,e4]@3 [a3,c4,e4]!2 e4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 e4@13 ~@3 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 [a3,c4,f4]@4 [a3,c4,f4]@3 [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@3 [a3,c4,f4]!2 f4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 [a3,c4,f4]@4 [a3,c4,f4]@3 [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@3 [a3,c4,f4]!3, ~@15 [g3,b3]@16 [a3,c4]@16 [g3,b3]@17 ~@15 [g3,b3]@17 ~@15 [g3,b3]@17, ~@48 [a3,c4]@32 ~@15 [a3,c4]@17 ~@16]/8", // Em Am Em F Em F G Am …
  B: "[[g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 [a3,c4,f4]@4 [a3,c4,f4]@3 [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@3 [a3,c4,f4]!2 f4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!3, ~@15 [g3,b3]@16 [a3,c4]@17]/3", // Em F Em G Am
  C: "[c4@12 g3@4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 [a3,c4,f4]@4 [a3,c4,f4]@3 [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@3 [a3,c4,f4]!2 f4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 [a3,c4,f4]@4 [a3,c4,f4]@3 [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@3 [a3,c4,f4]!2 f4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 [a3,c4,f4]@4 [a3,c4,f4]@3 [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@3 [a3,c4,f4]!2 f4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!3, a3@31 [g3,b3]@17 ~@15 [g3,b3]@17 ~@15 [g3,b3]@17 ~@16, f4@10 ~@2 c4@20 ~@15 [a3,c4]@17 ~@15 [a3,c4]@17 ~@15 [a3,c4]@17]/8", // Em F Em F Em F Em G …
  D: "[c4@12 g3@4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 [a3,c4,f4]@4 [a3,c4,f4]@3 ~@2 [a3,c4,f4] ~ g4@2 [a3,c4,f4]!2 f4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 [a3,c4,f4]@4 [a3,c4,f4]@3 [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@3 [a3,c4,f4]!2 f4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 [a3,c4,f4]@4 [a3,c4,f4]@3 ~@2 [a3,c4,f4] ~ g4@2 [a3,c4,f4]!2 f4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!3, a3@31 [g3,b3]@17 ~@15 [g3,b3]@17 ~@15 [g3,b3]@17 ~@16, f4@10 ~@2 c4@20 ~@7 [a3,c4,f4,g4]@2 ~ [a3,c4,f4]@3 ~@2 [a3,c4]@17 ~@15 [a3,c4]@17 ~@7 [a3,c4,f4,g4]@2 ~ [a3,c4,f4]@3 ~@2 [a3,c4]@17, ~@20 a4 ~@31 a4 ~@11]/8", // Em F Em F Em F Em G …
  E: "[c4@12 g3@4 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!3, a3, f3@5 ~ c4@10]/2", // Em
  F: "[[c4,f4]@4 f4@2 ~@3 f4 ~ g4@2 f4!3 [g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 f4@4 f4@2 ~ f4@2 f4 f4@3 f4!3, ~ c4@11, ~@7 [f4,g4]@2 ~ f4@3 ~@18 [g3,b3]@17, ~@4 a4 ~@19]/3", // F5 Em Fsus2 G
  G: "[[g3,b3,e4]@4 [g3,b3,e4]@3 [g3,b3,e4]@2 [g3,b3,e4] [g3,b3,e4]@3 [g3,b3,e4]!2 e4 f4@4 f4@2 ~@3 f4 ~ g4@2 f4!3 [g3,e4]@4 e4@2 ~ e4@2 e4 e4@3 e4!3 f4@15 ~ e4@3 ~ e4@2 ~ e4@2 e4 e4@3 e4!3 f4@4 f4@2 ~@3 f4 ~ g4@2 f4!3 e4@4 e4@2 ~ e4@2 e4 e4@3 e4!3 f3@10 ~@6, ~@15 b3@97 ~@16, ~@15 g3@17 ~@4 g3@92, ~@23 [f4,g4]@2 ~ f4@3 ~@58 [f4,g4]@2 ~ f4@3 ~@35, ~@12 a4 ~@31 a4 ~@19]/8", // Em C Fsus2
  H: "e4@13 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.19)

// chords · distortion guitar
const distortion_guitar = note("<~@11 A B C@6 D@2 C@6 D@2 C@6 D@2 C@4 E@8>".pickRestart({
  A: "~@12 [g3,c4]@3 ~", // C5
  B: "[g3,b3]@2 [g3,b3,e4]@2 [g3,b3,e4]@2 ~ e4@3 [g3,b3,e4]@2 [g3,b3,e4]@2 [g3,b3,e4]!2, ~@3 [g3,b3]@2 ~@3", // G Em G
  C: "[[a3,c4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4] [a3,c4,f4]@3 [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4] f4 [g3,b3]@2 [g3,b3,e4]@2 [g3,b3,e4]@2 ~ e4@3 [g3,b3,e4]@2 [g3,b3,e4]@2 [g3,b3,e4]!2, ~@15 [a3,c4]@17, ~@11 [g3,b3]@2 ~@3]/2", // Am F Am F G Em Am G
  D: "[c4@12 g3@3 ~ [g3,b3]@2 [g3,b3,e4]@2 [g3,b3,e4]@2 ~ e4@3 [g3,b3,e4]@2 [g3,b3,e4]@2 [g3,b3,e4]!2, a3, f3@5 ~ c4@10, ~@11 [g3,b3]@2 ~@3]/2", // G Em G
  E: "[[a3,c4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4] [a3,c4,f4]@3 [a3,c4,f4]@2 [c4,f4]@2 [c4,f4] f4 [g3,b3]@2 [g3,b3,e4]@2 [g3,b3,e4]@2 ~ e4@3 [g3,b3,e4]@2 [g3,b3,e4]@2 [g3,b3,e4]!2 f4@13 ~@3 [g3,b3]@2 [g3,b3,e4]@2 [g3,b3,e4]@2 ~ e4@3 [g3,b3,e4]@2 [g3,b3,e4]@2 [g3,b3,e4]!2 ~@2 f4@2 f4@2 ~ f4@3 f4@2 f4@2 f4!2 [g3,b3]@2 [g3,b3,e4]@2 [g3,b3,e4]@2 ~ e4@3 [g3,b3,e4]@2 [g3,b3,e4]@2 [g3,b3,e4]!2 f3@10 ~@2 g3@3 ~ [g3,e4]@13 ~@3, ~@6 a3@47 ~@11, ~@15 c4@110 ~@3, ~@11 [g3,b3]@2 ~@14 [g3,b3]@2 ~@14 [g3,b3]@2 ~@19]/8", // Am F Am F F5 G Em G …
})).s("gm_distortion_guitar").gain(0.03)

// bass · acoustic bass
const bass = note(`<
  ~@3 A B C B C B C B D B C B C B C B E B C B C B C B E B C B C B C B E B C B C B C B E B C B E F
>`.pickRestart({
  A: "~@5 f1 g1 a1", B: "c2@6 ~ c2 c2@2 c2@2 d2@2 e2@2", C: "f1@6 ~ f1 f1@2 f1@2 g1@2 a1@2", D: "f1@15 ~",
  E: "f1@5 f1 g1 a1", F: "c2@13 ~@3",
})).s("gm_acoustic_bass").gain(0.48)

// drums · kick
const kick = s("bd").struct("<~@4 A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@3 ~ A>".pickRestart({
  A: "x",
})).gain(0.1)

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

// drums · china
const china = s("cr").struct("<~@7 A ~@3 B ~@3 A ~@3 B ~@3 A ~@3 B A ~@6 B ~@3 A ~@3 B ~@3 B A>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.1)

// drums · china · soft notes
const china_soft = s("cr").struct("<~@3 A ~@14 B A ~@6 B A ~@15 A ~@2 B ~@2>".pickRestart({
  A: "~@10 x!2 ~@4", B: "x",
})).gain(0.03)

// drums · ride
const ride = s("rd").struct("<~@2 [x ~@6 x] x ~@16 x ~@27 x>").gain(0.1)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@3 ~@2>".pickRestart({
  A: "x!5 ~@11",
})).gain(0.53)

stack(pad_poly, acoustic_guitar_nylon, distortion_guitar, bass, kick, hihat, china, china_soft, ride, cabasa)

More by The Cranberries