Strudelify

Back on the Chain Gang

The Pretenders

KeyA majorTempo142 bpm
0:00/0:00
// Back on the Chain Gang — The Pretenders
// 142 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 3 "ElecGtr 1" named as a guitar, played on electric guitar clean (its lead 8 bass lead patch is not one)
// note: duplicate parts dropped: ch 7 "Vocal 2" synth choir (copy of ch 2 "Vocal" choir aahs)
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(142/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.

// other · electric guitar clean · "ElecGtr 1"
const electric_guitar_clean = note(`<
  A B@2 C D E B C D F G H I J K L M N@2 O I H P Q M R S T U V W@2 X Y X F G H I J K L M N@2 O I Z@2 Q M AA S T U V AB T
  AC@2 AB AD M AE@2 AF AG AH AI@2 AJ@2 AK AL AM AL AM AN AO@2 AP@2 AQ AR AS Q AT AU@2 AV AW AX AY AZ BA BB Q AV BC BD BE
  AZ BF@2 Q AV BG BH BI BJ BK@3 BL BM BL BM BL BM BL BM BL BM BL BN
>`.pickRestart({
  A: "~@4 a3 ~ a3 ~ d4 ~ f#4 ~ a4 ~ f#4 ~", B: "a4@10 ~ a4@2 a4@2 ~", C: "a4@2 ~ g4@2 g4@2 ~ g4@2 ~ f#4@2 f#4@2 ~",
  D: "f#4@2 ~ e4@2 e4@2 ~ e4@2 ~ d4@2 c#4@2 ~", E: "d4@5 ~ d4 ~ f#4 ~ a4 ~ f#4 ~@3", F: "d4@9 ~ a4 ~ d5 ~ a4 ~",
  G: "c#5 ~ c#5 ~ c#5 ~ c#5@3 ~ d5 ~@5", H: "~@4 d4@9 ~@3", I: "f#5@3 ~ e5 ~ f#5 ~ g5@3 ~ f#5 ~ e5 ~",
  J: "~@4 d4@7 ~ a4 ~ c#5@2", K: "~@2 c#5 ~ c#5 ~ f#5@3 ~ c#5 ~ c#5 ~ e5@2", L: "~@2 d5@11 ~@3",
  M: "f#4@5 ~@3 g4@5 ~@3", N: "[~@4 a4 ~ a4 ~ d5 ~ a4 ~ d5 ~ c#5@7 ~@3 c#5 ~ d5@3 ~ c#5@2]/2", O: "~@2 c#5 ~ d5@9 ~@3",
  P: "~@4 c#5 ~ c#5 ~ f#5 ~ c#5 ~ c#5 ~ d5@2", Q: "~@2 e5@11 ~@3", R: "b3@4 ~@2 b4 ~ g5 ~ f#5 ~ e5 ~ d5@2",
  S: "~@2 c#5@5 ~ b4 ~ a4@5 ~", T: "~@4 g4@3 ~ g4 ~ f#4 ~ e4 ~ d4@2", U: "~@2 c#4@3 ~ b3@3 ~ c#4@5 ~",
  V: "d5@5 ~@3 e5@5 ~@3", W: "[~@8 c#5 ~ d5 ~ c#5 ~ d5@5 ~ d5@9 ~@3]/2", X: "e4@3 ~ e4@9 ~@3", Y: "f#4@3 ~ f#4@9 ~@3",
  Z: "[~@6 a4 ~ d5 ~ a4 ~ a4 ~ d5@5 ~ c#5 ~ c#5 ~ f#5 ~ c#5 ~ c#5 ~ d5@2, ~@4 d4@9 ~@19]/2",
  AA: "b3@4 b4@2 b4 ~ g5 ~ f#5 ~ e5 ~ d5@2", AB: "~@4 c#4@5 ~ c#4@5 ~",
  AC: "[~@2 c#4@5 ~ b4 ~ c#5 ~ c#5 ~ d5@5 ~ d5@9 ~@3]/2", AD: "~@4 d4@5 ~ d4@5 ~",
  AE: "[~@4 d6@7 ~ a5@7 ~ d5@7 ~ a5@3 ~]/2", AF: "~@4 f4@3 ~ f4@4 ~@2 a4 ~", AG: "c#5 ~ c#5 ~ c#5 ~ d5@3 ~ e5 ~ f5@3 ~",
  AH: "~@4 f4@8 ~@2 a4 ~", AI: "[c#5 ~ c#5 ~ d5 ~ e5@3 ~ d5 ~ c#5 ~ d5@5 ~ f4@9 ~@3]/2",
  AJ: "[c#5 ~ c#5@3 ~ c#5 ~ d5@3 ~ e5 ~ f5@5 ~ f4@7 ~ a4 ~ a4 ~]/2", AK: "c#5 ~ c#5 ~ d5 ~ e5@3 ~ c#5 ~ d5@3 ~",
  AL: "~@4 f4@3 ~ e4 ~ f4@5 ~", AM: "~@4 f4@3 ~ f4 ~ e4@5 ~", AN: "~@4 f4@7 ~ a4 ~ a4 ~",
  AO: "[c#5 ~ c#5 ~ c#5 ~ d5@3 ~ e5 ~ e5 ~ d5@5 ~ f4@9 ~@3]/2",
  AP: "[c#5 ~ c#5 ~ c#5 ~ e5@3 ~ d5 ~ c#5 ~ d5@5 ~ f4@9 ~@3]/2", AQ: "c#5 ~ c#5@3 ~ c#5 ~ d5 ~ e5@3 ~ f5 ~",
  AR: "d5@3 ~ f4@8 ~@2 a4 ~", AS: "c#5 ~ c#5 ~ c#5@5 ~ d5@6", AT: "e5@5 ~@3", AU: "[d#5@9 ~ e5 ~ d#5 ~ c#5@12 ~@6]/2",
  AV: "g#4@5 ~@3 a4@5 ~@3", AW: "b4@9 ~ b4 ~ e5 ~ b4 ~", AX: "d#5 ~ d#5 ~ d#5 ~ d#5@3 ~ e5 ~@5", AY: "~@4 e4@9 ~@3",
  AZ: "g#5@3 ~ f#5 ~ g#5 ~ a5@3 ~ g#5 ~ f#5 ~", BA: "~@8 b4 ~ b4 ~ b4 ~ e5@2",
  BB: "~@2 b4 ~ b4 ~ g#5@3 ~ d#5 ~ d#5 ~ f#5@2", BC: "~@4 b4 ~ b4 ~ e5 ~ b4 ~ e5 ~ d#5@2",
  BD: "~@2 b4@7 ~ d#5 ~ e5 ~ e5@2", BE: "~@2 c#5@11 ~@3",
  BF: "[~@4 b4 ~ b4 ~ e5 ~ b4@3 ~ d#5@5 ~ b4 ~ b4 ~ g#5@3 ~ d#5 ~ f#5@2]/2",
  BG: "~@4 c#5 ~ c#5 ~ a5 ~ g#5 ~ f#5 ~ e5@2", BH: "~@2 d#5@5 ~ c#5 ~ b4@5 ~", BI: "~@4 a4@3 ~ a4 ~ g#4 ~ f#4 ~ e4@2",
  BJ: "~@2 d#4@3 ~ c#4@3 ~ d#4@5 ~", BK: "[e5@5 ~@3 f#5@13 ~@3 d#5 ~ e5 ~ d#5 ~ e5@5 ~ e5@3 ~ b3 ~ g#3 ~ b3@3 ~]/3",
  BL: "~@3 f#3@2 b3@2 ~ d#4@3 ~ b3@3 ~", BM: "~@4 e3 ~ g#3 ~ b3 ~ g#3 ~ b3@3 ~", BN: "e3@3 ~@13",
})).s("gm_electric_guitar_clean").gain(0.35)

// chords · overdriven guitar · "ElecGtr 2"
const overdriven_guitar = note(`<
  ~ A B C D E B C D F G H I J K L M N@2 L I O P Q M R S T U V W@2 X Y X F G H I J K L M N@2 L I O P Q M R S T U V Z T
  AA@2 Z AB M AC@2 AD AE AD AF@2 AG@2 AE AH AI AH AI AJ AK@2 AF@2 AL AM AN AO AP AQ@2 AR AS AT AU AV AW AX AY AR AZ BA
  BB AV BC@2 AY AR BD BE BF BG BH@3 ~@12
>`.pickRestart({
  A: "[d4,f#4]@5 ~@3", B: "[c#4,e4]@5 ~@3", C: "[b3,d4]@11 ~@5", D: "[g3,d4]@5 ~@3 [g3,b3]@5 ~@3", E: "[f#3,a3] ~@3",
  F: "[f#3,a3]@5 ~@11", G: "[e4,a4] ~", H: "~@4 [e3,g3,b3]@9 ~@3", I: "[g4,d5]@3 ~@5 [b4,d5]@3 ~@5",
  J: "~@4 [f#3,a3]@7 ~@3 [e4,a4]@2", K: "~@6 [a4,e5]@3 ~@7", L: "~@4 [e4,g4,b4]@9 ~@3",
  M: "[g3,d4]@5 ~@3 [b3,d4]@5 ~@3", N: "[~@4 [d4,f#4] ~@9 [e4,a4]@7 ~@3 [e4,a4] ~@7]/2", O: "~@4 [f#3,a3]@9 ~@3",
  P: "~@4 [e4,a4] ~@3 [a4,e5] ~@7", Q: "~@2 [g4,b4,d5]@11 ~@3", R: "g3@4 ~@4 [b4,e5] ~@7",
  S: "~@2 [e4,a4]@5 ~@3 [c#4,e4]@5 ~", T: "~@4 [b3,d4]@3 ~ [b3,d4] ~@5 [e3,a3]@2",
  U: "~@2 [e3,a3]@3 ~ [e3,a3]@3 ~ [e3,a3]@5 ~", V: "[g4,b4]@5 ~@3 [g4,b4]@5 ~@3",
  W: "[~@8 [e4,a4] ~@5 [f#4,a4]@5 ~ [f#4,a4]@9 ~@3]/2", X: "[a3,c#4]@3 ~ [a3,c#4]@9 ~@3",
  Y: "[a3,d4]@3 ~ [a3,d4]@9 ~@3", Z: "~@4 [e3,a3]@5 ~ [e3,a3]@5 ~",
  AA: "[~@2 [e3,a3]@5 ~ [e4,a4] ~@5 [f#4,a4]@5 ~ [f#4,a4]@9 ~@3]/2", AB: "~@4 [e3,g3,b3]@5 ~ [e3,g3,b3]@5 ~",
  AC: "[~@4 [d5,f#5,a5]@7 ~ [a4,d5,f#5]@7 ~ [d4,f#4,a4]@7 ~ [a4,d5,f#5]@3 ~]/2", AD: "~ [a3,d4]@2 ~",
  AE: "[g4,a4] ~@5 [g4,a4]@3 ~@7", AF: "[[g4,a4] ~@5 [g4,a4,c#5]@3 ~@5 [f4,a4]@5 ~ [a3,d4]@9 ~@3]/2",
  AG: "[[g4,a4]@12 ~@2 [a4,d5]@5 ~ [a3,d4]@7 ~@5]/2", AH: "~@4 [a3,d4]@3 ~ [a3,d4]@5 ~@3",
  AI: "~@4 [g3,c#4]@3 ~ [g3,c#4]@5 ~@3", AJ: "~@4 [a3,d4]@7 ~@5",
  AK: "[[g4,a4] ~@5 [g4,a4]@3 ~@5 [f4,a4]@5 ~ [a3,d4]@9 ~@3]/2", AL: "[g4,a4] ~@7 [g4,a4] ~@7",
  AM: "[f4,a4]@3 ~ [a3,d4]@8 ~@4", AN: "[g4,a4] ~@3 [g4,a4]@5 ~ [g4,a4]@6", AO: "~@2 [g4,a4,c#5]@11 ~@3",
  AP: "[g#4,b4]@5 ~@3", AQ: "[[f#4,b4]@9 ~@5 [e4,a4]@12 ~@6]/2", AR: "[a3,e4]@5 ~@3 [c#4,e4]@5 ~@3",
  AS: "[e4,g#4]@9 ~@7", AT: "[f#4,b4] ~", AU: "~@4 [a3,c#4]@9 ~@3", AV: "[a4,e5]@3 ~@5 [c#5,e5]@3 ~@5",
  AW: "~@8 [e4,g#4] ~@5 [f#4,b4,d#5]@2", AX: "~@6 [b4,f#5]@3 ~@7", AY: "~@2 [a4,c#5]@11 ~@3", AZ: "~@4 [e4,g#4] ~@11",
  BA: "~@2 [d#4,f#4]@7 ~@7", BB: "~@2 [e4,a4]@11 ~@3", BC: "[~@4 [e4,g#4] ~@9 [f#4,b4]@5 ~@5 [b4,f#5]@3 ~@5]/2",
  BD: "~@4 [e4,a4] ~@3 [c#5,e5] ~@7", BE: "~@2 [f#4,b4]@5 ~@3 [d#4,f#4]@5 ~",
  BF: "~@4 [c#4,e4]@3 ~ [c#4,e4] ~@5 [f#3,b3]@2", BG: "~@2 [f#3,b3]@3 ~ [f#3,b3]@3 ~ [f#3,b3]@5 ~",
  BH: "[[a4,c#5]@5 ~@3 [a4,c#5,e5]@13 ~@9 [g#4,b4]@5 ~ [g#4,b4]@3 ~@9]/3", // A G#m
})).s("gm_overdriven_guitar").gain(0.35).pan(0.9)

// bass · electric bass pick · "PickedBass"
const bass = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B C E F G F G H I J K J K A B C D A B C D A B C D A B C E F G F G H G F L
  A B C D M@2 N O N O N O N O N O N O N O N O N O N O B P Q B R P Q B R P Q B R P Q B S P Q B R L T L T U V W X W X W X
  W X W X W X Y
>`.pickRestart({
  A: "d2@4 ~@2 f#2@5 ~ a2@3 ~", B: "a1@4 ~@2 c#2@5 ~ e2@3 ~", C: "e1@4 ~@2 f#1@5 ~ g1@3 ~", D: "b1@4 ~@2 g1@5 ~ b1@3 ~",
  E: "b1@5 ~@3 g2 ~ b1 ~ d2@3 ~", F: "e2@4 ~@2 e2 ~ e2@5 ~@3", G: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1 ~",
  H: "e2@4 ~@2 e2 ~ e2@3 ~ d2 ~ b1 ~", I: "a1@3 ~ a1@9 ~@3", J: "d2@5 ~@3 a2 ~ f#2 ~ a2@3 ~",
  K: "a1@5 ~@3 e2 ~ c#2 ~ e2@3 ~", L: "a1@4 ~@2 a1 ~ a1@5 ~@3", M: "[~@4 d2@7 ~ d2@7 ~ d2@7 ~ d3@3 ~]/2",
  N: "d2@3 ~ d2@3 ~ c3 ~ d3@3 ~ d2 ~", O: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~", P: "e2@4 ~@2 g#2@5 ~ b2@3 ~",
  Q: "b1@4 ~@2 d#2@5 ~ f#2@3 ~", R: "b1@4 ~@2 f#2@5 ~ b2@3 ~", S: "b1@4 ~@2 f#2@5 ~ b2@2 ~@2",
  T: "b1@4 ~@2 b1 ~ b1@4 ~@2 b1 ~", U: "a1@4 ~@2 a1 ~ a1@3 ~ e2 ~ a1 ~", V: "b1@3 ~ b1@9 ~@3",
  W: "e2@5 ~@3 b2@4 ~@2 e2 ~", X: "b1@5 ~@3 f#2@4 ~@2 b1 ~", Y: "e2@3 ~@13",
})).s("gm_electric_bass_pick").gain(0.35)

// chords · drawbar organ · "Organ"
const drawbar_organ = note(`<
  ~ A B C D E F G H E F G D E F G D E F G D E F G I J F C F J F E F E K E F G D E F G D E F G D E F G D J F C F J F G F
  E F G H L@2 M N O N O N O N O N O N O N O N O N O P@2 Q R F S Q R F S Q R F S Q R F S T U B S B R F R F B Q R Q R Q R
  Q R Q R Q R V
>`.pickRestart({
  A: "[d4,f#4,a4]", B: "[c#4,e4,a4]", C: "[e4,g4,b4,d5]", D: "[b3,d4,f#4] [g3,d4]", E: "[a3,d4,f#4]", F: "[a3,c#4,e4]",
  G: "[d4,e4,g4,b4]", H: "[b3,d4,f#4]@8 [g3,d4]@5 ~@3", I: "[b3,d4,f#4]@5 ~@3 [g3,d4]@8, ~@8 g4@5 ~@3", J: "[b3,e4,g4]",
  K: "[a3,c#4,e4]@11 ~@5", L: "[~ [a3,d4,f#4]@7]/2", M: "[a3,d4,f4]", N: "[a3,c#4,e4,g4]", O: "[d4,f4,a4]",
  P: "[a3,c#4,e4,g4]/2", Q: "[b3,e4,g#4]", R: "[b3,d#4,f#4]", S: "[a3,e4,g#4] [c#4,e4,a4]", T: "[e4,g#4,b4]",
  U: "[d#4,f#4,b4]", V: "[b3,e4,g#4]@3 ~@13",
})).s("gm_drawbar_organ").gain(0.27).pan(0.1)

// drums · kick
const kick = s("bd").struct("<~ A@7 B A@15 C A@9 B A@15 B A@12 ~@2 A@11 B A@12 B A@34 C>".pickRestart({
  A: "x!2", B: "x ~ x!2", C: "x",
})).gain(0.37)

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

// drums · hihat
const hihat = s("hh").struct("<~ A@7 B A@15 C A@9 B A@15 B A@12 ~@2 A@11 B A@12 D A@15 D A@17 D ~>".pickRestart({
  A: "x!8", B: "x!5 ~@3", C: "x!4 ~@4", D: "x!7 ~",
})).gain(0.37)

// drums · crash
const crash = s("cr").struct("<~ A ~@7 A ~@15 A ~@9 A ~@15 A ~@10 B C@2 A ~@11 A ~@12 A ~@15 A ~@17 A>".pickRestart({
  A: "x", B: "~@7 x", C: "~ x ~ x",
})).gain(0.46)

stack(electric_guitar_clean, overdriven_guitar, bass, drawbar_organ, kick, snare, hihat, crash)

More by The Pretenders