Strudelify

Runaway

Bon Jovi

KeyG majorTempo150 bpm
0:00/0:00
// Runaway — Bon Jovi
// 150 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 84 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/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.

// chords · marimba
const marimba = note(`<
  A B C D A B C D A B C D A B C D E F A B A G C D E H I@2 J@3 K L@4 A B C D M@2 N@2 O P A B A B C D E F A B A G C D E H
  I@2 J@3 K L@4 A B C D M@2 N@2 O P ~@2
>`.pickRestart({
  A: "[a4,c5,e5]!3 [a4,b4,d5]!3 [a4,d5,f5]!2", B: "[a4,d5,f5] [a4,c5,e5]!3 [a4,b4,d5]!2 [a4,c5,e5]!2",
  C: "[g4,c5,d5]!3 [g4,b4,d5]!3 [g4,a4,d5]!2", D: "[g4,a4,d5] [g4,b4,d5]!3 [g4,c5,d5] [g4,b4,d5] [g4,a4,d5] [g4,d5]",
  E: "[g4,b4,e5]!3 [g4,a4,d5]!3 [g4,b4,e5]!2", F: "[f4,a4,c5]!4 [g4,b4,d5]!4",
  G: "[a4,d5,f5] [a4,c5,e5] [c5,e5] [a4,c5,e5] [a4,b4,d5]!2 [a4,c5,e5]!2", H: "[g4,b4,e5]!3 [g4,b4,d5]!5",
  I: "[a4,c5,e5]!8", J: "[d4@22 ~ a4@11 e4@6 c4@6 a3@23 ~@3, c4 ~@35]/3", K: "a4@23 ~",
  L: "[d5@9 a4@8 f4@5 d4@23 ~@2 e5@10 c5@8 g4@6 d4@13 g4@6 b4@4 ~@2, c5 ~@95]/4",
  M: "[[g4,c5,e5]!7 [g4,b4,e5]@2 [g4,b4,e5]!2 [g4,b4,d5]!3 [b4,d5] [g4,b4,d5]]/2", // C Em G Bm G
  N: "[[a4,c5,e5]!5 [g4,a4,b4,d5]@2 [a4,c5,e5]@2 [g4,b4,d5] [a4,c5,e5]!6]/2", O: "[g4,b4,d5]!8", P: "[g4,b4,e5]!2 ~@2",
})).s("gm_marimba").gain(0.19).pan(0.3)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@3 A@4 B C B D@2 E@2 F G H I J@2 K L@2 M@3 N@2 O@2 P Q R S T@2 U V W X Y@2 Z@2 AA AB ~@3 B F G H I J@2 K L@2 M@3 N@2
  O@2 P Q R S T@2 U V W X Y@2 Z@2 AA AB ~@2
