Strudelify

What You Were

The Cranberries

KeyG majorTempo65 bpm
0:00/0:00
// What You Were — The Cranberries
// 65 bpm, 6/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// 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 76 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(65/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 · pan flute · "Dolores"
const pan_flute = note(`<
  ~@7 A B C D A B E F ~ G H I A B J D ~@4 A B E F ~@12 A B K F ~ G H I A B J D ~@21
>`.pickRestart({
  A: "~@16 g3@3 ~ a3@3 ~", B: "b3@2 e3@3 ~ b3@3 ~ e3@2 b3@10 ~@2", C: "b3@2 b3@7 ~ b3@2 b3@3 ~ c4@3 ~ b3@3 ~",
  D: "a3@2 d3@9 ~@13", E: "b3@2 a3@3 ~ b3@3 ~ a3@2 b3@3 ~ c4@3 ~ b3@3 ~", F: "d4@5 ~@7", G: "g4@2 e4@3 ~ g4@12 ~@6",
  H: "g4@2 e4@3 ~ g4@5 ~ f#4@3 ~ g4@3 ~ b3@3 ~", I: "e4@2 d4@9 ~@13", J: "b3@2 b3@3 ~ b3@3 ~ b3@2 b3@3 ~ c4@3 ~ b3@3 ~",
  K: "b3@2 a3@3 ~ b3@3 ~ a3@2 b3@3 ~ c4@2 b3@5 ~",
})).s("gm_pan_flute").gain(0.48)

// other · pad poly · "Dolores 2"
const pad_poly = note(`<
  ~@7 A B C D A B E F ~ G H I A B J D ~@4 A B E F ~@12 A B K F ~ G H I A B J D ~@21
>`.pickRestart({
  A: "~@16 g4@3 ~ a4@3 ~", B: "b4@2 e4@3 ~ b4@3 ~ e4@2 b4@10 ~@2", C: "b4@2 b4@7 ~ b4@2 b4@3 ~ c5@3 ~ b4@3 ~",
  D: "a4@2 d4@9 ~@13", E: "b4@2 a4@3 ~ b4@3 ~ a4@2 b4@3 ~ c5@3 ~ b4@3 ~", F: "d5@5 ~@7", G: "g5@2 e5@3 ~ g5@12 ~@6",
  H: "g5@2 e5@3 ~ g5@5 ~ f#5@3 ~ g5@3 ~ b4@3 ~", I: "e5@2 d5@9 ~@13", J: "b4@2 b4@3 ~ b4@3 ~ b4@2 b4@3 ~ c5@3 ~ b4@3 ~",
  K: "b4@2 a4@3 ~ b4@3 ~ a4@2 b4@3 ~ c5@2 b4@5 ~",
})).s("gm_pad_poly").gain(0.48)

// chords · acoustic guitar nylon · "Guitare"
const acoustic_guitar_nylon = note(`<
  A@2 B@2 A@2 C@2 A@2 C@2 A@2 C@2 A@2 C@2 A@2 C@2 A@2 C@2 A@2 C@2 D E D E D E D E A@2 C@2 A@2 C@2 A@2 C@2 A@2 C@2 D E D
  E D E D E A@2 C@2 A@2 C@2 A@3 F
>`.pickRestart({
  A: "[e3,g3,b3,e4] [e3,g3,b3,e4]@2 [e3,g3,b3,e4]@2 [e3,g3,b3,e4] [e3,g3,b3,e4]@2 [e3,g3,b3,e4]@2 [e3,f#3,b3,e4]@2", // Em Esus2
  B: "[d3,f#3,a3,d4] [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4] [d3,f#3,a3,d4]@2 [d3,f#3,b3]@2 [d3,e3,a3,d4]@2", // D Bm Dsus2
  C: "[d3,f#3,a3,d4] [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4] [d3,f#3,a3,d4]@2 [d3,f#3,a3,d4]@2 [d3,e3,a3,d4]@2", // D Dsus2
  D: "~ d4@11, c3, ~ [d3,g3]@23", E: "~ b3@11, b2, ~ [d3,g3]@23", F: "[e3,g3,b3,e4]@19 ~@5",
})).s("gm_acoustic_guitar_nylon").gain(0.19)

// other · epiano1 · "Piano"
const epiano1 = note(`<
  ~@10 A B ~@2 C D ~@2 E F ~@2 G@2 H@2 I J ~@2 K L ~@8 H@2 I J ~@2 M N ~@2 E F ~@2 K L ~@8 H@2 I O P Q R S T@3 U
>`.pickRestart({
  A: "~@12 a4@2 ~ g4 a4@3 ~ f#4@3 ~", B: "d4@19 ~@5", C: "a4@5 ~ f#4@5 ~", D: "a4@19 ~@5",
  E: "b3@2 a3@3 ~ b3@3 ~ a3@2 b3@3 ~ a3@3 ~ b3@3 ~", F: "f#3@2 g3@3 ~ f#3@3 ~ g3@2 f#3@3 ~ g3@3 ~ f#3@3 ~",
  G: "[f#4@10 ~@2 a4@31 ~@5]/2", H: "b3@2 a3@3 ~ g3@3 ~ f#3@2 g3@3 ~ f#3@3 ~ a3@3 ~",
  I: "b3@2 a3@3 ~ g3@3 ~ f#3@2 g3@3 ~ f#3@8", J: "f#3@19 ~@5", K: "a4@5 ~ b4@5 ~", L: "d5@19 ~@5", M: "f#5@5 ~ g5@5 ~",
  N: "a5@5 ~ f#5@5 ~", O: "f#3@5 ~ a3@5 ~", P: "b3@5 ~ d4@5 ~", Q: "f#4@10 ~@2 a4@2 ~ g4 a4@3 ~ g4@3 ~",
  R: "d4@5 ~ b3@5 ~", S: "a3@5 ~ g3@5 ~", T: "f#3@5 ~ d3@5 ~", U: "e3@19 ~@5",
})).s("gm_epiano1").gain(0.19)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@4 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 D@8 A@2 B@2 A@2 B@2
  E@3 ~
