Strudelify

I'd Die for You

Bon Jovi

KeyC majorTempo135 bpm
0:00/0:00
// I'd Die for You — Bon Jovi
// 135 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 147 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/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.

// bass · electric bass finger · "Bass"
const bass = note(`<
  A ~ B C A ~ B C D E F G D E H C I ~@7 J ~ K@2 L ~ M@2 N O P Q N O R S D E F G D E H T D E F G D E H T J ~ K@2 L ~ M@2
  U@2 V@2 H@2 W@2 N O P Q N O R S D E F G D E H T D E F G D E H X D E F Y D E H X D E F Y D E Z AA I R AB S I R H AC D E
  F Y D E H AD D E F Y D E H AC D E F Y D E Z AA AE@2 ~
>`.pickRestart({
  A: "a1 ~@4 a1 ~ f1", B: "g1", C: "~ c2 ~ c2 ~ b1@3", D: "a1!3 b1!3 c2!2", E: "f1!3 g1!3 a1!2", F: "g1!3 a1!3 b1!2",
  G: "e1!3 g1!3 b1!2", H: "g1!8", I: "a1!4 ~@4", J: "a1 c2 e2 a2 ~@4", K: "f1/2", L: "g1 b1 d2 g2 ~@4", M: "e1/2",
  N: "f1!7 a1", O: "a1!3 g1!5", P: "f1!7 c2", Q: "c2!3 g1!5", R: "f1", S: "e1", T: "g1 c2 ~ c2 ~ b1@3", U: "a1!8",
  V: "f1!8", W: "e1!8", X: "g1 g2 f2 e2 f2 e2 d2 g1", Y: "e1!3 g1!3 b1 g1", Z: "d2 e1", AA: "f1 g1", AB: "g1!4 ~@4",
  AC: "g1 f2 e2 f2 e2 d2 c2 b1", AD: "g1 c2 b1 c2@2 b1@2 g1", AE: "a1/2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · pad poly · "Poly synth"
const pad_poly = note(`<
  A B C D A B E F A B E F A B E F G H I J K L M N G H I J K L O P Q R Q R Q R S T A B C D A B E U A B C D A B E U G H I
  J K L M N G H I J K L O P Q R Q R Q R S T A B C D A B E U A B C D A B E F A B C D A B E U A B C D A B V W A B C D A B
  E U A B C D A B E U A B C D A B E U A B C D A B V W X@2 ~
>`.pickRestart({
  A: "[a4,c5,e5]!5 [a4,b4,d5]!2 [a4,c5,f5]", B: "[a4,c5,f5]!5 [a4,b4,d5]!3", C: "[g4,c5,d5]!5 [g4,b4,d5]!3",
  D: "[g4,b4,e5]!5 [g4,b4,d5]!3", E: "[c5,d5,g5]!8", F: "[c5,d5,g5] [b4,d5,g5]!7",
  G: "[a4,c5,e5]!3 [a4,b4,d5]!3 [a4,c5,e5]!2", H: "[a4,c5,e5] [a4,b4,d5]!3 [a4,c5,e5]!2 [a4,b4,d5] [a4,c5,e5]",
  I: "[a4,c5,f5]!3 [a4,c5,e5]!3 [a4,c5,f5]!2", J: "[a4,c5,f5] [a4,c5,e5]!3 [a4,c5,f5]!2 [a4,c5,e5] [a4,b4,d5]",
  K: "[a4,c5,e5] [a4,c5,d5]!2 [g4,b4,d5]!3 [g4,c5,d5]!2", // Am D7 G Gsus4
  L: "[g4,c5,d5] [g4,b4,d5]!3 [g4,c5,d5]!2 [g4,b4,d5] [g4,c5,d5]", M: "[g4,b4,e5]!3 [g4,b4,d5]!2 [g4,c5,e5]!3",
  N: "[g4,c5,e5] [g4,b4,d5]!3 [g4,b4,e5]!4", O: "[g4,b4,e5]!3 [g4,b4,d5]!2 [g4,b4,e5]!3",
  P: "[g4,b4,e5] [g4,b4,d5]!3 [g4,b4,e5]!4", Q: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~",
  R: "[e4,a4,c5] ~ [e4,a4,c5] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", S: "[c4,f4,a4]", T: "[b3,e4,g#4]",
  U: "[c5,d5,g5]!2 [b4,d5,g5]!6", V: "[f4,a4,d5]!4 [g4,b4,e5]!4", W: "[a4,c5,f5]!4 [b4,d5,g5]!4", X: "[c5,e5,a5]/2",
})).s("gm_pad_poly").gain(0.52)

// chords · distortion guitar · "Guitar"
const distortion_guitar = note(`<
  A B C D A B C D E F G H E F C D I ~@7 J ~ K@2 L ~ M@2 N O P Q N O R S E F G H E F C T E F G H E F C T I ~ K@2 U ~ S V
  J ~ K@2 L ~ M@2 N O P Q N O R S E F G H E F C T E F G H E F C T W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO S
  AM AN AP AQ E F G H E F C AR E F G H E F C AS E F G H E F AT AU AV@2 ~
>`.pickRestart({
  A: "[a3,e4] ~@4 [a3,e4] ~ [f3,c4]", B: "~@14 [g3,d4]!2", C: "[g3,d4]", D: "~ [c5,g5,c6] ~ [c5,g5,c6] ~ [g4,d5,g5]@3",
  E: "a3@3 b3@3 c4@2", F: "f3@3 g3@3 a3@2", G: "g3@3 a3@3 b3@2", H: "e3@3 g3@3 b3@2", I: "a3!4 ~@4",
  J: "[a3,e4]@3 [a3,e4] ~@4", K: "[f3,c4]/2", L: "[g3,d4]@3 [g3,d4] ~@4", M: "[e3,b3]/2", N: "[f3,c4]@6 ~ [f3,c4]",
  O: "[a3,e4]@3 g3 [g3,d4]@4", P: "[f3,c4]@6 ~ [c4,g4]", Q: "[c4,g4]@3 g3 [g3,d4]@4", R: "[f3,c4]@6 ~ e3", S: "[e3,b3]",
  T: "[d4,g4] [c5,g5,c6] ~ [c5,g5,c6] ~ [g4,d5,g5]@3", U: "g3 b3 d4 g4 ~@4", V: "f6 d6 f6 d6 g6 b6 e7@9 ~",
  W: "a4@5 b4@2 c5", X: "a4@6 a4!2 a4@3 b4@2 c5@3", Y: "g4@6 g4!2 g4@3 b4@2 c5@3", Z: "d5@4 c5@4 b4@3 g4@2 f4@3",
  AA: "e4@8 [e5,a5]@3 b5@2 c6@3", AB: "f5@8 [e5,a5]@3 b5@2 c6@3", AC: "g5 a5 c6 a5 b5 d6 b5@2 c6 a5 b5 d6 b5 c6 e6 c6",
  AD: "b5 d6 b5@2 c6 a5@2 b5 [g5,b5]@8", AE: "a4 g4 a4 c5 a4@3 g4 a4 c5 a4@2 a4 g4 a4 c5",
  AF: "a4@3 g4 a4 c5 a4@7 ~ a5!2", AG: "g5 a5 c6 a5@3 a5 g5 a5 c6 a5@2 a5 g5 a5 c6",
  AH: "a5 g5 ~ a5 c6 d6 ~ e6!2 g6 e6!2 a6 e6 a6@2", AI: "c7@4 c7@4 c7@2 a6 g6 e6 a6 g6 e6",
  AJ: "g6@2 a6 g6 e6 d6 c6 a5 d6@2 c6@6", AK: "d4@4 e4 g4!2 e4 d5@8", AL: "a4 c5 ~ d5 e5 g5 ~ a5 d6@8",
  AM: "[a3,e4]!4 ~@4", AN: "[f3,c4]", AO: "[g3,d4]!4 ~@4", AP: "[g3,d4]!8", AQ: "f#6@2 ~@2 g6 b6 e7@10",
  AR: "e6 c6 g5@2 e6 c6 g5@4 g5@6", AS: "e6 c6 g5@2 e6 c6 g5@4 [d5,g5]@6", AT: "[d4,a4] [e4,b4]", AU: "[f4,c5] [g4,d5]",
  AV: "[a3,e4]/2", // A5
})).s("gm_distortion_guitar").gain(0.54)

// chords · lead 8 bass lead · "Poly synth 2"
const lead_8_bass_lead = note(`<
  ~@4 A B C D A B C D A B C D E@2 F@2 G@2 H ~ I ~ J ~ K ~ H ~ L M N M O P Q R ~@16 E@2 F@2 G@2 H ~ I ~ J ~ K ~ H ~ L M N
  M O P Q R ~@67
>`.pickRestart({
  A: "[a4,c5]!5 [g4,b4]!2 [f4,a4]", B: "[f4,a4]!8", C: "[g4,c5]!8", D: "[g4,c5] [g4,b4]!7",
  E: "[[a2,a3]!3 [a2,a3]@13]/2", F: "[f2,f3]/2", G: "[g2,g3]/2", H: "[e2,e3]", I: "a2 c3 e3 a3 ~@4", J: "[f2,f3]",
  K: "g2 b2 d3 g3 ~@4", L: "[f4,a4]", M: "[e4,g4,c5] [d4,g4,b4]", N: "[a4,c5] [a4,c5,f5]", O: "[a4,c5,f5]",
  P: "[f4,a4,c5] [d4,g4,b4]", Q: "[c4,f4,a4]", R: "[e4,g#4,b4] [e4,b4,d5]",
})).s("gm_lead_8_bass_lead").gain(0.24)

// other · piano
const piano = note("<~@24 A B C D E F G H ~@32 A B C D E F G H ~@75>".pickRestart({
  A: "c5 a4 e4 e5 a4 e4 d5 a4", B: "e4 c5 a4 f4 b4 e4 c5 e4", C: "c5 a4 f4 e5 a4 f4 d5 a4",
  D: "f4 c5 a4 f4 b4 f4 c5 f4", E: "b4 g4 d4 e5 g4 d4 d5 g4", F: "d4 c5 g4 d4 b4 d4 c5 d4",
  G: "b4 g4 e4 e5 g4 e4 d5 g4", H: "e4 c5 g4 e4 c5 e4 b4 e4",
})).s("gm_piano").gain(0.4)

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

// drums · rim
const rim = s("rim").struct("<~ [x!4] [~ x!3] x ~@143>").gain(0.32)

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

// drums · low tom
const low_tom = s("lt").struct("<~@16 A ~@22 B ~@16 A ~@22 B ~@32 A ~ A ~ A ~@9 C ~@15 D E ~@3>".pickRestart({
  A: "x!4 ~@4", B: "~@3 x", C: "~@13 x ~@2", D: "~@6 x!2 ~@6 x!2", E: "~@6 x!2 ~@8",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B A C D E@3 D E@2 F G B@7 H B A B A B A F ~@8 D E@3 D E@2 ~ D E@3 D E@2 ~ G B@7 H B A B A B A F ~@8 D E@3 D E@2
  ~ D E@3 D E@2 I ~@51
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!2 ~@2", D: "~ x!7", E: "x!8", F: "x", G: "~@2 x!2", H: "x ~ x!2", I: "x ~ x!2 ~@4",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~ [~@14 x!2] ~@125 x ~@19>").gain(0.32)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@32 A B A C A B D ~@33 A B A C A B D ~@17 E F G H E F E ~ E I J K L M ~@10 N O N P N O Q ~ R@6 S ~ R@6 ~@5
>`.pickRestart({
  A: "~ x!3", B: "~ x ~ x", C: "~ x ~@2", D: "~@2 x!3 ~ x ~", E: "~@4 x ~@3 x ~ x!3 ~ x ~",
  F: "x ~@3 x ~@3 x ~ x!3 ~ x ~", G: "~@4 x ~@3 x ~ x!4 ~@2", H: "x ~@2 x!3 ~ x!2 ~@2 x!3 ~ x",
  I: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", J: "x ~ x!5 ~ x ~ x!5 ~", K: "x ~ x!5 ~ x!5 ~ x ~", L: "~@4 x ~@3 x ~ x!5 ~",
  M: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", N: "~ x!7", O: "x!8", P: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", Q: "x",
  R: "~@8 x ~ x!5 ~", S: "~@2 x ~@3 x!3 ~ x!3 ~ x!2",
})).gain(0.32)

stack(
  bass, pad_poly, distortion_guitar, lead_8_bass_lead, piano, kick, rim, snare, low_tom, hihat, mid_tom, crash, ride
)

More by Bon Jovi