Strudelify
Stray Cat Strut cover art

1981 · Stray Cats

Stray Cat Strut

Stray Cats

KeyE♭ majorTempo142 bpm
0:00/0:00
// Stray Cat Strut — Stray Cats
// 142 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 107 bars on a 24-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.

// chords · piano
const piano = note(`<
  ~@9 A B A B A B A B A B A B A B A B A B ~ C D E F E F E ~ G H B A B A B A B A B ~@2 I@2 J@2 I@2 K L A B A B A B ~@2 A
  B A B A B A B A B A B A B A B A B ~@2 I@2 J@2 I@2 K L A B A B A B ~@8
>`.pickRestart({
  A: "[c4,g4]@2 [c4,g4] [c4,eb4]@2 [c4,eb4] [f3,d4]@2 [f3,d4] [f3,bb3]@2 [f3,bb3]", // C5 Cm Dm Bb5
  B: "[ab3,eb4]@2 [ab3,eb4] [ab3,c4]@2 [ab3,c4] [g3,d4]@2 [g3,d4] [g3,b3]@2 [g3,b3]", // Ab5 Ab G5 G
  C: "~@21 g6 [e6,f6,g6,a6] [c6,d6,e6], ~@10 a6 ~", // Fmaj7 C
  D: "[f5,g5,a5,b5,d6] [c5,d5,e5,f5,g5] [g4,a4,b4,c5,d5,e5] [d4,e4,f4,g4,a4] [a3,b3,e4] ~ [c4,f4]@4 [c4,f4]@2 [eb4,bb4]@4 [eb4,bb4]@2 [eb4,g4]@4 [eb4,g4]@2, [c4,ab4]@2 [c4,ab4] ~@9", // G7 C Cmaj7 Dm Asus2 F5 Eb5 Eb …
  E: "[ab4,db5]@2 [ab4,db5] [ab4,f5]@2 [ab4,f5] [c4,g4]@2 [c4,g4] [c4,e4]@2 [c4,e4]", // Db5 Db C5 C
  F: "[c4,ab4]@2 [c4,ab4] [c4,f4]@2 [c4,f4] [eb4,bb4]@2 [eb4,bb4] [eb4,g4]@2 [eb4,g4]", // Fm F5 Eb5 Eb
  G: "~@17 f4 [g4,a4] [b4,c5] [c5,d5,e5] [d5,e5,f5,g5,a5] [f5,g5,b5,c6] [a5,b5,d6,e6], ~@8 e4 ~@3", // Gsus2 Cmaj7 C Dm Fsus2 Asus4
  H: "[c6,d6,e6,f6,g6] [f6,g6,a6,b6,c7] [a6,c7,d7,e7] [d7,e7,f7,g7] a7 b7 [c4,eb4]@4 [c4,eb4]@2 [f3,d4]@4 [f3,d4]@2 [f3,bb3]@4 [f3,bb3]@2, [c4,g4]@2 [c4,g4] ~@9", // C F Am Em7 Cm Dm Bb5 C5
  I: "[f4,c5]@2 [f4,c5] [f4,ab4]@2 [f4,ab4] [f4,c5]@2 [f4,c5] [f4,bb4]@2 [f4,bb4]", // F5 Fm F5 Bb5
  J: "[c4,g4]@2 [c4,g4] [c4,eb4]@2 [c4,eb4] [c4,g4]@2 [c4,g4] [c4,eb4]@2 [c4,eb4]", // C5 Cm C5 Cm
  K: "[d4,a4]@2 [d4,a4] [d4,b4]@2 [d4,a4] [d4,a4]@2 [d4,a4] [d4,b4]@2 [d4,a4]", // D5 G D5 G D5
  L: "[g3,d4]@2 [g3,d4] [g3,b3]@2 [g3,b3] [g3,d4]@2 [g3,d4] [g3,b3]@2 [g3,b3]", // G5 G G5 G
})).s("gm_piano").gain(0.45)

// chords · electric guitar muted · "Muted Guitar"
const electric_guitar_muted = note("<~@69 A B C D A ~ A ~ E F ~@2 G H ~@24>".pickRestart({
  A: "[eb5,g5,c6] ~@7", B: "[c5,eb5,ab5]@4 ~@8 [b4,eb5]@3 ~@9", C: "~@2 [eb5,g5] ~@9", D: "~@3 [c5,eb5,ab5]!2 ~@3",
  E: "~@21 eb5 f5 ~", F: "~@9 d5 f5 ~@13", G: "~@21 bb4 d5 eb5", H: "~@9 bb4 d5 f5 ~@12",
})).s("gm_electric_guitar_muted").gain(0.4)

