Strudelify

When You're Gone

The Cranberries

KeyE♭ majorTempo92 bpm
0:00/0:00
// When You're Gone — The Cranberries
// 92 bpm, 6/8, key D# 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: duplicate parts dropped: ch 2 "Dolores" pan flute (copy of ch 3 pad poly)
// note: Full arrangement: all 153 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(92/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 · pad poly
const pad_poly = note(`<
  A@4 B@4 C@2 D@2 E@2 F@2 G H I J@3 K ~ G H L M@3 K N O P@4 Q R N S T@2 U@2 V W@2 X Y Z AA AB@2 AC AD X Y Z AA AB@2 AC
  AE C ~ AF ~ E ~ F ~ G H AG M@3 K ~ G H L M@3 K AH AI AJ@4 AK AL@2 AI AM@2 U@2 V W@2 X Y Z AN@3 AO AP AQ AR AS AT@3 AO
  AU C ~ AF ~ E ~ AV AW C ~ AF ~ E ~ AV AW ~@17
>`.pickRestart({
  A: "eb5@5 ~ eb5@2 eb5@4 ~@12", B: "d5@5 ~ d5@2 d5@4 ~@12", C: "[bb4,eb5,g5]@5 ~ [bb4,eb5,g5]@2 [bb4,eb5,g5]@4 ~@12",
  D: "[c5,eb5,g5]@5 ~ [c5,eb5,g5]@2 [c5,eb5,g5]@4 ~@12", E: "[g4,d5,f5]@5 ~ [g4,d5,f5]@2 [g4,d5,f5]@4 ~@12",
  F: "[bb4,d5,f5]@5 ~ [bb4,d5,f5]@2 [bb4,d5,f5]@4 ~@12", G: "~@6 g4@5 ~", H: "bb4@5 ~ c5@5 ~",
  I: "d5@13 ~@3 eb5@3 ~ d5@3 ~",
  J: "[c5@10 ~@2 bb4@3 ~ ab4@3 ~ g4@7 ~ bb4@3 ~ c5@3 ~ g4@22 ~@2 bb4@5 ~ ab4@2 g4@3 ~]/3", K: "g4@3 ~ f4@7 ~",
  L: "d5@15 ~ eb5@3 ~ d5@3 ~",
  M: "[c5@10 ~@2 bb4@3 ~ ab4@3 ~ g4@7 ~ bb4@3 ~ c5@3 ~ g4@22 ~@2 bb4@3 ~ ab4@3 ~ g4@3 ~]/3", N: "~@20 eb5@3 ~",
  O: "eb5@18 ~@2 f5@3 ~",
  P: "[eb5@10 ~@2 f5@3 ~ eb5@3 ~ d5@7 ~ f5@3 ~ g5@3 ~ c5@15 ~@9 d5@3 ~ c5@3 ~ c5@7 ~ bb4@3 ~ c5@3 ~ bb4@10 ~@2]/4",
  Q: "~@12 bb4@3 ~ ab4@3 ~ g4@3 ~", R: "g4@4 f4@7 ~", S: "eb5@19 ~ f5@3 ~",
  T: "[eb5@10 ~@2 f5@3 ~ eb5@3 ~ d5@7 ~ f5@3 ~ g5@3 ~ c5@8 ~@4]/2",
  U: "[~@12 d5@3 ~ c5@3 ~ c5@7 ~ bb4@3 ~ c5@3 ~ bb4@10 ~@2]/2", V: "~@8 bb4@3 ~ c5@3 ~ ab4@3 ~ g4@3 ~",
  W: "[g4@8 f4@20 ~@14 eb5@2 eb5@3 ~]/2", X: "bb5 ~ ab5 ~", Y: "g5@6 ~@6 f5@6 ~@2 f5@3 ~", Z: "eb5 d5",
  AA: "eb5@8 ~@4 eb5@3 ~ eb5@3 ~ eb5@3 ~", AB: "[~@4 ab5@3 ~ bb5@3 ~ d5@22 ~@2 d5@3 ~ d5@3 ~ d5@3 ~]/2",
  AC: "eb5@5 ~ [c5,eb5,g5]@3 ~@3", AD: "[c5,eb5,g5]@6 ~@6 [c5,eb5,g5]@3 ~@3 eb5@2 eb5@3 ~",
  AE: "[c5,eb5,g5] ~ [c5,eb5,g5] ~", AF: "[g4,d5,g5]@5 ~ [g4,d5,g5]@2 [g4,d5,g5]@4 ~@12", AG: "d5@19 ~ eb5@3 ~",
  AH: "~@20 [eb5,g5]@3 ~", AI: "[eb5,g5]@19 ~ [f5,ab5]@3 ~",
  AJ: "[[eb5,g5]@10 ~@2 f5@3 ~ eb5@3 ~ d5@7 ~ f5@3 ~ g5@3 ~ c5@15 ~@9 d5@3 ~ c5@3 ~ c5@7 ~ bb4@3 ~ c5@3 ~ bb4@10 ~@2]/4", // Eb
  AK: "~@12 c5@3 ~ bb4@3 ~ g4@3 ~", AL: "[g4@8 f4@31 ~@5 [eb5,g5]@3 ~]/2",
  AM: "[[eb5,g5]@10 ~@2 f5@3 ~ eb5@3 ~ d5@7 ~ f5@3 ~ g5@3 ~ c5@10 ~@2]/2", // Eb
  AN: "[eb5@12 eb5@3 ~ eb5@3 ~ eb5@7 ~ ab5@3 ~ bb5@3 ~ d5@22 ~@2 d5@3 ~ d5@3 ~ d5@3 ~]/3", AO: "eb5@5 ~ g5@3 ~@3",
  AP: "g5@6 ~@6 g5@3 ~@3 eb5@2 eb5@3 ~", AQ: "bb5@5 ~ ab5@5 ~", AR: "g5@10 ~@2 f5@6 ~@2 f5@3 ~", AS: "eb5@5 ~ d5@5 ~",
  AT: "[eb5@10 ~@2 eb5@3 ~ eb5@3 ~ eb5@7 ~ ab5@3 ~ bb5@3 ~ d5@22 ~@2 d5@3 ~ d5@3 ~ d5@3 ~]/3", AU: "g5 ~ g5 ~",
  AV: "[c5,eb5,g5]@5 ~ [c5,eb5,g5]@2 [c5,eb5,g5]@4 g5@6 ~@6", AW: "g5@2 ~@2 g5 ~@3",
})).s("gm_pad_poly").gain(0.48)

