Strudelify

Bad to the Bone

Inner Circle

KeyE minorTempo106 bpm
0:00/0:00
// Bad to the Bone — Inner Circle
// 106 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "GUITAR EL" electric guitar muted (copy of ch 3 "GUITAR DI" overdriven guitar)
// note: Full arrangement: all 115 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(106/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 · "BAD 2 BON"
const bass = note("<~@4 A@5 B A@19 B A@15 C A@42 B A@5 B ~ A@12 D@2 E D F G@2>".pickRestart({
  A: "e1@3 ~ e1@2 e1@3 ~ e1@2 e1@3 ~ e1@2 e1@3 ~ e1@2", B: "~@4 e1@2 e1@3 ~ e1@2 e1@3 ~ e1@2 e1@3 ~ e1@2",
  C: "e1@3 ~@13 e1@2 g1@2 e1@2 g1@2", D: "e1@3 ~@3 d1@3 ~ e1@5 ~ e1@2 e1@3 ~ e1@2",
  E: "~@6 d1@3 ~ e1@5 ~ e1@2 e1@3 ~ e1@2", F: "~@4 e1@2 d1@3 ~ d1@2 c#1@3 ~ c#1@2 c1@3 ~ d1@2",
  G: "[b0@3 ~ c#1@2 d#1@4 e1@4 ~@4 e1@22 ~@8]/2",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · overdriven guitar · "GUITAR DI"
const overdriven_guitar = note(`<
  A B@2 C@6 D ~@6 E C@4 D ~@6 E C@4 ~@12 D ~@6 E C@4 ~@27 F G@3 D ~@6 E C@16 H I@2
>`.pickRestart({
  A: "~@7 [e2,b2]!2 [a2,e3] [e2,b2] [g2,b2]", B: "[e2,b2] ~@6 [e2,b2]!2 [e2,a2] [e2,b2] [g2,b2]",
  C: "[e2,b2] ~@7 [e2,b2] [e2,a2] [e2,b2] [g2,b2]", D: "[e2,b2] ~@11", E: "~@7 e2 [e2,b2] [e2,a2] [e2,b2] [g2,b2]",
  F: "~@8 [e2,b2] [g2,b2] [e2,b2] [g2,b2]", G: "[e2,b2] ~@7 [e2,b2] [g2,b2] [e2,b2] [g2,b2]",
  H: "[e3,b3]@2 ~@2 e3@2 d3@3 ~ d3@2 c#3@3 ~ c#3@2 c3@3 ~ d2@2", // E5
  I: "[b1@3 ~ c#2@2 d#2@4 e2@4 ~@4 [e2,e3,g#3,d4]@21 ~@9]/2", // E7
})).s("gm_overdriven_guitar").gain(0.4).pan(1)

// other · tenor sax · "SAX BARI"
const tenor_sax = note(`<
  ~@9 A B@2 C D@4 E ~@3 A B@2 C D@4 ~@16 A B@2 C D@4 ~@35 A B@2 C D@4 ~@4 A B@2 C D@4 ~@4 F G@2
>`.pickRestart({
  A: "~@7 [e2,e3]!2 [a2,a3] [e2,e3] [g2,g3]", B: "[e2,e3] ~@6 [e2,e3]!2 [a2,a3] [e2,e3] [g2,g3]",
  C: "[e2,e3] ~@6 [b2,b3]!3 [d2,d3] [d#2,d#3]", D: "[e2,e3] ~@6 [e2,e3]!2 [g2,g3] [e2,e3] [g2,g3]", E: "e3 ~@11",
  F: "[e1,e2]@3 ~ [e1,e2]@2 [d1,d2]@3 ~ [d1,d2]@2 [c#1,c#2]@3 ~ [c#1,c#2]@2 [c1,c2]@3 ~ [d1,d2]@2", // E D C# C D
  G: "[[b0,b1]@3 ~ [c#1,c#2]@2 [d#1,d#2]@4 [e1,e2]@4 ~@4 [e1,e2]@22 ~@8]/2", // B C# D# E
})).s("gm_tenor_sax").gain(0.56).pan(1)

// other · tenor sax · "SAX SOLO"
const tenor_sax_2 = note("<~@57 A B C D E F G H I J K L ~@46>".pickRestart({
  A: "~@4 [c#3,c#4] ~ [e3,e4]@2 [e3,e4] ~ [c#3,c#4] ~ [e3,e4]@4 [c#3,c#4]@2 ~@2 [c#3,c#4] ~ [e3,e4]@2", // C# E C# E C# E
  B: "[f#3,f#4]@2 [g#3,g#4]@2 [b3,b4]@2 [c#4,c#5]@2 [b3,b4] ~ [g#3,g#4] ~ [c#4,c#5]@3 ~ [e4,e5] ~@7", // F# G# B C# B G# C# E
  C: "[c#4,c#5]@2 [b3,b4] [c#4,c#5]@2 [b3,b4] [g#3,g#4]@2 [b3,b4] [c#3,c#4] [e3,e4] [f#3,f#4]", // C# B C# B G# B C# E …
  D: "[g3,g4]@2 ~ [g3,g4]@2 ~ [g3,g4] [d3,d4] [d#3,d#4] [e3,e4] ~ [g#3,g#4]", // G D D# E G#
  E: "[e4,e5]@5 ~ [f#3,f#4]@4 [g3,g4]@2 [g#3,g#4]@4 [b3,b4]@2 ~@2 [g3,g4]@2 [g#3,g#4]@2", // E F# G G# B G G#
  F: "[e4,e5]@5 ~ [f#3,f#4]@4 [g3,g4]@2 [g#3,g#4]@4 [d4,d5]@2 ~@2 [g3,g4]@2 [g#3,g#4]@2", // E F# G G# D G G#
  G: "[e4,e5]@5 ~ [f#3,f#4]@4 [g3,g4]@2 [g#3,g#4]@4 [b3,b4]@2 ~@2 [b3,b4]@2 [c#4,c#5]@2", // E F# G G# B C#
  H: "[d4,d5]@2 ~ [d4,d5]@2 ~ [d4,d5]@2 ~ [d4,d5] [c#4,c#5] [b3,b4]", I: "[g4,g5,g6]@7 ~",
  J: "[e5,e6]@5 ~ [f#4,f#5]@4 [g4,g5]@2 [g#4,g#5]@4 [b4,b5]@2 ~@2 [g4,g5]@2 [g#4,g#5]@2", // E F# G G# B G G#
  K: "[d5,d6]@2 ~ [d5,d6]@2 ~ [d5,d6]@2 ~ [d5,d6] [c#5,c#6] [b4,b5]", // D C# B
  L: "[g4,g5]@2 ~ [g4,g5]@2 ~ [g4,g5] [d4,d5] [d#4,d#5] [e4,e5]@2 [g#4,g#5]", // G D D# E G#
})).s("gm_tenor_sax").gain(0.64).pan(0)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@56 [~@6 x!3 ~@3] ~@57 [~@17 x!2 ~@5]>").gain(0.33)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@114 [~@16 x!2 ~@6]>").gain(0.33)

// drums · open hat
const open_hat = s("oh").struct("<~@21 A ~@27 A ~@27 B@2 ~@9 A ~@11 A ~@14>".pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.42)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@7 A ~@11 A ~@3 A ~@6 A@2 B@2 ~@9 A ~@3 A ~@3 A ~@2 B A ~@3 A ~@3 A ~@3 A@5 C@2 A@2 B A ~@8 A ~@2 D A ~@4 A@2 B
  E@4 ~ F ~
>`.pickRestart({
  A: "x", B: "x!4", C: "x ~@4 x!2 ~@5", D: "x ~@10 x", E: "~@5 x ~@6", F: "~@3 x",
})).gain(0.42)

// drums · ride
const ride = s("rd").struct(`<
  ~@4 A@5 ~@8 A B@3 ~@8 A@2 B A@12 B ~@8 A@11 C A B@6 D A B@6 D A B@6 ~@8 A@4 ~@8 A@5 E ~
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@2 x ~ x", B: "~@3 x ~@2 x ~@2 x ~ x", C: "x!4", D: "~ x!3", E: "x!2 ~ x",
})).gain(0.33)

stack(bass, overdriven_guitar, tenor_sax, tenor_sax_2, kick, snare, low_tom, hihat, mid_tom, open_hat, crash, ride)

More by Inner Circle