>`.pickRestart({
  A: "[~@18 e2@5 a2@26 ~@16 e2@4 ~ g2@25 ~]/4", B: "~@7 e2", C: "~ a2@23", D: "[g2@29 ~@13 e2@6]/2", E: "[a2@15 e2]/2",
  F: "g2", G: "~@11 g2", H: "e2@2 ~", I: "~ e2@2 f2@9 ~ f2 ~@2 g2@7 ~", J: "[g2@2 ~@2 a2@27 ~@17]/2",
  K: "a2@4 ~@2 a2 ~@2 a2 ~@2 a2@4 ~@2 a2@3 ~@3",
  L: "[a2@2 ~ a2 ~@2 a2 ~@2 a2@5 ~@2 a2@2 ~ a2@2 ~@2 g2@5 ~@2 g2@2 ~ g2@4 ~@2 g2 ~@2 g2@3 ~@3]/2",
  M: "[g2@4 ~@3 g2@2 g2@3 ~@3 g2@2 ~ g2@4 ~ e2@5 ~ e2@2 ~ e2@4 ~@3 e2@2 ~ e2@5 f2@5 ~ f2@2 ~ g2@5 ~ g2@5 ~@2 g2 a2 ~]/3",
  N: "[a2@4 ~ a2@2 ~@2 a2@6 b2@2 ~ c3@3 c3 b2@5 a2@3 b2 ~ a2 ~ a2@4 ~ a2 ~@2 a2@2 ~ a2 ~@2]/2",
  O: "[e3@3 ~@3 e3@3 ~@3 e3@3 ~@2 e3@5 ~ g3@5 ~@2 g3@3 ~@3 g3@2 ~ g3@2 ~ g3 ~@2 g3@2 ~]/2",
  P: "~ a3@3 ~@2 a3@3 ~@3 a3@3 ~@3 a3@3 ~@3", Q: "a3@4 ~@2 a3 ~@2 a3 ~@2 a3 ~@2 a3 ~@2 a3 ~@2 a3@2 ~",
  R: "d4@4 ~@2 d4@3 ~@3 d4@3 ~@3 d4@3 ~@3", S: "d4@4 ~@2 d4@2 ~ d4 ~@2 d4@2 ~ d4 ~@2 d4 ~@2 d4@2 ~",
  T: "[c4@5 ~ c4@2 ~@2 c4 ~ c4@2 ~ c4@2 ~ e4@2 ~ e4 ~ f4@2 ~@2 g4@6 ~@2 g3@2 ~@5 g3 ~ g3 ~@2 g3, ~@27 f4 ~@20]/2",
  U: "a3@2 a3!2 a3@2 a3@2", V: "a3!2 a3@2 a3@2 a3@2", W: "g3@2 g3!2 g3@2 g3@2", X: "g3!2 g3@2 g3@2 g3@2",
  Y: "[c4@2 c4@2 c4@2 c4 e3@3 e3 g3@3 g3@2]/2", Z: "[a3!5 g3@2 a3@2 g3 a3!6]/2", AA: "g3@2 g3@2 g3!4", AB: "e3!2 ~@2",
})).s("gm_electric_bass_pick").gain(0.2).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A B C D E F G H I J K L M H N O P Q R@2 S T U ~ U V H W X H@4 ~ F@2 U H ~ F U ~ F Y ~@4 M H N O P Q R@2 S T U ~ U V H
  W X H@4 ~ F@2 U H ~ F U ~ F Y ~@4
>`.pickRestart({
  A: "x ~@4 x ~@15 x ~@2", B: "x ~@2 x ~@5 x ~ x", C: "x ~@5 x ~@3 x ~@4 x ~@2 x ~@5", D: "x ~ x ~@2 x!3", E: "x ~@6 x",
  F: "x", G: "x ~@5 x ~@16 x", H: "~@23 x", I: "~@7 x", J: "~@5 x ~@2 x ~@15", K: "x ~@4 x", L: "~@4 x ~@2 x ~@14 x ~",
  M: "~@3 x ~@3 x ~@2 x ~@8 x ~@2 x ~", N: "~@6 x ~@2 x ~@13 x", O: "~@3 x ~@4", P: "~ x ~@8 x ~@13", Q: "~ x ~@10",
  R: "~ x ~@6", S: "~ x ~@2 x ~@11 x ~@6 x", T: "~ x", U: "x ~@22 x", V: "~@11 x", W: "~@18 x ~@4 x",
  X: "x ~@10 x ~@11 x", Y: "x ~@2 x",
})).gain(0.25).pan(0.4)

