Strudelify
Mr. Roboto cover art

1983 · Kilroy Was Here

Mr. Roboto

Styx

KeyE♭ minorTempo145 bpm
0:00/0:00
// Mr. Roboto — Styx
// 145 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 166 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): GTHARMONIC.
setcpm(145/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, A@4 for four bars: edit a riff to change every repeat.

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@9 A@3 B ~@10 C@2 D E F G H I F@2 H I F@2 H I F@2 H J K L C@2 K L F@3 G H I F@2 H I F@2 H I F@2 H J M N O@2 M N P
  ~@47 Q R C S Q T Q T U@2 V@18 W ~@10 F@6
>`.pickRestart({
  A: "c6 db6 c6 db6 c6 db6 c6 db6", B: "c6@2 db6@2 c6@2 db6@3 ~@7", C: "[gb5,bb5,eb6]@3 ~ [gb5,bb5,eb6]@2 ~@10",
  D: "[gb5,bb5,eb6]@3 ~ [gb5,bb5,eb6]@2 ~@8 [gb5,bb5,eb6] ~", E: "[gb5,bb5,f6]@3 ~ [gb5,bb5,eb6]@3 ~@9",
  F: "[gb5,bb5,eb6,f6] ~ [gb5,bb5,eb6] ~@5", G: "[gb5,bb5,eb6,f6]@3 ~ [gb5,bb5,eb6]@3 ~@9",
  H: "[f5,ab5,db6] ~ [f5,ab5,db6] ~@5", I: "~@4 [f5,ab5,db6]@3 ~ [f5,ab5,db6]@2 ~@2 [f5,a5,d6]@2 ~@2",
  J: "[f5,ab5,db6]@3 ~ [f5,ab5,db6]@3 ~ [f5,ab5,db6]@3 ~ [f5,ab5,db6]@2 ~@2", K: "[b2,eb3,gb3]", L: "[db3,f3,ab3]@7 ~",
  M: "[b2,eb3,gb3,eb4,eb6]", N: "[db3,f3,ab3]@7 ~, [f4,f6]", O: "[f4,gb5,bb5,eb6]@3 ~ [eb4,gb5,bb5,eb6]@3 ~@9",
  P: "[eb6,g6] ~ [eb6,g6] ~ [g4,eb6,g6] ~ [g4,eb6,g6] ~ [g4,eb6,g6] ~ [g4,eb6,g6] ~ [g4,eb6,g6] ~ [g4,eb6,g6]@2, g4 ~@7", // Eb Cm
  Q: "[gb5,b5,eb6]", R: "[ab5,db6,f6]@15 ~", S: "[gb5,bb5,eb6]@3 ~ [gb5,bb5,eb6]@3 ~@9", T: "[ab5,db6,f6]",
  U: "[[g5,bb5,eb6]@25 ~@7]/2", V: "ab6 ab5 ab3 ab2 ab6 ab5 ab3 ab2", W: "ab6 ab5 ab3 ab2 ab6 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.25).pan(0.8)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@2 A@2 B@2 A@2 C D@2 E F@3 G@6 H@2 I@6 J K I@2 J K I@2 J K I@2 J@2 L@2 I@2 L@2 I@4 J K I@2 J K I@2 J K I@2 J@2 L@2
  I@2 L@2 M N@3 G@6 H@2 I@14 J@2 I@2 J@2 I@2 J@2 I@2 J@2 I@2 J@2 I@2 J@2 L@2 I@2 L@4 M O ~@15 P@6 G@6 H@2 Q@6
>`.pickRestart({
  A: "[f2, f1 ~@31]/2", B: "[gb2, gb1 ~@31]/2", C: "gb2, gb1 ~@15", D: "gb1 gb2", E: "gb1 gb2 gb1 gb2",
  F: "[gb1@4 gb2@4 gb1@2 ~@2 bb1@2 ab1@6 db2@2 c2@6 ab1@2 gb1@5 ~ gb1@3 ~ gb1@3 ~ gb1@3 ~]/3",
  G: "[gb1@3 ~ gb1@3 ~ gb1@3 ~ bb1@2 ab1@6 db2@2 c2@6 ab1@2 gb1@5 ~ gb1@3 ~ gb1@3 ~ gb1@3 ~]/3",
  H: "[gb1@3 ~ gb1@3 ~ gb1@3 ~ bb1@2 ab1@6 db2@2 c2@6 db2@3 ~]/2", I: "eb1@3 ~ eb1@3 ~ eb1@3 ~ eb1@3 ~",
  J: "db1@3 ~ db1@3 ~ db1@3 ~ db1@3 ~", K: "db1@3 ~ db1@3 ~ db1@3 ~ d1@3 ~", L: "b0@3 ~ b0@3 ~ b0@3 ~ b0@3 ~",
  M: "eb1 ~ eb1 ~ eb1 ~ eb1 ~ eb1 ~ eb1 ~ eb1 ~ eb1 ~",
  N: "[eb1@2 ~@10 bb1@2 ab1@6 db2@2 c2@6 ab1@2 gb1@5 ~ gb1@3 ~ gb1@3 ~ gb1@3 ~]/3",
  O: "eb1 ~ eb1 ~ eb1 ~ eb1 ~ eb1@2 ~@6",
  P: "[~@10 d2@2 eb2@2 ab1@36 ~@10 bb1@2 ab1@6 db2@2 c2@6 ab1@2 gb1@5 ~ gb1@3 ~ gb1@3 ~ gb1@3 ~]/6",
  Q: "eb1@3 ~ eb1@3 ~@9",
})).s("gm_fretless_bass").gain(0.44)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_2 = note(`<
  ~@23 A@6 B C A@2 B C A@2 B C A@2 B@2 D@2 A@2 D@2 A@4 B C A@2 B C A@2 B C A@2 B@2 D@2 A@2 D@2 E F ~@10 A@14 B@2 A@2 B@2
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 D@2 A@2 D@4 G H ~@35
>`.pickRestart({
  A: "eb2 eb3 eb2 eb3 eb2 eb3 eb2 eb3", B: "db2 db3 db2 db3 db2 db3 db2 db3", C: "db2 db3 db2 db3 db2 db3 d2 d3",
  D: "b1 b2 b1 b2 b1 b2 b1 b2", E: "eb2!8", F: "eb2 ~@7", G: "eb3!8", H: "eb3!5 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.27)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C@2 D@2 E@2 F@7 G@6 H@2 I ~@18 J K L I M N O P ~@16 O K Q R S T Q U V@3 G@6 H@2 W ~@3 X@2 Y@2 Z@2 Y@2 AA@2 AB@2
  AA@2 AB@2 AA@2 AB@2 AA@2 AB@2 AA@2 AB@2 AA@2 AB@2 ~@28 AC@3 AD@6 AE@3 AF@4 ~
>`.pickRestart({
  A: "f2@2 f2@2 f2 ~ f2 ~ f2@3 ~ f2@2 f2@2", B: "~@2 f2@3 ~ f2 ~ f2@3 ~ f2@3 ~",
  C: "[[bb3,g4,bb4,eb5]!5 [bb3,f4,bb4,d5] ~ bb3 bb3 [bb3,g4,bb4,eb5]@2 [bb3,f4,bb4,d5] [bb3,g4,bb4,eb5]@2 [bb3,f4,bb4,d5] ~, ~@7 [g4,bb4,eb5]@2 ~@7]/2", // Eb Bb Eb Bb Eb Bb Eb
  D: "[[eb4,gb4,bb4,eb5]@2 [db4,gb4,bb4,db5]@2 [c4,f4,ab4,c5] [db4,f4,ab4,db5] [eb4,f4,ab4,eb5] [db4,gb4,bb4,db5]@7 ~@2]/2", // Ebm Gb Fm Db Fm7 Gb
  E: "[[bb3,g4,bb4,eb5]!5 [bb3,f4,bb4,d5] ~ [bb3,g4,bb4,eb5]@2 [bb3,g4,bb4,eb5]@2 [bb3,f4,bb4,d5] [bb3,g4,bb4,eb5]@2 [bb3,f4,bb4,d5] ~]/2", // Eb Bb Eb Bb Eb Bb
  F: "[[eb4,gb4,bb4,eb5]@2 [db4,gb4,bb4,db5]@2 [c4,f4,ab4,c5] [db4,f4,ab4,db5] [eb4,f4,ab4,eb5] [gb4,bb4,db5,gb5]@29 ~@2 bb3 ab3@3 db4 c4@3 ab3 gb3@3 [db4,gb4,bb4]!3 [eb4,ab4,c5] ~ [db4,gb4,bb4]]/7", // Ebm Gb Fm Db Fm7 Gb Ab Gb
  G: "[[db4,gb4,bb4]!3 [eb4,ab4,c5] ~@2 bb3 ab3@3 db4 c4@3 ab3 gb3@3 [db4,gb4,bb4]!3 [eb4,ab4,c5] ~ [db4,gb4,bb4]]/3", // Gb Ab Gb Ab Gb
  H: "[[db4,gb4,bb4]!3 [eb4,ab4,c5] ~@2 bb3 ab3@3 db4 c4@3 db4@2]/2", I: "eb4 ~@3", J: "~@3 eb4 gb4!2 f4@2", K: "b3",
  L: "~@3 db4 gb4!2 f4@2", M: "~@4 gb4 gb4@2 f4", N: "b3@3 ~", O: "~@6 db4@2 gb4@3 gb4@2 f4@3", P: "eb4@9 ~@7",
  Q: "~@6 b3@2 gb4@3 gb4@2 f4@2 ~", R: "eb4 bb4@3", S: "~@8 gb4@3 gb4@3 f4@2", T: "b3@7 ~", U: "eb4",
  V: "[~@6 bb3 ab3@3 db4 c4@3 ab3 gb3@3 [db4,gb4,bb4]!3 [eb4,ab4,c5] ~ [db4,gb4,bb4]]/3", W: "eb4@5 ~@11",
  X: "[[f3,f4]!4 [f3,f4]@2 [eb3,eb4] [f3,f4]@2 [f3,f4]@2 [eb3,eb4] [f3,f4]@2 [eb3,eb4]@2]/2", Y: "[f3,f4]!2 eb2!2 ~@4",
  Z: "[[f3,f4]!3 [eb3,eb4] [f3,f4]@2 [eb3,eb4] [f3,f4]@2 [f3,f4]@2 [eb3,eb4] [f3,f4]@2 [eb3,eb4]@2]/2", // F Eb F Eb F Eb F Eb
  AA: "[[eb2,f3,f4]!3 [eb2,eb3,eb4] [eb2,f3,f4]@2 [eb2,eb3,eb4] [eb2,f3,f4]@2 [eb2,f3,f4]@2 [eb2,eb3,eb4] [eb2,f3,f4]@2 [eb2,eb3,eb4] ~]/2", // Ebsus2 Eb Ebsus2 Eb Ebsus2 Eb Ebsus2 Eb
  AB: "[[db2,f3,f4]!3 [db2,eb3,eb4] [db2,f3,f4]@2 [db2,eb3,eb4] [db2,f3,f4]@2 [db2,f3,f4]@2 [db2,eb3,eb4] [db2,f3,f4]@2 [db2,eb3,eb4] ~]/2", // Db Dbsus2 Db Dbsus2 Db Dbsus2 Db Dbsus2
  AC: "[~@6 bb4 ab4@3 db5 c5@3 ab4 gb4@3 [db4,gb4,bb4]!3 [eb4,ab4,c5] ~ [db4,gb4,bb4]]/3", // Gb Ab Gb
  AD: "[[db4,gb4,bb4]!3 [eb4,ab4,c5] ~@2 bb4 ab4@3 db5 c5@3 ab4 gb4@3 [db4,gb4,bb4]!3 [eb4,ab4,c5] ~ [db4,gb4,bb4]]/3", // Gb Ab Gb Ab Gb
  AE: "[[db4,gb4,bb4]@2 [db4,gb4,bb4]@2 [db4,gb4,bb4]@2 [eb4,ab4,c5]@2 ~@4 bb4@2 ab4@6 db5@2 c5@6 db4@2 eb4@7 ~@7 db4@4]/3", // Gb Ab
  AF: "eb4!2 ~@2",
})).s("gm_piano").gain(0.32).pan(0.6)

// other · pad poly · "POLYSYNTH"
const pad_poly = note("<~@9 A@3 B ~@121 C@7 D@6 ~ E F ~@16>".pickRestart({
  A: "c5 db5 c5 db5 c5 db5 c5 db5", B: "c5 db5 c5 db5 ~@4",
  C: "[~@12 bb5 ~ ab5@6 db6 ~ c6@6 ab5 ~ gb5@26 ~@4 bb5 ~ ab5@6 db6 ~ c6@6 ab5 ~ gb5@26 ~@4 bb5 ~ ab5@2]/7",
  D: "[~@4 db6 ~ c6@6 ab5 ~ gb5@28 ~@2 bb5 ~ ab5@6 db6 ~ c6@6 ab5 ~ gb5@26 ~@8]/6",
  E: "~@2 ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~", F: "ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~@7",
})).s("gm_pad_poly").gain(0.36).pan(0.2)

// other · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note("<~@54 A ~@2 B@2 ~@3 A ~@2 C@2 ~@69 D E ~ D E ~ D E ~ D E ~@19>".pickRestart({
  A: "~ db5 eb5 db5 ab5 eb5 db5 eb5", B: "[~@14 db5@3 eb5@3 db5@2 eb5@2 ab5@2 eb5@2 db5@2 eb5@2]/2",
  C: "[~@7 db5@2 eb5 db5 eb5 ab5 eb5 db5 eb5]/2", D: "~@2 ab6 ~ eb6 ~ db6 ~ gb5 ~ ab6 ~ eb6 ~ db6 ~",
  E: "gb5 ~ ab6 ~ eb6 ~ db6 ~ gb5 ~@7",
})).s("gm_lead_3_calliope").gain(0.31).pan(0.1)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@2 A@2 B@2 A@2 C@4 D@7 E@4 F ~@19 G H ~@2 G H ~@18 G H ~@2 G H I J@7 E@4 ~@36 K L ~@2 K M N L O@2 ~@15 P@7 Q@7 ~@6
>`.pickRestart({
  A: "[f2,f3]/2", B: "[gb2,gb3]/2",
  C: "[gb2@4 ~@11 gb3, gb3@23 ~ gb3@15 ~ gb3@10 ~@2 gb3@6 ~@6, ~@16 gb2@15 ~ gb2@15 ~ gb2@7 ~ gb2@7 ~]/4",
  D: "[~@4 gb3@4 gb2 ~@3 bb3@2 ab3@6 db4@2 c4@6 ab3@2 gb3@28 ~@2 bb3@2 ab3@6 db4@2 c4@6 ab3@2 gb3@27 ~@3 bb3@2 ab3@2, gb2 ~@15]/7",
  E: "[~@2 db4 c4@3 ab3 gb3@14 ~ bb3 ab3@3 db4 c4@3 db4@2]/4", F: "eb4@3 ~@13", G: "b2@3 b2", H: "db3@15 ~",
  I: "[g3,bb3,eb4]!8", // Eb
  J: "[[g3,bb3,eb4]@2 ~@10 bb3@2 ab3@6 db4@2 c4@6 ab3@2 gb3@28 ~@2 bb3@2 ab3@6 db4@2 c4@6 ab3@2 gb3@27 ~@3 bb3@2 ab3@2]/7", // Eb
  K: "[b2,gb3,b3]", L: "[db3,ab3,db4]@7 ~", M: "[db3,ab3,db4]@13 ~@2 [b2,gb3,b3]",
  N: "[b2,gb3,b3]@13 ~@2 [db3,ab3,db4]", // B5 Db5
  O: "[[eb3,bb3]@4 [eb3,bb3]@4 [eb3,bb3,eb4]@4 [eb3,bb3]@4 [eb3,bb3]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 ~ eb4 [eb3,bb3,eb4]@2 ~@6, eb4@4 ~@2 eb4@3 ~@2 [eb3,bb3] ~@4]/2", // Eb5
  P: "[~@10 [d3,d4]@2 [eb3,eb4]@2 [ab2,ab3]@43 ~@3 bb3@2 ab3@6 db4@2 c4@6 ab3@2 gb3@28 ~@2 bb3@2 ab3@2]/7", // D Eb Ab
  Q: "[~@4 db4@2 c4@6 ab3@2 gb3@27 ~@3 bb3@2 ab3@6 db4@2 c4@6 ab3@2 gb3@28 ~@2 bb3@2 ab3@6 db4@2 c4@6 db4@4]/7",
})).s("gm_distortion_guitar").gain(0.4).pan(0.4)

// other · epiano1 · "E.PIANO 1"
const epiano1 = note("<~@43 A B ~@2 A B ~@18 C D ~@2 E F G H ~@61 I J ~ I J ~ I J ~ I J ~@19>".pickRestart({
  A: "~@3 b3, b2, ~@4 [gb3,eb4]@11 ~", B: "f4 db4 gb4 ab3", C: "eb4@4 eb5@4 b4@4 gb4@3 ~", D: "f5@4 db5@4 ab4@7 ~",
  E: "~ eb5 b4 gb4", F: "f5 db5 ab4 ~",
  G: "[g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5] ~", // Eb
  H: "[g4,bb4,eb5] ~@15", I: "~@2 bb5 ~ ab5 ~ gb5 ~ eb5 ~ bb5 ~ ab5 ~ gb5 ~", J: "eb5 ~ bb5 ~ ab5 ~ gb5 ~ eb5 ~@7",
})).s("gm_epiano1").gain(0.38)

// other · drawbar organ · "ORGAN 1"
const drawbar_organ = note(`<
  ~@44 A ~@3 A ~@19 A ~@3 A ~@18 B@2 ~@2 B@2 ~ C D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 F@2 G H ~@2 G I J I K@2 ~@35
>`.pickRestart({
  A: "f4@2 db4@5 ~ f4@2 db4@2 ab3@2 f3@2", B: "~@8 [bb4,eb5,f5] ~@2 [bb4,eb5,f5] ~ [bb4,eb5,f5] ~@2",
  C: "~ eb6 bb5 gb6", D: "[f6@5 db6 bb5 gb6]/2", E: "[f6@5 eb6 bb5 gb6]/2", F: "[f6@5 ~@3]/2", G: "~ eb6 b5 gb6",
  H: "f6@4 db6@4 ab5@7 ~", I: "f6@15 ~", J: "~ gb5 b5 gb6", K: "[eb6@25 ~@7]/2",
})).s("gm_drawbar_organ").gain(0.27).pan(0.8)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@5 [~@13 x ~ x] ~@160>").gain(0.33)

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

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

// drums · high tom
const high_tom = s("ht").struct("<~@5 [x!3 ~@2 x ~ x!5 ~@4] ~@160>").gain(0.33)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~ A ~ A ~ A B@2 C D E ~ F E ~ F E ~ F G A ~@19 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~@2 F E ~ F E ~ F E ~ F G A ~@35 A ~
  H@2 ~@21 I ~@2 F E ~ F E ~ F E ~ F G A ~@5
>`.pickRestart({
  A: "x", B: "~ x", C: "~ x ~ x", D: "~@2 x ~ x ~@2 x", E: "~@3 x ~@3 x", F: "~@7 x", G: "~@3 x ~@4", H: "~@2 x!2",
  I: "~@5 x!3",
})).gain(0.38)

// drums · triangle
const triangle = s("triangles:30").struct("<~@131 [x!8]!15 [x!5 ~@3] ~@19>").gain(1.91)

stack(
  lead_2_sawtooth, bass, lead_2_sawtooth_2, piano, pad_poly, lead_3_calliope, distortion_guitar, epiano1, drawbar_organ,
  kick, snare, low_tom, hihat, mid_tom, high_tom, crash, triangle
)

More by Styx