// other · pad poly · soft notes
const pad_poly_soft = note("<~@37 A B ~@6 C D@2 ~@37 A E ~@6 F G@2 ~@5 C D@2 ~@49>".pickRestart({
  A: "~@12 bb5@3 ~ ab5@3 ~ g5@3 ~", B: "g5@4 f5@7 ~", C: "~@8 bb5@3 ~ c6@3 ~ ab5@3 ~ g5@3 ~", D: "[g5@2 f5@5 ~@5]/2",
  E: "g5@3 ~ f5@7 ~", F: "~@12 c6@3 ~ bb5@3 ~ g5@3 ~", G: "[g5@8 f5@31 ~@9]/2",
})).s("gm_pad_poly").gain(0.24)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B E C@2 D@2 A@2 B E C@2 D@2 F@2 G@2 H@2 I@2 F@2
  G@2 H@2 I@2 ~@8 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B E C@2 D@2 A@2 B E C@2 D@2 F@2 G@2 H@2 I J F@2 G@2 H@2 I@2 F@2
  G@2 H@2 I@2 F@2 G@2 H@2 I@2 F@2 G@2 H@2 I@2 F@2 G ~@6
>`.pickRestart({
  A: "g4@3 ~ eb4@3 ~ bb3@3 ~ g4@3 ~ eb4@3 ~ bb3@3 ~", B: "g4@3 ~ eb4@3 ~ c4@3 ~ g4@3 ~ eb4@3 ~ c4@3 ~",
  C: "g4@3 ~ d4@3 ~ bb3@3 ~ g4@3 ~ d4@3 ~ bb3@3 ~", D: "bb4@3 ~ d4@3 ~ bb3@3 ~ bb4@3 ~ d4@3 ~ bb3@3 ~",
  E: "g3@3 ~ c4@3 ~ eb4@3 ~ g4@3 ~ eb4@3 ~ c4@3 ~",
  F: "[g3,bb3,eb4]@5 ~ [g3,bb3,eb4]@2 [g3,bb3,eb4]@3 ~ [g3,bb3,eb4]@5 ~ [g3,bb3,eb4]@2 [g3,bb3,eb4]@3 ~", // Eb
  G: "[g3,c4,eb4]@5 ~ [g3,c4,eb4]@2 [g3,c4,eb4]@3 ~ [g3,c4,eb4]@5 ~ [g3,c4,eb4]@2 [g3,c4,eb4]@3 ~", // Cm
  H: "[g3,bb3,d4]@5 ~ [g3,bb3,d4]@2 [g3,bb3,d4]@3 ~ [g3,bb3,d4]@5 ~ [g3,bb3,d4]@2 [g3,bb3,d4]@3 ~", // Gm
  I: "[g3,c4,eb4]@5 ~ [g3,c4,eb4]@2 [g3,c4,eb4]@2 [g3,c4,eb4]@2 [g3,c4,eb4]@5 ~ [g3,c4,eb4]@2 [g3,c4,eb4]@2 [g3,c4,eb4]@2", // Cm
  J: "[g3,c4,eb4]@5 ~ [g3,c4,eb4]@2 [g3,c4,eb4]@2 [g3,c4,eb4]@2 [ab3,c4,eb4]@5 ~ [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2", // Cm Ab
})).s("gm_acoustic_guitar_nylon").gain(0.24)

// chords · acoustic guitar nylon · soft notes · Cm Gm Cm Eb
const acoustic_guitar_nylon_2 = note(`<
  ~@147
  [[g3,c4,eb4]@5 ~ [g3,c4,eb4]@2 [g3,c4,eb4]@3 ~ [g3,c4,eb4]@5 ~ [g3,c4,eb4]@2 [g3,c4,eb4]@3 ~]
  [[g3,bb3,d4]@5 ~ [g3,bb3,d4]@2 [g3,bb3,d4]@3 ~ [g3,bb3,d4]@5 ~ [g3,bb3,d4]@2 [g3,bb3,d4]@3 ~]!2
  [[g3,c4,eb4]@5 ~ [g3,c4,eb4]@2 [g3,c4,eb4]@2 [g3,c4,eb4]@2 [g3,c4,eb4]@5 ~ [g3,c4,eb4]@2 [g3,c4,eb4]@2 [g3,c4,eb4]@2]!2
  [[g3,bb3,eb4]@19 ~@5]
