Strudelify
What's New Pussycat cover art

What's New Pussycat

What's New Pussycat

Tom Jones

KeyA majorTempo183 bpm
0:00/0:00
// What's New Pussycat — Tom Jones
// 183 bpm, 3/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(183/3)

// 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.

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D A B E D A@2 F@2 G@2 H@4 I@7 J@3 K L M N O P M Q R@2 A B C D A B E D A@2 F@2 G@2 H@4 I@7 J@3 K L M N O P M Q
  R@2 A B C D A B E D A@2 F@2 G@2 H@4 I@7 J@3 K L M N O P M Q R@2 M S P T M U@2 V@3 ~
>`.pickRestart({
  A: "~@5 [f#3,a3,d4]@5 ~ [f#3,a3,d4]@5", B: "~@5 [g3,b3,e4]@5 ~ [g3,b3,e4]@5",
  C: "~@5 a3@3 a3@3 [a3,c#4,f#4]@5, ~@5 [c#4,f#4]@5 ~@6", D: "~@5 [a3,c#4,f#4]@5 ~ [g3,b3,e4]@5",
  E: "~@5 [a3,c#4,f#4]@5 ~ [a3,c#4,f#4]@5", F: "[~@5 [g#3,d4,e4]@5 ~ [g#3,d4,e4]@10 [g#3,d4,e4]@5 ~ [g#3,d4,e4]@5]/2",
  G: "[~@5 [a3,c#4,e4]@5 ~ [a3,c#4,e4]@10 [a3,c#4,e4]@5 ~ [a3,c#4,e4]@5]/2", // A
  H: "[~@5 [g3,b3,e4]@5 ~ [g3,b3,e4]@10 [g3,b3,e4]@5 ~ [g3,b3,e4]@10 [g3,b3,e4]@5 ~ [g3,b3,e4]@10 [g3,b3,e4]@5 ~ [g3,b3,e4]@5]/4", // Em
  I: "[~@5 [f3,a#3,d4,f4]@5 ~ [f3,a#3,d4,f4]@10 [f3,a#3,d4,f4]@5 ~ [f3,a#3,d4,f4]@10 [f3,a#3,d4,f4]@5 ~ [f3,a#3,d4,f4]@10 [f3,a#3,d4,f4]@5 ~ [f3,a#3,d4,f4]@10 [f3,a#3,d4,f4]@5 ~ [f3,a#3,d4,f4]@10 [f3,a#3,d4,f4]@5 ~ [f3,a#3,d4,f4]@10 [f3,a#3,d4,f4]@5 ~ [f3,a#3,d4,f4]@5]/7", // A#
  J: "[~@5 [f3,a#3,d4,f4]@5 ~@11 [a3,c#4,e4]@5 ~ [a3,c#4,e4]@10 [a3,c#4,e4]@5 ~ [a3,c#4,e4]@4 ~, ~@11 [f3,a#3,d4,f4]@32 ~@5]/3", // A# A A#
  K: "~@5 [a3,c#4,f#4]@5 ~ [a3,c#4,f#4]@3 ~@2", L: "~@5 [g#3,b3,e4]@5 ~ [g#3,b3,e4]@4 ~",
  M: "~@5 [f#3,a3,d4]@5 ~ [f#3,a3,d4]@4 ~", N: "~@11 [f#3,b3,d4]@3 ~@2, ~@5 [g#3,c#4,e4]@9 ~@2",
  O: "~@5 [g#3,b3,e4]@5 ~ [g#3,b3,e4]@5", P: "~@5 [a3,c#4,e4]@5 ~ [a3,c#4,e4]@4 ~",
  Q: "~@5 g#3@3 g#3@3 [g#3,d4,e4]@3 ~@2, ~@5 [d4,e4]@5 ~@6", R: "~@5 [a3,c#4,e4]@5 ~ [a3,c#4,e4]@5",
  S: "~@5 [g#3,b3,d4]@5 ~ [g#3,b3,d4]@5", T: "~@5 [a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@5",
  U: "[~@9 e4@18 ~@5, g#3@27 ~@5, ~@3 b3@24 ~@5, ~@6 d4@21 ~@5]/2",
  V: "[~@7 a3@9, [a2,e4], c#4@5 ~@2 c#4@17, ~@3 b3@16 a4@29, ~ e3@5]/3", // A5
})).s("gm_acoustic_guitar_steel").gain(0.27).pan(0.6)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D A B C D A@2 E F D E G B G B H I H I H I H I J D A K L E K M L E D@2 A B C D A B C D A@2 E F D E G B G B H I H
  I H I H I J D A K L E K N L E D@2 A B C D A B C D A@2 E F D E G B G B H I H I H I H I J D A K L E K N L E D@2 L E D@2
  L O@2 P@3 ~
>`.pickRestart({
  A: "d2@7 ~", B: "g2@7 ~", C: "a2@15 ~", D: "a1@15 ~", E: "e2@15 ~", F: "e2@7 ~", G: "c2@7 ~", H: "a#1@15 ~",
  I: "f2@15 ~", J: "a1@7 ~", K: "c#2", L: "b1@15 ~", M: "f#2@3 ~", N: "f#2", O: "[e2@31 ~]/2", P: "a1/3",
})).s("gm_acoustic_bass").gain(0.44)

