Strudelify

Pills and Soap

Elvis Costello

KeyC minorTempo104 bpm
0:00/0:00
// Pills and Soap — Elvis Costello
// 104 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(104/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(`<
  A B C D C D E D E D E D E F@2 G@2 H I H I H I H I J K L E D E D E D E F@2 G@2 H I H I H I H I M N@2 O P Q P R S@2 T U
  V K L E D E D E D E F@2 G@2 H I H I H I H I M N@2 O W X W X Y@2 T U Z K AA AB@6
>`.pickRestart({
  A: "[g3,c4]@3 g3 c3@4", B: "[c2,c3]!2 ~@4 [c2,c3]!2 ~@8", C: "~@5 [c2,c3] [eb2,eb3] [ab2,ab3]", D: "[g2,g3]",
  E: "[c2,c3,eb3,g3,c4]!2 ~@8 [c2,c3]@2 [eb2,eb3]@2 [ab2,ab3]@2", F: "[g2,g3]/2",
  G: "[c3,g4,c5,eb5]@2 ~ [c3,g4,bb4,d5]@5", H: "~ f3 [ab3,c4,f4]@2 ~ g3 [bb3,d4,g4]@2, f2 g2",
  I: "[b2,b3,d4,f4]@3 [bb3,d4,f4]@2 g3 [d4,eb4]!2, ~@3 c3@5", J: "f4@6 f5 g5 ab5@2 g5@2 f5@4, [f2,f3]",
  K: "[eb4,eb6]@3 [d4,d6]@3 [b3,b5]@2", L: "[c2,c3,eb3,g3,c4]!2 ~@14",
  M: "[bb2,bb3,db4,f4]@8 [bb2,bb3,db4,f4]@3 [bb2,bb3,db4,f4]@2 [a2,a3,c4,f4]@3", // Bbm F
  N: "[[ab2,ab3,b3,f4]@5 [bb2,bb5] [ab2,ab5] f5@2 f3 [ab3,c4,f4]@2 [g2,bb3,d4,g4]@4, ~@7 f2@3 ~@6]/2", // Fdim Bb Ab Fm Gm
  O: "[b2,b3,d4,f4]@3 [bb3,d4,f4]@2 g3 eb4@2, ~@3 c3@5", P: "~@6 d2 eb2 e2@2 f2@2 gb2@2 g2@2, c4@3 db4",
  Q: "~@6 d2 eb2 e2@2 f2@2 gb2@2 g2@2, bb3@2 ~ eb4", R: "~@6 d2 eb2 e2@2 f2@2 gb2@2 g2@2, bb3@3 ab3",
  S: "[~@6 f5 g5 ab5@2 g5@2 f5@2 ab5@2 c6@16, f2, f3 ~]/2", T: "[eb3,bb4,eb5]@3 [db3,ab4,db5]@5",
  U: "[c3,g4,c5]@3 [ab2,eb4,ab4]@3 [g2,d4,g4]@2", V: "~@6 f5 g5 ab5@2 g5@2 f5@2 g5@2, [f2,c4,f4]",
  W: "c2@4 ~@2 d2 eb2 e2@2 f2@2 gb2@2 g2@2, ~ eb4@3", X: "c2@4 ~@2 d2 eb2 e2@2 f2@2 gb2@2 g2@2, ~ db4@3",
  Y: "[f4@6 f5 g5 ab5@2 g5@2 f5@2 ab5@2 c6@16, [f2,f3]]/2", Z: "~@6 f5 g5 ab5@2 g5@2 f5@2 ab5@2, [f2,c4,f4]",
  AA: "[c2,c3,eb4,g4,c5]!2 ~@4 [c2,c3,eb4,g4,c5]!2 ~@8", AB: "[c2,c3,eb4,g4,c5]!2 ~@14",
})).s("gm_piano").gain(0.51)

// drums · cowbell
const cowbell = s("cb").struct("<~@97 [~@8 x!2 ~@6]!4 ~>").gain(0.51)

// drums · congas
const congas = s("conga:18").struct("<~ A@16 ~@10 A@12 ~@22 A@12 ~@22 A B A@4 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(1.64)

stack(piano, cowbell, congas)

More by Elvis Costello