Strudelify
Keep the Faith cover art

1998 · Keep The Faith

Keep the Faith

Bon Jovi

KeyG minorTempo117 bpm
0:00/0:00
// Keep the Faith — Bon Jovi
// 117 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 166 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(117/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.

// bass · lead 8 bass lead · "Bass"
const bass = note(`<
  ~@8 A@2 B A@3 B A@2 C B A@2 C B D A C B A@2 C B D E F G E@2 F G D E F H G E F H G E@4 A C B A@2 C B A@2 C B D E F G
  E@2 F G D E F H G E F H G E F H G E@8 H@4 A C B A@2 C B A@2 C B A@2 C B D ~@4 E@4 A@4 E F G E@2 F G D E F H G E F H G
  A C B D A C B D A C B D E F G E@2 F G D E F H G E ~
>`.pickRestart({
  A: "g2@3 ~ g2@3 ~ g2@3 ~ g2@2 g2@4 f2@4 d2@2 f2@2 d2@2 f2@4",
  B: "c2@3 ~ c2@3 ~ c2@3 ~ c2@2 g2@4 f2@4 d2@2 g2@2 d2@2 f2@4",
  C: "bb2@3 ~ bb2@3 ~ bb2@3 ~ g2@2 bb2@4 bb2@4 g2@2 bb2@2 g2@2 bb2@4",
  D: "eb2@3 ~ eb2@3 ~ eb2@7 ~ f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~", E: "g2@3 ~ g2@3 ~ g2@3 ~ g2@2 g2@4 g2@2 g2@3 ~ g2@7 ~",
  F: "bb2@3 ~ bb2@3 ~ bb2@3 ~ bb2@2 bb2@4 bb2@2 bb2@3 ~ bb2@7 ~",
  G: "c3@3 ~ c3@3 ~ c3@3 ~ c3@2 c3@4 c3@2 c3@3 ~ c3@7 ~", H: "f2@3 ~ f2@3 ~ f2@3 ~ f2@2 f2@4 f2@2 f2@3 ~ f2@7 ~",
})).s("gm_lead_8_bass_lead").gain(0.68).pan(0.4)

