Strudelify
Jerkin Back and Forth cover art

1987 · E‐Z Listening Disc

Jerkin Back and Forth

Devo

KeyG majorTempo139 bpm
0:00/0:00
// Jerkin Back and Forth — Devo
// 139 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 17 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(139/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.

// bass · synth bass 1 · "Synth Bass"
const bass = note(`<
  ~ A B C D E F E F E F E F G H I J K L A B C D E F E F E F E F M N O P Q N R@2 E F E F E F E F E F G H I J K L A B C D
  E F E F E F E F M N O P Q N R@2 E F E F E F E F G H I J K L A B C D G H I J K L A B C S T U ~ V
>`.pickRestart({
  A: "e2@4 e2@4 g2@3 ~ g2@4", B: "a2@4 a2@4 a#2@2 b2 ~ b2@2 a#2@2", C: "b2 ~ b2@2 a#2@2 b2 ~ b2@2 a#2@2 b2 ~ b2@2",
  D: "a#2@2 b2 ~ b2@2 a#2@2 b2 ~ b2@2 a#2@2 b2@2", E: "e2 ~ e2@2 ~@4 g2 ~ g2@2 ~@4",
  F: "b2 ~ b2@2 ~@4 d2 ~ d2 ~ d2@2 ~@2", G: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2@2 g2@2",
  H: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 a2@2", I: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2@2 a2@2",
  J: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2 c#3@2", K: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3@2 b2@2",
  L: "a2 ~ a2 ~ a2 ~ a2 ~ a2@2 g2@2 f#2@2 f2@2", M: "c2 ~ c2 ~ c2@2 c2 ~ c2 ~ c2 ~ c2 ~ c2@2",
  N: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", O: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2 d2@2",
  P: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", Q: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2",
  R: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~", S: "a#2@2 b2 ~ b2@2 a#2@2 b2 ~ b2@2 a#2@2 b2 ~",
  T: "b2@2 a#2@2 b2 ~ b2@2 a#2@2 b2 ~ b2@2 a#2@2", U: "e2 ~@7", V: "e2 ~ e2!2 ~ e2@3 ~@8",
})).s("gm_synth_bass_1").gain(0.31)

// other · lead 1 square · "Synth"
const lead_1_square = note(`<
  ~ A B C D E F E F E F E G H I J K L M A N C D E F E F E F E G O P Q R S P T@3 F E F E F E G E F H I J K L M A N C D E
  F E F E F E G O P Q R S P T@3 F E F E F U G H I J K L M A N C D H V J W L X A N C Y Z AA@2 AB
>`.pickRestart({
  A: "[e3,e4]!2 [g3,g4]!2", B: "[a3,a4]@4 [a3,a4]@4 [a#3,a#4]@2 [b3,b4] ~ [b3,b4]@2 [a#3,a#4]@2",
  C: "[b3,b4] ~ [b3,b4]@2 [a#3,a#4]@2 [b3,b4] ~ [b3,b4]@2 [a#3,a#4]@2 [b3,b4] ~ [b3,b4]@2", // B A# B A# B
  D: "[a#3,a#4]@2 [b3,b4] ~ [b3,b4]@2 [a#3,a#4]@2 [b3,b4] ~ [b3,b4]@2 [a#3,a#4]@2 b4@2, ~@14 b3 ~", // A# B A# B A#
  E: "e3 ~ e3@2 g3@2 b3@2 g3 ~ g3@2 b3@2 d4@2", F: "b3 ~ b3@2 d#4@2 f#4@2 d3 ~ d3 ~ d3@2 f#3@2",
  G: "b3 ~ b3@2 d#4@2 f#4@2 d3 ~ d3 ~@3 f#3 ~", H: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3@2 g3@2",
  I: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3@2 a3@2", J: "b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3@2 a3@2",
  K: "g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3@2 c#4@2", L: "d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4@2 b3@2",
  M: "a3 ~ a3 ~ a3 ~ a3 ~ a3@2 g3@2 f#3@2 f3@2", N: "[a3,a4]@4 [a3,a4]@3 ~ [a#3,a#4]@2 [b3,b4] ~ [b3,b4]@2 [a#3,a#4]@2",
  O: "c3@3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3@2, c5", P: "d3@2 d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~, d5",
  Q: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3@2 d3@2, c5@3 d5", R: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~, e5",
  S: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3@2, c5@3 e5",
  T: "[a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ e3 ~ e3@2 g3@2 b3@2 g3 ~ g3@2 b3@2 d4@2, a4@11 ~@5]/3",
  U: "e3 ~ e3@2 g3@2 b3@2 g3 ~ g3 ~ b3@2 d4@2", V: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3@2 a3@2, ~ e4 b4 e5",
  W: "g3 ~ g3 ~ a#5@2 b5@2 f#5@2 g5@2 [g3,c#5]@2 [c#4,d5]@2, ~@4 g3 ~ g3 ~ g3 ~ g3 ~@5", // Gdim Dmaj7
  X: "a3 ~ a3 ~ a3 ~ a3 ~ a3@2 g3@2 f#3@2 f3@2, ~ a4 e5 a5",
  Y: "[a#3,a#4]@2 [b3,b4] ~ [b3,b4]@2 [a#3,a#4]@2 [b3,b4] ~ [b3,b4]@2 [a#3,a#4]@2 [b3,b4] ~", // A# B A# B A# B
  Z: "[b3,b4]@2 [a#3,a#4]@2 [b3,b4] ~ [b3,b4]@2 [a#3,a#4]@2 [b3,b4] ~ [b3,b4]@2 a#4@2, ~@14 a#3 ~", // B A# B A# B
  AA: "[e3@2 ~@13 b4@2 a#4 b4@2 c5@2 c#5 d5@2 d#5 ~ e5@2 ~@3, e4 ~@31]/2", AB: "[e3,e4] ~ [e3,e4]!2 ~ [e3,e4]@2 ~@9",
})).s("gm_lead_1_square").gain(0.48)