// chords · accordion
const accordion = note(`<
  A B C@2 A B C@2 D@2 E@2 F G@2 H@2 I J K L M N O@3 F P ~ Q A R Q A ~@4 A B C@2 A B C@2 D@2 S@2 F G@2 H@2 I J K L M N
  O@3 F P ~ Q A R Q A ~@4 A B C@2 A B C@2 D@2 S@2 F G@2 H@2 I J K L M N O@3 F P ~ Q A R Q A ~@15
>`.pickRestart({
  A: "[f#4,a4]", B: "[g4,b4]", C: "[[a4,c#5]@31 ~]/2", D: "[f#4,a4]/2", E: "[[e4,g#4]@31 ~]/2", F: "a4@5 ~ b4@5 a4@5",
  G: "[b4@24 ~@3 b4@3 ~@2]/2", H: "[b4@5 ~ a4@5 b4@12 ~@4 b4@3 ~@2]/2", I: "b4@4 ~@2 a4@5 b4@5",
  J: "~@11 [a#4,d5]@3 ~@2", K: "[a#4,d5]@7 ~", L: "[a#4,d5]@5 [c5,e5]@5 ~ [d5,f5]@3 ~@2",
  M: "[d5,f5]@5 [c5,e5]@5 ~ [a#4,d5]@3 ~@2", N: "[a4,c#5]@5 ~ a#4@4 ~ b4@5, ~@5 d5@4 ~@7",
  O: "[b4@2 ~ c5@3 a#4@4 ~ [a#4,d5]@36 ~]/3", P: "b4", Q: "[g#4,b4]", R: "~@5 g#4@5 ~ f#4@5", S: "[g#4@23 ~@9]/2",
})).s("gm_accordion").gain(0.27).pan(0.4)

// chords · dulcimer · "SANTUR"
const dulcimer = note("<~@10 A@2 ~@36 A@2 ~@36 A@2 ~@37>".pickRestart({
  A: "[[g#4,e5]@5 ~@11 [g#4,b4,e5]@11 [f#4,d5]@3 ~@2, b4@9 [f#4,d5]@5 [f#4,d5]@12 ~@6, ~@6 [g#4,e5]@5 [g#4,b4,e5]@5 ~@16]/2", // C#m E D C#m E
})).s("gm_dulcimer").gain(0.44)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@26 A@2 B C D@2 C E F@2 G@2 ~@26 A@2 B C D@2 C E F@2 G@2 ~@26 A@2 B C D@2 C E F@2 G@2 F@2 G@2 H I@2 J@3 ~
>`.pickRestart({
  A: "[a3,c#4,e4]/2", B: "[a3,c#4,f#4]", C: "[g#3,b3,e4]", D: "[[a3,d4,f#4]@21 [g#3,c#4,e4]@5 ~ [f#3,b3,d4]@5]/2",
  E: "[a3,c#4,e4]", F: "[[f#3,a3] [g#3,b3], d4]/2", G: "[[e3,a3,c#4]@15 ~]/2", H: "[f#3,a3,d4]", I: "[g#3,b3,d4]/2",
  J: "[a3,c#4,e4]/3", // A
})).s("gm_string_ensemble_2").gain(0.33)

// other · trombone
const trombone = note(`<
  A B C@2 A B C@2 A@2 D@2 ~@12 E F ~@12 A G C@2 A B C@2 A@2 D@2 ~@12 E F ~@12 A G C@2 A B C@2 A@2 D@2 ~@12 E F ~@23
