Strudelify
KeyF majorTempo98 bpm
0:00/0:00
// Joe — The Cranberries
// 98 bpm, 12/8, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/8 at bar 1, 12/8 at bar 2) are rendered on a constant 12/8 grid of one bar per cycle
// note: Full arrangement: all 53 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/6)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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 C D E B F G H I J K H I L M N O N O P B C D Q B R G H I J S H I L T N O N O U G U V W
>`.pickRestart({
  A: "~@12 f5@3 ~ f5@3 ~ d5@3 ~ f5@10 ~@2 f5@3 ~ f5@3 ~ g5@3 ~",
  B: "a5@6 ~@2 d5@7 ~ d5@3 ~ f5@3 ~ e5@6 ~@2 f5@3 ~ e5@6 ~@2 d5@3 ~",
  C: "c5@6 ~@2 c5@3 ~ f5@3 ~ f5@3 ~ d5@3 ~ f5@10 ~@2 f5@3 ~ f5@3 ~ g5@3 ~",
  D: "a5@6 ~@2 d5@7 ~ d5@3 ~ f5@3 ~ e5@6 ~@2 f5@3 ~ e5@6 ~@2 f5@3 ~",
  E: "f5@6 ~@2 c5@3 ~ f5@3 ~ f5@3 ~ d5@3 ~ f5@10 ~@2 f5@3 ~ f5@3 ~ g5@3 ~",
  F: "c5@6 ~@2 c5@3 ~ f5@3 ~ f5@3 ~ d5@3 ~ f5@15 ~ f5@3 ~ g5@3 ~",
  G: "a5@6 ~@2 d5@7 ~ d5@3 ~ f5@3 ~ e5@6 ~@2 f5@3 ~ e5@10 ~@2", H: "a4@19 ~@5 bb4@10 ~@2 c5@10 ~@2",
  I: "d5@5 ~ f4@5 ~ g4@5 ~ bb4@5 ~", J: "a4@10 ~@10 a5@3 ~ bb5@10 ~@2 a5@10 ~@2", K: "g5@10 ~@2 f5@19 ~@17",
  L: "a4@10 ~@10 a5@3 ~ bb5@6 ~@2 a5@3 ~ g5@6 ~@2 g5@3 ~", M: "d5@6 ~@2 f5@23 ~@17", N: "f5@34 ~@2 f5@6 ~@2 e5@3 ~",
  O: "d5@19 ~@29", P: "~@8 c5@3 ~ f5@3 ~ f5@3 ~ d5@3 ~ f5@15 ~ f5@3 ~ g5@3 ~",
  Q: "f5@6 ~@10 f5@3 ~ d5@3 ~ f5@15 ~ f5@3 ~ g5@3 ~", R: "c5@6 ~@6 f5@3 ~ f5@3 ~ d5@3 ~ f5@10 ~@2 f5@3 ~ f5@3 ~ g5@3 ~",
  S: "g5 f5@2 e5", T: "d5@3 ~ f5@19 ~", U: "f5@3 ~ f5@3 ~ f5@3 ~ f5@6 ~@2 e5@3 ~ f5@3 ~ f5@3 ~ f5@3 ~ f5@6 ~@2 g5@3 ~",
  V: "a5@6 ~@2 d5@7 ~ d5@3 ~ f5@3 ~ e5@6 ~@2 f5@3 ~ e5@8 f5@3 ~", W: "f5@19 ~@29",
})).s("gm_pad_poly").gain(0.48)

// other · pad poly · soft notes
const pad_poly_soft = note("<~@29 A B C ~ A B D ~@12 E D E F ~>".pickRestart({
  A: "~@8 f5@7 ~ f5@3 ~ a5@3 ~ g5@6 ~@2 a5@3 ~ g5@6 ~@2 g5@3 ~", B: "f5 ~@7",
  C: "~@8 f5@7 ~ f5@3 ~ a5@3 ~ g5@6 ~@2 a5@3 ~ g5@6 ~@6", D: "~@8 f5@7 ~ f5@3 ~ a5@3 ~ g5@6 ~@2 a5@3 ~ g5@10 ~@2",
  E: "a5@3 ~ a5@3 ~ a5@3 ~ a5@6 ~@2 g5@3 ~ a5@3 ~ a5@3 ~ a5@3 ~ a5@6 ~@6",
  F: "~@8 f5@7 ~ f5@3 ~ a5@3 ~ g5@6 ~@2 a5@3 ~ g5@8 ~@4",
})).s("gm_pad_poly").gain(0.24)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B A B A B A B A B A B A B A B C D E F C D E G A B A B A B A B A B A B C D E F C D E G A B A B A B A B H
>`.pickRestart({
  A: "~ a3 c4 f4 c4 a3 ~ a3 c4 f4 c4 a3, f3!2", B: "~@4 a3@4 d4@3 ~ f4@4 d4@4 a3@4 ~@4 g3@4 c4@4 e4@4 c4@4 g3@4, d3 e3",
  C: "[f3,a3,c4]@3 ~ [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@3 ~ [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,bb3,d4]@3 ~ [f3,bb3,d4]@2 [f3,bb3,d4]@2 [f3,bb3,d4]@2 [f3,bb3,d4]@2 [f3,a3,c4]@3 ~ [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2", // F Bb F
  D: "[d3,f3,bb3]@3 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@3 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [g3,bb3,d4]@3 ~ [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [d3,f3,bb3]@3 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2", // Bb Gm Bb
  E: "[f3,a3,c4]@3 ~ [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@3 ~ [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [d3,f3,bb3]@3 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [f3,a3,c4]@3 ~ [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2", // F Bb F
  F: "[d3,g3,bb3]@3 ~ [d3,g3,bb3]@2 [d3,g3,bb3]@2 [d3,g3,bb3]@2 [d3,g3,bb3]@2 [d3,f3,bb3]@3 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@3 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,g3,bb3]@3 ~ [d3,g3,bb3]@2 [d3,g3,bb3]@2 [d3,g3,bb3]@2 [d3,g3,bb3]@2", // Gm Bb Gm
  G: "[d3,g3,bb3]@3 ~ [d3,g3,bb3]@2 [d3,g3,bb3]@2 [d3,g3,bb3]@2 [d3,g3,bb3]@2 [d3,f3,bb3]@3 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@3 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@3 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@2", // Gm Bb
  H: "~ f4@19 ~@4, f3@19 ~@5, ~ [a3,c4]@38 ~@9", // Am
})).s("gm_acoustic_guitar_nylon").gain(0.19)

