Strudelify
Whip It cover art

Devo 2.0

Whip It

Devo

KeyA minorTempo165 bpm
0:00/0:00
// Whip It — Devo
// 165 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 2 "Bass track" named as a bass, played on electric bass finger (its piano patch is not one)
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(165/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass finger · "Bass track"
const bass = note(`<
  ~@4 A B C D E B E B F G H G I G I G J K J K L K J K J M N O P N@2 O P N@3 J K J Q J Q J K J K R S R T U S R T V W X V
  W X V W X V W X F G I G I G I G J K J Q J K J K J K N O P N Y O P N@2 O P N@2 O P N@3 J K I
>`.pickRestart({
  A: "e2!2 g#2 b2 d3 ~@3", B: "d3 ~ a2 ~", C: "e2@2 e2@2 g#2@2 b2@2 d3 ~@7", D: "d3@5 ~@3 a2@5 ~@3",
  E: "e2@2 e2 ~ g#2@2 b2@2 d3 ~@7", F: "e2@2 e2@2 g#2@2 b2 ~ d3@2 ~@6", G: "~@8 a2@2 a2 ~ g2@2 f#2 ~",
  H: "e2@2 e2 ~ g#2@2 b2@2 d3@2 ~@6", I: "e2@2 e2 ~ g#2@2 b2 ~ d3@2 ~@6", J: "e2@2 e2 ~ g#2@2 b2 ~ d3@2 ~@4 f#4@2",
  K: "~@2 f#4@2 e4@2 d4 ~ [a2,c#4]@2 [a2,c#4] ~ [g2,b3]@2 [f#2,a3] ~", L: "e2@2 e2 ~ g#2@2 b2@2 d3@2 ~@4 f#4@2",
  M: "~@2 f#4@2 e4@2 d4 ~ [a2,c#4]@2 [a2,c#4]@2 [g2,b3]@2 [f#2,a3] ~", N: "c3@2 g2 ~ c2@2 ~@10",
  O: "g3@2 d3 ~ g2@2 ~@10", P: "d3@2 a2 ~ d2@2 ~@10",
  Q: "~@2 f#4@2 e4@2 d4@2 [a2,c#4]@2 [a2,c#4] ~ [g2,b3]@2 [f#2,a3] ~", R: "[e2,b2]@2 [e2,b2] ~@5 [g2,d3]@2 [g2,d3] ~@5",
  S: "[c3,g3]@2 [c3,g3] ~@5 [c3,g3]@2 [c3,g3] ~@5", T: "[d3,a3]@2 [d3,a3] ~@5 [d3,a3]@2 [d3,a3] ~@5",
  U: "[e2,b2]@2 [e2,b2]@2 ~@4 [g2,d3]@2 [g2,d3] ~@5", V: "e2 ~ e2@2 g#2@2 b2@2 d3@2 ~@4 a2 ~",
  W: "~@2 a2@2 g2@2 f#2@2 e2 ~ e2@2 g#2@2 b2@2", X: "d3@3 ~@3 a2@2 ~@2 a2@2 g2@2 f#2 ~", Y: "c3 g2 c2 ~@5",
})).s("gm_electric_bass_finger").gain(0.46)

// other · piano · "Accent1 synth"
const piano = note(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A B A B ~@12 A B A B A B A B A ~@9 C ~ D C ~ D C ~ D C ~@2 A B A B A B A B
  A B A B A B A B ~@20 A E
>`.pickRestart({
  A: "[d5,d6] ~ [a4,a5] ~", B: "[e4,e5] ~@3", C: "~ [e5,e6]", D: "[e5,e6] ~", E: "e4!2 g#4 b4 d5@2 ~@2",
})).s("gm_piano").gain(0.26)

// chords · piano · "Accent2 synth"
const piano_2 = note(`<
  ~@5 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@10 ~ A B A B A B A B A ~@9 D ~ E D ~ E D ~ E D ~@2 A B A B A B
  A B A B A B A B A B ~ C@18 ~ F G
>`.pickRestart({
  A: "[d5,d6] ~ [a4,a5] ~", B: "[e4,e5] ~@3", C: "[c6,d#6] [c6,e6] [c6,d#6] [c6,e6]", D: "~ [e4,e5]", E: "[e4,e5] ~",
  F: "[d5,d6]@4 ~@4 [a4,a5]@3 ~@5", G: "e4!2 g#4 b4 d5@2 ~@2",
})).s("gm_piano").gain(0.2)

// drums · kick
const kick = s("bd").struct("<[x!4]!106 [~ x!3] [x!4] [x!3 ~]>").gain(0.41)

// drums · snare
const snare = s("sd").struct("<A@29 B A@9 C A@13 B D A@2 E A@2 B A@8 B A@9 E A@7 F A@17 C A@2 G>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~@4 x ~@5 x!3 ~ x ~", D: "x!2 ~ x", E: "~@4 x ~@7 x!3 ~",
  F: "~@2 x ~@3 x!2", G: "~ x ~@2",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<[~@2 x!3 ~ x!3 ~ x!3 ~ x!2] [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!107 [x ~ x!3 ~ x!2 ~@8]>")
  .gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@51 [~@7 x] ~@3 [~@6 x!2] ~ [~@6 x!2] ~@50 [~@2 x!2 ~@4]>").gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<~@108 [~ x]>").gain(0.46)

// drums · high tom
const high_tom = s("ht").struct("<~@51 [~@3 x] ~@56 [x!2 ~@6]>").gain(0.51)

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

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@108 [~ x]>").gain(5.41)

stack(bass, piano, piano_2, kick, snare, hihat, mid_tom, open_hat, high_tom, crash, vibraslap)

More by Devo