// chords · electric guitar jazz · "Electric Guitar"
const electric_guitar_jazz = note(`<
  ~@3 A B C D E F G H G H G H G I J K G L@2 M G N O P Q ~ R S R S R S T ~ O U O V W X Y Z AA AB AC@2 AD AE AF AG AH@2 AI
  AJ AK I AK I AK I Q ~ O U O U AL AM AN AO AP AQ AR AS@2 AT AU AV AL AW AX AY AD AE AF AG AH@2 AI AJ AK I AK I AK I Q
  ~@3 AZ BA@2 BB
>`.pickRestart({
  A: "~@3 [g5,c6]@9 f5 gb5 ~ f5 eb5 ~ f5@4 eb5@2", B: "g4@2 b4 d5@2 g5 db5@2 f5 a4@2 eb5", C: "~ c4@3 ~ bb3@3",
  D: "~ ab3@3 ~ g3@3", E: "~ [c4,c5]@3 ~ [bb3,bb4]@3", F: "~ [ab3,ab4]@3 ~ [g3,g4]@3",
  G: "~ [c5,eb5,g5]@3 ~ [bb4,d5,f5]@3", H: "~ [ab4,c5,eb5]@3 ~ [f4,b4,d5]@3", I: "~ [ab4,c5,eb5]@3 ~ [g4,b4,d5]@3",
  J: "[c5,eb5,g5]@2 ~ [c5,eb5,g5] ~ [bb4,d5,f5] ~ [bb4,d5,f5]", K: "[ab4,c5,eb5] ~ [ab4,c5,eb5] ~@2 [g4,b4,d5]@3",
  L: "[~ [ab4,c5,eb5]@3 ~ [g4,b4,d5]@2 [c5,eb5,g5]@2 ~ [c5,eb5,g5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~]/2", // Ab G Cm Bb
  M: "[c5,eb5] ~ [ab4,c5,eb5] [g4,b4,d5]@2 [b4,d5,g5] ~@2", N: "~ [ab4,c5,eb5]@3 ~ [g4,b4,d5]@2 [g4,b4,d5]",
  O: "[c5,eb5,g5] ~ [c5,eb5,g5] ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~", // Cm Bb
  P: "ab4@4 [ab4,c5,eb5]@2 ~@3 [g4,b4,d5]@6 [g4,b4,d5]@3 [g4,b4,d5]@6", Q: "[eb5,g5,c6] ~@3",
  R: "[c5,f5,ab5] ~ [c5,f5,ab5] ~ [bb4,eb5,g5] ~ [bb4,eb5,g5] ~", // Fm Eb
  S: "[ab4,db5,f5]@4 [ab4,db5,f5]@2 ~@3 [g4,bb4,e5]@6 [g4,bb4,e5]@3 [g4,bb4,e5]@6", T: "[f5,ab5,c6] ~@7",
  U: "[ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // Ab G
  V: "[ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [g4,b4,d5] ~ [g4,b4,d5] g5", W: "f5@6 [g5,c6] ~@5 g5@2 f5@2 eb5@2 c5@4 bb4@2",
  X: "ab4@4 bb4@2 ab4@3 bb4 g4 bb4 g4@6 ~@3 b3@3", Y: "c4@2 d4 eb4@2 f4 g4@2 eb4 d4@2 c4", Z: "g4 ab4 c5 c5@2 gb5 f5@6",
  AA: "[c5,eb5,g5,c6] ~ [c5,eb5,g5,c6] ~ [bb4,d5,g5,bb5] ~ [bb4,d5,g5,bb5] ~", // Cm Gm
  AB: "[ab4,c5,f5,a5]@4 [ab4,c5,f5,a5]@2 ~@3 [g4,b4,f5,g5]@15", // F G7
  AC: "[c4@6 gb4@6 c5@6 gb5@9 c6@3 eb5@4 c5@2 c5@4 [c5,eb5]@2 [d5,f5]@4 [eb5,g5]@2]/2", // Cm Dm Eb
  AD: "[f5,ab5,c6]@3 ~@3 [f5,ab5,c6]@6 [f5,ab5,c6]@4 [f5,ab5,c6]@2 ~@4 [eb5,ab5,c6]@2", // Fm Ab
  AE: "~@3 [eb5,ab5,c6]@6 [eb5,ab5,c6]@3 [eb5,g5,c6]@4 [eb5,ab5,c6]@2 ~@6", // Ab Cm Ab
  AF: "~@3 [eb5,g5,c6]@3 ~@3 [eb5,g5,c6]@3 [eb5,g5,d6]@4 [eb5,g5,c6]@2 ~@4 [eb5,g5]@2", // Cm Ebmaj7 Cm Eb
  AG: "~ [eb5,g5] ~ [eb5,g5] [d5,gb5] [eb5,g5] [d5,gb5] [eb5,g5]", // Eb D Eb D Eb
  AH: "[~ [eb5,ab5,c6] ~ [eb5,ab5,c6] ~ [eb5,ab5,c6] ~ g5@2 g5@2 [eb5,g5,c6]@2 [eb5,g5,c6] [eb5,g5,c6]@2, ~@7 eb5@4 ~@5]/2", // Ab Cm
  AI: "~ [gb5,a5,d6]@2 [gb5,a5,d6]@2 [gb5,a5,d6]!2 ~", AJ: "[f5,ab5]!12", AK: "~ [c5,eb5,g5]@3 ~ [bb4,d5,f5]@2 ~",
  AL: "~ [eb5,g5,c6]@5 ~@2", AM: "~@4 [c5,eb5,ab5]@2 ~@9 [b4,eb5]@9",
  AN: "~@3 [eb5,g5]@2 [eb5,g5] [eb5,g5]@2 [eb5,g5] ~@3", AO: "~ [c5,eb5,ab5]@2 ~@2 [b4,eb5]@3",
  AP: "~ [eb5,g5,c6]@5 ~ [b4,d5]", AQ: "[c5,eb5] [c5,eb5,ab5] ~@3 [f4,a4,eb5]@3", AR: "~ [eb5,g5,c6]@4 [eb5,g5,c6] ~@2",
  AS: "[~ [c5,eb5,ab5]@2 [c5,eb5,ab5] ~ eb5 [eb5,gb5,b5] [eb5,g5,c6]@7 ~@2, ~@5 b4@3 ~@8]/2", // Ab B Cm
  AT: "[a5,eb6] ~ [ab5,d6] ~", AU: "~@3 [eb5,g5,c6]@12 [g5,c6]@3 gb5@2 f5@2 eb5@2",
  AV: "~@3 ab4@3 c5@2 eb5@4 ~@3 g4@3 b4@2 d5@4", AW: "[a5,eb6]@3 ~@3 [ab5,d6]@3 g5 a5 c6",
  AX: "eb6@2 d6@2 c6@2 bb5@2 a5@2 g5@2 f5 g5 ~ [g5,c6]@3 f5 g5 f5@2 eb5@2", // C5
  AY: "f5 gb5 ~ eb5@3 c5@3 g4 bb4 ~ eb5@3 eb5@3 c5@2 bb4@2 g4@2",
  AZ: "~@3 c6@3 f5 gb5 ~ f5 eb5 ~ f5@4 eb5@2 c5@4 bb4@2", BA: "[g4@2 a4 b4@2 c5 ~@3 [bb4,eb5,a5,d6]@15]/2",
  BB: "[bb4,eb5,a5,d6] ~", // Bbmaj7
})).s("gm_electric_guitar_jazz").gain(0.35)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A B ~@2 C D C D C D C D C D C D E F C D E F C D E F G H I J I J I J K ~ C D C D C D C D E F G ~ L M N O P Q R S T D
  T D T D G ~ C D C D E F U V W N X N E F Y D Y D G ~ L M N O P Q R S T D T D T D G ~ A B ~ Z@2 G
