Strudelify

I Still Do

The Cranberries

KeyG majorTempo56 bpm
0:00/0:00
// I Still Do — The Cranberries
// 56 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/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 48 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(56/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.

// chords · pad poly
const pad_poly = note("<~@8 A@7 B@8 C@8 D@8 E@2 ~@7>".pickRestart({
  A: "[~@4 a4 b4@2 [a4,c5]@2 d5@2 [a4,c5]@2 g4 a4@5 ~ a4 b4@2 c5@2 d5@2 [g4,c5,e5]@2 [g4,c5]@2 ~@5 [f#4,a4,d5] [f#4,a4,d5]@2 [f#4,a4,d5]@2 a4@2 [f#4,a4,c5]@2 [f#4,a4,d5]@2 [g4,a4,d5]@2 [g4,a4,e5]@2 ~ [g4,a4,d5] [g4,a4,e5]@2 [g4,a4,d5]@2 a4@2 [g4,a4,c5]@2 c5 d5@5 ~@2 b4@2 c5@2 d5@2 [a4,c5]@2 ~ a4@6 ~ b4@2 c5@2 d5@2 [g4,c5,e5]@2 d5@6 ~ [f#4,a4,d5] [f#4,a4,d5]@2 [f#4,a4,d5]@2 a4@2 [f#4,a4,c5]@2 [f#4,a4,d5]@2 [g4,a4,d5], ~@29 d5@6 ~@26 g4@16 g4@14 ~@2 g4@18 ~, ~@61 a4@7 a4@3 a4@4 ~@9 a4@16 ~@12, ~@93 c5@2 ~@17]/7", // Am C C5 D F#dim D Gsus2 A7 …
  B: "[~ [g4,a4,e5]@3 [g4,a4,e5]@2 [g4,a4,d5] [a4,d5]@2 a4@2 g4!2 b4 b4@5 ~ [e4,g4]@2 ~ [e4,g4]@3 ~ g4 ~@3 e4@7 ~ b4!2 c5@2 [g4,c5,d5]@2 [c5,e5]@2 a4@37 ~ b4@2 c5@2 d5@2 [a4,c5]@2 ~ a4@6 ~ b4@2 c5@2 d5@2 [g4,c5,e5]@2 d5@6 ~ [f#4,a4,d5] [f#4,a4,d5]@2 [f#4,a4,d5]@2 a4@2 c5!2 [f#4,a4,d5]@2 [g4,a4,d5], ~@7 g4@4 a4@11 a4@4 a4@2 g4@3 g4@12 ~@2 g4@48 g4@14 ~@2 g4@18 ~, ~@11 c5@2 g4@7 ~@7 e4@2 a4@18 f#4@16 ~@21 a4@3 a4@4 ~@9 a4@16 ~@7 [f#4,a4]@2 ~@3, ~@109 c5@2 ~@17]/8", // A7 Gsus2 D5 Em Gsus4 C Am C …
  C: "[~ [g4,a4,e5]@3 [g4,a4,d5] [g4,a4,e5]@2 [a4,d5]@2 [a4,a5]@2 [g4,a4,c5]@2 [a4,b4]@7 ~ b4@2 c5@2 d5@2 [a4,c5]@2 ~ a4@6 ~ b4@2 c5@2 d5@2 [g4,c5,e5]@2 d5@6 ~ [f#4,a4,d5] [f#4,a4,d5]@2 [f#4,a4,d5]@2 a4@2 c5!2 [f#4,a4,d5]@2 [g4,a4,d5]@2 [g4,a4,e5]@3 [g4,a4,e5]@2 [a4,d5]@3 a4@2 c5!2 b4@6 ~@2 b4@2 c5@2 d5@2 [a4,c5]@2 a4@7 ~ b4@2 c5@2 d5@2 [c5,e5]@2 [a4,d5]@7 [f#4,a4,d5] [f#4,a4,d5]@2 [f#4,a4,d5]@2 a4@2 [f#4,a4,c5]@2 [f#4,a4,d5]@2 [g4,a4,d5], ~@7 g4@4 ~@2 g4@16 g4@14 ~@2 g4@18 ~@7 g4@5 a4@9 a4@3 a4@4 ~@9 a4@9 ~@19, ~@20 a4@3 a4@4 ~@9 a4@16 ~@7 [f#4,a4]@2 ~@14 g4@2 g4@30 g4@20 ~, ~@45 c5@2 ~@81]/8", // A7 Gsus2 A7 D5 A Am7 Asus2 Am …
  D: "[~ [g4,a4,e5]@3 d5 e5@2 [a4,d5]@2 a4@2 c5@2 b4@13 ~@2 e5 d5@2 d5@2 a4@11 a4 ~@2 c5@2 d5 ~@10 e5 d5@2 [a4,d5]@2 a4@8 ~@2 c5@2 b4@13 ~@2 e5 d5@2 d5@2 a4@11 a4 ~@2 c5@2 d5 ~@10 e5 d5@2 [a4,d5], ~@4 [g4,a4]@3 g4@4 g4@117, ~@11 a4@22 ~@12 a4@5 a4@13 ~@10 a4@24 ~@12 a4@5 a4@13 ~, ~@31 e4@15 ~ f#4@15 ~@33 e4@15 ~ f#4@15 ~@2]/8", // A7 D5 Gsus2
  E: "[~ a4@10 c5@2 b4@9 ~@10]/2",
})).s("gm_pad_poly").gain(0.48)

