Strudelify
KeyE minorTempo109 bpm
0:00/0:00
// Empty — The Cranberries
// 109 bpm, 4/4, key E minor. 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.
setcpm(109/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(`<
  ~@24 A@4 B C@8 D@3 E@2 F@2 G@2 H I@5 J@4 K L M N K L M O ~@7 P K L M N K L M Q ~@3 P K L M N K L M N K L M R@2 ~
>`.pickRestart({
  A: "[~@8 a4@2 b4@2 c#5@2 ~@4 d#5@3 ~ d#5@4 b4@2 b4@2 ~@4 b4@3 ~ a4@3 ~ g#4@3 ~@5 e4@3 ~ f#4@3 ~ g#4@3 ~ g#4@2, ~@14 e5@4 ~@12 c#5@4 ~@14 [a3,c#4]@13 ~@3, ~@16 [g#4,b4]@10 ~@6 e4@13 ~ g#4@4 ~@14]/4", // A G#m
  B: "[b3,e4,a4]@3 ~ e5 d#5 c#5!2", // Esus4
  C: "[d#5@2 b4@3 ~ c#5@3 ~ b4@2 b4@2 ~@4 b4@3 ~ a4@3 ~ g#4@3 ~@5 e4@5 ~@3 e5!2 e5@2 [a4,e5,f#5]@4 [a4,e5,g#5]@5 ~@3 e5!2 e5@2 [b4,d#5,f#5]@4 [b4,g#5]@5 ~@3 e5!2 e5@2 f#5@4 e5@3 ~@5 b4@3 ~ [e4,a4,c#5]@4 b4@3 ~ a4@3 ~ b4@3 ~ b4@2 c#5@5 ~ e5@2 e5@2 ~@2 c#5@2 ~@2, [d#4,g#4]@13 ~ c#5@4 ~@14 [a3,c#4]@6 ~@40 [a4,b4]@12 ~@12 [c#4,e4]@8 ~@2 [e4,a4]@13 ~@3, ~@16 e4@13 ~ g#4@4 ~@32 d#5@20 d#5@36 d#5@6]/8", // F#m7 Amaj7 B E A G#5 A Asus2 …
  D: "[~@2 b4@3 ~ c#5@3 ~ b4@2 b4@2 ~@4 b4@3 ~ a4@3 ~ g#4@3 ~@5 e4@12 ~@2, [d#4,g#4]@13 ~ c#5@4 ~@12 g#4@4 ~@14, ~@16 [e4,a4]@5 ~ [b3,e4]@8 ~@2 [a3,c#4]@13 ~@3]/3", // G#5 A5 E5 A
  E: "[[e4,c5]@10 a4@2 b4@2 ~@4 g4@3 ~ g4@6 ~@2 a4@2, ~@7 a4@2 ~@7, ~@16 [c4,e4]@13 ~@3]/2", // C
  F: "[[d4,g4,b4]@6 ~@2 a4@2 b4@2 b4@2 c5@4 b4@3 ~ a4@3 g4@2 ~ b4@3 ~, ~@14 [e4,g4]@11 ~@7]/2", // G Em
  G: "[[e4,a4,c5]@6 ~@2 [c4,e4,a4]@3 ~ b4@2 a4@4 g4@3 ~ g4@3 ~@2 d5 d5@2 d5@2, ~@7 [c4,e4]@6 ~@3]/2", // Am C
  H: "e5@2 ~ g5@7 ~ d5 d5@2 d5@2, [g4,b4]@13 ~@3", // G
  I: "[e5@2 ~ g5@4 ~@3 d5@2 ~@4 [c5,e5]@6 ~@2 [c5,e5,a5]@3 ~ g5@2 [g4,c5,e5]@10 e5@2 e5@2 g5@2 ~@8 e5@2 e5@2 e5@2 g5@2 [g4,b4,d5]@10 ~@2 d5@2 b5@3 ~, [g4,b4]@6 ~@6 b5@10 ~@18 [g4,c5]@6 d5@7 ~@27, ~@48 [g4,b4]@13 ~@19]/5", // C Am C G C5 G
  J: "[[e5,a5,c6]@6 ~@2 [c5,e5,a5]@3 ~ g5@2 e5@7 ~ e5@2 e5@2 e5@2 g5@2 [g4,c5,d5]@7 ~ e5@2 e5@2 e5@2 g5@2 [g4,b4,d5]@8 ~@4 d5@2 b5@3 ~, ~@7 [g4,c5]@5 ~@7 [g4,b4]@4 ~@9]/4", // Am Gsus4 G C5 G
  K: "[e5,a5,c6]@3 [c5,e5,g5]@5", L: "[c5,e5,b5]@3 [c5,e5,g5]@5", M: "[d5,g5,b5]@3 [b4,d5,g5]@5",
  N: "[e5,g5,b5]@3 [b4,e5,g5]@2 e5 b5@2", O: "[e5,g5,b5]@3 [b4,e5,g5]@2 ~@3", P: "~@10 d5@2 b5@3 ~",
  Q: "[e5,g5,b5]@3 [b4,e5,g5]@5", R: "[[e5,g5,b5]@6 [b4,e5]@10 [c5,e5]@15 ~, ~@6 g5@25 ~]/2",
})).s("gm_pad_poly").gain(0.48)

// other · piano
const piano = note("<A B C@2 A B C@2 A B C@2 A B C@2 ~@82>".pickRestart({
  A: "a5@2 ~ e6@3 b5@8 ~@2", B: "g#5@2 ~ d#6@3 b5@8 ~@2", C: "a5@2 ~ c#6@3 b5@8 ~@2",
})).s("gm_piano").gain(0.48)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@8 A B C@2 A B C@2 D E F G F E F G H@2 I J H@2 I J H@2 I J H@2 K@2 L M N O L M N O L M N O L M N O L M N O L M N O L
  M N O L M N O L M N O L M N O L M N O L M N O L M N O L M N O P@2
>`.pickRestart({
  A: "a3@2 ~ e4@3 b3@4 e4@2 a3@2 b3@2", B: "g#3@2 ~ d#4@3 b3@4 d#4@2 g#3@2 b3@2",
  C: "a3@2 ~ c#4@3 b3@4 c#4@2 a3@2 b3@2", D: "[a3,b3,e4]@13 ~@3", E: "[g#3,b3,d#4]@5 ~ [g#3,b3,d#4]@8 ~@2",
  F: "[a3,b3,e4]@5 ~ [a3,b3,e4]@8 ~@2", G: "[a3,c#4,e4]@5 ~ [a3,c#4,e4]@5 ~ [a3,c#4,e4]@3 ~",
  H: "[[a3,b3,e4]@5 ~ [a3,b3,e4]@4 [a3,b3,e4]@2 [a3,b3,e4]!3 [a3,b3] [g#3,b3,d#4]@5 ~ [g#3,b3,d#4]@4 [g#3,b3,d#4]@2 [g#3,b3,d#4]!4, ~@15 e4@17]/2", // Asus2 G#m
  I: "[a3,b3,e4]@5 ~ [a3,b3,e4]@4 [a3,b3,e4]@2 [a3,b3,e4]!4", // Asus2
  J: "[a3,c#4,e4]@5 ~ [a3,c#4,e4]@4 [a3,c#4,e4]@2 [a3,c#4,e4]!4", // A
  K: "[[a3,b3,e4]@5 ~ [a3,b3,e4]@4 [a3,b3,e4]@2 [a3,b3,e4] [a3,b3]!3 [a3,c#4]@5 ~ [a3,c#4]@4 [a3,c#4]@2 [a3,c#4]!4, ~@13 e4@19]/2", // Asus2 A
  L: "[e3,a3]@2 ~ [e3,a3]@3 [e3,a3]@4 [e3,a3]@2 [e3,a3]!4", M: "[g3,c4]@2 ~ [g3,c4]@3 [g3,c4]@4 [g3,c4]@2 [g3,c4]!4",
  N: "[d3,g3]@2 ~ [d3,g3]@3 [d3,g3]@4 [d3,g3]@2 [d3,g3]!4", O: "[b2,e3]@2 ~ [b2,e3]@3 [b2,e3]@4 [b2,e3]@2 [b2,e3]!4",
  P: "[e3@29 ~@3]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.29)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@16 A B A C A B A C A B A C ~@35 D E@2 F@2 G@6 H I J@2 K@2 J@2 L@2 E@2 F@2 G@8 M@2
>`.pickRestart({
  A: "e4@13 ~@3", B: "d#4@13 ~@3", C: "c#4@13 ~@3", D: "~@5 [a4,a5] [c5,c6] [b4,b5]",
  E: "[b4,b5]@2 ~ [c5,c6]@3 [a4,a5]@4 [a4,a5]@2 [c5,c6]@2 [b4,b5]@2", // B C A C B
  F: "[[b4,b5]@2 ~ [c5,c6]@3 [a4,a5]@4 [a4,a5]@2 [b4,b5]@2 [g4,g5]@4 [g4,g5]@2 [a4,a5]@2 [e4,e5]@4 [e4,e5]@2 [d4,d5]@3 ~]/2", // B C A B G A E D
  G: "[e4,e5]@2 ~ [g4,g5]@2 [g4,g5]@2 ~ [g4,g5]@2 ~ [e4,e5]@2 [d4,d5]@2 ~", // E G E D
  H: "[e4,e5]@2 ~ [g4,g5]@2 [g4,g5]@2 ~ [g4,g5]@2 ~ [e4,e5]@2 [g4,g5]@2 ~", // E G E G
  I: "[b4,b5]@2 ~ [b4,b5]@2 [b4,b5]@2 ~ [b4,b5]@2 ~ [c5,c6]@2 [d5,d6]@2 ~", // B C D
  J: "[e5,e6]@2 ~ [d5,d6]@2 [c5,c6]@2 ~ [b4,b5]@2 ~ [c5,c6]@2 [d5,d6]@2 ~", // E D C B C D
  K: "[[e5,e6]@2 ~ [d5,d6]@2 [c5,c6]@2 ~ [b4,b5]@3 ~ [c5,c6]@2 [a4,a5]@4 [a4,a5]@2 [b4,b5]@2 [g4,g5]@4 ~ [c5,c6]@2 [d5,d6]@2 ~]/2", // E D C B C A B G …
  L: "[[e5,e6]@2 ~ [d5,d6]@2 [c5,c6]@2 ~ [b4,b5]@3 ~ [c5,c6]@2 [a4,a5]@4 [a4,a5]@2 [b4,b5]@2 [g4,g5]@4 [a4,a5]@2 [c5,c6]@2 [b4,b5]@2]/2", // E D C B C A B G …
  M: "[[e4,e5]@11 ~@5]/2", // E
})).s("gm_string_ensemble_1").gain(0.35)

