Strudelify
Bad Medicine cover art

1999 · New Jersey

Bad Medicine

Bon Jovi

KeyE majorTempo120 bpm
0:00/0:00
// Bad Medicine — Bon Jovi
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Power Bass" named as a bass, played on electric bass finger (its distortion guitar patch is not one)
// note: Full arrangement: all 110 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · electric bass finger · "Power Bass"
const bass = note(`<
  A@8 B C D E@2 C D F G H I J@2 K L M N O L M P Q@6 R@4 C D E@2 C D F S T U@2 V K L M N O L M P Q@6 R@4 C D E@2 C D F S
  T U@2 S T W@2 X Y Z AA AB@2 AC AD B C D E@2 C D F S T U@2 V K L M N O
>`.pickRestart({
  A: "[e3@29 g2 f#2 ~@3 e3@27 g2 f#2 e2, ~@93 e2@20 ~@79]/8", B: "~ e2 e2@2 e2@2 e2!2", C: "a2@3 g2 f#2 e2@3",
  D: "e2 a2@3 a2!3 b2", E: "[g2 f#2 e2 e2@2 f#2 g#2 e2@2 f#2 g#2 e2@2 e2!3]/2", F: "g2 f#2 e2 e2@5",
  G: "e2@2 e2@2 e2@2 ~ e2", H: "e2!2 e2@2 a2@2 g2@2", I: "e2@2 e2@2 e2 e2@2 e2", J: "[~@7 e2@2 e2 e2@2 e2!4]/2",
  K: "e2!2 a2 g2", L: "e2@2 e2@2 e2!2 ~ e2", M: "e2@2 e2!2 a2@2 g2@2", N: "a2@2 a2@2 a2!2 ~ e2",
  O: "a2@2 a2@2 a2!2 g2@2", P: "b2@2 b2@2 b2!2 ~ b2",
  Q: "[b2@2 b2@2 b2 g2 f#2 e2@14 g2 f#2 e2@14 e2!2 f#2@3 f#2@2 f#2!2 ~ f#2]/6",
  R: "[f#2@2 f#2@2 f#2!3 d3@3 d3@2 d3 c#3 c3 b2@3 b2 a2 b2 g2 f#2 e2@2 e2 e2@2 e2@2 e2!2]/4", S: "g2!4 g2@2 g2@2",
  T: "a2!4 a2@2 a2@2", U: "e2!8", V: "~ e2 e2@2 e2!4", W: "[e2@41 ~ d2@3 d#2@3]/2", X: "e2@2 ~@2 g3 e3@2 d3",
  Y: "e3 a3 g3 f#3 e3@2 ~@2", Z: "e3@2 ~@2 g3 e3@2 d3", AA: "e3 a3 g3 f#3 e3@2 ~ b2", AB: "b2!8", AC: "e2 ~@3",
  AD: "~@5 g2 f#2 e2",
})).s("gm_electric_bass_finger").gain(0.68).pan(0.3)

// chords · pizzicato strings · "Additional Digital Piano"
const pizzicato_strings = note("<A B C D A E C F ~@102>".pickRestart({
  A: "[g#3,b3,e4]!7 [g#3,b3,d4]", B: "[g#3,b3,d4]!7 [e3,g#3,c#4]", C: "[e3,g#3,c#4]!7 [g#3,b3,d4]", D: "[g#3,b3,d4]!8",
  E: "[g#3,b3,d4]!3 [b3,d4] [g#3,b3,d4]!3 [e3,g#3,c#4]", F: "[g#3,b3,d4]!7 ~",
})).s("gm_pizzicato_strings").gain(0.64).pan(0.7)