// chords · pad poly · soft notes
const pad_poly_soft = note("<~@15 A@4 ~ B@5 ~@23>".pickRestart({
  A: "[~@13 d5 e5@5 ~ g5@2 a5 g5@3 a5 g5@2 a5@2 g5@7 ~ b5!2 c6@2 d6@2 e6@2 a5@16 ~]/4",
  B: "[~@4 a5 b5@2 c6@2 d6@2 c6@2 g5 a5@5 ~ a5 b5@2 c6@2 d6@2 e6@2 d6@6 ~ d6 d6@2 d6@2 a5@2 c6@2 d6@2 d6@2 e6@2 ~ d6 e6@2 d6@2 ~@2 c6@2 b5@6 ~@13]/5",
})).s("gm_pad_poly").gain(0.16)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B C@2 A B C@2 A B C@2 A B C@2 A B D@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 ~@4
>`.pickRestart({
  A: "a3 c4 b3 e4 b3 c4 a3 b3 a3 c4 b3 e4@2 b3 a3 b3",
  B: "~ e3 g3 c4 e4 ~@2 e4 c4 b3@2 g3@2 ~ e4 c4, c3@5 c4@2 ~@9, ~@6 c3@7 c3@2 ~",
  C: "[~ g3 e4 d4 g3 e4 d4 g3 e4 ~@2 e4@3 b3 [g3,a3,d4,e4]@2 [g3,a3,d4,e4] [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 ~@2 e2 [e2,g3,a3,d4,e4]@2 [d3,g3,a3,d4,e4]@2 [c3,g3,a3,d4,e4]@2 [b2,g3,a3,d4,e4], [d3,f#3]@9 d4@2 ~@21, ~@10 [d3,f#3]@5 ~@8 [e3,g3,a3,d4,e4]@2 ~@7]/2", // Gsus2 Em7 Dsus4 Am7 Em7 D Em7
  D: "[~ g3 e4 d4 g3 e4 d4 g3 e4 ~@2 e4@3 b3 [g3,a3,d4,e4]@2 [g3,a3,d4,e4] [g3,a3,d4,e4]@2 [g3,a3,d4,e4] [g3,a3,d4,e4]@2 ~ e2 [e2,g3,a3,d4,e4]@2 [d3,g3,a3,d4,e4]@2 [c3,g3,a3,d4,e4] [g3,a3,d4,e4]@2, [d3,f#3]@9 d4@2 ~@21, ~@10 [d3,f#3]@5 ~@8 [e3,g3,a3,d4,e4]@2 ~@7]/2", // Gsus2 Em7 Dsus4 Am7 Gsus2 D Em7
})).s("gm_acoustic_guitar_nylon").gain(0.35)

// chords · distortion guitar
const distortion_guitar = note(`<
  A B C@2 A B D@2 A B D@2 A B D@2 A B D@2 E F G@4 H@4 I@4 J@4 G@4 K@2 L ~@3
