Strudelify

Grey Matter

Oingo Boingo

KeyB minorTempo194 bpm
0:00/0:00
// Grey Matter — Oingo Boingo
// 194 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 163, 4/4 at bar 167, 3/4 at bar 179, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 275 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(194/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.

// bass · synth bass 2 · "Synth Bass"
const bass = note(`<
  A B A B A B A B A B A B A B A B C D E A B A B A B A B C D E A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B C D E A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B F G F G F G F G F G F G F G F G H I J A B
  A B H I J A B A B A B A B A B A B A B A B A B A B A B A B A B A B K L K L M N O P Q R Q R Q R Q S T U T U V W X Y Z AA
  Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AB AC
  AD AC AD AC AD AC AD AC AD AC AD AC AD AC AE AF AG AH Z AA Z AI AF AG AH Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA Z AA
  Z AA Z AA Z AA Z AJ
>`.pickRestart({
  A: "b1!2 a1!2 f#1 ~ d2 ~", B: "a1!2 b1 ~ a1!2 b1 ~", C: "b1@2 b1@2 b1@3 b1", D: "d2@2 d2@2 d2@3 d2",
  E: "e2@2 e2@2 e2@3 e2", F: "b1!8", G: "d2!8", H: "e1@2 e1@2 e1@2 e1@2 e1@2 e1@2 e1@2 e1!2",
  I: "g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1!2", J: "a1!8", K: "d2!4 ~@2 a1 ~", L: "a1 ~ a1 ~ a1 b1 a1 ~",
  M: "d2!4 ~@2 a1!2", N: "a1 b1 a1 ~ d2!4", O: "~@2 a1!3 b1 a1 ~", P: "d2!3 a1!3 b1!2", Q: "a1!2 f#1 ~ d2 ~ a1!2",
  R: "b1 ~ a1!2 b1 ~ b1!2", S: "b1 ~ a1!2 b1 ~ d2!2", T: "d2!2 ~@2 a1 ~ a1 ~", U: "a1 ~ a1 b1 a1 ~ d2!2",
  V: "d2!2 ~@2 a1!3 b1", W: "a1 ~ d2!4 ~@2", X: "a1!3 b1 a1 ~ d2!2", Y: "d2 a1!3 b1!2 a1!2", Z: "f#1 ~ d2 ~ a1!2 b1 ~",
  AA: "a1!2 b1 ~ b1!2 a1!2", AB: "a1!2 b1 ~ b1!4", AC: "b1!4 d2!4", AD: "d2!4 b1!4", AE: "d2!4 e1!4",
  AF: "e1@2 e1@2 e1@2 e1!2 g1@2 g1@2 g1@2 g1@2", AG: "g1@2 g1@2 g1@2 g1!2 a1@2 a1@2 a1@2 a1@2", AH: "a1!4 b1!2 a1!2",
  AI: "a1!2 b1 ~ e1!4", AJ: "a1!2 b1 ~@5",
})).s("gm_synth_bass_2").gain(0.5)

// chords · marimba
const marimba = note(`<
  ~@19 A B C D E F G D ~@21 H I J ~ H I J ~ H I J ~ H I ~@21 H I J ~ H I J ~ H I J ~ H I J ~@18 E F G D ~@5 H I J K H I
  L@2 M N O P H I L@2 M N O P H I ~@12 Q R S T ~@45 U V W X U V W X U V W X U V W X ~@17 Y Z AA AB AC ~@2 AD L AE AF AG
  AH AI V AJ L AE AF AG AH AI V AK ~@10
>`.pickRestart({
  A: "~@2 b3!2 g#3!2 c#4!2", B: "a#3!2 c#4!2 a#3!2 d#4!2", C: "c4!2 f4!2 ~@4", D: "~@2 a#3 [g3,a#3] d#4 [c4,d#4] ~@2",
  E: "~@2 [g#3,b3]!2 g#3 [f3,g#3] c#4 [a#3,c#4]", F: "a#3 [g3,a#3] c#4 [a#3,c#4] a#3 [g#3,a#3] d#4 [c4,d#4]",
  G: "c4 [a3,c4] f4 [d4,f4] ~@4", H: "~@2 e4 [b3,e4] c#4 [g#3,c#4] d4 [a3,d4]", I: "b3 [f#3,b3] ~@2 b3 [f#3,b3] ~@2",
  J: "~@2 b3!2 ~@2 b3!2", K: "~@4 b3!2 ~@2", L: "b3 g3 f#4 c4 b3 g3 f#4 c4", M: "a#3 f#4 c4 a#3 f#4 c4 a#3 f#4",
  N: "c4 a#3 f#4 c4 a#3 f#4 c4 a#3", O: "e4 [b3,e4] c#4 [g#3,c#4] d4 [a3,d4] b3 [f#3,b3]",
  P: "a3 [f3,a3] b3 ~ a3 [f3,a3] b3 ~", Q: "[g#3,b3]!2 g#3 [f3,g#3] c#4 [a#3,c#4] a#3 [g3,a#3]",
  R: "c#4 [a#3,c#4] a#3 [g#3,a#3] d#4 [c4,d#4] c4 [a3,c4]", S: "f4 [d4,f4] ~@6", T: "a#3 [g3,a#3] d#4 [c4,d#4] ~@4",
  U: "~@6 e4 [b3,e4]", V: "c#4 [g#3,c#4] d4 [a3,d4] b3 [f#3,b3] ~@2", W: "b3 [f#3,b3] ~@4 b3!2", X: "~@2 b3!2 ~@4",
  Y: "~@6 [g#3,b3]!2", Z: "g#3 [f3,g#3] c#4 [a#3,c#4] a#3 [g3,a#3] c#4 [a#3,c#4]",
  AA: "a#3 [g#3,a#3] d#4 [c4,d#4] c4 [a3,c4] f4 [d4,f4]", AB: "~@6 a#3 [g3,a#3]", AC: "d#4 [c4,d#4] ~@6",
  AD: "~@4 b3 g3 f#4 c4", AE: "b3 g3 f#4 c4 a#3 f#4 c4 a#3", AF: "f#4 c4 a#3 f#4 c4 a#3 f#4 c4",
  AG: "a#3 f#4 c4 a#3 e4 [b3,e4] c#4 [g#3,c#4]", AH: "d4 [a3,d4] b3 [f#3,b3] a3 [f3,a3] b3 ~",
  AI: "a3 [f3,a3] b3 ~@3 e4 [b3,e4]", AJ: "b3 [f#3,b3] ~@2 b3 g3 f#4 c4", AK: "b3 [f#3,b3] ~@6",
})).s("gm_marimba").gain(0.45).pan(0.9)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@16 A B C ~@8 A B C ~@8 D E D F D E D G ~@15 H A B C ~@8 D E D F D E D G ~@32 A B C ~@74 I D J D K D J D K D J D K D
  J L M ~@31 N O P Q ~@33