// drums · snare
const snare = s("sd").struct(`<
  A B C D E D@2 F G H@2 I D J H G K L M N O H@2 G H@4 P H G H@2 G@3 H@2 G@3 H G Q E ~@3 D J H G K L M N O H@2 G H@4 P H
  G H@2 G@3 H@2 G@3 H G Q E ~@3
>`.pickRestart({
  A: "~@9 x ~@4 x ~@9", B: "~@3 x ~ x ~@2", C: "~@5 x ~@6", D: "~@3 x ~@4", E: "~ x ~", F: "~ x!2", G: "~ x",
  H: "~@11 x ~@12", I: "~@10 x ~@2 x ~@2 x ~@2 x ~@4", J: "~@11 x ~@5 x ~@6", K: "~@7 x ~@2 x ~", L: "~@5 x ~@2",
  M: "~@7 x ~@4", N: "~@6 x ~@2 x ~ x", O: "~@2 x", P: "~@5 x ~@11 x ~@6", Q: "~@13 x ~@10",
})).gain(0.25).pan(0.4)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@28 A B C D E F G H I E J K L M N O P ~@19 A B C D E F G H I E J K L M N O P ~@3
>`.pickRestart({
  A: "x ~@4 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", B: "~@4 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x",
  C: "~@4 x ~@2 x ~@3 x ~@5 x ~@2 x ~@2 x", D: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  E: "~@5 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x", F: "~ x!2 ~ x ~ x!2", G: "x ~@5 x ~ x ~@3 x ~@5 x ~@2 x ~@2",
  H: "x!5 ~ x!2", I: "x ~@5 x ~ x ~@2 x ~@5 x ~@2 x ~@2 x", J: "~ x!4 ~ x!2", K: "x ~ x!3 ~ x!2",
  L: "x ~@5 x ~@2 x ~@2 x ~@4 x ~@2 x ~@2 x", M: "~@5 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2",
  N: "x ~@4 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", O: "x ~ x ~ x!4", P: "x ~@3 x ~@2 x ~@2 x ~@3 x ~@9",
})).gain(0.29).pan(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 x ~@35 x ~@14>").gain(0.19).pan(0.4)

// drums · ride
const ride = s("rd").struct("<~@7 A ~ B ~@4 A ~@14 C ~@6 A ~ A ~@3 D ~@7 A ~@14 C ~@6 A ~ A ~@3 D ~@5>".pickRestart({
  A: "x", B: "~ x", C: "~ x ~", D: "~@3 x",
})).gain(0.19).pan(0.4)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B C A D A E F G H I J K L M N O P Q R S T U V W X Y@2 Z AA AB L Y AC AD AE AF AG AH AE AI AJ AK D AL ~@3 K L M N O P
  Q R S T U V W X Y@2 Z AA AB L Y AC AD AE AF AG AH AE AI AJ AK D AL ~@3
>`.pickRestart({
  A: "x ~ x!2 ~ x!3", B: "x ~@5 x ~@2 x ~@5 x ~@2 x ~@3 x ~", C: "~ x ~@4 x ~@2 x ~@5 x ~@2 x ~@2 x ~@2", D: "x ~ x!6",
  E: "x ~@5 x ~@2 x ~@4 x ~@2 x ~@2 x ~@3", F: "~@5 x ~@2 x ~@4 x ~@2 x ~@2 x ~@3 x",
  G: "~@6 x ~ x ~@3 x ~@5 x ~@2 x ~@2", H: "~@2 x ~@2 x ~@2 x ~@2 x ~@6 x ~ x ~@3",
  I: "x ~@4 x ~@2 x ~@2 x ~@5 x ~@2 x ~@3", J: "~@2 x ~@2 x ~@2 x ~@4 x ~@2 x ~@2 x ~@2 x ~",
  K: "~@3 x ~@2 x ~@2 x ~@6 x ~@2 x ~@2 x ~", L: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  M: "~@3 x ~@2 x ~@5 x ~@4 x ~@2 x ~@2 x", N: "~@3 x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@2 x ~@2",
  O: "~ x ~@3 x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@2 x", P: "~@3 x ~@5 x ~@2 x ~@2 x ~@3 x ~ x ~@2",
  Q: "x ~@2 x ~@5 x ~ x ~@2 x ~@3 x ~@2 x ~@2", R: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~@3 x ~",
  S: "~ x ~@2 x ~@5 x ~@2 x ~@2 x ~@2 x ~@3 x", T: "~@5 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2",
  U: "x ~@3 x ~@2 x ~@2 x ~@5 x ~@2 x ~@3 x", V: "~@2 x ~@3 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~",
  W: "x ~@5 x ~@2 x ~@2 x ~@4 x ~@2 x ~@2 x", X: "~@5 x ~@2 x ~@2 x ~@4 x ~@2 x ~@2 x ~",
  Y: "~@5 x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x", Z: "x ~@4 x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x",
  AA: "~@4 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x", AB: "~@5 x ~ x ~@3 x ~@5 x ~@5 x", AC: "~ x!4 ~ x!2",
  AD: "x ~@2 x ~@2 x ~ x ~@3 x ~@5 x ~@2 x ~@2", AE: "x ~ x!3 ~ x!2", AF: "x ~@4 x ~@3 x ~ x ~@11 x",
  AG: "~@5 x ~@2 x ~@2 x ~@6 x ~@2 x ~ x", AH: "~@3 x ~@2 x ~@2 x ~ x ~@6 x ~@2 x ~@2",
  AI: "x ~@5 x ~@4 x ~@5 x ~@2 x ~@2 x", AJ: "~@5 x ~@2 x ~@2 x ~@6 x ~@2 x ~@2",
  AK: "x ~@4 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", AL: "x ~@3 x ~@2 x ~@2 x ~@3 x ~@9",
})).gain(0.22).pan(0.4)

// drums · splash
const splash = s("cr").struct("<~@32 x!2 ~@34 x!2 ~@14>").gain(0.19).pan(0.4)

stack(marimba, bass, kick, snare, hihat, open_hat, mid_tom, ride, tambourine, splash)

More by Bon Jovi