>`).s("gm_acoustic_guitar_nylon").gain(0.08)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon_3 = note(`<
  ~@15 A B@2 ~@5 C B@2 ~@5 C B@2 D@2 E@2 F@2 B@2 D@2 E@2 G@2 ~@16 H I J K L M N O P ~@47 Q@2 R@5 S Q@2 T@7 ~@16
>`.pickRestart({
  A: "~ d4", B: "[eb4@43 ~@5]/2", C: "~@6 d4@5 ~", D: "[c4@17 ~ c4@5 ~]/2", E: "[bb3@43 ~@5]/2", F: "[d4@17 ~ d4@6]/2",
  G: "[d4@43 ~@5]/2", H: "eb4@5 ~ f4@5 ~", I: "g4@10 ~@2 g4@3 ~ f4@3 ~ eb4@3 ~", J: "d4@5 ~ eb4@5 ~",
  K: "d4@10 ~@2 c4@3 ~ d4@3 ~ c4@3 ~", L: "bb3 a3", M: "bb3@2 ~ bb3@3", N: "c4 d4", O: "eb4 f4", P: "g4@19 ~@5",
  Q: "[~@6 f5@5 ~ eb5@5 ~ bb4@5 ~, eb4]/2", R: "[~@6 f5@5 ~ eb5@5 ~ bb4@5 ~ d4@5 ~ f5@5 ~ d5@5 ~ bb4@5 ~@13, eb4]/5",
  S: "~@6 f4@5 ~, eb4", T: "[~@6 f5@5 ~ eb5@5 ~ bb4@5 ~ d4@5 ~ f5@5 ~ d5@5 ~ bb4@5 ~@19 f4@5 ~@13, eb4@11 ~]/7",
})).s("gm_acoustic_guitar_nylon").gain(0.48)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_4 = note("<~@88 A@2 B@6 C@8 ~@22 D ~@7 D ~@18>".pickRestart({
  A: "[~@2 g4@43 ~@3, g3@43 ~@5, ~ eb4@43 ~@4, ~ bb3@19 ~@28]/2",
  B: "[~@2 g4@46 ~@50 f4@43 ~@3, g3 g3@2, ~ [c4,eb4]@143, ~@49 [bb3,d4]@43 ~@4 bb4 [bb3,d4]@43 ~@4, ~@25 g4@47]/6", // Cm Bb
  C: "[~@97 [bb3,d4]@43 ~@6 f4@43 ~@3, g3@139 ~@6 [bb3,d4]@43 ~@4, ~ eb4@48 ~@143, ~ bb3@19 ~@29 [c4,eb4]@143, ~@2 g4@139 ~@3 bb4@43 ~@5]/8", // Bb Cm
  D: "bb3@5 ~@7",
})).s("gm_acoustic_guitar_nylon").gain(0.32)

// other · string ensemble 1
const string_ensemble_1 = note("<~@136 A@2 B@2 C@2 D E A@2 F@2 ~@5>".pickRestart({
  A: "[bb4@10 ~@2 eb4@20 bb4@3 ~ bb4@3 ~ c5@3 ~ d5@3 ~]/2", B: "[d5@10 ~@2 g4@18 ~@2 g4@3 ~ g4@3 ~ ab4@3 ~ bb4@3 ~]/2",
  C: "[bb4@10 ~@2 d4@18 ~@2 g4@3 ~ g4@3 ~ ab4@3 ~ bb4@3 ~]/2", D: "bb4@5 ~ ab4@5 ~", E: "f4@18 ~@2 eb4@3 ~",
  F: "[d5@5 ~ g4@9 ~@9]/2",
})).s("gm_string_ensemble_1").gain(0.1)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@147 A B@2 C D E>".pickRestart({
  A: "~@8 g4@3 ~ g4@3 ~ ab4@3 ~ bb4@3 ~", B: "[bb4@10 ~@2 d4@18 ~@2 g4@3 ~ g4@3 ~ ab4@3 ~ bb4@3 ~]/2",
  C: "c5@5 ~ bb4@5 ~", D: "eb5@19 ~ d5@4", E: "eb5@19 ~@5",
})).s("gm_string_ensemble_1").gain(0.03)

// bass · acoustic bass
const bass = note(`<
  ~@6 A B C D E F G H I J C D E F G H I J C D E F G H I J C D E F G H I J C D E F G H I J K L M N O@2 P Q K L M N O@2 P
  Q K L M N O@2 R S C D E F G H I J C D E F G H I J C D E F G H I J C D E F G H I J K L M N O@2 P Q K L M N O@2 P Q K L
  M N O@2 P Q K L M N O@2 P Q K L M N O@2 P Q K L T ~@6