// bass · acoustic bass
const bass = note(`<
  ~@16 A B C D A B C D A B C@2 A B C@2 A B C@2 A B C@3 E F G C E F G C E F G C E F G C E F G C E F G C E F G C E F G C E
  F G C E F G C E F G C E F G C E F G C E F G H@2
>`.pickRestart({
  A: "e3@5 ~ e3@5 ~ e3@3 ~", B: "b2@5 ~ b2@5 ~ b2@3 ~", C: "a2@5 ~ a2@5 ~ a2@3 ~", D: "a2@5 ~ a2@5 ~ b2@3 ~",
  E: "c3@5 ~ c3@5 ~ c3@3 ~", F: "g2@5 ~ g2@5 ~ g2@3 ~", G: "e2@5 ~ e2@5 ~ e2@3 ~", H: "[a2@29 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@56 [~@3 x ~@4]!40 ~@2>").gain(0.15)

// drums · tambourine
const tambourine = s("tb").struct("<~@56 [~@3 x ~@4]!40 ~@2>").gain(0.49)

// drums · congas
const congas = s("conga:13").struct("<~@19 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@58>".pickRestart({
  A: "~@6 x!2",
})).gain(1.56)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@16 A B C D A B C D A B C D A B C D A B C D A B C D E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E
  F G H E F G H E F G H E F G H E F G H E F G H I ~
>`.pickRestart({
  A: "~@11 x ~@2 x ~", B: "~@5 x ~ x", C: "~@10 x ~@2 x!2 ~", D: "~@5 x ~@2", E: "x ~@4 x!3", F: "x ~@10 x ~@2 x ~",
  G: "x ~@9 x ~@3 x!2", H: "x ~@8 x ~@3 x!2 ~", I: "x",
})).gain(1.56)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@16 A B C D A B C D A B C D A B C D A B C D A B C D E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E
  F G H E F G H E F G H E F G H E F G H E F G H I ~
>`.pickRestart({
  A: "~@10 x ~ x!2 ~ x", B: "~@12 x!2 ~ x", C: "~@11 x!2 ~@3", D: "~@8 x!2 ~ x!2 ~ x ~", E: "x ~@10 x ~ x ~ x",
  F: "x ~@9 x ~ x!2 ~ x", G: "x ~@10 x!3 ~@2", H: "x ~@7 x ~ x!3 ~@2 x", I: "x",
})).gain(1.56)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@56 [~@3 x ~@4]!40 ~@2>").gain(2.46)

stack(
  pad_poly, piano, acoustic_guitar_nylon, string_ensemble_1, bass, snare, tambourine, congas, congas_2, congas_3, cabasa
)

More by The Cranberries