Strudelify
Salvation cover art

To The Faithful Departed

Salvation

The Cranberries

KeyG minorTempo170 bpm
0:00/0:00
// Salvation — The Cranberries
// 170 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 12 "French Horn" french horn (copy of ch 9 "Brass" brass section); ch 13 "Trombone" trombone (copy of ch 9 "Brass" brass section); ch 14 "Trumpet" trumpet (copy of ch 9 "Brass" brass section); ch 15 "Brass" brass section (copy of ch 9 "Brass" brass section)
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(170/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~ 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 A B A B A B A B A B A C@2 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 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 C@3 D
>`.pickRestart({
  A: "[g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~", // Gm Eb
  B: "[g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~", // Gm
  C: "[g3,bb3,d4] ~@15", D: "[d3,g3,bb3] ~@15",
})).s("gm_electric_guitar_clean").gain(0.27)

// chords · overdriven guitar · "Guitar"
const overdriven_guitar = note(`<
  ~ 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 A B A B A B A B A B A C@2 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 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 C@3 D
>`.pickRestart({
  A: "[bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~", // Gm Eb
  B: "[bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~ [bb3,d4,g4] ~", // Gm
  C: "[bb3,d4,g4] ~@15", D: "[g3,bb3,d4] ~@15",
})).s("gm_overdriven_guitar").gain(0.2)

// other · overdriven guitar · "Lead Guitar"
const overdriven_guitar_2 = note(`<
  ~@25 A B A B A B A B A B A B A B A C ~@25 A B A B A B A D E F E F E F E G A B A B A B A H A B A B A B A C ~@3
>`.pickRestart({
  A: "f4", B: "d4@2 c4 bb4", C: "d4 ~@3", D: "d4@4 c4@2 ~ d4", E: "d4!2 ~ d4 eb4!2 ~ c4", F: "d4!2 ~ d4!3 ~ d4",
  G: "d4 ~@7", H: "d4@8 c4@4 bb4@3 ~",
})).s("gm_overdriven_guitar").gain(0.59)

// other · brass section · "Brass"
const brass_section = note("<~@36 A ~@36 B C D C D C D C E ~@7 B C D C D C D C E ~@3>".pickRestart({
  A: "~@2 c4 bb4", B: "~@7 d4", C: "d4!2 ~ d4 eb4!2 ~ c4", D: "d4!2 ~ d4!3 ~ d4", E: "d4 ~@7",
})).s("gm_brass_section").gain(0.49)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~ A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A D E A B A C A B A C A B A C A B A C A
  B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A D@4
>`.pickRestart({
  A: "g1 ~ g1 ~ g1 ~ g1 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~", B: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ a1 ~ a1 ~",
  C: "bb1 ~ bb1 ~ c2 ~ c2 ~ bb1 ~ bb1 ~ a1 ~ a1 ~", D: "g1@3 ~@13", E: "g1@3 ~@9 d2 c2 bb1 a1",
})).s("gm_electric_bass_pick").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A C A B A C A D A D A D A D A D A D A D A D A B A C A B A C A B A C A B A D@2 A B A C A B A C A D A D A D A D A
  D A D A D A D A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A D@4
>`.pickRestart({
  A: "x!2", B: "x ~@2 x ~ x ~@2", C: "~ x ~ x ~ x ~@2", D: "x",
})).gain(0.24)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<A ~@15 B ~@7 B ~@32 B ~@7 B ~@35>".pickRestart({
  A: "~@3 x", B: "~@12 x!4",
})).gain(0.09)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A B A C A B A C ~@7 C ~@7 C A B A C A B A C A B A C A B A D@2 A B A C A B A C ~@7 C ~@7 C A B A C A B A C A B A C A
  B A C A B A C A B A C A B A C A B A D@4
>`.pickRestart({
  A: "x ~ x ~@3 x!3 ~ x ~@3 x!2", B: "x ~ x ~@11 x!2", C: "~@14 x!2", D: "x",
})).gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<~@9 A@7 B A@7 B ~@25 A@7 B A@7 B ~@34 C>".pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "x!2 ~ x!3 ~@2", C: "x",
})).gain(0.24)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@40 [~ x!3]!2 ~@55 [~ x!3]!3 ~>").gain(0.14)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@8 ~ B ~ B ~@5 B ~ B ~@4 A@15 C@2 A@8 ~ B ~ B ~@5 B ~ B ~@4 A@31 C@3 ~
>`.pickRestart({
  A: "x!8", B: "~@3 x", C: "x!4",
})).gain(0.24)

// drums · china
const china = s("cr").struct(`<
  ~@8 A B C ~ D ~@4 B C ~ D ~@3 A B ~@6 A B ~@15 A B C ~ D ~@4 B C ~ D ~@3 A B ~@6 A B ~@6 A B ~@6 A B ~@10
>`.pickRestart({
  A: "x!3 ~", B: "x", C: "~@3 x", D: "~@7 x",
})).gain(0.24)

// drums · china · soft notes
const china_soft = s("cr").struct("<[~@3 x] ~@39 [~@3 x]!2 ~@55 [~@3 x]!3 ~>").gain(0.14)

// drums · ride bell
const ride_bell = s("rd").struct("<A ~@8 B ~@7 B ~@22 C@2 ~@8 B ~@7 B ~@38 C@3 B>".pickRestart({
  A: "~@3 x", B: "x", C: "x!4",
})).gain(0.14)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@9 [x!8]!16 ~@25 [x!8]!16 ~@35>").gain(1.2)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@40 [~ x!3]!2 ~@55 [~ x!3]!3 ~>").gain(0.72)

stack(
  electric_guitar_clean, overdriven_guitar, overdriven_guitar_2, brass_section, bass, kick, kick_soft, snare, low_tom,
  hihat, hihat_soft, mid_tom, open_hat, china, china_soft, ride_bell, cabasa, cabasa_soft
)

More by The Cranberries