Strudelify

The Rebels

The Cranberries

KeyG majorTempo80 bpm
0:00/0:00
// The Rebels — The Cranberries
// 80 bpm, 4/4, key G 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 68 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(80/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(`<
  ~@8 A B C@2 D@2 E@2 F@2 G H I@2 G J I@2 K L K M N O N P D@2 Q@2 R@2 S@2 F@2 G H I@2 G J I@2 T U T V W X Y Z AA AB@2 ~
  A B C@2
>`.pickRestart({
  A: "d5@2 d5@2 d5@2 d5 e5@3 c5@2 c5@2 c5@2", B: "c5 ~", C: "[~@2 b4@2 b4@2 b4 c5@3 c5 b4 a4 g4@2 a4@9 ~@8]/2",
  D: "[~@2 d5@2 d5@2 d5@2 e5@2 d5@2 c5@2 b4 c5@9 ~@8]/2",
  E: "[b4@2 b4@2 b4@2 b4@2 c5@2 b4@2 a4 g4@2 a4@9 a4@2 g4@5 ~]/2",
  F: "[b4@2 b4@2 b4@2 b4@2 c5@2 b4@2 a4 g4@2 b4@2 g4 a4@5 ~@6 g5!3]/2", G: "b5 g5@5 f5 e5",
  H: "f5@2 ~ e5@3 d5@4 c5@3 c5!3", I: "[b4@2 b4@2 g5@6 ~@2 f5 e5@2 f5@3 g5@10 ~ g5!3]/2",
  J: "f5@2 ~ e5@3 d5@4 c5@2 d5@2 c5!2", K: "g5@2 a5@2 b5@2 ~ e5@3 f5@2 ~ e5!3", L: "f5@2 g5@2 a5@2 ~ c5@3 d5@2 ~ g5!3",
  M: "f5@3 ~@5", N: "~@3 b4 c5@2 d5 g5@3 d5 c5@3 b4@2", O: "e5@2 ~ d5@3 c5@4 d5@5 ~", P: "c5@13 ~@3",
  Q: "[b4@2 b4@2 b4!2 b4@2 c5@2 b4@2 a4 g4@2 a4@9 ~@8]/2", R: "[~@2 d5@2 d5 d5@2 e5@3 d5@2 c5@2 b4 c5@9 ~@7 g4]/2",
  S: "[b4@2 b4@2 b4@2 b4@2 c5@2 b4@2 a4 g4@2 a4@9 ~@7 g4]/2", T: "b5@2 g5@3 g5!3 b5@2 g5@3 g5!3",
  U: "b5@2 d6@3 g5!3 b5@2 d6@3 g5!3", V: "b5@2 d6@3 g5!3 b5@2 d6@3 b5@2 ~", W: "b5 ~ b5 c6 ~ g5 a5 c6",
  X: "~ g5 a5 c6 ~ g5 c6 b5", Y: "~ g5 c6 b5 ~ g5 a5 c6", Z: "~ g5 a5 c6 ~ g5 c6 ~", AA: "g5 b5 ~ a5 c6 ~ b5 d6",
  AB: "[d6@2 c6 b5 c6@4 ~@4 c6@2 b5@8 ~@10]/2",
})).s("gm_pad_poly").gain(0.48)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B A C A D A E A D A D A D A D A F G H G H G H G H G H G I A D A E A D A D A D A D A F G H G H G H G H G H G H G H G
  H G H G J A D A F
>`.pickRestart({
  A: "[b2,d3,g3]@2 ~ [b2,d3,g3] [b2,d3,g3]@2 ~ [d3,g3,b3]@2 [e3,g3,c4] [c3,e3,a3]@3 [e3,g3,c4]@2 [e3,g3,c4]", // G C Am C
  B: "[c3,e3,a3]@2 ~ [e3,g3,c4] [c3,e3,a3]@2 ~ [e3,g3,c4,e4]@2 [e3,g3,c4,e4] [c3,e3,a3]@3 [e3,g3,c4] [c3,e3,a3] [e3,g3,c4]", // Am C Am C Am C Am C
  C: "[c3,e3,a3]@2 ~ [e3,g3,c4] [c3,e3,a3]@2 ~ [e3,g3,c4,e4]@2 [e3,g3,c4,e4] [c3,e3,a3]@5 ~", // Am C Am C Am
  D: "[c3,e3,a3]@2 ~ [e3,g3,c4] [c3,e3,a3]@2 ~ [e3,g3,c4,e4]@2 [e3,g3,c4,e4] [c3,e3,a3,d4]@3 [e3,g3,c4] [c3,e3,a3] [e3,g3,c4]", // Am C Am C Am C Am C
  E: "[c3,e3,a3]@15 ~", F: "[c3,e3,a3]@2 ~ [e3,g3,c4] [c3,e3,a3]@2 ~ [e3,g3,c4,e4]@2 [e3,g3,c4,e4] [c3,e3,a3,d4]@5 ~",
  G: "[b2,d3,g3]@2 [b2,d3,g3]@2 [d3,g3,b3]@2 [d3,g3,b3] [d3,g3,b3]@2 [d3,g3,b3] [d3,g3,b3]@3 [d3,g3,b3]!3", // G
  H: "[a2,c3,e3]@2 [a2,c3,e3]@2 [c3,e3,a3]@2 [c3,e3,a3] [c3,e3,a3]@2 [c3,e3,a3] [c3,e3,a3]@3 [c3,e3,a3]!3", // Am
  I: "[a3,c4,f4]", J: "[a2,c3,e3]@15 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.29)

// other · epiano1 · Am
const epiano1 = note(`<
  ~@3
  [~@6 g3!2]
  [g3@2 e4@2 d4@2 c4 a3@3 e4 a3 b3 c4 e4@2]
  [[a3,c4]@5 ~ g3!2]
  [g3@2 e4@2 d4@2 c4 a3@3 e4 a3 b3 c4 e4@2]
  [~ e4@15, [a3,c4]@15 ~]
  ~@60
>`).s("gm_epiano1").gain(0.29)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@12 A B@2 C@2 D E F G H E F I@2 J K L M ~@14 E F G H E F I@2 N O N O P@2 Q R N S@2 T U ~@3
>`.pickRestart({
  A: "[g3,g4]", B: "[[f3,f4]@3 e3 e3@2 [d3,d4]@4 [c3,c4]@4 [d3,d4]@18, ~@3 e4@3 ~@26]/2",
  C: "[[a3,a4]@3 g3 g3@2 [d3,d4]@4 [c3,c4]@4 [d3,d4]@16 [e3,e4]@2, ~@3 g4@3 ~@26]/2", // A D C D E
  D: "[f3,f4]@3 [g3,g4]@3 [a3,a4]@10", E: "b4@10 g4@5 ~", F: "a4@2 ~ g4@3 f4@4 e4@3 ~ f4@2", G: "g4@13 ~@3",
  H: "a4@13 ~@3", I: "[g4@10 ~@2 c5 b4@2 c5@14 ~@3]/2", J: "d5@10 g5@5 ~", K: "c6@8 b5@2 a5@3 ~ b5@2", L: "d5@13 ~@3",
  M: "[g4,g5]", N: "[b4,b5]@5 [c5,c6]@3", O: "[a4,a5]@5 [g4,g5]@3", P: "[[b4,b5]@5 [c5,c6]@8 [a4,a5]@3]/2",
  Q: "[b4,b5]@5 [a4,a5]@3", R: "[c5,c6]@5 [a4,a5]@3",
  S: "[[d5,d6]@2 [c5,c6] [b4,b5] [c5,c6]@8 [c5,c6]@2 [b4,b5]@10 [c5,c6]@2 [b4,b5]!4 [a4,a5]@2]/2", // D C B C B C B A
  T: "[c5,c6]@3 [b4,b5]@3 [a4,a5]@2 [c5,c6]@3 [b4,b5]@3 [a4,a5]@2", U: "[b4,b5]@5 ~@3",
})).s("gm_string_ensemble_1").gain(0.09)

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

// drums · kick
const kick = s("bd").struct("<~@18 A@11 B@15 A@8 C D C D C D C D C D A B ~@4>".pickRestart({
  A: "x!2 ~@3 x ~@2", B: "x", C: "x ~ x ~@10 x ~@2", D: "x!2 ~@4 x ~",
})).gain(0.14)

// drums · snare
const snare = s("sd").struct(`<
  ~@18 A B C B A B C B C B@2 ~ D E F G D H I J D K I L D M N B C B C B O B P Q P Q R S R S T S U V ~@4
>`.pickRestart({
  A: "~@4 x ~ x!2 ~@4 x!4", B: "~@4 x ~@2 x ~@4 x ~ x!2", C: "~@4 x ~@2 x ~@4 x!4", D: "~@6 x ~@8 x",
  E: "x ~@5 x ~@8 x", F: "x ~@2 x ~@3 x", G: "~@6 x ~@2 x ~ x ~ x ~ x", H: "x ~@2 x ~@4", I: "~@3 x ~@3 x",
  J: "~@6 x ~@4 x ~ x ~@2", K: "x ~@5 x ~@4 x ~ x ~@2", L: "~@6 x ~@2 x ~ x ~ x ~@2", M: "x ~@5 x ~@2 x ~ x ~ x ~ x",
  N: "x ~@3 x ~ x!2 ~@4 x!4", O: "~@4 x ~@2 x ~@2 x!6", P: "~@4 x ~ x!2 ~@2 x!3 ~ x!2",
  Q: "~ x ~@2 x ~@2 x ~ x!3 ~@2 x!2", R: "~@4 x ~ x!2 ~ x!4 ~ x!2", S: "~@3 x!2 ~@2 x ~ x!3 ~ x!2 ~",
  T: "x ~ x!3 ~ x ~ x!3 ~ x ~ x!2", U: "~@4 x ~ x!2 ~@3 x!5", V: "x",
})).gain(0.1)

// drums · hihat
const hihat = s("hh").struct("<~@18 A@11 B A@2 C D A@2 C E A E C F A G A@19 H ~@4>".pickRestart({
  A: "x!16", B: "x ~ x ~ x ~@2 x ~ x ~ x!5", C: "x!14 ~ x", D: "x!15 ~", E: "x!11 ~ x ~ x!2", F: "x!9 ~ x ~ x ~ x!2",
  G: "x!9 ~ x ~ x ~ x ~", H: "x!2 ~@2",
})).gain(0.03)

// drums · ride
const ride = s("rd").struct("<~@18 A@11 B ~@8 C ~@3 C ~ A@19 B ~@4>".pickRestart({
  A: "x!4", B: "x", C: "~@5 x ~@2",
})).gain(0.1)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@18
  [x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2]!11
  x
  ~@14
  [x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2]!19
  x
  ~@4
>`).gain(0.88)

stack(pad_poly, acoustic_guitar_nylon, epiano1, string_ensemble_1, bass, kick, snare, hihat, ride, china, cabasa)

More by The Cranberries