// other · acoustic guitar nylon
const acoustic_guitar_nylon_2 = note(`<
  A B A B C ~@11 D E F G D E F H I J I J K ~@7 D E F G D E F H I J I J L J L J M
>`.pickRestart({
  A: "[f4,f5]!44 [g4,g5]!4", B: "[a4,a5]!8 [d4,d5]!12 [f4,f5]!4 [e4,e5]!8 [f4,f5]!4 [e4,e5]!8 [f4,f5]!4",
  C: "[f4,f5]!24 ~@24", D: "a4!24 bb4!12 c5!12", E: "d5!12 f4!12 g4!12 bb4!12", F: "a4!24 bb4!12 a4!11 ~",
  G: "g4!12 f4!24 g4!11 ~", H: "g4!12 f4!36", I: "f4!20 g4!4 f4!20 g4!4", J: "a4!8 d4!12 f4!4 e4!8 f4!4 e4!8 f4!4",
  K: "f4!24 ~@24", L: "f4!44 g4!4", M: "f4!24 f4@19 ~@5",
})).s("gm_acoustic_guitar_nylon").gain(0.29)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@4 A B A B A B A B A B A B C D C D C D C E A B A B A B A B A B A B C D C D C D C E A B A B A B A B F
>`.pickRestart({
  A: "[f3,a3,c4]", B: "[f3,a3,d4] [g3,c4,e4]", C: "[f3,a3,c4]@2 [f3,bb3,d4] [f3,a3,c4]",
  D: "[f3,bb3,d4]@2 [d3,g3,bb3] [f3,bb3,d4]", E: "[f3,bb3,d4] [d3,f3,bb3]", F: "[f3,a3,c4]@19 ~@29",
})).s("gm_string_ensemble_1").gain(0.09)

// bass · acoustic bass
const bass = note(`<
  ~@4 A B A B A B A B A B A B C D C D C D C D A B A B A B A B A B A B C D C D C D C D A B A B A B A B E
>`.pickRestart({
  A: "f2@18 ~@2 f2@3 ~ f2@18 ~@2 f2@3 ~", B: "d2@18 ~@2 d2@3 ~ a1@18 ~@2 d2@3 ~",
  C: "f1@18 ~@2 f1@3 ~ f1@10 ~@2 g1@3 ~ a1@3 ~ f1@3 ~", D: "bb1@18 ~@2 bb1@3 ~ bb1@10 ~@2 c2@6 ~@2 a1@3 ~",
  E: "f2@19 ~@5",
})).s("gm_acoustic_bass").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@4
  [x!2]!12
  [x ~@4 x!2 ~@4 x]!8
  [x ~@5 x ~@4 x]!4
  [x!2]!8
  [x ~@4 x!2 ~@4 x]!8
  [x ~@5 x ~@4 x]!8
  x
>`).gain(0.1)

// drums · snare
const snare = s("sd").struct("<~@4 [~ x ~ x]!31 [~@3 x ~@5 x!3] [~ x ~ x]!16 ~>").gain(0.1)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@3 [~@10 x!2] [x!12]!48 x>").gain(0.1)

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

// drums · ride
const ride = s("rd").struct("<~@4 [x!4]!12 [x!12]!8 [x!4]!12 [x!12]!16 x>").gain(0.1)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 [x!12]!48 x>").gain(0.53)

stack(
  pad_poly, pad_poly_soft, acoustic_guitar_nylon, acoustic_guitar_nylon_2, string_ensemble_1, bass, kick, snare,
  pedal_hat, china, ride, cabasa
)

More by The Cranberries