>`.pickRestart({
  A: "a3 c4 b3 e4 b3 c4 a3 b3 a3 c4 b3 e4@2 b3 a3 b3", B: "c3 e3 g3 c4 e4 c4@2 e4 c4 b3@2 g3@3 e4 c4",
  C: "[[d3,f#3] g3 e4 d4 g3 e4 d4 g3 e4 d4@2 e4@3 b3 [g3,a3,d4,e4]@2 [g3,a3,d4,e4] [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 ~@2 e2 [e2,g3,a3,d4,e4]@2 [d3,g3,a3,d4,e4]@2 [c3,g3,a3,d4,e4]@2 [b2,g3,a3,d4,e4], ~@23 [e3,g3,a3,d4,e4]@2 ~@7]/2", // D Gsus2 Em7 Dsus4 Am7 Em7
  D: "[[d3,f#3] g3 e4 d4 g3 e4 d4 g3 e4 d4@2 e4@3 b3 [g3,a3,d4,e4]@2 [g3,a3,d4,e4] [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 ~ [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 [g3,a3,d4,e4]]/2", // D Gsus2
  E: "[a2,e3,a3]@3 ~ [a2,e3,a3]@3 ~ [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@2", // A5
  F: "[c3,g3,c4]@4 [c3,g3,c4]@3 ~ [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2", // C5
  G: "[[d3,f#3,d4]@4 [d3,f#3,d4]@3 ~ [d3,f#3,d4]@2 [d3,f#3,d4] [d3,f#3,d4]@2 [f#3,d4]@2 [e3,g3]@2 [e3,g3] [e3,g3]@2 [e3,g3]@2 ~ [e3,g3]@3 ~ [e3,g3]!2 [e3,g3]@2 [e3,g3] [a2,e3,a3]@3 ~ [a2,e3,a3]@3 ~ [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@2 [c3,g3,c4]@4 [c3,g3,c4]@3 ~ [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2, ~@13 d3@51]/4", // D Em A5 C5
  H: "[[d3,f#3,d4]@4 [d3,f#3,d4]@3 ~ [d3,f#3,d4]@2 [d3,f#3,d4] [d3,f#3,d4]@2 [f#3,d4]@2 [e3,g3]@2 [e3,g3] [e3,g3]@2 [e3,g3]@2 ~ [e3,g3]@3 ~ [e3,g3]!2 [e3,g3]@2 [e3,g3] a3 c4 b3 e4 b3 c4 a3 b3 a3 c4 b3 e4@2 b3 a3 b3 c3 e3 g3 c4 e4 c4@2 e4 c4 b3@2 g3@3 e4 c4, ~@13 d3@51, ~@16 [a2,e3]@3 ~@13]/4", // D Em A5
  I: "[f#3 g3 e4 d4 g3 e4 d4 g3 e4 d4@2 e4@3 b3 [g3,a3,d4,e4]@2 [g3,a3,d4,e4] [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 ~ [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 [g3,a3,d4,e4] a3 c4 b3 e4 b3 c4 a3 b3 a3 c4 b3 e4@2 b3 a3 b3 c3 e3 g3 c4 e4 c4@2 e4 c4 b3@2 g3@3 e4 c4, d3]/4", // Gsus2
  J: "[f#3 g3 e4 d4 g3 e4 d4 g3 e4 d4@2 e4@3 b3 [g3,a3,d4,e4]@2 [g3,a3,d4,e4] [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 ~ [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 [g3,a3,d4,e4]@2 [g3,a3,d4,e4] [a2,e3,a3]@3 ~ [a2,e3,a3]@3 ~ [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@2 [c3,g3,c4]@4 [c3,g3,c4]@3 ~ [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2 [c3,g3,c4] [c3,g3,c4]@2, d3]/4", // Gsus2 A5 C5
  K: "[[d3,f#3,d4]@4 [f#3,d4]@3 ~ [f#3,d4]@2 [f#3,d4] [f#3,d4]@2 [f#3,d4]@2 [e3,g3]@2 [e3,g3] [e3,g3]@2 [e3,g3]@2 ~ [e3,g3]@3 ~ [e3,g3]!2 [e3,g3]@2 [e3,g3], ~@4 d3@11 ~@17]/2", // D Em
  L: "[a2,e3,a3]@3 ~@5", // A5
})).s("gm_distortion_guitar").gain(0.03)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@4 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@4
>`.pickRestart({
  A: "[e3,a3,c4]", B: "[e3,g3,c4]", C: "[f#3,a3,d4]", D: "[g3,a3,e4]",
})).s("gm_string_ensemble_1").gain(0.1)

