Strudelify

So Cold in Ireland

The Cranberries

KeyE minorTempo74 bpm
0:00/0:00
// So Cold in Ireland — The Cranberries
// 74 bpm, 6/8, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (3/8 at bar 1, 6/8 at bar 2) are rendered on a constant 6/8 grid of one bar per cycle
// note: Full arrangement: all 110 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(74/3)

// 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(`<
  ~@8 A B A C D C E F G H I J K H G L@3 M@2 N@3 O P Q@2 R S@2 T U V ~@3 W H I J K H X Y W H I Z AA H X AB@2 AC@2 O P
  AD@2 R S@2 T AE AF@4 AG AH AI AJ AK AL AK ~ AM AN AM AO AM AN AM AP AK ~@17
>`.pickRestart({
  A: "g5@6 ~@2 f#5@3 ~@5 e5@3 ~@5", B: "f#5@6 ~@2 g5@3 ~@5 e5@3 ~@5", C: "f#5@6 ~@2 e5@3 ~@5 d#5@3 ~@5",
  D: "g5@3 ~ f#5@2 ~@2 e5@3 ~", E: "e5@6 ~@2 b4@3 ~@5 b4@6 ~@2", F: "c5@10 ~@2 c5@3 ~ b4@3 ~ a4@3 ~",
  G: "b4@10 ~@2 a4@3 ~ d5@3 ~ g4@3 ~", H: "a4@10 ~@2 d5@6 ~@2 c5@3 ~", I: "b4@10 a4@2 a4@3 ~ d5@3 ~ g4@3 ~",
  J: "g4@3 ~ a4@6 ~@2 b4@10 ~@2", K: "e4@10 ~@2 a4@3 ~ c5@3 ~ g4@3 ~",
  L: "[g4@3 ~ a4@6 ~@2 g4@3 ~ g4@2 e4@12 ~@6 g4@3 ~ g4@2 e4@12 ~@6 g5@3 ~ g5@2 d5@6]/3",
  M: "[e5@6 ~@6 g5@3 ~ g5@2 d5@14 ~@4 g5@3 ~ g5@2 d5@6]/2", N: "e5@6 ~@6 g5@3 ~ g5@2 d5@6", O: "e5@5 ~@7",
  P: "~@8 g5@2 g5@2 b5@3 ~ a5@2 g5@6", Q: "[f#5@3 ~ g5@4 e5@2 d5@5 ~ e5@12 ~@4 g5@2 g5@2 b5@3 ~ a5@2 g5@6]/2",
  R: "f#5@3 ~ g5@4 e5@2 d5@5 ~ e5@3 ~ c5@3 ~",
  S: "[b4@6 ~@2 [b4,g5]@2 [b4,g5]@2 [b4,g5]@5 ~ d5@6 d5@6 ~@2 d5@2 [b4,d5]@2 [c5,e5]@5 ~ [d5,f#5]@6, ~@3 f#5@2 ~@3]/2", // Em Bm C D
  T: "[b4,g5]@6 ~@2 [b4,g5]@2 [b4,g5]@2 [b4,g5]@5 ~ [d5,f#5]@6", U: "[c5,e5]@10 ~@6 d5@3 ~ c6@3 ~, ~@3 f#5@2 ~",
  V: "b5@5 ~@7", W: "~@12 a4@3 ~ c5@3 ~ g4@3 ~", X: "b4@10 ~@2 a4@3 ~ c5@2 g4@6", Y: "a4@5 ~@7",
  Z: "g4@3 ~ a4@6 ~@2 b4@8 d4@3 ~", AA: "e4@10 ~@2 a4@3 ~ d5@3 ~ g4@3 ~",
  AB: "[a4@8 g4@3 ~ g4@2 g4@4 e4@12 ~@6 g5@2 g5@3 ~ d5@6]/2", AC: "e5@6 ~@6 g5@2 g5@3 ~ d5@6",
  AD: "[f#5@3 ~ g5@4 e5@2 d5@5 ~ e5@11 ~@5 g5@2 g5@2 b5@3 ~ a5@2 g5@6]/2", AE: "[c5,e5]@19 ~@5",
  AF: "[~@6 g5@2 g5@2 g5@2 b5@3 ~ a5@4 g5@2 f#5@5 ~ g5@4 e5@2 d5@5 ~ e5@12 ~@4 g5@2 g5@2 b5@3 ~ a5@3 ~ g5@2 f#5@5 ~ g5@4 e5@2 d5@5 ~ e5@3 ~ c5@3 ~]/4",
  AG: "b4@5 ~ [b4,g5]@2 [b4,g5]@2 [b4,g5]@2 [b4,g5]@2 [b4,g5]@3 ~ [d5,f#5]@6", // Em D
  AH: "d5@6 ~@2 d5@2 [b4,d5]@2 [c5,e5]@2 [c5,e5]@3 ~ [d5,f#5]@6", // Bm C D
  AI: "[b4,g5]@6 ~@2 [b4,g5]@2 [b4,g5]@2 [b4,g5]@2 [b4,g5]@3 ~ [d5,f#5]@6", AJ: "[c5,e5]@10 ~@2 f#5@4 d5@3 ~ c6@3 ~",
  AK: "b5@19 ~@5", AL: "~@16 d5@3 ~ c6@3 ~", AM: "b5@10 ~@2 a5@6 ~@2 d6@3 ~", AN: "b5@10 ~@2 a5@6 ~@2 g5@3 ~",
  AO: "b5@5 ~@3", AP: "b5@10 ~@6 d5@3 ~ c6@3 ~",
})).s("gm_pad_poly").gain(0.48)

// other · pad poly · soft notes
const pad_poly_soft = note("<~@21 A B C@3 ~@18 D E F G B A H B ~ A F I B A F ~@51>".pickRestart({
  A: "~@12 g5@6 ~@2 f#5@3 ~", B: "e5@5 ~@7", C: "[~@12 g5@3 ~ g5@2 e5@12 ~@6 g5@3 ~ g5@2 e5@12 ~@18]/3",
  D: "~@12 e5@3 ~ g5@3 ~ d5@3 ~", E: "e5@10 ~@2 g5@6 ~@2 f#5@3 ~", F: "g5@5 ~@7", G: "~@6 f#5@5 ~",
  H: "g5@10 ~@2 e5@3 ~ g5@2 d5@6", I: "~@12 f#5@8 d5@3 ~",
})).s("gm_pad_poly").gain(0.24)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B A C A B A B A B A B A B A B A B A D A B A B A B A B A B A B E F E F E F E F E F E F A B A D A B A B G H G I G H G
  I G H G H E F E F E F E F E F E F E F J F E F E F E F E F E F E F E F E F E F E K L M L N M O P L Q@2
>`.pickRestart({
  A: "b3@3 ~ e4@3 ~ g4@3 ~ b3@3 ~ e4@3 ~ g4@3 ~", B: "c4@3 ~ e4@3 ~ g4@3 ~ c4@3 ~ e4@3 ~ g4@3 ~", C: "c4@5 ~@3",
  D: "c4@3 ~ e4@3 ~ g4@3 ~ b3@3 ~ e4@3 ~ g4@3 ~",
  E: "[g3,b3,e4]@4 [g3,b3,e4]@3 ~ [g3,b3,e4]@3 ~ [g3,b3,e4]@3 ~ [g3,b3,e4]@2 [g3,b3,e4]@2 [g3,b3,e4]@3 ~", // Em
  F: "[g3,c4,e4]@4 [g3,c4,e4]@3 ~ [g3,c4,e4]@3 ~ [g3,c4,e4]@3 ~ [g3,c4,e4]@2 [g3,c4,e4]@2 [g3,c4,e4]@3 ~", // C
  G: "b3@3 ~ e4@3 ~ g4@4 b3@3 ~ e4@3 ~ g4@4", H: "c4@3 ~ e4@3 ~ g4@4 c4@3 ~ e4@3 ~ g4@4",
  I: "c4@3 ~ e4@3 ~ g4@4 b3@3 ~ e4@3 ~ g4@4",
  J: "[g3,b3,e4]@3 ~ [g3,b3,e4]@3 ~ [g3,b3,e4]@3 ~ [g3,b3,e4]@3 ~ [g3,b3,e4]@2 [g3,b3,e4]@2 [g3,b3,e4]@3 ~", // Em
  K: "[g3,c4,e4]@4 [g3,c4,e4]@3 ~ [g3,c4,e4]@3 ~@9 b4@3 ~", L: "a#4 a4 g4@17 ~ g4@3 ~", M: "g#4 a#4 b4@17 ~ b4@3 ~",
  N: "f#4 f4 e4@17 ~ e4@3 ~", O: "c5 c#5 d5@17 ~ d5@3 ~", P: "c#5 c5 b4@17 ~ b4@3 ~", Q: "[e4@43 ~@5]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.14)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@32 A B A B A B A B A B A B C ~@19 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 D E F E G F
  H I E J@2
>`.pickRestart({
  A: "[g3,b3,e4,g4]@2 [g3,b3,e4,g4]@2 [g3,b3,e4,g4]@2 [g3,b3,e4,g4]@2 [g3,b3,e4,g4]!2 [g3,b3,e4,g4]@2", // Em
  B: "[g3,c4,e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]!2 [g3,c4,e4,g4]@2", // C
  C: "[g3,b3,g4]!6", // G
  D: "[g3,c4,e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]!2 [g3,c4,e4,g4,b4]@2", // C Cmaj7
  E: "a#4 a4 g4@17 ~ g4@3 ~", F: "g#4 a#4 b4@17 ~ b4@3 ~", G: "f#4 f4 e4@17 ~ e4@3 ~", H: "c5 c#5 d5@17 ~ d5@3 ~",
  I: "c#5 c5 b4@17 ~ b4@3 ~", J: "[e4@43 ~@5]/2",
})).s("gm_distortion_guitar").gain(0.14)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@3 A B@2 C D ~@15 C B@2 C D E@2 F@2 G H G I G H G I G H G I ~@7 J@2 K L M L@2 N@2 ~@4 G H G I G H G I G H G I G H G I
  O P Q R O P Q R O P Q R O P Q R O P Q S C D C D C D C T@3
>`.pickRestart({
  A: "~ b4", B: "[g4@11 a4]/2", C: "b4", D: "g4", E: "[b4@11 a4]/2", F: "g4/2", G: "[e3,g3,b3]", H: "[e3,g3,c4]",
  I: "[e3,g3,a3]", J: "[~@4 b4@5 c5@3]/2", K: "b4 g4", L: "b4 c5", M: "b4 a4", N: "[b4 g4@3]/2", O: "[e3,g3,b3,b4]",
  P: "c5 b4, [e3,g3,c4]", Q: "[e3,g3,b3,g4]", R: "g4 f#4, [e3,g3,a3]", S: "[e3,g3,a3,g4]", T: "[g4@34 ~@2 e4@31 ~@5]/3",
})).s("gm_string_ensemble_2").gain(0.14)

// other · acoustic guitar nylon
const acoustic_guitar_nylon_2 = note(`<
  ~@8 A B A B A B A B A B A B A B A B C D C D C E F G ~@12 A B A B A B A B H I H J H I K L C E C G ~@14 M ~@21 M N M N M
  N M N O@2
>`.pickRestart({
  A: "~ [e4,g4]@19 ~@4, b3@19 ~@5", B: "~ [g4,c5]@19 ~@4, e4@19 ~@5",
  C: "[b3,e4,g4]@5 ~ [b3,e4,g4]@5 ~ [b3,e4,g4]@5 ~ [b3,e4,g4]@5 ~", // Em
  D: "[e4,g4,c5]@5 ~ [e4,g4,c5]@5 ~ [e4,g4,c5]@5 ~ [e4,g4,c5]@5 ~", // C
  E: "[e4,g4,c5]@5 ~ [e4,g4,c5]@5 ~ [e4,g4,c5]@5 ~ [e4,g4,c5]@3 ~ [e4,g4,c5]@2", // C
  F: "[b3,e4,g4]@5 ~ [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@5 ~ [b3,e4,g4]@2 [b3,e4,g4]@2 [b3,e4,g4]@2", // Em
  G: "[e4,g4,c5]@5 ~ [e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@3 ~ [e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@2", // C
  H: "b3@3 ~ g4@3 ~ e4@3 ~ b3@3 ~ b4@3 ~ g4@3 ~", I: "c4@3 ~ g4@3 ~ e4@3 ~ c4@3 ~ c5@3 ~ g4@3 ~",
  J: "c4@3 ~ g4@3 ~ e4@3 ~ b3@3 ~ c5@3 ~ g4@3 ~", K: "b3@3 ~ g4@3 ~ g4@3 ~ e4@3 ~ g4@6 ~@2",
  L: "c4@3 ~ g4@3 ~ e4@3 ~ c4@3 ~ c5@2 c5@5 ~", M: "b3@3 ~ e4@3 ~ g4@3 ~ b3@3 ~ e4@3 ~ g4@3 ~",
  N: "c4@3 ~ e4@3 ~ g4@3 ~ c4@3 ~ e4@3 ~ g4@3 ~", O: "[e4@43 ~@5]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.16)

// other · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_3 = note(`<
  ~@32 A B A B A B A B A B A B ~@20 A B A B A B A B A B A B A B ~ B A B A B A B A B A B A B A B A B A B A B ~@10
>`.pickRestart({
  A: "b3@3 ~ e4@3 ~ g4@4 b3@3 ~ e4@3 ~ g4@4", B: "c4@3 ~ e4@3 ~ g4@4 c4@3 ~ e4@3 ~ g4@4",
})).s("gm_acoustic_guitar_nylon").gain(0.08)

// other · violin
const violin = note(`<
  ~@4 A@2 B C ~@16 A@2 B C D@2 E@2 ~@19 F@2 G H I H@2 J@2 ~@20 B K C L B K C L B K C L B K C L B K C@2 B C B C B C B M@3
>`.pickRestart({
  A: "[g3@11 a3]/2", B: "b3", C: "g3", D: "[b3@11 a3]/2", E: "g3/2", F: "[~@4 b3@5 c4@3]/2", G: "b3 g3", H: "b3 c4",
  I: "b3 a3", J: "[b3 g3@3]/2", K: "c4 b3", L: "g3 f#3", M: "[g3@34 ~@2 e3@31 ~@5]/3",
})).s("gm_violin").gain(0.06)

// bass · acoustic bass
const bass = note(`<
  ~@4 A B A C A B A B A B A B A B A B A B A D A B A B A B A E A F A G A F A G A D A H A B A D A B A H A B A B A B A H A
  B A E A F A G A F A G A F A G A F A G A F A G A F A G A F A G A F A G A F A H A B A H A B A H I ~
>`.pickRestart({
  A: "e1@3 ~ e1@3 ~ e1@3 ~ e1@3 ~ f#1@3 ~ g1@3 ~", B: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~",
  C: "c2@10 ~@2 d2@3 ~ c2@3 ~ a1@3 ~", D: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ d2@3 ~ c2@3 ~",
  E: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ d2@3 ~", F: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ g2@3 ~ e2@3 ~",
  G: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~ e2@3 ~ g2@3 ~", H: "c2@3 ~ c2@3 ~ c2@3 ~ d2@3 ~ c2@3 ~ a1@3 ~", I: "e1@19 ~@5",
})).s("gm_acoustic_bass").gain(0.48)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@9 A ~@3 A ~@3 A ~@3 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@43 A ~@8>".pickRestart({
  A: "~@21 x!2 ~",
})).gain(0.08)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@8 A B A@3 B A@3 B A@3 B A C A B A@7 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A C A@3 B A B A@3 B A D A B A@3 B A D A B
  A@3 B A D A B A D A B A@3 B A@3 B A@3 B A@2 E ~
>`.pickRestart({
  A: "x!6", B: "x!5 ~", C: "x!3 ~@3", D: "x!4 ~@2", E: "x",
})).gain(0.12)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@15 A ~@11 B ~@23 A ~@7 B ~@7 B ~@7 B ~@11 B ~@11 B ~@2>".pickRestart({
  A: "~@2 x", B: "~@5 x",
})).gain(0.12)