>`.pickRestart({
  A: "~@20 g1@3 ~", B: "c2@3 ~ bb1@3 ~ g1@3 ~ c2@3 ~ bb1@3 ~ g1@3 ~", C: "eb2@18 ~@2 eb2@3 ~", D: "eb2@19 ~@5",
  E: "c2@18 ~@2 c2@3 ~", F: "c2@19 ~@5", G: "g1@18 ~@2 g1@3 ~", H: "g1@19 ~@5", I: "bb1@18 ~@2 bb1@3 ~",
  J: "bb1@6 ~@2 bb1@3 ~ c2@3 ~ bb1@3 ~ g1@3 ~", K: "eb2@12 eb2@5 ~@3 eb2@3 ~", L: "eb2@8 eb2@3 ~ f2@3 ~ g2@3 ~ eb2@3 ~",
  M: "c2@12 c2@5 ~@3 c2@3 ~", N: "c2@8 c2@3 ~ c2@3 ~ d2@3 ~ c2@3 ~", O: "g1@12 g1@5 ~@3 g1@3 ~",
  P: "ab1@5 ~ ab1@2 ab1@2 ab1@2 ab1@5 ~ ab1@2 ab1@2 ab1@2", Q: "ab1@5 ~ ab1@2 ab1@2 ab1@2 ab1@5 ~ ab1@2 bb1@2 c2@2",
  R: "ab1@12 ab1@5 ~@3 ab1@3 ~", S: "ab1 bb1", T: "c2 ~",
})).s("gm_acoustic_bass").gain(0.48)

// bass · acoustic bass · soft notes
const bass_soft = note(`<
  ~@146
  [~@12 c2@5 ~@3 c2@3 ~]
  [c2@8 c2@3 ~ c2@3 ~ d2@3 ~ c2@3 ~]
  [g1@12 g1@5 ~@3 g1@3 ~]!2
  [ab1@5 ~ ab1@2 ab1@2 ab1@2 ab1@5 ~ ab1@2 ab1@2 ab1@2]
  [ab1@5 ~ ab1@2 ab1@2 ab1@2 ab1@5 ~ ab1@2 bb1@2 c2@2]
  [eb2@19 ~@5]
