Strudelify

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: 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 T U M V@2 W@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]@4 ~]/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]@5 ~ [a3,c#4]@5, ~@11 e4@3 ~@2",
  U: "~@5 [a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@5", V: "[~@9 e4@18 ~@5, g#3@27 ~@5, ~@3 b3@24 ~@5, ~@6 d4@21 ~@5]/2",
  W: "[~@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 E F G D H I J I K L M N M L M N O P Q R S T H U V T H Q@2 A B C D A B C D A E F G D H I J I K L M N
  M L M N O P Q R S T H U W T H Q@2 A B C D A B C D A E F G D H I J I K L M N M L M N O P Q R S T H U W T H Q@2 T H Q@2
  T X@2 Y@3 ~
>`.pickRestart({
  A: "d2@7 ~", B: "g2@7 ~", C: "a2@15 ~", D: "a1@7 ~", E: "d2@13 ~@3", F: "e2@7 ~", G: "e2@13 ~@3", H: "e2@15 ~",
  I: "c2@7 ~", J: "g2@15 ~", K: "g2@13 ~@3", L: "a#1@15 ~", M: "f2@15 ~", N: "a#1", O: "f2@7 ~", P: "a1@13 ~@3",
  Q: "a1@15 ~", R: "d2", S: "c#2", T: "b1@15 ~", U: "c#2@15 ~", V: "f#2@3 ~", W: "f#2", X: "[e2@31 ~]/2", Y: "a1/3",
})).s("gm_acoustic_bass").gain(0.44)

// chords · accordion
const accordion = note(`<
  A B C@2 A B D@2 E@2 F@2 G H@2 I@2 J K L M N O P@3 Q R ~ S A T S A ~@4 A B C@2 A B D@2 E@2 U@2 G H@2 I@2 J K L M N O
  P@3 Q R ~ S A T S A ~@4 A B C@2 A B D@2 E@2 U@2 G H@2 I@2 J K L M N O P@3 Q R ~ S A T S A ~@15
>`.pickRestart({
  A: "[f#4,a4]", B: "[g4,b4]", C: "[[a4,c#5]@31 ~]/2", D: "[a4,c#5]/2", E: "[f#4,a4]/2", F: "[[e4,g#4]@31 ~]/2",
  G: "a4@5 ~ b4@5 a4@5", H: "[b4@24 ~@3 b4@3 ~@2]/2", I: "[b4@5 ~ a4@5 b4@12 ~@4 b4@2 ~@3]/2", J: "b4@4 ~@2 a4@5 b4@5",
  K: "~@11 [a#4,d5]@3 ~@2", L: "[a#4,d5]@7 ~", M: "[a#4,d5]@5 [c5,e5]@5 ~ [d5,f5]@3 ~@2",
  N: "[d5,f5]@5 [c5,e5]@5 ~ [a#4,d5]@3 ~@2", O: "[a4,c#5]@5 ~ a#4@4 ~ b4@5, ~@5 d5@4 ~@7",
  P: "[b4@2 ~ c5@3 a#4@4 ~ [a#4,d5]@36 ~]/3", Q: "a4@5 b4@5 ~ a4@5", R: "b4", S: "[g#4,b4]", T: "~@5 g#4@5 ~ f#4@5",
  U: "[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 D E F@2 ~@12 G H ~@12 E I J@2 A B J@2 D@2 K@2 ~@12 G L ~@12 E I J@2 A B J@2 D@2 K@2 ~@12 G M ~@23
>`.pickRestart({
  A: "d2@7 ~", B: "g2@7 ~", C: "a2@3 ~", D: "d2@13 ~@3", E: "d2@3 ~", F: "e2@15 ~", G: "a#2@13 ~@3", H: "f2@13 ~@3",
  I: "g2@3 ~", J: "a2@13 ~@3", K: "e2@13 ~@3", L: "f2@3 ~", M: "f2@7 ~",
})).s("gm_trombone").gain(0.49).pan(0.3)

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

// other · timpani
const timpani = note("<~@13 A B C B ~@7 D E ~@25 F B C B ~@7 D E ~@25 F B C B ~@7 D E ~@23>".pickRestart({
  A: "~@11 g2 ~@4", B: "c3 ~@15", C: "~@11 g2@2 ~@3", D: "a#2@7 ~", E: "f2@7 ~", F: "~@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