// chords · distortion guitar · "Guitar"
const distortion_guitar = note(`<
  ~@13 A B C D E A ~@12 F G H I F G J@2 ~@10 A K C D E A ~@12 F G H I F G J@2 ~@8 A K C D E A ~@4 A L C D E A ~@7 M
>`.pickRestart({
  A: "[a3,e4,a4]!2 ~@6", B: "[e3,b3]!2 ~@6, e4 ~@3", C: "[b3,f#4,b4]@2 [b3,f#4,b4] ~@13",
  D: "[g3,d4,g4]@2 [g3,d4,g4] ~@13", E: "[d4,a4,d5]!2 ~@6", F: "[g3,c4,g4]", G: "[a3,d4,a4]@15 ~",
  H: "[g3,c4,g4]@3 [a3,d4,a4]", I: "[b3,e4,b4]@15 ~",
  J: "[[e3,a3,e4]@7 ~ [e3,a3,e4]@10 [e3,a3,e4] ~ [e3,a3,e4] ~ [e3,a3,e4] ~ [e3,a3,e4] ~ [e3,a3,e4] ~ [e3,a3,e4] ~ [e3,a3,e4]@2]/2", // A5
  K: "[e3,b3,e4] [e3,b3] ~@6", L: "[e3,b3,e4]@2 [e3,b3] ~@13",
  M: "[g#3,b3,e4] [g#3,b3] ~ [g#3,b3,d4,e4] ~ [g#3,b3,d4,e4]@2 ~@9, d4@3 ~@13", // E G#m E7
})).s("gm_distortion_guitar").gain(0.17)