>`.pickRestart({
  A: "[b3,e4,g4]/2", B: "[a3,d4,f#4]/2", C: "[[g3,d4]@187 ~@5, d3@91 ~@101]/8", D: "[[d3,g3,d4]@91 ~@5]/4",
  E: "[b3,e4,g4]/3", // Em
})).s("gm_string_ensemble_1").gain(0.03)

// chords · distortion guitar · "Distortion"
const distortion_guitar = note("<~@32 A B A B A B A C ~@16 A B A B A B A C ~@12>".pickRestart({
  A: "[d3,g3,d4]", B: "b2@2 c3@4 b2@4 c3@2 b2@4 c3@4 b2@3 ~, [g2,d3,g3]",
  C: "b2@2 c3@4 b2@4 c3@2 b2@4 c3@4 b2@3 ~, [g2,d3,g3,g4]", // G5
})).s("gm_distortion_guitar").gain(0.48)

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

// drums · kick
const kick = s("bd").struct("<~@3 A B@11 C B@23 ~ B@23 ~ B@12>".pickRestart({
  A: "~@4 x!2", B: "x", C: "x ~@3 x!2",
})).gain(0.19)

// drums · rim
const rim = s("rim").struct(`<
  ~@4 A B C B A B C B A B C B A B C B A B C B A B C B A B C B ~@8 A B C B A B C B A B C B A B C B ~@8 A B C B A B C B A
  B C ~
>`.pickRestart({
  A: "~@5 x ~@6", B: "~@5 x ~@2 x ~ x ~", C: "~@5 x ~@2 x ~@3",
})).gain(0.19)

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~ B ~
>`.pickRestart({
  A: "~@2 x", B: "~@5 x",
})).gain(0.09)

// drums · snare
const snare = s("sd").struct("<~@32 A@6 B C ~@16 A@6 B C ~@12>".pickRestart({
  A: "~ x", B: "~@2 x!2", C: "x ~@5 x ~@3 x!3 ~@11",
})).gain(0.19)

// drums · low tom
const low_tom = s("lt").struct("<~@39 [~@5 x] ~@23 [~@5 x] ~@12>").gain(0.19)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  [x!6]!4
  [x ~ x ~ x ~ x ~ x ~ x!2]!28
  ~@8
  [x ~ x ~ x ~ x ~ x ~ x!2]!16
  ~@8
  [x ~ x ~ x ~ x ~ x ~ x!2]!11
  x
>`).gain(0.09)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@11 A ~@7 A ~@7 A ~ B ~ B ~ B ~ C ~@11 A ~@3 A ~ B ~ B ~ B ~ C ~@12
>`.pickRestart({
  A: "~@5 x", B: "~@4 x!2", C: "~@2 x",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@32 A B A B A B@2 ~@17 A B A B A B@2 ~@13>".pickRestart({
  A: "~@3 x ~@6 x ~", B: "~ x ~@2",
})).gain(0.31)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@11 A ~@7 A ~@7 A ~@19 A ~@3 A ~@20>".pickRestart({
  A: "~@2 x",
})).gain(0.25)

// drums · china
const china = s("cr").struct("<~@16 A ~@7 A ~@7 A@7 ~ A ~@7 A ~@7 A@7 ~ A ~@7 A ~@2 A>".pickRestart({
  A: "x",
})).gain(0.19)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [~@2 x]!28 ~@8 [~@2 x]!16 ~@8 [~@2 x]!10 [~@4 x!2] ~>").gain(0.19)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~@4 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 ~@8 A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A
  B A ~
>`.pickRestart({
  A: "~@5 x ~@2 x ~@3", B: "~@5 x ~@2 x ~ x ~",
})).gain(0.49)

// drums · congas
const congas = s("conga:33").struct(`<
  ~@4 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 ~@8 A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A
  B A ~
>`.pickRestart({
  A: "~@5 x ~@2 x ~@3", B: "~@5 x ~@2 x ~ x ~",
})).gain(0.59)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 A@28 B@7 C A@16 B@7 C A@11 D>".pickRestart({
  A: "x!6", B: "x!2 ~ x ~ x!2 ~ x ~ x ~", C: "x ~ x ~@3 x ~@3 x!3 ~@3 x ~@3 x ~@3", D: "x",
})).gain(0.47)

// drums · triangle
const triangle = s("triangles:35").struct("<~@28 A ~@15 A ~@7 A ~@15 A ~@7>".pickRestart({
  A: "x",
})).gain(1.62)

stack(
  pan_flute, pad_poly, acoustic_guitar_nylon, epiano1, string_ensemble_1, distortion_guitar, bass, kick, rim, rim_soft,
  snare, low_tom, pedal_hat, mid_tom, open_hat, high_tom, china, china_soft, tambourine, bongos, congas, cabasa,
  triangle
)

More by The Cranberries