// chords · epiano2 · "Piano"
const epiano2 = note(`<
  ~@12 A@4 B@2 C@2 D@3 E@5 F@4 G@2 H I J K@2 L M@2 N@2 O P Q@2 R ~@2 S@5 T@4 F@4 G@2 H I J K@2 L M@2 N@2 O U@7 ~@4 V W@2
  X@3 Y@2 Z@2 AA@4 AB@3 AC AD@2 AE AF@3 ~@12 G@2 H I J K@2 L M@2 N@2 O P Q@2 AG@2 AH@4 AI@6 G@2 H I J K@2 L M@2 N@2 O AJ
>`.pickRestart({
  A: "[[d4,g4]@53 ~@10 [e4,g4,c5]@19 ~@2 [d4,f4,bb4]@7 ~ [d4,g4]@33 ~@3]/4", B: "[[d4,g4]@30 ~ [d4,f4,bb4]@28 ~@5]/2",
  C: "[[e4,g4,c5]@17 ~@2 [d4,f4,bb4]@9 ~ [d4,g4]@33 ~@2]/2", // C Bb G5
  D: "[[d4,g4]@27 ~@4 [d4,f4,bb4]@29 ~@3 [e4,g4,c5]@24 ~@9]/3", // G5 Bb C
  E: "[[bb3,eb4,g4]@7 ~ [bb3,eb4,g4]@5 ~@6 [c4,f4,a4]@6 ~@2 [c4,f4,a4]@3 ~ [d4,g4]@28 ~@4 [d4,f4,bb4]@29 ~@3 [e4,g4,c5]@18 ~@3 [d4,f4,bb4]@6 ~@2 [d4,g4]@33 ~@3]/5", // Eb F G5 Bb C Bb G5
  F: "[[d4,g4]@28 ~@3 [d4,f4,bb4]@27 ~@5 [e4,g4,c5]@25 ~@7 [bb3,eb4,g4]@8 ~ [bb3,eb4,g4]@5 ~@3 [c4,f4,a4]@7 ~ [c4,f4,a4]@2 ~@6, ~@56 ab4 ~@7]/4", // G5 Bb C Eb F
  G: "[[d4,g4]@22 ~@9 [bb3,d4]@24 ~ [bb3,d4]@6 ~@2]/2", H: "eb4 e4@21 ~ [c4,e4]@8 ~, ~ c4@9 ~@22",
  I: "d4@23 ~@5 [d4,g4]@2 ~@2", J: "[d4,g4]@11 ~ [d4,g4]@3 ~",
  K: "[[d4,f4]@21 ~@2 [d4,f4]@7 ~ [e4,g4]@22 ~@3 [e4,g4]@6 ~@2]/2", L: "[g4,bb4]@15 [a4,c5]@14 ~@3",
  M: "[[g4,d5]@12 ~@3 f5@12 ~ [d5,f5]@3 ~, ~@29 d5@24 ~@11, ~@30 g5 ~@33]/2", // G5 Dm
  N: "[[c5,f5]@18 ~@13 [e4,g4,c5]@23 ~@2 [e4,g4,c5]@7 ~]/2", O: "~ c4 ~@30, [d4,g4]@27 ~@5",
  P: "[d5,f5]@11 ~ [d5,f5]@3 ~", Q: "[[c5,f5]@20 ~@10 [e4,g4,c5]@24 ~ [e4,g4]@7 ~@2]/2", R: "g4@23 ~@9, e4@9 ~@23",
  S: "[~@27 [d4,g4]@32 ~@4 [d4,f4,bb4]@29 ~@3 [e4,g4,c5]@18 ~@2 [d4,f4,bb4]@6 ~@3 [d4,g4]@34 ~@2, ~@124 e4 ~@35]/5", // G5 Bb C Bb G5
  T: "[~@31 [d4,f4,bb4]@29 ~@3 [e4,g4,c5]@18 ~@3 [d4,f4,bb4]@6 ~@2 [d4,g4]@33 ~@3]/4", // Bb C Bb G5
  U: "[[d5,f5]@21 [d5,f5]@4 ~ [c5,f5]@24 ~@13 [e4,g4]@18 ~@4 [e4,g4]@5 ~@3 g4@17 ~@17 [d5,f5]@15 ~@8 [d5,f5]@3 ~@2 [c5,f5]@24 ~@12 [c5,e5]@32 ~]/7", // Dm F5 Em Dm F5 C
  V: "~ [bb3,d4,g4]@24 ~@7", W: "[[d4,f4,bb4]@28 ~@4 [e4,c5]@27 ~@5, ~@31 g4@27 ~@6]/2",
  X: "[~@26 [a4,f5]@24 ~ [a4,c5,f5]@16 ~ [a4,c5,f5]@19 ~@2 [a4,c5,f5]@6 ~, ~@25 c5@25 ~@46]/3", // Dm F
  Y: "[~ [a4,c5,f5]@21 ~ [a4,c5,f5]@4 ~ [a4,c5,f5]@25 ~@2 [c5,f5]@9, ~@54 a4@9 ~]/2", // F F5
  Z: "[~ [d4,g4]@26 ~@5 [d4,f4]@29 ~@3, ~@31 bb4@29 ~@4]/2", // G5 Dm
  AA: "[[e4,g4,c5]@18 ~ [d4,f4,bb4]@7 ~@2 [d4,g4]@32 ~@3 [d4,g4]@28 ~@4 [d4,f4,bb4]@28 ~@5]/4", // C Bb G5 Bb
  AB: "[[e4,g4,c5]@19 ~ [d4,f4,bb4]@6 ~@2 [d4,g4]@32 ~@4 d4@27 ~@5, ~@63 g4@28 ~@5]/3", AC: "[d4,f4,bb4]@13 ~@3",
  AD: "[[e4,g4,c5]@19 ~ [d4,f4,bb4]@6 ~@2 [d4,g4]@31 ~@5]/2", AE: "[d4,g4]@15 ~",
  AF: "[[d4,f4,bb4]@29 ~@2 [e4,g4,c5]@25 ~@7 [bb3,eb4,g4]@8 ~ [bb3,eb4,g4]@4 ~@3 [c4,f4,a4]@4 ~ [c4,f4,a4]@5 ~@7, ~@31 f4 ~@64]/3", // Bb C Eb F
  AG: "[[d4,g4]@26 ~@5 [d4,f4,bb4]@25 ~@8, e4@9 ~@55]/2", // G5 Bb
  AH: "[[e4,g4,c5]@24 ~@7 [g4,bb4,eb5]@8 ~ [g4,bb4,eb5]@7 ~ [a4,f5]@5 ~ [a4,c5,f5]@2 ~@6 [d4,g4]@22 ~@11 [d4,f4,bb4]@24 ~@9, ~@31 c4@2 ~@31]/4", // C Eb Dm F G5 Bb
  AI: "[[e4,g4,c5]@24 ~@8 [bb4,eb5]@7 ~ eb5 ~@5 [a4,c5,f5]@7 ~ [a4,c5,f5]@2 ~@6 d4@27 ~@6 [d4,f4,bb4]@22 ~@10 [e4,g4,c5]@23 ~@9 [g4,bb4,eb5]@13 ~@3 [a4,c5,f5]@7 ~ [a4,c5,f5]@3 ~@6, ~@31 g4@7 ~@24 g4@24 ~@73 a4 ~@32]/6", // C Eb5 F Bb C Eb F
  AJ: "[d5,f5] ~@31", // Dm
})).s("gm_epiano2").gain(0.32).pan(0)

// chords · pad warm · "Intro pad"
const pad_warm = note("<A@8 ~@104 B@8 ~@46>".pickRestart({
  A: "[~@7 g4@76 d4@6 [c4,f4]@78 ~@6 g4@80 ~@3, ~@6 d4@74 ~@87 d4@85 ~@4]/8", B: "[g3,d4,g4]/8",
})).s("gm_pad_warm").gain(0.54).pan(1)