>`.pickRestart({
  A: "d2@13 ~@3", B: "g2@7 ~", C: "a2@13 ~@3", D: "e2@13 ~@3", E: "a#2@13 ~@3", F: "f2@13 ~@3", G: "g2@3 ~",
})).s("gm_trombone").gain(0.49).pan(0.3)

// other · trombone · soft notes
const trombone_soft = note("<~@110 A B@3 C B@3 D@3 E@3 ~>".pickRestart({
  A: "[b3,d4]@7 ~", B: "[b3@15 ~ c#4@31 ~, e4@47 ~]/3", C: "[b3,d4]", D: "[d4@15 ~ e4@32, b3]/3",
  E: "[[a3,c#4]@11 ~]/3", // A
})).s("gm_trombone").gain(0.22).pan(0.3)

// other · timpani
const timpani = note("<~@13 A B A B ~@7 C D ~@25 E B A B ~@7 C D ~@25 E B A B ~@7 C D ~@23>".pickRestart({
  A: "~@11 g2@2 ~@3", B: "c3 ~@15", C: "a#2@7 ~", D: "f2@7 ~", E: "~@11 a2 ~@4",
})).s("gm_timpani").gain(0.64)

// drums · kick
const kick = s("bd").struct("<x!120 ~@5>").gain(0.49)

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A D A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~@7
>`.pickRestart({
  A: "x", B: "~@9 x ~ x ~@4", C: "x ~ x ~@4 x", D: "~@8 x ~@2 x ~ x ~@2",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  A@2 B@2 A B@2 C B@4 A B@12 C B@10 C ~ A B@11 A B@25 A B@2 C B@7 C A B@30 ~@6
>`.pickRestart({
  A: "~@5 x ~@5 x ~@4", B: "x ~@4 x ~@5 x ~@4", C: "x ~@4 x ~@10",
})).gain(0.27)

// drums · low tom
const low_tom = s("lt").struct("<~@75 [~ x] ~@49>").gain(0.38)

// drums · mid tom
const mid_tom = s("mt").struct("<~@37 [~@6 x ~@4 x ~@4] ~@37 [~@5 x ~@7 x ~@2] ~@49>").gain(0.38)

// drums · open hat
const open_hat = s("oh").struct("<~@7 A ~@17 A ~@10 B ~@42 A ~@7 A ~@37>".pickRestart({
  A: "~@11 x ~@4", B: "~@7 x",
})).gain(0.27)

// drums · high tom
const high_tom = s("ht").struct("<~@75 [~@11 x ~@4] ~@49>").gain(0.38)

// drums · crash
const crash = s("cr").struct("<x ~@3 x ~@33 x ~@37 x ~@48>").gain(0.33)

// drums · ride
const ride = s("rd").struct("<~@12 A ~@37 A ~@37 A ~@30 A B A ~@3>".pickRestart({
  A: "x", B: "~@12 x ~ x!2",
})).gain(0.33)

stack(
  acoustic_guitar_steel, bass, accordion, dulcimer, string_ensemble_2, trombone, trombone_soft, timpani, kick, snare,
  hihat, low_tom, mid_tom, open_hat, high_tom, crash, ride
)

More by Tom Jones