>`.pickRestart({
  A: "[b1,e2,b2]@2 [b1,e2,b2]@2 [b1,e2,b2]!4", B: "[d2,g2,d3]@2 [d2,g2,d3]@2 [d2,g2,d3]!4",
  C: "[e2,a2,e3]@2 [e2,a2,e3]@2 [e2,a2,e3]!4", D: "b2!2 a2!2 b2!2 a2!2", E: "b2!2 a2!2 b2 d3!3", F: "b2!2 a2!2 b2 ~@3",
  G: "b2 b3!7", H: "~@3 d2", I: "~@4 b2!2 a2!2", J: "b2 d3!3 b2!2 a2!2", K: "b2 e3!3 b2!2 a2!2", L: "b2!2 a2!2 b2 b3!3",
  M: "b3!4 ~@4", N: "~@2 [b1,e2,b2]!2", O: "[b1,e2,b2]!4 [d2,g2,d3]@2 [d2,g2,d3]@2",
  P: "[d2,g2,d3]!4 [e2,a2,e3]@2 [e2,a2,e3]@2", Q: "[e2,a2,e3]!4 ~@4",
})).s("gm_distortion_guitar").gain(0.35)

// other · tubular bells
const tubular_bells = note(`<
  ~@19 A ~@10 A ~@7 A ~ A ~ A ~ A ~@7 B C ~@6 B C ~@3 A ~@7 A ~ A ~ A ~ A ~@36 A ~@6 A ~@34 D@2 ~@14 E@10 ~@6 E@12 F@3 G
  H ~@34 E@2 ~@5 E@2 ~@25
>`.pickRestart({
  A: "[b4,b5]", B: "~@4 c6 ~@3", C: "b5 ~@7", D: "[~@3 [b4,b5]@4 ~]/2", E: "[~ [b4,b5]@2 ~]/2",
  F: "[~ [b4,b5]@2 [b4,b5]@2 [b4,b5]]/3", G: "[b4,b5]@2 [b4,b5]!2", H: "[b4,b5]!2 ~@2",
})).s("gm_tubular_bells").gain(0.5).pan(0.1)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@19 A@3 B A@3 B ~@19 A@3 B A@3 B ~@62 A@3 B ~@3 A@3 B A@3 B ~@20 C D C D E F G H ~@7 I J K J K L M N O ~@73 P A@2 Q@2
  A@2 R@2 ~@18
>`.pickRestart({
  A: "~ b3 ~ b3", B: "~@2 b3!2, ~@2 g3 a3 ~@4, ~@5 g#3@2 a#3@2 ~@7", C: "[a3,d4]!4 ~@2 [a3,d4] ~",
  D: "[e3,a3] ~ [e3,a3] ~ [e3,a3] [f#3,b3] [e3,a3] ~", E: "[a3,d4]!4 ~@2 [e3,a3]!2",
  F: "[e3,a3] [f#3,b3] [e3,a3] ~ [a3,d4]!4", G: "~@2 [e3,a3]!3 [f#3,b3] [e3,a3] ~", H: "[a3,d4]!3 [f#3,b3]!3 ~@2",
  I: "~@6 [a3,d4]!2", J: "[a3,d4]!2 ~@2 [a3,d4] ~ [e3,a3] ~", K: "[e3,a3] ~ [e3,a3] [f#3,b3] [e3,a3] ~ [a3,d4]!2",
  L: "[a3,d4]!2 ~@2 [e3,a3]!3 [f#3,b3]", M: "[e3,a3] ~ [a3,d4]!4 ~@2", N: "[e3,a3]!3 [f#3,b3] [e3,a3] ~ [a3,d4]!2",
  O: "[a3,d4] [f#3,b3]!3 ~@4", P: "~@3 b3", Q: "[~ b3 ~@2 b3!2 ~ b3, ~@6 g3 a3 ~@8, ~@13 g#3@2 a#3@2 ~@15]/2",
  R: "[~ b3 ~@2 b3!2 ~@2, ~@6 g3 a3 ~@8, ~@13 g#3@2 a#3@2 ~@15]/2",
})).s("gm_overdriven_guitar").gain(0.3).pan(0.8)