// chords · epiano2 · "Additional Digital Piano"
const epiano2 = note(`<
  ~@7 A@2 B C D@2 B C E F G H ~ I G J K L@2 ~@2 M N@2 O@2 P@2 Q@2 R@2 B C D@2 B S@2 T U V@2 I G J K L@2 ~@2 M N@2 O@2
  W@2 Q@2 R@2 B C D@2 B S@2 T U V@2 T U X@2 ~@4 Y Z AA ~@2 B C D@2 B S@2 T U V@2 I G J K L@2
>`.pickRestart({
  A: "[~@7 [g#3,b3,e4]@9]/2", B: "[c#4,e4,a4]@3 [g#3,b3,e4]@5", C: "~ [c#4,e4,a4]@3 [c#4,e4,a4]@4",
  D: "[[g#3,b3,e4]@3 [g#3,b3,e4]@2 f#4 g#4 e4@2 f#4 g#4 e4@5]/2", E: "[g#3,b3,e4]@3 [g#3,b3,e4]@5",
  F: "~@3 [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3]@5 ~", // G#m
  G: "[g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 [c#4,e4]@6 [b3,d4]@4 ~@2", // G#m C#m Bm
  H: "~@3 [g#3,b3] ~@2 g#3@2 ~ [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2, ~@6 b3 ~@17", // G#m
  I: "~@3 [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 b3@2 ~ [g#3,b3] ~@2 [g#3,b3]@4 ~@2, ~@12 g#3 ~@11", // G#m
  J: "~@3 [g#3,b3] ~@2 b3@2 ~ [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3]@5 ~, ~@6 g#3 ~@17", // G#m
  K: "[g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 [g#3,b3] ~@2 [c#4,e4]@6 [b3,d4]@3 ~@3", // G#m C#m Bm
  L: "[~@3 [a3,c#4,e4]@3 [a3,c#4,e4]@5 ~ [a3,c#4,e4]@3 [a3,c#4,e4]@3 ~@3 [a3,c#4,e4]@6 [a3,c#4,e4]@3 [a3,c#4,e4]@5 ~ [a3,c#4,e4]@5 ~ [b3,d4,g4]@5 ~]/2", // A G
  M: "~ [b3,d#4,f#4]!5 ~@2", N: "[~ [b3,d#4,f#4]!3 [b3,d#4,f#4]@2 ~ [b3,e4,g#4]@2 [b3,e4,g#4]!3 [c#4,e4,a4]!4]/2",
  O: "[[b3,d#4,f#4]!3 [b3,e4,g#4]!4 [b3,e4,g#4]@2 [b3,e4,g#4]!3 [c#4,e4,a4]!4]/2", // B E A
  P: "[[d#4,f#4,b4]!3 [b3,e4,g#4]!4 [c#4,f#4,a#4]@2 [c#4,f#4,a#4]!3 [d#4,f#4,b4]!4]/2", // B E F# B
  Q: "[[c#4,f4,g#4]!3 [c#4,f#4,a#4]!4 [f#3,a3,d4]@2 [f#3,a3,d4]!6 [f#3,b3,d#4]]/2", // C# F# D B
  R: "[[f#3,b3,d#4]!7 [g#3,b3,e4]@9]/2", S: "[~ [c#4,e4,a4]@3 e4@4 [g#3,b3,e4]@3 [g#3,b3,e4]@5, ~@4 [c#4,a4]@5 ~@7]/2",
  T: "~@2 [b3,d4,g4]@2 ~ [b3,d4,g4] ~ [b3,d4,g4]", U: "~@2 [c#4,e4,a4]@2 ~ [c#4,e4,a4] ~ [c#4,e4,a4]",
  V: "~@2 [g#3,b3,e4]@2 ~ [g#3,b3,e4] ~ [g#3,b3,e4]", // E
  W: "[[b3,d#4,g#4]!3 [b3,e4,g#4]!4 [c#4,f#4,a#4]@2 [c#4,f#4,a#4]!3 [d#4,f#4,b4]!4]/2", X: "[[g#3,b3,e4]@11 ~]/2",
  Y: "~@6 [d#3,f#3,b3]@5 ~@4 [d#3,f#3,b3]@6 ~@3", Z: "[d#3,f#3,b3]@2 ~ [d#3,f#3,b3]@3 ~@2", AA: "[g#2,b2,e3] ~@3",
})).s("gm_epiano2").gain(0.64).pan(0.7)