// chords · piano
const piano = note("<~@4 A B C@2 A B C@2 A B C@2 ~@28 A B D E>".pickRestart({
  A: "[e3,a3]@13 ~@3", B: "[g3,c4]@13 ~@3", C: "[[f#3,a3,d4]@14 ~ [g3,a3,d4,e4]@16 ~]/2", D: "[f#3,a3,d4]@13 ~@3",
  E: "[g3,a3,e4]@3 ~@13", // A7
})).s("gm_piano").gain(0.19)

// bass · acoustic bass
const bass = note(`<
  ~@3 A B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C E F
>`.pickRestart({
  A: "~@7 e2!2 e2@2 d2@2 c2@2 b1", B: "a1@6 ~ a1 a1@6 ~@2", C: "c2@6 ~ c2 c2@6 ~@2",
  D: "[d2@6 ~ d2 d2@6 ~ e2@2 e2 e2@2 e2@2 ~ e2@2 e2@2 d2@2 c2@2 b1]/2", E: "d2@6 ~ d2@7 ~@2", F: "e2@3 ~@13",
})).s("gm_acoustic_bass").gain(0.48)

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

// drums · snare
const snare = s("sd").struct("<~@4 A@3 B A@3 C A@3 D A@3 E A@3 B A@3 F A@3 B A@3 E A@3 B A@3 G H@4>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~ x ~@4 x ~@5 x", C: "~@2 x ~ x ~@5 x!3 ~@3", D: "~@2 x ~ x ~@10 x",
  E: "~@2 x ~ x ~@5 x!3 ~ x!2", F: "~@2 x ~ x ~@4 x ~ x!4 ~", G: "~@2 x ~ x ~@2 x!6 ~@3", H: "~ x ~@2",
})).gain(0.1)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@7 B A@7 B A@15 B A@7 C A@3 D>".pickRestart({
  A: "x!16", B: "x!12 ~ x!3", C: "x!8 ~@8", D: "x!5 ~@11",
})).gain(0.1)

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@15 x] ~@40 x ~@3>").gain(0.1)

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

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@3 [~@8 x!2 ~ x ~ x ~@2] ~@40 [~@7 x]!3 ~>").gain(0.1)

// drums · high tom
const high_tom = s("ht").struct("<~@7 A ~@3 B ~@3 C ~@3 B ~@3 A ~@7 A ~@3 B ~@3 A ~@3 D ~@4>".pickRestart({
  A: "~@11 x ~@4", B: "~@13 x ~@2", C: "~@9 x ~@6", D: "~@7 x!6 ~@3",
})).gain(0.17)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A B ~@2 A C ~ B A C ~@2 A C ~ B D@2 E F D@2 E G A C H I A B H J D@2 E F D@2 E K A B ~@2
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~@13 x ~@2", D: "x ~@12 x ~ x", E: "x ~@14 x", F: "~ x!2 ~ x ~@3",
  G: "~@2 x ~ x ~@3 x ~@2 x!4 ~", H: "~@15 x", I: "~@7 x!2 ~@7", J: "~@7 x!2 ~@5 x ~", K: "~ x!2 ~@5",
})).gain(0.1)

// drums · tambourine
const tambourine = s("tb").struct("<~@20 A@3 B A@3 B ~@8 A@3 B A@3 B ~@4>".pickRestart({
  A: "~ x ~ x", B: "~ x!2 ~@5",
})).gain(0.1)

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

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

stack(
  pad_poly, pad_poly_soft, acoustic_guitar_nylon, distortion_guitar, string_ensemble_1, piano, bass, kick, snare, hihat,
  low_tom, mid_tom, mid_tom_soft, high_tom, crash, tambourine, ride, cabasa
)

More by The Cranberries