Strudelify

Will You Remember?

The Cranberries

KeyG majorTempo180 bpm
0:00/0:00
// Will You Remember? — The Cranberries
// 180 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 3/4 at bar 1) are rendered on a constant 3/4 grid of one bar per cycle
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(180/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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(`<
  ~@16 A@2 B C A@2 D E A@2 F G H I J ~ A@2 K@2 A@2 D E A@2 F C L@2 J ~@17 A@2 F C A@2 D E A@2 F M@2 I J ~@17 A@2 N C A@2
  D E A@2 F C O I J ~@25
>`.pickRestart({
  A: "[d4@4 ~ e4@4 ~@2 f4@2 g4@7 ~ a4@4 ~@2 g4@4 ~]/2", B: "e4@9 ~@2 d4@4 ~", C: "c4@13 ~@3", D: "e4@13 f4@2 ~",
  E: "e4@13 ~@3", F: "e4@4 ~ e4@4 ~@2 d4@4 ~", G: "c4@9 ~@2 e4@4 ~", H: "f4@4 ~ e4@4 ~@2 d4@4 ~",
  I: "c4@4 ~ a3@4 ~@2 e4@4 ~", J: "d4@13 ~@3", K: "[e4@4 ~ e4@2 ~ d4@5 c4@15 ~@4]/2",
  L: "[f4@4 ~ e4@4 ~@2 d4@2 c4@7 ~ a3@4 ~@2 e4@4 ~]/2", M: "[c4@10 ~ e4@2 f4@7 ~ e4@4 ~@2 d4@5]/2", N: "e4@10 ~ d4@4 ~",
  O: "f4@4 ~ e4@4 ~@2 d4@5",
})).s("gm_pan_flute").gain(0.48)

// other · pad poly · "Dolores 2"
const pad_poly = note(`<
  ~@16 A@2 B C A@2 D E A@2 F G H I J ~ A@2 K@2 A@2 D E A@2 F C L@2 J ~@17 A@2 F C A@2 D E A@2 F M@2 I J ~@17 A@2 N C A@2
  D E A@2 F C O I J ~@25
>`.pickRestart({
  A: "[d5@4 ~ e5@4 ~@2 f5@2 g5@7 ~ a5@4 ~@2 g5@4 ~]/2", B: "e5@9 ~@2 d5@4 ~", C: "c5@13 ~@3", D: "e5@13 f5@2 ~",
  E: "e5@13 ~@3", F: "e5@4 ~ e5@4 ~@2 d5@4 ~", G: "c5@9 ~@2 e5@4 ~", H: "f5@4 ~ e5@4 ~@2 d5@4 ~",
  I: "c5@4 ~ a4@4 ~@2 e5@4 ~", J: "d5@13 ~@3", K: "[e5@4 ~ e5@2 ~ d5@5 c5@15 ~@4]/2",
  L: "[f5@4 ~ e5@4 ~@2 d5@2 c5@7 ~ a4@4 ~@2 e5@4 ~]/2", M: "[c5@10 ~ e5@2 f5@7 ~ e5@4 ~@2 d5@5]/2", N: "e5@10 ~ d5@4 ~",
  O: "f5@4 ~ e5@4 ~@2 d5@5",
})).s("gm_pad_poly").gain(0.48)

// other · pan flute · "Flžte 2"
const pan_flute_2 = note(`<
  ~@48 A B A C A D E@2 A B A C B F G@2 ~@16 A B A C A D E@2 A B A C B F G@2 ~@40
>`.pickRestart({
  A: "d#5@2 ~ e5@2 f5@2 ~ f#5@2 ~ g5@2 g#5@2 ~", B: "a5@2 ~ g#5@2 g5@2 ~ f#5@2 ~ f5@2 e5@2 ~", C: "a5@13 ~@3",
  D: "a5@2 ~ g#5@2 g5@2 ~ f5@2 ~ e5@2 d#5@2 ~", E: "[e5@29 ~@3]/2", F: "d5@2 ~ c#5@2 c5@2 ~ c#5@2 ~ d5@2 e5@2 ~",
  G: "[d5@25 ~@7]/2",
})).s("gm_pan_flute").gain(0.48)

// other · acoustic guitar nylon · "Guitare"
const acoustic_guitar_nylon = note(`<
  ~@32 A B C D A B C@2 A B C D A B E@2 ~@16 F@2 G H I J K@2 I@2 G L@2 M N@2 ~@56
>`.pickRestart({
  A: "a4@4 ~ a4@2 ~ a4@2 ~ a4@2 a4@2 ~", B: "g4@4 ~ g4@2 ~ g4@2 ~ g4@2 g4@2 ~", C: "e4@4 ~ e4@2 ~ e4@2 ~ e4@2 e4@2 ~",
  D: "c4@4 ~ c4@2 ~ c4@2 ~ c4@2 c4@2 ~", E: "[f4@29 ~@3]/2", F: "d5@5 d5@2 ~ d5@2 ~ d5@2 d5@2 ~",
  G: "a5@4 ~ g5@4 ~@2 f5@4 ~", H: "e5@7 ~", I: "d5@4 ~ d5@2 ~ d5@2 ~ d5@2 d5@2 ~", J: "d5@4 ~ d5@4 ~@2 d5@4 ~",
  K: "[e5@29 ~@3]/2", L: "[e5@10 ~ e5@2 f5@7 ~ e5@4 ~@2 d5@5]/2", M: "c5@4 ~ a4@4 ~@2 e5@4 ~", N: "[d5@29 ~@3]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.49)

// other · epiano1 · "Piano"
const epiano1 = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A B A C A@2 B@2 A@2 B@2 A@2 B@2 A B D C A@2 B@2 A@2 B@2 A@2 B@2 A B E@2 F@2 G@2 F@2 G@2 F@2
  G@2 F G E@2 A@2 B@2 A@2 B@2 A@2 B@2 A B H C F@2 G@2 F@2 G@2 F@2 G@2 F G E@2 A@2 B@2 A@2 B@2 A@2 B@2 A B H C F@2 G@2
  F@2 G@2 F@2 G@2 A B H C A B H C A B I F
>`.pickRestart({
  A: "d4@4 ~ a4@4 ~@2 a4@4 ~", B: "c4@4 ~ g4@4 ~@2 g4@4 ~", C: "d4@13 ~@3", D: "d4@13 e4@2 ~", E: "[d4@29 ~@3]/2",
  F: "a4@13 ~@3", G: "g4@13 ~@3", H: "d4@10 ~@3 e4@2 ~", I: "d4@4 ~ a4@4 ~@2 g4@4 ~",
})).s("gm_epiano1").gain(0.48)

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

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A@2 B A@7 B A@4 ~ A@2 B A@7 B A@4 ~ C@2 A@2 C@2 A@2 C@2 A@2 ~@2 A ~ A@2 B A@7 B A@4 ~ C@2 A@2 C@2 A@2 C@2 A@2 ~@2
  A D A@2 B A@7 B A@4 ~ C@2 A@2 C@2 A@2 C@2 A@2 ~@2 A ~@3 A D ~@2 A@2
>`.pickRestart({
  A: "x", B: "x ~@4 x ~@10", C: "~@11 x ~@4", D: "~@5 x ~@10",
})).gain(0.1)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A@2 B A@3 C A@3 B A@3 ~@2 A@2 B A@3 C A@3 B A@3 ~@2 A@3 D A@3 D A@3 D ~@4 A@2 B A@3 C A@3 B A@3 ~@2 A@3 D A@3 D
  A@3 D ~@4 A@2 B A@3 C A@3 B A@3 ~@2 A@3 D A@3 D A@3 D ~@12
>`.pickRestart({
  A: "~@5 x ~@5 x ~@4", B: "~@3 x ~@7 x ~@4", C: "~@11 x ~@4", D: "~@5 x ~@10",
})).gain(0.1)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@18 A ~@4 A ~@2 A ~@7 A ~@4 A ~@2 A ~@5 B@2 ~@2 B@2 ~@2 B@2 ~@2 C@2 ~@4 A ~@4 A ~@2 A ~@5 B@2 ~@2 B@2 ~@2 B@2 ~@2 C@2
  ~@4 A ~@4 A ~@2 A ~@5 B@2 ~@2 B@2 ~@2 B@2 ~@2 C@2 ~@2 C@2 ~@2 C@2 ~@2
>`.pickRestart({
  A: "~@12 x!2 ~@2", B: "x", C: "x ~@4 x ~@5 x ~@4",
})).gain(0.05)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A@14 B@2 A@14 B@2 C@2 A@2 C@2 A@2 C@2 A@2 ~@2 B@2 A@14 B@2 C@2 A@2 C@2 A@2 C@2 A@2 ~@2 B D A@14 B@2 C@2 A@2 C@2
  A@2 C@2 A@2 ~@2 B@2 ~@2 B D ~@2 A B
>`.pickRestart({
  A: "x ~@4 x ~@5 x ~@4", B: "x", C: "~@11 x ~@4", D: "x ~@4 x ~@10",
})).gain(0.1)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@48 A@2 ~@2 A@2 ~@2 A@2 ~@2 B@2 ~@18 A@2 ~@2 A@2 ~@2 A@2 ~@2 B@2 ~@18 A@2 ~@2 A@2 ~@2 A@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2
>`.pickRestart({
  A: "x ~@4 x ~@10", B: "x ~@4 x ~@5 x ~@4",
})).gain(0.05)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@48 A@2 ~@2 A@2 ~@2 A@2 ~@2 B@2 ~@18 A@2 ~@2 A@2 ~@2 A@2 ~@2 B@2 ~@18 A@2 ~@2 A@2 ~@2 A@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@2
>`.pickRestart({
  A: "x ~@4 x ~@10", B: "x ~@4 x ~@5 x ~@4",
})).gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@48 A@2 B C A@2 B C A@2 B C D@2 ~@18 A@2 B C A@2 B C A@2 B C D@2 ~@18 A@2 B C A@2 B C A@2 B C D@2 ~ E D@2 ~ E D@2 ~@2
>`.pickRestart({
  A: "~ x ~@4 x ~@9", B: "x ~@4 x ~@5 x ~@4", C: "x", D: "~ x ~ x ~@2 x ~ x ~@2 x ~ x ~@2", E: "~@13 x ~@2",
})).gain(0.1)

