Strudelify

Kiss

Tom Jones

KeyC majorTempo117 bpm
0:00/0:00
// Kiss — Tom Jones
// 117 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(117/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.

// bass · acoustic bass · "ac bass"
const bass = note(`<
  A B A B A B A B C D C D A B A B E@2 C F E G C H ~@4 A B A B A B A B C D C D A B A B E@2 C F E G C H ~@5 I J K L M@2
  N@2 O P Q R S T S U A B A B A B A B C D C D A B A B E@2 C F E G C H ~@2
>`.pickRestart({
  A: "c2 ~@2 c2 ~@4", B: "c2 ~@2 a#1 ~@4", C: "f2 ~@2 f2 ~@4", D: "f2 ~@2 d#2 ~@4", E: "g2 ~@2 g2 ~@4",
  F: "f2@2 ~@4 d#2@3 ~@7", G: "g2 ~@2 f2 ~@4", H: "g2 ~@7", I: "c3@3 ~@5 c3@2 ~@6", J: "c3@2 a#2@2 a2@2 g2@2 c3@3 ~@5",
  K: "a#2 ~@3 a#2 ~@3", L: "c3@5 ~@11", M: "[c3@2 ~@2 c3@2 ~@2 a#2@2 a2@2 ~@2 g2@4 ~@2 f2@2 g2 ~ a#2@4 g2@2 ~@2]/2",
  N: "[c3 ~ c3 ~ d3 a#2 ~ g2@7 ~@2]/2", O: "c3@4 g3@3 f3", P: "g3@15 ~", Q: "c4 g4", R: "f#5",
  S: "c3 ~ c3@2 d3@2 d3@2 d#3@2 d#3@2 f3@2 d#3@2", T: "c3 ~ c3@2 ~@2 d3@2 d#3@2 d#3@2 f3@2 d#3@2", U: "c3@3 ~@13",
})).s("gm_acoustic_bass").gain(0.72)