// other · overdriven guitar · "Power Guitar"
const overdriven_guitar = note(`<
  ~@16 A@2 B ~ C@2 D E F G H I J@2 ~@20 C@2 D E F G H I J@2 ~@44 C@2 D E F G
>`.pickRestart({
  A: "[~@3 e4@3 d4@3 b3@3 d4@3 e4@2 ~ g4@3 e4@5 ~ e4@3 d4@3 b3@2 ~ a3@6 g3@4 ~@2, ~@21 d4 ~@26]/2",
  B: "~@3 e4@3 d4@3 b3@3 d4@3 e4@3 g4@3 e4@2 ~",
  C: "[~@3 e4@2 ~ d4@3 b3@3 d4@3 e4@3 g4@3 e4@6 e4@2 ~ d4@3 b3@3 ~ a4@5 g4@4 ~@2, ~@9 c4 ~@38]/2",
  D: "~@3 e4@3 d4@2 ~ b3@2 ~ d4@3 e4@3 g4@2 ~ e4@2 ~", E: "~@3 e4@3 d4@3 b3@2 ~ a3@6 g3@3 ~@3",
  F: "~@3 e4@2 ~ d4@2 ~ b3@2 d4@2 ~@2 e4@2 ~ g4@2 ~ e4@2 ~", G: "~@3 e4@2 ~ d4@3 b3@2 d4@2 ~ e4@2 ~ d4@2 ~@5",
  H: "~@2 e4@2 ~@2 d4@2 ~ b3@2 d4@3 e4@3 g4@3 ~ e4@2 ~", I: "~@3 e4@2 ~ d4@2 ~ b3 ~ a3@6 g3@3 ~@4",
  J: "[~@3 f#4@2 ~ e4@2 f#4 ~@2 f#4@3 ~ e4@2 f#4@2 ~ e4@2 ~ f#4@3 e4@2 ~ f#4 ~@2 f#4@5 ~@11]/2",
})).s("gm_overdriven_guitar").gain(0.56)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B@4 C D@2 E D F D G D H I J K D@2 L D@3 M K D@2 N C O P K Q R S@2 C D T U D V L D W ~ K D@2 L D@3 M K D@2 N C O
  P K Q R S@2 C D T U D V L D W ~ L D W ~@9 S@2 C D T U D V L D W ~ K D@2 L D@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@6 x ~@4 x ~@6 x ~@5", D: "x!4", E: "x ~@5 x ~@4 x ~@6 x ~@5", F: "x ~ x!2 ~ x!2 ~",
  G: "x ~ x!2 ~ x!3", H: "~ x ~ x ~@2 x ~@2 x ~@2", I: "x ~@5 x ~@5 x ~@6 x ~@2 x ~", J: "~@3 x ~@2 x ~@11 x ~@4 x",
  K: "~ x!3", L: "~ x!2 ~ x ~ x ~", M: "x ~@2 x ~@2 x ~@5 x ~@5 x ~@4 x", N: "x ~@5 x ~@2 x ~@5 x ~ x ~@2 x ~@2 x",
  O: "x ~@4 x ~@5 x ~@2 x ~ x ~@2 x ~@2 x ~", P: "~@4 x ~@2 x ~@2 x ~@5 x ~@6 x", Q: "x ~@2 x!2 ~ x ~@2 x ~@2",
  R: "x ~@10 x ~@11 x", S: "~@5 x ~@5 x ~@5 x ~@5 x", T: "x ~@5 x ~@6 x ~@5 x ~@4", U: "~ x ~@5 x ~ x ~@8 x ~@5",
  V: "x ~@5 x ~@6 x ~@5 x ~ x ~@2", W: "x ~ x!2 ~@4",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<~@2 A ~@17 B ~@29 B ~@53 B ~@5>".pickRestart({
  A: "~ x ~@2 x ~@5 x!3 ~ x ~@9", B: "~@3 x",
})).gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct("<~@37 [~@9 x ~@4 x!2 ~@8] ~@29 [~@9 x ~@4 x!2 ~@8] ~@42>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B C D E F G H I J K L M G@2 M G I@2 N O P Q R S T U V W X Y@2 Z AA AB AC G@2 M G AD ~ M G@2 M G I@2 N O P Q R S
  T U V W X Y@2 Z AA AB AC G@2 M G AD ~ M G AD ~@9 Y@2 Z AA AB AC G@2 M G AD ~ M G@2 M G I
>`.pickRestart({
  A: "~@3 x ~ x!2 ~ x ~@2 x ~@2 x ~@3 x ~@2 x ~@2", B: "x!4 ~ x!2 ~", C: "x ~ x!6",
  D: "x ~@2 x ~@2 x ~@2 x ~@4 x ~@3 x ~ x ~@3", E: "~ x!3 ~ x!3", F: "x!4 ~ x!3", G: "x!8",
  H: "x ~@2 x ~@2 x ~@2 x ~@4 x ~@2 x ~@3 x ~@2", I: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@3",
  J: "~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", K: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x!2 ~ x ~@2",
  L: "x ~@2 x ~@2 x ~@2 x ~@11 x ~ x", M: "~ x!7", N: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2 x",
  O: "~ x ~ x!2 ~ x!2 ~ x!2 ~", P: "x ~ x ~@3 x ~ x ~@3 x ~@2 x ~@2 x ~@2 x ~@2",
  Q: "~@2 x ~@3 x ~@8 x ~@2 x ~@2 x ~@2", R: "x ~@2 x ~@2 x ~@2 x ~@7 x ~@2 x ~@2 x",
  S: "~@2 x ~@3 x ~ x ~@2 x ~@6 x ~@2 x ~@2", T: "x ~ x ~@2 x!2 ~ x ~@2 x ~@2 x ~@2 x ~ x ~@4",
  U: "~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x", V: "~@2 x ~@3 x ~@2 x ~@5 x ~@2 x ~@2 x ~@2",
  W: "x ~ x ~@3 x ~ x ~@3 x ~@2 x ~@2 x ~ x ~@3", X: "~@20 x ~@2 x",
  Y: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", Z: "~@2 x ~@2 x ~@2 x ~@2 x!2 ~ x ~@3 x ~@2 x ~@2",
  AA: "x ~ x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", AB: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@2",
  AC: "~ x ~@2 x ~@2 x ~ x ~@5 x ~@2 x ~ x ~@3", AD: "x!4 ~@4",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@37 [~@3 x!2 ~@19] ~@29 [~@3 x!2 ~@19] ~@42>").gain(0.8)

stack(bass, pizzicato_strings, epiano2, overdriven_guitar, kick, rim, snare, low_tom, hihat, mid_tom)

More by Bon Jovi