// chords · overdriven guitar · "Intro Guitar Noise"
const overdriven_guitar = note("<A@3 B@6 ~@157>".pickRestart({
  A: "[~@11 g4@37, ~@3 d4@13]/3", B: "[~@7 f4@38 ~@3 g4@38 ~@10, ~@9 c4@78 ~@4 d4@80 ~@21]/6",
})).s("gm_overdriven_guitar").gain(0.54).pan(0)

// chords · distortion guitar · "Solo Guitar"
const distortion_guitar = note("<~@91 A B C@2 D ~@16 E@4 F@2 G H@5 ~@28 I@8 J@6>".pickRestart({
  A: "~@30 [a3,c4,f4] ~", B: "[c4,f4] [c4,f4]@11 ~@6 [a3,c4,f4] ~ [a3,c4,f4] [a3,c4,f4]@11, a3@3 ~@5",
  C: "[~@5 [c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4]@12 ~@3 [c4,f4] a3 [a3,c4,f4] ~ [a3,c4,f4]@11 ~@5 f4 c4 [c4,f4] ~@2 [a3,c4,f4]@13 ~@2, ~@45 a3@3 ~@16]/2", // F5 F F5 F F5 F
  D: "[a3,c4,f4] ~ [c4,f4] a3 ~ [a3,c4,f4]@18 ~@9", E: "[g4@127 ~]/4", F: "[g4@11 f4@11 d4@8 ~ f4@13 g4@19 ~]/2",
  G: "g4@12 f4@11 d4@9", H: "[f4@12 g4@13 ~@6 g5@12 f5@12 d5@8 f5@12 ~ g5@17 ~ g5@12 f5@13 d5@8 f5@12 g5@16 ~@5]/5",
  I: "[g5@11 ~ f5@11 d5@8 f5@12 g5@19 ~ g5@13 f5@11 d5@8 f5@12 g5@17 ~@2 g5@13 f5@12 d5@7 ~ f5@12 g5@17 ~@3 g5@12 f5@11 ~ d5@8 f5@12 g5@18 ~@2 g5]/8",
  J: "[~@11 f5@12 d5@8 f5@12 g5@12 ~@8 g5@13 f5@12 d5@7 f5@13 g5@15 ~@3 g5@13 f5@13 d5@7 f5@13 ~@20]/6",
})).s("gm_distortion_guitar").gain(0.3)

// other · agogo · "Spoken"
const agogo = note("<~@115 A B C D E F G H I ~@42>".pickRestart({
  A: "~@26 f4@2 f4@3 ~", B: "f4@2 f4@2 f4@2 f4@2 f4@3 ~ f4@3 ~@13 f4@2 f4@2", C: "f4!3 f4@3 ~@7 f4 f4@2",
  D: "f4@2 f4!2 f4@2 f4@2 f4@4 ~ f4!3", E: "f4@4 f4@4 f4@4 f4@12 ~@4 f4@3 ~",
  F: "f4@3 ~ f4@3 ~ f4@3 ~ f4@2 f4@6 f4@3 ~@5 f4@3 ~", G: "f4@3 ~ f4@3 ~ f4@2 f4@2 f4@11 ~@5 f4@3 ~",
  H: "f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~ f4@3 ~", I: "f4@3 ~ f4@2 f4@6 f4@3 ~ f4@3 ~@13",
})).s("gm_agogo").gain(0.71)

// drums · rim
const rim = s("rim").struct(`<
  ~@48
  [x ~@3 x ~@4 x ~@4 x ~@7 x ~@2 x ~@6]!4
  ~@32
  [x ~@3 x ~@4 x ~@4 x ~@7 x ~@2 x ~@6]!8
  ~@74
>`).gain(0.8).pan(0.6)

// drums · snare
const snare = s("sd").struct(`<
  ~@10 A B C@11 D C@7 E F@16 ~@4 C@11 E F@20 ~@8 C@4 F@14 ~@22 F@8 C@12 F@13 ~
>`.pickRestart({
  A: "~@14 x ~@3 x ~@3 x ~ x ~@2 x ~@4", B: "~@8 x ~@8 x ~@5 x ~@3 x ~@4", C: "~@4 x ~ x ~@2 x ~@2 x ~ x ~",
  D: "~@4 x ~ x!2 ~ x ~ x!4 ~", E: "~@4 x ~ x ~@2 x!7", F: "~@8 x ~@3 x ~@5 x ~@6 x ~@6",
})).gain(0.8).pan(0.6)

// drums · hihat
const hihat = s("hh").struct("<~@11 A@21 ~@16 B@4 A@12 ~@20 B@8 A@4 ~@44 A@12 ~@14>".pickRestart({
  A: "x!2 ~@6", B: "~@12 x ~@5 x ~@4 x ~@3 x ~@4",
})).gain(0.8).pan(0.6)

// drums · open hat
const open_hat = s("oh").struct("<~@32 A@16 ~@16 A@20 ~@12 A@14 ~@22 A@8 ~@12 A@13 ~>".pickRestart({
  A: "~@3 x ~@27 x",
})).gain(0.8).pan(0.6)

stack(bass, epiano2, pad_warm, overdriven_guitar, distortion_guitar, agogo, rim, snare, hihat, open_hat)

More by Bon Jovi