// bass · electric bass finger · "el bass"
const bass_2 = note("<~@27 A B@8 C@4 B@4 ~@13 D E F G H@2 I@2 J K L M N@2 O P B@8 C@4 B@4 ~@10>".pickRestart({
  A: "~@12 a#1!2 b1!2", B: "c2!2 a#1 ~ a1 ~ a1 ~ g1 ~ g1 ~@5", C: "f2!2 d#2 ~ d2 ~ d2 ~ c2 ~ c2 ~@5",
  D: "c2 ~@3 c2 ~@3", E: "c2@2 a#1@2 a1@2 g1@2 c2@3 ~@5", F: "a#1 ~@3 a#1 ~@3", G: "c2@5 ~@11",
  H: "[c2 ~@3 c2@2 ~@2 a#1@2 a1@2 ~@2 g1@4 ~@2 f1@2 g1 ~ a#1@4 g1@2 ~@2]/2",
  I: "[c2@2 ~@2 c2 ~@3 d2@2 a#1 ~@3 g1@14 ~@4]/2", J: "c2@4 g2@3 f2", K: "g2@15 ~", L: "c3 g3", M: "f#4",
  N: "c2 ~ c2@2 d2 ~ d2@2 d#2@2 d#2@2 f2@2 d#2@2", O: "c2 ~ c2@2 d2 ~ d2@2 d#2 ~ d#2@2 f2@2 d#2@2", P: "c2@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · electric guitar clean · "guitar 1"
const electric_guitar_clean = note(`<
  ~@35 A ~@4 B C ~@2 D@2 E F G H E I ~@12 J ~@4 K@4 ~@6 L@2 ~@7 M N@2 O@2 P@2 Q R@3
>`.pickRestart({
  A: "~ [e4,a#4] ~ [e4,a#4] ~@4", B: "~@5 [e4,a#4] ~@2", C: "[e4,a#4] ~@7", D: "[g4,d5,g5] ~@2 [g4,d5,g5] ~@4",
  E: "[f4,c5,f5] ~@5 [f4,c5,f5]@2 ~@8", F: "[f4,c5,f5] ~@5 [d#4,c5,f5]@2 ~@8", G: "[g4,d5,g5] ~@5 [g4,d5,g5] ~@9",
  H: "[g4,d5,g5] ~@5 [f4,d5,g5]@2 ~@8", I: "[g4,d5,g5] ~@7", J: "~@8 [f#5,a5] ~ c5 ~ c5@3 ~, ~@8 c6@7 ~, ~@9 g5@2 ~@5",
  K: "[~@2 c5@2 ~ g5 ~@8 [g5,c6]@4 c5@2 ~ g5 ~@8 [g5,c6]@4 c5@2 ~ g5 ~@4 c5@3 ~@3 [g5,c6]@2 ~@14, ~@4 [f#5,c6]@2 c5@3 ~ c5@7 ~@5 c5@3 ~ c5@7 ~@5 c5@3 ~@5 c5@4 ~@14, ~@7 [g5,c6]@6 ~@7 [f#5,c6]@2 ~ [g5,c6]@6 ~@7 [f#5,c6]@2 ~ [g5,c6]@8 ~@17]/4", // C5 F#dim C5 F#dim C5 F#dim C5
  L: "[[c5,f#5,c6] c5 [c5,c6]!3 c5 c6 [c5,c6] ~ c6!4 [c5,c6] c5!2 [c5,c6] ~ [c5,c6] ~ c6!2 [c5,c6]!2 c5 ~ c5!2 [c5,c6] ~ [c5,c6] c5, g5]/2", // Cdim C
  M: "c6 ~ [c5,g5,c6]@2 [c5,g5,c6] ~ [c5,g5,c6] ~ [c5,g5,c6] ~ [c5,g5,c6] ~ [c5,g5,c6] ~ [c5,g5,c6] ~", // C5
  N: "[g3@2 g4@2 [f5,b5,d6] ~ f5 ~ [f5,b5,d6] ~ [f5,b5,d6]@2 g4 ~ [g4,f5]@2 g3@2 f5 ~ [f5,b5,d6]@2 [g4,f5]@2 [f5,b5,d6] ~ [b5,d6]@2 [g3,f5]@2 [f4,f5,b5,d6]@2, ~@6 g3@5 ~@3 [b5,d6]@4 ~@8 f5 ~@5]/2", // Bdim G7 Bdim G7 Bdim Bm G7 Bdim …
  O: "[f3@2 c5 ~ [d#5,a5,c6]@2 [f4,c5]@2 [d#5,a5,c6] ~ [d#5,a5,c6]@2 f3 ~ f3@2 f4@2 c5 ~ [d#5,a5,c6]@2 [f3,c5]@2 [d#5,a5,c6] ~ [d#5,a5,c6]@2 f4@2 [d#5,a5,c6]@2, ~@7 [d#5,a5,c6]@2 ~@7]/2", // Adim F5 Adim F5 Adim
  P: "[~@2 d5 ~ [f5,b5,d6]@2 [g4,d5]@2 [f5,b5,d6] ~ [f5,b5,d6]@2 ~@4 g4@2 d5 ~ [f5,b5,d6]@2 ~@2 [f5,b5,d6] ~@3 g4@2 c5 ~, g3@6 ~@6 g3@4 ~@6 g3@5 ~@5, ~@7 [f5,b5,d6]@2 ~@4 [f5,b5,d6]@2 ~]/2", // Bdim G5 Bdim
  Q: "[d#5,a5,c6]@2 f4@2 ~@2 [d#5,a5,c6]@4 ~@2 [d#5,a5,c6] ~@3, ~@2 f3@5 ~, ~@5 f4@2 ~", // Adim
  R: "[[f#6,c7] ~ c7 [f#6,c7]!3 f#6 [f#6,c7]!4 c7 [f#6,c7]!3 c7 f#6 c7!2 ~ c7!4 ~@2 c7 ~ c7 ~@19, [c3,c4,c6]]/3", // F#dim C
})).s("gm_electric_guitar_clean").gain(0.56).pan(0.2)

// chords · electric guitar clean · "guitar 1" · soft notes
const electric_guitar_clean_2 = note("<~@70 A@2 ~@7 B C ~@7 D ~@7 E F G>".pickRestart({
  A: "~@2 a5 ~@5", B: "~@5 c6 ~@2 c5!4 ~@2 c6 ~", C: "~ c6 ~ c5!2 ~@4 c6!2 ~@2 c6 ~ c6", D: "[c5,g5] ~@15",
  E: "~@2 f#6 ~@12 f#6", F: "~ f#6!2 [f#6,c7] f#6 ~ f#6!2 [f#6,c7] f#6!2 [f#6,c7] ~ [f#6,c7]!3",
  G: "f#6 [f#6,c7] c7 [f#6,c7]!2 f#6 ~ c7!2 ~ c7@6, ~@6 [f#6,c7]@2 ~ f#6@7", // F#dim
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.2)

// other · piano
const piano = note("<~@72 A B C B C B C B C D E D E B C B C F@2 D G F H D I ~@2>".pickRestart({
  A: "~@8 a#2@2 a#2 ~ b2@2 ~@2", B: "c3 ~@2 c3 ~@4", C: "c3 ~@2 a#2 ~@4", D: "f3 ~@2 f3 ~@4", E: "f3 ~@2 d#3 ~@4",
  F: "g3 ~@2 g3 ~@4", G: "f3@2 ~@4 d#3@3 ~@7", H: "g3 ~@2 f3 ~@4", I: "g3 ~@7",
})).s("gm_piano").gain(0.8).pan(0.3)

// other · lead 1 square · "synth"
const lead_1_square = note(`<
  A B A B A B A B C D C D A B A B E@2 C F E G C H ~@4 A B A B A B A B C D C D A B A B E I C F E G C H J ~@16 K L K M A B
  A B A B A B C D C D A B A B E@2 C F E G C N@3
>`.pickRestart({
  A: "c4 ~@2 c4 ~@4", B: "c4 ~@2 a#3 ~@4", C: "f4 ~@2 f4 ~@4", D: "f4 ~@2 d#4 ~@4", E: "g4 ~@2 g4 ~@4",
  F: "f4@2 ~@4 d#4@3 ~@7", G: "g4 ~@2 f4 ~@4", H: "g4 ~@7", I: "g4 ~@5 g4@2 ~@8", J: "c4 ~@7",
  K: "c3 ~ c3@2 d3@2 d3@2 d#3@2 d#3@2 f3@2 d#3@2", L: "c3 ~ c3@2 d3@2 d3@2 d#3@2 d#3@2 f3@2 d#3@2, ~@4 c-1 ~@11",
  M: "c3@3 ~@13", N: "[c4@41 ~@7, g4 ~@23]/3",
})).s("gm_lead_1_square").gain(0.64).pan(0.7)

// other · french horn · "horns"
const french_horn = note("<~@42 A@2 ~@6 B@2 ~@15 C D E ~@2 F ~@14 A@2 ~@6 G@4>".pickRestart({
  A: "[a#4@7 ~]/2", B: "[~@7 a#4@7 ~@2]/2", C: "c4@6 d4@2 d#4 ~@3 c4 ~@3", D: "f#4@15 ~", E: "~@6 c6 c5", F: "a#5 ~@3",
  G: "[~@14 a#4@41 ~@9]/4",
})).s("gm_french_horn").gain(0.64).pan(0.6)

// other · alto sax · "sax"
const alto_sax = note(`<
  ~@15 A B C D A E F G ~ H I J ~@9 K ~ L ~@4 A M C D A N F G ~@2 O P Q R ~@2 S ~ T U ~@4 V W X@2 ~ Y ~@8 K ~ L ~@4 A B C
  D A N F G ~@3
>`.pickRestart({
  A: "~@7 f#2", B: "g2 ~@5 g2 ~@9", C: "~@6 g2 f#2 g2 ~@5 g2 f#2", D: "f2 ~@15", E: "g2 ~@7",
  F: "~@10 g2 f#2 g2 ~ g2 f#2", G: "f2 ~@7", H: "a#2@3 a2 ~@10 a#2 ~", I: "a#2@3 a2 ~@12", J: "a#2@3 a2 ~@10 c3@2",
  K: "~@10 [d#4,d#5]@3 ~@3", L: "~@12 [d#4,d#5]@3 ~", M: "g2 ~@2 g2 ~@4", N: "g2 ~@15",
  O: "a#2 a2 a#2 a2 a#2 a2 a#2 a2 a#2 a2 a#2 a2 a#2 a2 a#2 a2", P: "a#2 a2 ~ a2 ~@12", Q: "~@8 a#2 a2 ~ a2 ~@4",
  R: "~@6 f2 e2 ~ e2 ~@6", S: "~@2 a#2 ~@3 a#2 ~", T: "d#4", U: "c5@2 f#4@11 ~@3", V: "c3@6 d3 ~ d#3 ~@3 c3 ~@3",
  W: "f#3", X: "[~@6 c5 c4@2 ~@7]/2", Y: "a#3@3 ~@13",
})).s("gm_alto_sax").gain(0.64)

// other · clavinet
const clavinet = note("<~@24 A B C ~@9 D ~ E ~@14 F G H I ~@2 J ~ K L ~@4 M N O ~@2 P ~@8 D ~ E ~@15>".pickRestart({
  A: "[a#4,a#5]@3 [a4,a5] ~@10 [a#4,a#5] ~", B: "[a#4,a#5]@3 [a4,a5] ~@12", C: "[a#4,a#5]@3 [a4,a5] ~@10 [c5,c6]@2",
  D: "~@10 [d#4,d#5]@3 ~@3", E: "~@12 [d#4,d#5]@3 ~",
  F: "[a#4,a#5] [a4,a5] [a#4,a#5] ~ [a#4,a#5] ~ a#4 a5 [a#4,a#5] a5 [a#4,a#5] [a4,a5] [a#4,a#5] a5 a#4 [a4,a5]", // A# A A# A A# A
  G: "[a#4,a#5] [a4,a5] ~ a5@2 ~@9 [a#4,a#5] ~, ~@3 a4 ~@12", H: "[a#4,a#5] [a4,a5] ~ [a4,a5] ~@10 [f4,f5] ~",
  I: "[f4,f5] [e4,e5] ~ [e4,e5] ~@8 [c5,g5,c6]@2 ~@2", J: "~@2 [a#4,a#5] ~@3 [a#4,a#5] ~", K: "[d#4,d#5]",
  L: "[c5,c6] [f#4,f#5]@5 ~@2", M: "c3@6 d3 ~ d#3@2 ~@2 c3 ~@3", N: "f#3", O: "~@6 c5 c4", P: "a#4 ~@3",
})).s("gm_clavinet").gain(0.48).pan(0.7)

// other · clavinet · soft notes · A
const clavinet_soft = note("<~@53 [~@3 [a4,a5] ~ [a4,a5] a#5 a4 ~ a4 ~@3 a4 a#5 ~] ~@45>")
  .s("gm_clavinet").gain(0.32).pan(0.7)

// chords · brass section · "brass"
const brass_section = note(`<
  ~@16 A@2 B C A@2 B D ~@20 A@2 E F A@2 G H ~@5 I J K L ~@28 A@2 B M A@2 B H ~@2
>`.pickRestart({
  A: "[d4,f4,b4] ~@5 [d4,f4,b4] ~@9", B: "[c4,d#4,a4] ~@5 [c4,d#4,a4] ~@9",
  C: "[c4,d#4] ~@2 [c4,a4] ~@4, a4 ~@5 d#4 ~@9", D: "[d4,f4] ~@15, b4 ~@7", E: "[d#4,a4] ~@5 [c4,d#4,a4] ~@9, c4 ~@7",
  F: "[d#4,a4] ~@5 [c4,a4]@2 ~@8, c4@2 ~@4 d#4 ~@9", G: "[c4,d#4,a4] ~@5 [d#4,a4]@2 ~@8, ~@6 c4 ~@9",
  H: "[d4,f4,b4] ~@15", I: "[c3,g3,c4] ~@3 [c3,g3,c4] ~@3", J: "[c3,g3,c4] ~@3 [c3,g3,c4]@2 ~@2",
  K: "[a#2,f3,a#3]@3 ~@5 [a#2,f3,a#3]@2 ~@6", L: "[c3,g3,c4]@5 ~@11", M: "[c4,d#4,a4] ~@5 [d#4,a4] ~@9, ~@3 c4 ~@4",
})).s("gm_brass_section").gain(0.56).pan(0.3)

// chords · marimba
const marimba = note("<~@33 A B C ~@12 D ~@8 E C E F G H@3 G H I J H@6 D ~ G H K H G H I J H@4 G H@3 ~@6>".pickRestart({
  A: "[e5,g5]!3 ~@3 [d5,f#5] ~ [c#5,e5] ~ g4 ~@3 g4 ~", B: "[e5,g5]!4 [d5,f#5] ~ [d5,f#5] ~ [c#5,e5] ~@7",
  C: "[e5,g5]!3 ~@3 [d5,f#5] ~ [c#5,e5] ~@7", D: "[e5,g5] ~ [e5,g5] ~ [d5,f#5] ~ [d5,f#5] ~ [c#5,e5] ~@7",
  E: "[e5,g5]!3 ~@3 [d5,f#5] ~ [c#5,e5] ~ a4 ~@3 a4 ~", F: "[e5,g5]!2 ~@14", G: "[e5,g5] ~ [e5,g5] ~ [d5,f#5] ~@11",
  H: "[e5,g5] ~ [e5,g5] ~ [d5,f#5] ~ [d5,f#5] ~ [c5,e5] ~@7", I: "[e5,g5]!3 ~ [d5,f#5] ~ [d5,f#5] ~ [c5,e5] ~@7",
  J: "[e5,g5] ~@3 [d5,f#5] ~ [d5,f#5] ~ [c5,e5] ~@7", K: "[e5,g5] ~ [e5,g5] ~ [d5,f#5] f5 ~@10",
})).s("gm_marimba").gain(0.48)

// chords · electric guitar jazz · "guitar 2"
const electric_guitar_jazz = note(`<
  ~@8 A@2 B@2 C@4 D@2 E@2 D@2 F ~ G@3 ~@9 B@4 C@2 H@2 D@2 I@2 D@2 F ~@18 J@3 K ~@8 B@4 H@4 D@2 I@2 L@2 M N@3
>`.pickRestart({
  A: "[[c4,a4,c5], g#4 ~@31]/2", B: "[[c4,a4,c5]@31 ~, g#4 ~@31]/2", C: "[[c4,g4,c5], f#4 ~@31]/2",
  D: "[[f4,b4,d5]@31 ~]/2", E: "[d#4,a4,c5]/2", F: "[d#4,a4,c5]@15 ~",
  G: "[[g4,a#4] g4 a#4 g4 [g4,a#4]!2 a#4 g4 [g4,a#4] a#4 [g4,a#4] g4 [g4,a#4] a#4 g4 [g4,a#4] a#4 g4 [g4,a#4] a#4 g4 [g4,a#4] a#4 [g4,a#4] g4 [g4,a#4] a#4 g4 [g4,a#4] a#4 g4 [g4,a#4] a#4 [g4,a#4] g4 a#4 [g4,a#4] g4 a#4 [g4,a#4] g4 a#4 [g4,a#4] g4 a#4 [g4,a#4] ~ [c4,g4,c5], c4@23 ~]/3", // Gm C5
  H: "[[c4,g4,c5]@31 ~, f#4 ~@31]/2", I: "[[d#4,a4,c5]@31 ~]/2", J: "[[c5,g5,c6]@47 ~, f#5 ~@47]/3",
  K: "[c5,g5,c6]@3 ~@13", L: "[f4,b4,d5]/2", M: "~ [d#4,a4]@15, c5@15 ~", N: "[[c4,g4,c5]@43 ~@5]/3",
})).s("gm_electric_guitar_jazz").gain(0.4).pan(0.3)

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

// drums · rim
const rim = s("rim").struct("<~@73 [~@3 x ~@4]!23 ~@3>").gain(0.48)

// drums · snare
const snare = s("sd").struct("<A@23 B A@2 C ~ A@23 B@2 A@19 B A@23 B ~@2>".pickRestart({
  A: "~ x ~ x", B: "x", C: "~@2 x ~@3 x!2",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<A B A B A B ~@2 A B A B A B ~@2 A B A B A B ~@4 C ~@72>".pickRestart({
  A: "~ x", B: "~@2 x!2", C: "~@4 x ~@2 x",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  A@2 B A@5 C D A@6 C D A@4 E F C G H ~ I@2 J I@5 K I@7 K I@5 K L M N O N@3 O N@5 O N@7 M ~@7 P F ~@6 P ~@3 P ~ M ~ M ~
  P
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@2 x!2 ~@3 x ~@3 x!2", C: "~@2 x ~@3 x ~@3 x ~@3 x!2", D: "x!2 ~ x ~ x ~ x",
  E: "x ~ x ~@3 x ~@3 x ~@3 x!2", F: "x", G: "x!3 ~ x ~ x ~@3 x ~@3 x ~", H: "x!3 ~ x ~ x ~@3 x ~@3 x!2", I: "x!8",
  J: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x!2", K: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", L: "x!5 ~@3", M: "x ~@13 x!2",
  N: "x ~ x ~@2 x!2 ~ x ~ x ~@2 x!2 ~", O: "x ~ x ~@2 x!2 ~ x ~ x ~@2 x!3", P: "~@14 x!2",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~@7 A ~@12 B@7 C D E D E D E D E B@6 D F@2 G H G H G H G H G H G H G H G H G H G ~@10 I ~ I ~ I ~ I ~ I ~ I ~ I
  ~@4
>`.pickRestart({
  A: "~@8 x ~@2 x!2 ~ x ~", B: "~@3 x", C: "~@8 x ~@2 x!2 ~@3", D: "x ~@2 x!2 ~@3", E: "x ~@7 x ~@2 x!2 ~@3", F: "x",
  G: "~ x ~ x ~ x ~ x", H: "~@2 x ~@3 x ~ x ~@2 x!2 ~ x ~", I: "~@10 x!3 ~@3",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@53 [~ x ~ x]!19 ~@27>").gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@73 [~@6 x!2]!23 ~@3>").gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@73 [~@5 x ~@2]!23 ~@3>").gain(0.56)

// drums · ride
const ride = s("rd").struct("<~@73 [x!4]!23 x ~@2>").gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct("<~@73 [~ x ~ x ~ x ~ x]!23 ~@3>").gain(0.4)

// drums · cowbell
const cowbell = s("cb").struct("<~@57 [~ x ~ x ~ x ~ x]!15 ~ [x ~ x!3 ~ x!2]!23 x ~@2>").gain(0.4)

// drums · congas
const congas = s("conga:18").struct("<~@73 [~@5 x ~@2]!23 ~@3>").gain(2.05)

// drums · congas
const congas_2 = s("conga:33").struct("<~@73 [~@6 x!2]!23 ~@3>").gain(2.05)

// … 20 more lines

More by Tom Jones