// other · agogo · "Agogo / Metal Plates"
const agogo = note(`<
  ~@47 A B ~@2 C D E ~ A B ~@2 C D E ~@20 A B ~@2 C D E ~ A B ~@2 C D E ~@110 F G ~@2 F H I ~ F G ~@2 F H J ~@53
>`.pickRestart({
  A: "~@2 c4!2 e4!2 f4 g4", B: "e4 ~@7", C: "~@2 c4!2 e4!2 g4 f4", D: "e4 ~ e5!2 c5!2 d5!2", E: "b4 ~@7", F: "~@6 c4!2",
  G: "e4!2 f4 g4 e4 ~@3", H: "e4!2 g4 f4 e4 ~ e5!2", I: "c5!2 d5!2 b4!2 ~@2", J: "c5!2 d5!2 b4 ~@3",
})).s("gm_agogo").gain(0.5).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~@182 [~ x] [x!2]!37 x ~@17 [~ x] [x!2]!35 x>").gain(0.64)

// drums · rim
const rim = s("rim").struct("<~@174 [~@3 x] [~ x ~ x]!7 [~ x ~@2] ~@92>").gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A B C@7 D C@10 E C@18 F C@6 G C@8 H C@2 F C F C@5 E C@3 F C@6 G C@11 H I C@15 H C@6 F C@2 F C@51 J ~@6 K L C@37 M
  I N C@14 M N C@9 O C@25 P
>`.pickRestart({
  A: "~@3 x", B: "x!3 ~ x!3 ~", C: "~ x ~ x", D: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", E: "~@2 x ~ x!4", F: "~@2 x ~@3 x!2",
  G: "~@2 x!2 ~@2 x!2", H: "x ~ x!6", I: "x!8", J: "~ x ~@2", K: "~@2 x ~ x!3 ~", L: "x ~ x!2 ~@2 x ~",
  M: "~@2 x ~ x ~ x!2", N: "x!4 ~@2 x ~", O: "~@2 x!2 ~@2 x ~", P: "~@2 x!2 ~@4",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<~@97 A@16 ~@3 A@4 ~@102 B A@15 C ~@9 B A@25 C>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@97 [x!2]!16 ~@109 [~ x] [x!2]!15 x ~@36>").gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@97 A@2 ~ A@2 ~ A@5 ~ A@2 ~ B ~@110 C@2 ~ C@5 ~ C@3 ~ C@2 D ~@36>".pickRestart({
  A: "~@5 x!2 ~", B: "~@10 x!3 ~@3", C: "~ x!2 ~@5", D: "~@2 x!3 ~@11",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@7 A ~@21 A ~ A ~ A ~ A ~@106 A ~ A ~ B ~ A B ~@7 C ~ C ~@2 D C ~ D ~@31 B ~@34 B ~@3 B@4 ~@26
>`.pickRestart({
  A: "x", B: "~ x", C: "~@3 x", D: "~ x ~@2",
})).gain(0.8)

// drums · ride bell
const ride_bell = s("rd").struct("<~@8 A ~@88 B@16 ~@93 C ~@15 D B@15 E ~@36>".pickRestart({
  A: "x", B: "~ x ~@3 x ~@2", C: "~ x", D: "~@5 x ~@2", E: "~ x ~@6",
})).gain(0.8)

// drums · cowbell
const cowbell = s("cb").struct("<[~ x ~ x]!16 ~@158 [~@3 x] [~ x ~ x]!45 [~ x ~@2] ~@54>").gain(0.72)

// drums · claves
const claves = s("clave:2").struct("<[~ x ~ x]!16 ~@158 [~@3 x] [~ x ~ x]!45 [~ x ~@2] ~@54>").gain(3.53)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<[~ x ~ x]!16 ~@158 [~@3 x] [~ x ~ x]!45 [~ x ~@2] ~@54>").gain(1.04)

stack(
  bass, marimba, distortion_guitar, tubular_bells, overdriven_guitar, agogo, kick, rim, snare, clap, hihat, mid_tom,
  crash, ride_bell, cowbell, claves, woodblocks
)

More by Oingo Boingo