>`.pickRestart({
  A: "c2 b1 bb1 a1", B: "ab1@3 g1@3 f1@3 eb2@2 c2", C: "c2!2 bb1!2", D: "ab1!2 g1!2", E: "c2 d2 eb2 f2",
  F: "gb2 g2 eb2 d2", G: "c2 ~@3", H: "~@9 c2 d2 eb2", I: "f2!2 eb2!2", J: "db2!2 c2!2", K: "f2 ~@7",
  L: "f2 ab2 g2 eb2", M: "f2 eb2 d2 db2", N: "c2 eb2 d2 b1", O: "c2 d2 eb2 e2", P: "f2 a2 g2 eb2", Q: "f2 eb2 c2 db2",
  R: "d2 c2 b1 a1", S: "g1 ab1 bb1 b1", T: "c2 ab1 bb1!2", U: "c2 eb2 g2 eb2", V: "b2 bb2 g2 bb2", W: "c3 bb2 g2 eb2",
  X: "c2 bb1 g1 bb1", Y: "c2 g1 bb1 f1", Z: "[g1@2 a1 b1@2 c2 ~@3 c2@15]/2",
})).s("gm_acoustic_bass").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@2 ~@2 A B A B A B A B A B A B A B A B A B A B A C D ~ A B A B A C D ~ A B A C A B A B A C D ~ A@2 E@4 F G A B A B
  A C D ~ A B A B A B A B A B A C A B A B A C D ~ A@2 E@4 F G A B A B A C D ~ A@2 ~@3 D
>`.pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "x ~@4 x!2 ~@5", C: "x ~@4 x!2 ~@2 x ~@2", D: "x", E: "x!2", F: "x ~@5 x ~@4 x", G: "x!4",
})).gain(0.5)

// drums · rim
const rim = s("rim").struct("<~@3 [~@3 x] [~ x ~@2] ~@102>").gain(0.5)

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

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

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@7 A ~@3 A ~@11 A ~@7 A ~@3 A ~@7 A ~@7 A ~@7 A ~@3 A ~@7 A ~@7 A ~@7 A ~@12 A
>`.pickRestart({
  A: "x",
})).gain(0.45)

stack(piano, electric_guitar_muted, electric_guitar_jazz, bass, kick, rim, snare, hihat, crash)

More by Stray Cats