// drums · open hat
const open_hat = s("oh").struct("<~@11 A ~@3 B ~@3 A ~@7 A ~@2 C D ~@15 A ~@3 B ~@3 A ~@6 C E ~@39 A ~@6>".pickRestart({
  A: "~@2 x", B: "~@8 x!3 ~", C: "x!6", D: "~ x!5", E: "x!5 ~",
})).gain(0.12)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@11 A ~@7 A ~@7 A ~@19 A ~@7 A ~@47 A ~@6>".pickRestart({
  A: "~@5 x",
})).gain(0.04)

// drums · high tom
const high_tom = s("ht").struct("<~@7 A ~@15 B ~@11 B ~@23 B ~@7 B ~@7 B ~@7 B ~@11 B ~@11 B ~@2>".pickRestart({
  A: "~ x", B: "~@2 x",
})).gain(0.12)

// drums · crash
const crash = s("cr").struct(`<
  ~@23 A ~@5 A ~@2 B C B C B C B ~ D A ~@17 A ~ A ~@2 B C B C B C B ~ B C B C B C B ~ B C B C B C B ~ B C B ~ B C B C B
  C B ~ D ~@7 D ~
>`.pickRestart({
  A: "~@5 x", B: "x!2", C: "~ x", D: "x",
})).gain(0.12)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@3 A ~@3 A ~@7 B ~@35 B ~@58>".pickRestart({
  A: "x", B: "~@5 x",
})).gain(0.04)

// drums · ride
const ride = s("rd").struct("<~@3 A ~@3 B C D@54 E D@44 A ~>".pickRestart({
  A: "x", B: "x!2", C: "x!3 ~ x ~ x ~ x ~ x ~", D: "x!6", E: "x!5 ~",
})).gain(0.12)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@11 A ~@7 A ~@3 A ~@3 A ~ A ~@3 A ~@3 A ~ B ~ A ~ B ~@3 A ~@7 A ~@3 A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~
  A ~ A ~ A ~ A ~ A ~ B ~ A ~ B ~@3 A ~ A ~@4
>`.pickRestart({
// … 8 more lines

More by The Cranberries