// drums · open hat
const open_hat = s("oh").struct("<~@30 A ~@15 A ~@15 A ~@15 A ~@15 A ~@15 A ~@15 A ~@3 A ~@3 A ~>".pickRestart({
  A: "x",
})).gain(0.1)

// drums · ride
const ride = s("rd").struct("<~@30 A ~@15 A ~ B@14 A ~@15 A ~ B@14 A C ~@14 A ~ B@14 A ~ B@2 A C B@3 A>".pickRestart({
  A: "x", B: "x ~@4 x ~@5 x ~@4", C: "~@5 x ~@10",
})).gain(0.09)

// drums · china
const china = s("cr").struct("<~@135 x>").gain(0.1)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@16 A@14 B ~ A@14 B ~ C@2 A@2 C@2 A@2 C@2 A@2 ~@2 B ~ A@14 B ~ C@2 A@2 C@2 A@2 C@2 A@2 ~@2 B D A@14 B ~ C@2 A@2 C@2
  A@2 C@2 A@2 ~@2 B ~@3 B D ~@2 A B
>`.pickRestart({
  A: "x ~@4 x ~@5 x ~@4", B: "x", C: "~@11 x ~@4", D: "~@5 x ~@10",
})).gain(0.53)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  ~@18 A ~@4 A ~@2 A ~@7 A ~@4 A ~@2 A ~@23 A ~@4 A ~@2 A ~@23 A ~@4 A ~@2 A ~@29
>`.pickRestart({
  A: "~@12 x!2 ~@2",
})).gain(0.26)

stack(
  pan_flute, pad_poly, pan_flute_2, acoustic_guitar_nylon, epiano1, bass, kick, snare, snare_soft, hihat, hihat_soft,
  low_tom, mid_tom, open_hat, ride, china, cabasa, cabasa_soft
)

More by The Cranberries