// chords · synth brass 1 · "Solo Synth"
const synth_brass_1 = note("<~@38 A B C D E F E G H I J ~@25 A K L M N O P Q R ~@24>".pickRestart({
  A: "~@10 d5@2 d5 ~ d5@2", B: "e5@2 d5@2 b4 a4 g4 e4, d#5 ~@15",
  C: "b4@2 b3@2 ~@2 b3@2 ~@2 [d#5,e5] ~ e5 ~ e5 ~, a#4 ~@15", D: "e5!2 d5@2 b4 a4 g4 e4, d#5 ~@15",
  E: "b4@2 b3@3 ~ b3@2 ~@2 [f#5,g5] ~ g5 ~ g5 ~, a#4 ~@15", F: "g5@2 e5@2 d5 b4 a4 g4, f#5 ~@15",
  G: "[f#5,g5] ~ g5@2 e5 ~ e5@2 d5@2 b4@2 a4@2 g4@2", H: "b4@2 b3@2 ~@2 b3@3 ~ d4 ~ d4@2 e4@2, a#4 ~@15",
  I: "~@2 e4 ~ g4 ~@3", J: "b3@2 ~@2 b4@2 d4@2 ~@2 d4 ~@2 e4@2 ~, ~@6 d4 ~",
  K: "e5@2 b4 ~ b4 ~ b4 ~ d5@2 g4 ~ g4 ~ g4 ~, d#5 ~@7 c#5 ~@7", L: "b4@2 d4@2 ~@2 d4 ~@3 d5 ~ d5 ~ d5 ~, a#4 ~@15",
  M: "e5@2 d5@2 b4 a4 g4 e4, d#5 ~@7 a#4 ~@7", N: "b4@2 b3 ~@3 b3 ~@3 [f#5,g5] ~ g5 ~ g5 ~, a#4 ~@15",
  O: "[e5,f#5]@2 [e5,g5] ~ [e5,g5] ~ [e5,g5] ~ f#5@2 [d5,g5] ~ [d5,g5] ~ [d5,g5] ~, ~@8 d5 ~@7", // Esus2 Em G5
  P: "f5@2 [b4,f#5] ~@3 [b4,f#5] ~@3 [d5,f#5]@2 [d5,f#5] ~ [d5,f#5] ~, b4 ~@15", // B5 D
  Q: "[b4,e5]@4 [b4,e5]@4 [d5,g5]@2 [b4,e5]@2 [d5,g5] ~ [d5,a5] ~", // E5 G5 E5 G5 D5
  R: "a#5 ~ a5@2 g5 ~ [b4,e5]@3 ~ d5 ~ d5@2 e5 ~, d5@5 ~@11", // E5
})).s("gm_synth_brass_1").gain(0.31)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C@2 D@14 A E C@2 D@15 F D@16 A E C@2 D@15 F D@14 A E C@2 D@6 A B C@3 G ~ H
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x!2 ~@2", C: "x!2 ~@2 x!2 ~@2", D: "x!2", E: "x!3 ~", F: "x!8", G: "x", H: "x ~ x!2 ~ x ~@10",
})).gain(0.31)

// drums · snare
const snare = s("sd").struct(`<
  A B C D@2 E@14 B C D@2 E@15 F E@16 B C D@2 E@15 F E@14 B C D@2 E@6 A C D@3 G ~@2
>`.pickRestart({
  A: "x!4", B: "~ x!3", C: "x ~ x ~@3 x!2", D: "~@2 x!2 ~@2 x!2", E: "~ x ~ x", F: "~ x!7", G: "x",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@2 A B@2 ~ C@2 D ~ C@2 D ~ E ~ E ~ E ~ A B@2 ~ C@2 D ~ C@2 D ~@9 C@2 D ~ C@2 D ~@3 E ~ E ~ E ~ A B@2 ~ C@2 D ~ C@2 D
  ~@9 C@2 D ~ C@2 D ~ E ~ E ~ E ~ A B@2 F@6 ~ A B@3 ~@3
>`.pickRestart({
  A: "~@4 x!4", B: "x!8", C: "x", D: "x ~@4 x!2 ~", E: "x ~@6 x", F: "~@7 x",
})).gain(0.36)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@5 A@9 ~ A ~ A ~@5 A@8 ~@8 A@8 ~@2 A ~ A ~ A ~@5 A@8 ~@8 A@9 ~ A ~ A ~@5 B ~ B ~ B ~@8 C
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "x!2 ~ x ~ x ~@10",
})).gain(0.31)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A ~@17 A ~@35 A ~@33 A ~@16>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.31)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@5 A@3 ~ A@3 ~@11 A@3 ~ A@3 ~@9 A@3 ~ A@3 ~@13 A@3 ~ A@3 ~@9 A@3 ~ A@3 ~@25
>`.pickRestart({
  A: "~@3 x",
})).gain(0.36)

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

stack(
  bass, lead_1_square, distortion_guitar, synth_brass_1, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash
)

More by Devo