>`).s("gm_acoustic_bass").gain(0.16)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@146
  [~@5 x]
  [x ~@3 x ~ x ~ x ~ x!2]
  [x ~@4 x]
  x
  [x ~@2 x ~ x]
  [x ~@5 x ~ x!3 ~]
  x
>`).gain(0.05)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@146 [~ x] [~@6 x ~ x ~ x!2] [~ x]!2 [x!2]!2 ~>").gain(0.05)

// drums · clap
const clap = s("cp").struct(`<
  A@7 ~ A@15 ~ A@7 ~ A@7 ~ A@7 ~ A@3 ~ A@2 ~@2 A@3 ~ A@2 ~@2 A@3 ~ A@3 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@3 ~ A@2 ~@2 A@3 ~ A@2
  ~@2 A@3 ~ A@2 ~@2 A@3 ~ A@2 ~@2 A@3 ~ A@2 ~@2 A@3 ~ A@2 ~@3
>`.pickRestart({
  A: "~ x",
})).gain(0.1)

// drums · low tom
const low_tom = s("lt").struct("<~@54 A B ~@6 A B ~@46 A B ~@6 A C ~@6 A C ~@6 A C ~@6 A C ~@9>".pickRestart({
  A: "~@2 x!4 ~@2 x!2 ~@2", B: "~@2 x!4 ~@4 x ~", C: "~@2 x!4 ~@6",
})).gain(0.17)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct(`<
  ~@7 A ~@3 B ~@4 C ~@2 B ~@4 C ~@2 B ~@4 C ~@2 B ~@4 C ~@2 B ~@4 C D ~@2 C D ~@2 C D ~@2 C D ~@2 C D ~@6 C ~@2 B ~@4 C
  ~@2 B ~@4 C ~@2 B ~@4 C ~@2 B ~@4 C D ~@2 C D ~@2 C D ~@2 C D ~@2 C D ~@2 C D ~@2 C D ~@2 C D ~@2 C D ~@2 C D ~@2 C D
  ~@2 C D E F ~
>`.pickRestart({
  A: "~@2 x ~@2 x", B: "~@2 x", C: "x", D: "~@5 x", E: "~@2 x!4 ~@2 x!2 ~@2", F: "~@2 x!4 ~@4 x ~",
})).gain(0.1)

// drums · hihat
const hihat = s("hh").struct(`<
  A@6 B C@4 D C@7 D C@7 D C@7 D C@7 D C@10 E ~ C@6 E ~ C@11 D C@7 D C@7 D C@7 D C@10 E ~ C@6 E ~ C@6 E ~ C@6 E ~ C@6 E ~
  C@6 E ~ E
>`.pickRestart({
  A: "~ x", B: "~@3 x ~ x", C: "x!6", D: "x ~ x ~ x ~ x ~@4 x", E: "x",
})).gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@7 A ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~ C ~@3 C@2 D ~ C ~@3 C@2 D ~ C ~@5 B ~@7 B ~@7 B ~@7 B ~@7 B ~ C ~@3 C@2 D ~ C
  ~@3 C@2 ~@2 C ~@3 C@2 ~@2 C ~@3 C@2 ~@2 C ~@3 C@2 ~@2 C ~@7
// … 50 more lines

More by The Cranberries