Strudelify

The Rascal King

The Mighty Mighty Bosstones

KeyD♭ majorTempo180 bpm
0:00/0:00
// The Rascal King — The Mighty Mighty Bosstones
// 180 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/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 · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  A B C B A B C B A B C B A B C B A B C B A B C B A C D C A C D E A C D C A C D E A B C B A B C B A B C B A B C B A C D
  C A C D E A C D C A C D E F G H G F G H G F G H G I J@3 ~@14 K ~ A C D C A C D E A C D C A C D E L
>`.pickRestart({
  A: "~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4]", // Db
  B: "~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4]", // Ab
  C: "~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4] ~ [eb4,gb4,bb4]", // Ebm
  D: "~ [f4,ab4,c5] ~ [f4,ab4,c5] ~ [f4,ab4,c5] ~ [f4,ab4,c5]", E: "~ [gb3,db4,gb4,bb4]!7",
  F: "~ ab3@2 ~@3 db4@2, ~@3 ab3@5, ~ f4", G: "~ ab3@2 ~@3 c4@2, ~@3 ab3@5, ~ eb4",
  H: "~ gb3@2 ~@3 bb3@2, ~@3 gb3@5, ~ db4", I: "~@2 db5 ~@3 db5!2, db5@2 ~ db5@3 db4@2, ~ ab3@2 ab3@5, ~ f4",
  J: "[db5 ab3@2 ~@3 c4@2 ~@2 b4!3 ~@4 ab3@2 ~@3 c4@2, ~ db5@9 ~@3 b4@2 c5@9, ~@3 ab3@5 ~ gb3@2 gb3@5 ~@3 ab3@5, ~ eb4 ~ db4 ~ eb4, ~@7 bb3 ~@4]/3",
  K: "[gb2,db3,gb3] ~@3", L: "[db3,ab3,db4,f4] ~",
})).s("gm_electric_guitar_clean").gain(0.35)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B C B A B C B A B C B A B C B A B C B A B C B D E F G D E F H D E F G D E F H A B C B A B C B A B C B A B C B D E F
  G D E F H D E F G D E F H A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B I ~ D E F G D E F H D E F G D E
  F H J
>`.pickRestart({
  A: "db2@2 ~ db2 f2!2 db2@2", B: "~ ab1 ~ ab1 c2!2 ab1@2", C: "eb2@2 ~ eb2 gb2!2 eb2@2", D: "db2!2 f2!2 ab2!2 f2!2",
  E: "eb2!2 gb2!2 bb2!2 gb2!2", F: "f2!2 ab2!2 c3!2 ab2!2", G: "eb2!2 gb2!2 f2!2 eb2!2", H: "~ gb1!7", I: "gb1 ~@3",
  J: "db2 ~",
})).s("gm_electric_bass_finger").gain(0.4)

// other · trumpet · "Horns"
const trumpet = note(`<
  A B C@2 D B E@2 ~@9 F ~ G H ~ I@2 ~@2 J K ~@3 L ~@2 J K ~@3 L ~@9 F ~ G H ~ I@2 ~@2 J K ~@3 L ~@2 J K ~@3 L A B C@2 D
  B E@2 M@4 ~@12 A B C@2 D B ~@4 J K ~@3 L ~@2 J K ~@3 L N
>`.pickRestart({
  A: "[db3,db4]@4 ~ [ab2,ab3]@2 [ab2,ab3]", B: "[bb2,bb3] [ab2,ab3]@2 ~",
  C: "[[db3,db4]@2 ~@2 [db3,db4] [bb2,bb3]@2 [ab2,ab3]@4 ~@3 [ab2,ab3] [bb2,bb3]]/2", // Db Bb Ab Bb
  D: "db3@4 ~ [ab2,ab3]@2 [ab2,ab3]", E: "[[db3,db4]@2 ~@2 [db3,db4]@2 ~ [f3,f4]@2 [eb3,eb4]@5 ~@2]/2",
  F: "~@4 [db3,db4,db5]@3 ~", G: "~ [ab2,ab3]@2 [ab2,ab3] [bb2,bb3]@2 [ab2,ab3]@2", H: "db4",
  I: "[[db3,db4]@3 ~ [db3,db4]@3 [f3,f4]@2 [eb3,eb4]@5 ~@2]/2", J: "~ [ab3,ab4]@2 [ab3,ab4]!2 ~ [eb3,eb4] [f3,f4]",
  K: "[gb3,gb4] [f3,f4]@2 [eb3,eb4]@2 [db3,db4]@3", L: "~ [gb3,gb4,bb4]!7", M: "[ab4@7 bb4@2 ab4@2 gb4@2 f4@3]/2",
  N: "[db3,db4,db5]@7 ~@9", // Db
})).s("gm_trumpet").gain(0.5)

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

// drums · rim
const rim = s("rim").struct("<[~@9 x ~@4 x ~] [~@4 x!2 ~ x] [~@4 x ~@2 x] ~ [~@4 x ~@2 x] ~ [~@4 x!2 ~ x] ~@114>")
  .gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  A ~@2 B ~ B ~ B@16 C D@7 C D@7 C B@15 C D@7 C D@7 C B@7 C B@8 D@14 A ~ D@7 C D@7 C A
>`.pickRestart({
  A: "x", B: "~ x", C: "~ x ~@2 x ~ x ~", D: "~ x ~ x",
})).gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@103 [~@6 x!2] ~@17>").gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@103 [~@4 x!2 ~@2] ~@17>").gain(0.5)

// drums · cowbell
const cowbell = s("cb").struct("<~@41 [~ x] ~@79>").gain(0.5)

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

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

stack(electric_guitar_clean, bass, trumpet, kick, rim, snare, low_tom, mid_tom, cowbell, crash, ride)

More by The Mighty Mighty Bosstones