Strudelify
Free to Decide cover art

To The Faithful Departed

Free to Decide

The Cranberries

KeyG majorTempo115 bpm
0:00/0:00
// Free to Decide — The Cranberries
// 115 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 113 bars on a 16-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): Distortion.
setcpm(115/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "Dolores 2"
const pad_poly = note(`<
  ~@7 A B@3 C D E@2 F G@2 H@6 I@2 J@2 K@3 L I@2 M@2 N@5 ~@3 O ~@2 P Q@3 R S T@2 F U@2 V@6 I@2 M@2 K@3 L I@2 M@2 W@5 X Y
  Z@4 AA I@2 M@2 W@5 ~@2 AB@5 ~@9
>`.pickRestart({
  A: "~@7 b4", B: "[b4@3 ~ b4@3 ~ a4@2 a4@2 b4@2 c5@5 ~ c5@3 ~ b4@2 g4@3 ~ a4@17 ~]/3", C: "~@7 g4",
  D: "b4!3 a4@3 a4 b4", E: "[c5@3 ~ c5@3 ~ c5@2 g4@2 b4@2 a4@17 ~]/2", F: "~@10 g5@3 ~ g5@2",
  G: "[g5@5 ~ g5@2 f#5@2 g5@3 ~ e5@4 d5@10 ~@2 g5@2]/2",
  H: "[g5@5 ~ g5@2 f#5@3 ~ g5@2 e5@6 d5@2 d5@4 c5@3 ~ b4@4 b4@3 ~ b4@4 b4@3 ~ c5@4 g4@6 ~@2 g4@2 g4@2 c5@4 b4@5 ~ a4@2 g4@3 ~ a4@8 ~@6 g5@3 ~]/6",
  I: "[g5@6 ~@2 f#5@2 g5@3 ~ d5@8 ~@6 g5@3 ~]/2", J: "[g5@6 ~@2 f#5@2 g5@3 ~ e5@4 d5@3 ~ c5@4 b4@2 b4@2 b4@2]/2",
  K: "[b4@3 ~ b4@3 ~ a4@2 b4@3 ~ c5@4 c5@3 ~ b4@5 ~ g4@2 a4@17 ~]/3", L: "~@12 g5@3 ~",
  M: "[g5@6 ~@2 f#5@2 g5@3 ~ e5@4 d5@3 ~ c5@3 ~ b4@2 b4@2 b4@2]/2",
  N: "[b4@3 ~ b4@3 ~ a4@2 b4@3 ~ c5@4 c5@3 ~ b4@5 ~ d5@2 d5@6 c5@2 a4@5 ~ g4@2 a4@6 g4@2 a4@5 ~ b4@2 g4@9 ~ b5 ~@7]/5",
  O: "~@8 b5 ~@7", P: "~@7 a4", Q: "[b4@2 ~@2 b4@2 ~@2 a4@2 b4@3 ~ c5@4 c5@2 c5@2 b4@6 g4@2 a4@17 ~]/3", R: "~@6 g4!2",
  S: "b4@3 ~ b4@3 ~ a4@2 b4@5 ~", T: "[~@2 c5@2 c5@2 b4@4 g4@2 b4@2 a4@17 ~]/2",
  U: "[g5@5 ~ g5@2 f#5@2 g5@3 ~ e5@4 d5@10 g5@2 g5@2]/2",
  V: "[g5@4 g5@2 g5@4 f#5@2 g5@2 e5@6 d5@2 d5@4 c5@3 ~ b4@4 b4@3 ~ b4@5 ~ b4@2 c5@4 g4@6 g4@2 g4@3 ~ c5@4 b4@4 a4@5 ~ g4@2 a4@6 g4@2 a4@4 g5@2 g5@3 ~]/6",
  W: "[b4@3 ~ b4@3 ~ a4@2 b4@3 ~ c5@4 c5@3 ~ b4@5 ~ d5@2 d5@6 c5@2 a4@5 ~ g4@2 a4@6 g4@2 a4@5 ~ b4@2 g4@9 ~@9]/5",
  X: "g5", Y: "b5@5 a5@2 b5", Z: "[g5@3 f#5@3 d5@5 f#5@3 d5@5 f#5@3 d5@7 b4!3]/4", AA: "d5@10 ~@2 g5@3 ~",
  AB: "[~@12 b4@2 g4@5 ~@9 b4@2 g4@5 ~@9 b4@2 g4@5 ~@9 b4@2 g4@5 ~@13]/5",
})).s("gm_pad_poly").gain(0.48)

// chords · acoustic guitar nylon · "Guitare"
const acoustic_guitar_nylon = note(`<
  A B C@2 D E F@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G H D E G@2 D E G H D E G@2 D E G@2 D E G@2 D E G@2 D E
  G@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G@2 D E G@2 I
>`.pickRestart({
  A: "[d3,g3,b3]!3 [d3,g3,a3]@2 [d3,g3,a3] [d3,g3,b3] [d3,g3,a3]", // G Dsus4 G Dsus4
  B: "[e3,g3,c4]!3 [d3,g3,c4]@2 [d3,g3,c4] [e3,g3,c4] [d3,g3,c4]", // C Csus2 C Csus2
  C: "[e3,a3,c4]!3 [e3,a3,b3]@2 [e3,a3,b3] [e3,a3,c4] [e3,a3,b3]", // Am Esus4 Am Esus4
  D: "[d3,g3,b3,e4]!3 [d3,g3,a3,e4]@2 [d3,g3,a3,e4] [d3,g3,b3,e4] [d3,g3,a3,e4]", // Em7 Dsus4 Em7 Dsus4
  E: "[e3,g3,c4,e4]!3 [e3,g3,b3,e4]@2 [e3,g3,b3,e4] [e3,g3,c4,e4] [e3,g3,b3,e4]", // C Em C Em
  F: "[a2,e3,a3,c4,e4]!3 [a2,e3,a3,b3,e4]@2 [a2,e3,a3,b3,e4] [a2,e3,a3,c4,e4] [a2,e3,a3,b3,e4]", // Am Asus2 Am Asus2
  G: "[e3,a3,c4,e4]!3 [e3,a3,b3,e4]@2 [e3,a3,b3,e4] [e3,a3,c4,e4] [e3,a3,b3,e4]", // Am Esus4 Am Esus4
  H: "[e3,a3,c4,e4]@3 ~ [e3,a3,c4,e4]@2 [e3,a3,b3,e4]@4 [e3,a3,b3,e4]@2 [e3,a3,c4,e4]@2 [e3,a3,b3,e4]@2", // Am Esus4 Am Esus4
  I: "[d3,g3,b3,d4]@13 ~@3", // G
})).s("gm_acoustic_guitar_nylon").gain(0.35)

// chords · acoustic guitar nylon · "Guitare" · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@2 A@2 ~ B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~ C ~ B ~@3 B ~ C ~ B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B
  ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3
>`.pickRestart({
  A: "e4!3 e4@2 e4!3", B: "c3!3 c3@2 c3!3", C: "c5@3 ~ b4@2 a4@4 ~@6",
})).s("gm_acoustic_guitar_nylon").gain(0.24)

// chords · distortion guitar · "Distortion"
const distortion_guitar = note(`<
  ~@8 A ~ B@2 A ~ B@2 ~@15 C ~@7 C D ~@7 A ~ B@2 A ~ B@2 ~@15 E ~@7 E ~@15 E F G H@2 F G H I ~ I@3 F G H J ~
>`.pickRestart({
  A: "~@5 b3 ~@2", B: "~@5 c4 ~@2", C: "~@2 f#3 ~@5", D: "~@2 [d3,g3,b3] ~", E: "~@2 [b2,f#3,b3,b4] ~@5",
  F: "~@3 c4@2 ~@3", G: "~@7 a4", H: "b4@3 ~ b4@2 ~@6 b4@2 ~@2", I: "~@3 d5@2 d5 ~ d5", J: "~@3 d5@2 d5!3",
})).s("gm_distortion_guitar").gain(0.07)

// other · violin · "Violon"
const violin = note("<~@96 A B C@2 A B C D@5 A B C E ~>".pickRestart({
  A: "b3@3 ~ b3@2 c4@4 d4@2 d4@2 d4@2", B: "e4@3 ~ e4@2 g4@4 g4@2 g4@2 a4@2", C: "b4@3 ~ b4@2 a4@4 a4@2 b4@2 a4@2",
  D: "e5@3 ~ e5@2 d5@4 d5@2 e5@2 d5@2", E: "e5@3 ~ e5@2 d5@4 d5@2 d5@2 d5@2",
})).s("gm_violin").gain(0.24)

// other · violin · "Violon" · soft notes
const violin_soft = note("<~@16 A@8 ~@16 B C D E B C D F G ~@7 A@8 ~@48 H>".pickRestart({
  A: "[b4@14 c5@16 a4@31 ~@3]/4", B: "b4@3 ~ b4@2 a4@4 b4@3 ~ b4@2", C: "c5@3 ~ c5@2 b4@4 c5@3 ~ b4@2",
  D: "a4@4 a4@2 g4@4 a4@3 ~ g4@2", E: "a4@3 ~ a4@2 b4@6 a4@2 a4@2", F: "a4@3 ~ a4@2 b4@6 a4@3 ~", G: "g4@3 ~@5",
  H: "[d5,f#5]@13 ~@3", // D
})).s("gm_violin").gain(0.12)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@40 A B C D A B C E F ~@47 G H I@2 G H I J@5 G H I K L>".pickRestart({
  A: "b3@3 ~ b3@2 a3@4 b3@3 ~ b3@2", B: "c4@3 ~ c4@2 b3@4 c4@3 ~ b3@2", C: "a3@4 a3@2 g3@4 a3@3 ~ g3@2",
  D: "a3@3 ~ a3@2 b3@5 ~ a3@2 a3@2", E: "a3@3 ~ a3@2 b3@6 a3@3 ~", F: "g3@3 ~@5", G: "b2@3 ~ b2@2 c3@4 d3@2 d3@2 d3@2",
  H: "e3@3 ~ e3@2 g3@4 g3@2 g3@2 a3@2", I: "b3@3 ~ b3@2 a3@4 a3@2 b3@2 a3@2", J: "e4@3 ~ e4@2 d4@4 d4@2 e4@2 d4@2",
  K: "e4@3 ~ e4@2 d4@4 d4@2 d4@2 d4@2", L: "[g3,d4]@13 ~@3",
})).s("gm_string_ensemble_1").gain(0.24)

// other · string ensemble 1 · "Strings" · soft notes
const string_ensemble_1_soft = note(`<
  ~@16 A@8 B C D@2 B C D@2 B C D@2 B C D@2 ~@16 A@8 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 ~@17
>`.pickRestart({
  A: "[b3@14 c4@16 a3@31 ~@3]/4", B: "[d3,g3]", C: "[e3,g3]", D: "[e3,a3]/2",
})).s("gm_string_ensemble_1").gain(0.12)

// bass · acoustic bass · "Basse"
const bass = note(`<
  ~@7 A B C D E B C D E F G D E F G H I F J H I F J H I F J K L F J H I F J H I F J H I B C D E B C D E F G D E F G H I
  F J H I F J H I F J K L F J H I F J H I F J H I F J K L F J H I F J H I F J H I F J H I F J H I M
>`.pickRestart({
  A: "e2@5 ~ d2@5 ~ c2@3 ~", B: "g1@5 ~ g1@3 ~ g1@4 ~@2", C: "c2@5 ~ c2@3 ~ c2@3 ~@3", D: "a1@5 ~ a1@3 ~ a1@4 ~@2",
  E: "a1@5 ~ a1@3 ~ b1@3 ~ a1@2", F: "g1@5 ~ g1@5 ~ g1@3 ~", G: "c2@5 ~ c2@6 c2@3 ~", H: "a1@5 ~ a1@6 a1@3 ~",
  I: "a1@5 ~ b1@5 ~ a1@3 ~", J: "c2@5 ~ d2@6 c2@3 ~", K: "a1@5 ~ a1@6 a1@2 d2@2", L: "e2@5 ~ c2@5 ~ a1@3 ~",
  M: "g1@13 ~@3",
})).s("gm_acoustic_bass").gain(0.48)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@3 [~@2 x ~@2 x!2 ~] [~@3 x] ~@2 [x!2 ~ x!5] [x!8]!104 x>").gain(0.12)

// drums · low tom
const low_tom = s("lt").struct("<~@47 [~@3 x] ~@39 [~@3 x] ~@24 x>").gain(0.12)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@31 B C ~ C ~ C ~ C ~@8 D ~@23 B ~@23 E ~>".pickRestart({
  A: "~@7 x", B: "~@10 x!2 ~@4", C: "~@14 x!2", D: "~@11 x!2 ~ x ~", E: "~@13 x!2 ~",
})).gain(0.12)

// drums · high tom
const high_tom = s("ht").struct("<~@48 A ~ A ~ A ~ A ~@56 B ~>".pickRestart({
  A: "~@7 x", B: "~@5 x!2 ~",
})).gain(0.12)

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

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@23 [x!3 ~] ~@24 [~@5 x ~@2]!8 ~@7 [x!3 ~] ~@49>").gain(0.06)

// drums · ride
const ride = s("rd").struct(`<
  ~@24 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B ~@16 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@4 C
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x",
})).gain(0.12)

// drums · cowbell
const cowbell = s("cb").struct("<~@6 [x!4] ~@106>").gain(0.12)

// drums · bongos
const bongos = s("bongo:4").struct("<~@48 [~@5 x ~@2]!8 ~@57>").gain(0.53)

// drums · bongos · soft notes
const bongos_soft = s("bongo:4").struct("<~@6 [x!4] ~@106>").gain(0.32)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@48 [~@5 x ~@2]!8 ~@57>").gain(1.3)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@8 [x!8]!39 [x!5 ~ x!2] [x!8]!39 [x!5 ~ x!2] [x!8]!24 x>").gain(0.62)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@48 [~@5 x ~@2]!8 ~@57>").gain(0.29)

stack(
  pad_poly, acoustic_guitar_nylon, acoustic_guitar_nylon_2, distortion_guitar, violin, violin_soft, string_ensemble_1,
  string_ensemble_1_soft, bass, kick, snare, hihat, low_tom, mid_tom, high_tom, crash, crash_soft, ride, cowbell,
  bongos, bongos_soft, agogo_bells, cabasa, woodblocks
)

More by The Cranberries