Strudelify

Every Little Kiss

Bruce Hornsby

KeyB♭ majorTempo94 bpm
0:00/0:00
// Every Little Kiss — Bruce Hornsby
// 93.6 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(93.6/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 · synth strings 1
const synth_strings_1 = note("<~@5 A@6 ~@80>".pickRestart({
  A: "[~@7 [bb3,d4,f4,g4]@4 [f3,bb3,eb4]@4 [c4,eb4,f4]@4 [bb3,d4,f4]@4 [bb3,c4,eb4,g4]@4 [bb3,d4,f4]@21]/6", // Gm7 Ebsus2 F7 Bb Cm7 Bb
})).s("gm_synth_strings_1").gain(0.09)

// bass · synth bass 2
const bass = note(`<
  ~@10 A B@2 C D E F G H@2 I J H@2 I K L M N@2 O@2 P Q R S R S R T U V U V U H W X Y H W X Z L AA N AB AC Z K AD AE AD
  AE AD AE L F G F@2 O@2 L K AD AE AD AE AD AE L F G F G AF AG AF AH@2
>`.pickRestart({
  A: "eb2@3 eb2 eb2@3 eb2 eb2@3 eb2 eb2@3 eb2",
  B: "[f2@3 f2 g2@3 g2 f2@3 f2 d3 c3 bb2 eb2@4 eb2 eb2@3 eb2 eb2@3 eb2 eb2@3 eb2]/2",
  C: "f2@3 f2 g2@3 g2 g2@3 g2 f2@3 f2", D: "bb2!2 f2!2", E: "bb2@4 bb2@2 d3 f3 eb2@4 eb2@4", F: "bb2!2 g2!2",
  G: "bb2!2 eb2!2", H: "bb2!4", I: "eb3 d3 c3 eb2", J: "f2!3 eb2", K: "f2!4", L: "eb2!4", M: "eb2!3 f2", N: "g2!4",
  O: "eb2 f2!3", P: "eb2!2 f2!2", Q: "f2!2 g2 f2", R: "eb2 d2 c2!2", S: "c2!2 g2 f2", T: "c2!2 eb2!2", U: "eb2!2 bb2!2",
  V: "g2!2 bb2!2", W: "bb2!2 eb3 d3", X: "c3 eb2 f2!2", Y: "f2 eb2 bb2!2", Z: "f2!2 eb2!2", AA: "eb2 f2 g2!2",
  AB: "g2!2 eb2 f2", AC: "f2!2 eb2 f2", AD: "g2 f2 eb2 d2", AE: "c2!4", AF: "bb2 ~ bb2 ~ bb2 ~ bb2 ~",
  AG: "g2 ~ g2 ~ eb2 ~ eb2 ~", AH: "[g2@2 ~@2 g2@2 ~@2 eb2@2 ~@2 eb2@2 ~ bb2@3 ~@14]/2",
})).s("gm_synth_bass_2").gain(0.35)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@14 A B@2 C ~@8 D ~@13 E F E G H ~@7 E I ~@13 J ~ A K ~@11 J ~ A L ~ M ~@3
>`.pickRestart({
  A: "~@2 d4@4 c4 bb3 c4 bb3 g3 bb3@3 g3 f3",
  B: "[~ f3 g3 bb3 c4 d4 c4 bb3 eb4 d4 c4 bb3@2 bb3@2 bb3@3 d4@4 c4 bb3 c4 bb3 g3 bb3@3 g3 f3]/2",
  C: "~ f3 g3 bb3 c4 d4 c4 bb3 eb4 d4 c4 bb3@2 bb3@3", D: "~@2 d4@4 c4 bb3 c4 bb3 g3 bb3@5", E: "~@10 d4@4 c4 bb3",
  F: "c4 bb3 g3 bb3@3 ~@10", G: "c4 bb3 g3 bb3@3 g3 f3 ~ f3 g3 bb3 c4 d4 c4 bb3", H: "eb4 d4 c4 bb3@5 ~@8",
  I: "c4 bb3 g3 bb3@5 ~@8", J: "~@2 d4@4 c4 bb3 c4 bb3 g3 bb3@3 ~@2", K: "~ f3 g3 bb3 c4 d4 c4 bb3 ~@8",
  L: "~ f3 g3 bb3 c4 d4 c4 bb3 eb4 d4 c4 bb3@5", M: "~@3 e2",
})).s("gm_overdriven_guitar").gain(0.36)

// chords · piano
const piano = note(`<
  A@3 B@8 C@4 D@2 E F@2 G H I@2 J K L@2 M N O@2 P@2 Q@4 R@3 S T U V@3 W@4 X@4 Y Z@3 AA AB AC AB AC AB AD AE AF AG AH AI
  O@2 AJ AA AB AC AB AC AB AD AE AF AG AH AK AL@5
>`.pickRestart({
  A: "[~@5 [bb4,f5,d6] ~ [bb4,f5,d6] ~ d5@4 eb5@6 [c4,eb5,c6]@2 [c4,eb5,c6]@2 a5 d6 c6 ~@5 g5@8 [bb4,c6]@2 ~ [c5,bb5]@2 [ab4,g5]@2 ~ [g4,f5], ~@9 [g4,bb5]@10 ~@4 [f4,a4,c5]@3 bb5@13 ~@9, ~@9 [ab3,eb4,eb5]@4 ~@3]/3", // Bb Cm Bbsus2 C7 Abmaj7 G7 Gm F …
  B: "[~ [f4,eb5]@2 [f4,bb4,d5]@3 [f4,bb4,d5]@3 bb4@2 [f3,d4,f4,bb4]@8 [g4,c5]@3 [f4,c5]@3 [c4,f4,a4] d5 ~ c5 bb4 ~ bb4@3 g4@4 ~@2 g4@2 f4@2 eb4@2 d4@2 eb4@2 d4@2 c4@2 ~@2 f4@2 g4@2 bb4@2 [g4,c5]@2 [f4,bb4]@2 [d5,f5]@2 f5 bb4 f5 bb4 g4@2 [bb4,f5]@2 [g4,c5]@2 c5 d4 [f4,c5]@2 d4@2 d4 bb3 d4 bb3 g3 [bb3,f4] [c4,f4] [d4,f4] [bb3,f4]@16 f3 g3 bb3 ~@2 [f3,c4,f4]@11 f3 g3 bb3 [f3,c4,f4], ~@3 g3@8 ~@8 eb3@6 bb3@6 bb3@15 eb3@8 [d3,f3,bb3]@8 eb2@8 d2@8 c2@8 eb2@26 eb3@16, ~@31 eb4@7 ~@8 [f3,bb3]@4 [f3,bb3]@4 ~@14 c5@2 c5@4 ~@4 f4@2 ~@4 c4@2 c4@3 ~@19 f4@3 [f3,c4,f4]@2 ~@11 f4@3 ~]/8", // F7 Bb C5 F5 F C5 Bb5 Dm …
  C: "[~ bb3 [f3,g3,bb3,f4]@10 [f3,d4] c4 bb3 [c4,f4]@2 [bb3,f4]@11 f3 g3 bb3 f3 ~ bb3 ~@6 [f3,bb3,f4]@4 eb4 d4 c4 f3@3 [f3,bb3]@6 [f3,g3]@8, f3@2 ~@10 f4@3 f3@13 f4@3 [c4,f4]@2 ~@3 g3@8 ~@3 bb3 ~@16, ~@13 g3@2 eb3@17 f3@2 [f3,c4,f4]@6 ~@4 [f3,bb3]@3 ~@17]/4", // Gm7 Dm F5 Bb5 Fsus2 F5 Bb5
  D: "[bb3@8 [eb3,f3]@5 [eb3,g3]@2 ~ bb3@2 bb3@6 [f3,g3]@8, ~@15 [d3,f3]@3 f3@4 ~@10]/2", // Ebsus2 Eb Fsus2 Dm
  E: "bb3@8 [eb3,f3]@5 [eb3,g3]@3", F: "[~ [f4,bb4] ~ [c4,g4] [c4,g4] [f4,bb4] ~@2, bb3@3 bb3@2 bb3@3]/2",
  G: "[eb3,bb4,eb5] [bb3,bb4,d5] [c3,g4,bb4] [bb3,f4,bb4]", // Eb5 Bb C7 Bb5
  H: "[f4,a4]@3 f4 bb4 [f4,a4]@2 [f4,g4]@2 f4@2 ~@2 [eb4,bb4]@2 [eb4,g4], f3@11 eb4@2 ~@3, ~@3 eb3", // F Fsus2 Eb5 Eb
  I: "[[d4,bb4] ~ [f4,bb4]@2 [bb4,d5]@2 [c4,g4]@2 [c4,g4]@2 [f4,bb4] ~ [f4,bb4]@2 ~@2, bb3@3 bb3@2 bb3@3]/2", // Gm Bb5 Bb C5 Bb5
  J: "[eb3,bb4,eb5]@2 [bb4,d5] ~ [g4,bb4] ~ [bb3,f4,bb4]@2, ~ bb3 c3 ~", // Eb5 Bb Gm Bb5
  K: "[f4,a4]@2 f4 [f4,bb4]@2 [f4,a4]@2 [f4,g4] [f4,a4]@4 ~@4, f3", // F Bb5 F Fsus2 F
  L: "[f4@4 ~@11 [bb4,d5]@2 [bb4,d5]@2 [bb4,d5] [a4,c5]@2 [a4,c5]@2 g4@3 f4@3 ~@2, eb3]/2", // Bb Am
  M: "[g3,f4,bb4] [f3,f4,a4] [g3,d4,f4] [f3,c4,f4]", // Gm7 F G7 F5
  N: "[bb3,d4] [bb3,d4]@2 [bb3,d4] [a3,c4]@2 [a3,c4]@2 [g3,f4,bb4]@4 [f3,a4,c5]@4, g3 f3 ~@2", // Bb Am Gm7 F
  O: "[[eb3,g4,bb4] [bb3,f4,bb4] [a4,c5]@2 ~@4 eb3 [bb3,bb4,d5] [a4,c5]@2 ~@2 [a4,c5]@2, ~@4 f3@11 [bb4,eb5]@3 ~@2 f3@12]/2", // Eb Bb5 Am Bb Am Eb5
  P: "[[eb3,g4,bb4]@2 [bb3,f4,bb4]@2 [f4,bb4]@2 [f4,a4]@2 [f4,g4]@2 [f4,a4] ~ [eb3,bb4,eb5]@2 [bb3,bb4,d5]@2, ~ f3@2 ~]/2", // Eb Bb5 F Fsus2 F Eb5 Bb
  Q: "[[bb3,f4,bb4]@2 [bb3,f4,bb4]@2 [eb4,g4]@3 ~@5 [eb3,bb4,eb5]@2 [bb3,bb4,d5]@2, ~ c3@2 ~]/2", // Bb5 Eb Eb5 Bb
  R: "[[bb3,f4,bb4]@4 [bb3,f4,bb4]@4 [eb4,g4]@6 ~@4 [bb4,eb5]@5 ~ [eb4,f4]@4 [eb4,f4]@4 ~@8 [f4,bb4]@4 [f4,bb4]@4, ~ c3@2 eb3@2 bb3]/3", // Bb5 Eb Eb5 Ebsus2 Bb5
  S: "g4 [g4,bb4] [bb4,d5]!2, g3 bb3, bb4 ~@15", T: "[f4,bb4]!2 [d4,f4]!2, eb3 bb3", U: "[g4,bb4]!2 [f4,bb4]!2, g3 bb3",
  V: "[[eb4,bb4]!2 ~ [f4,bb4] ~ [c4,g4]!2 [f4,bb4] ~@2 [eb3,bb4,eb5] [bb3,bb4,d5], eb3@2 bb3@3 bb3@2 bb3@3 ~@2]/3", // Eb5 Bb5 C5 Bb5 Eb5 Bb
  W: "[[c3,g4,bb4]@4 [bb3,f4,bb4]@4 [f4,a4]@3 f4 bb4 [f4,a4]@2 [f4,g4]@2 f4@2 ~@2 [eb4,bb4]@2 [eb4,g4] [d4,bb4]@2 ~@2 [f4,bb4]@4 [bb4,d5]@4 [c4,g4]@4 [c4,g4]@4 [f4,bb4]@2 ~@2 [f4,bb4]@4 ~@4 [eb3,bb4,eb5]@4 [bb4,d5]@2 ~@2, ~@8 f3@11 eb4@2 ~@3 bb3@12 bb3@8 bb3@12 ~@4 bb3@4, ~@5 eb3 ~@10]/4", // C7 Bb5 F Fsus2 Eb5 Eb Gm Bb5 …
  X: "[[g4,bb4]@2 ~@2 [bb3,f4,bb4]@4 [f4,a4]@2 f4 [f4,bb4]@2 [f4,a4]@2 [f4,g4] [f4,a4]@4 ~@4 f4@4 ~@11 [bb4,d5]@2 [bb4,d5]@2 [bb4,d5] [a4,c5]@2 [a4,c5]@2 g4@3 f4@3 ~@2 [g3,f4,bb4]@4 [f3,f4,a4]@4, c3 ~ f3@4 eb3@8 ~@2]/4", // Gm Bb5 F Bb5 F Fsus2 F Bb …
  Y: "[g3,d4,f4]@4 [f3,c4,f4]@4 [bb3,d4] [bb3,d4]@2 [bb3,d4] [a3,c4]@2 [a3,c4]@2, ~@2 g3 f3", // G7 F5 Bb Am
  Z: "[[g3,f4,bb4]@2 [f3,a4,c5]@2 [eb3,g4,bb4] [bb3,f4,bb4] [a4,c5]@2 ~@4 eb3 [bb3,bb4,d5] [a4,c5]@2 ~@2 [a4,c5]@2 [eb3,g4,bb4]@2 [bb3,f4,bb4]@2, ~@12 f3@11 [bb4,eb5]@3 ~@2 f3@12 ~@8]/3", // Gm7 F Eb Bb5 Am Bb Am Eb …
  AA: "[f4,bb4]@2 [f4,a4]@2 [f4,g4]@2 [f4,a4] ~, f3", AB: "[eb3,bb4,eb5] [bb3,bb4,d5] [bb3,f4,bb4]!2",
  AC: "[eb4,g4]@3 ~@5, c3", AD: "[eb4,g4]@6 ~@4 [bb4,eb5]@5 ~, c3", AE: "[eb4,f4]!2 ~@2, eb3",
  AF: "[f4,bb4]!2 g4 [g4,bb4], bb3 g3, ~@8 bb4 ~@7", AG: "[bb4,d5]!2 [f4,bb4]!2, bb3 eb3",
  AH: "[d4,f4]!2 [g4,bb4]!2, bb3 g3", AI: "[f4,bb4]!2 [g3,f4,bb4] [f3,a4,c5], bb3 ~", AJ: "[eb3,g4,bb4] [bb3,f4]",
  AK: "[f4,bb4]!2 [eb4,bb4]!2, bb3 eb3", // Bb5 Eb5
  AL: "[[f3,bb3,d4]@2 [g3,bb3,eb4]@2 [f3,bb3,d4]@2 [g3,bb3,eb4]@2 [f3,bb3,d4]@2 g3!2 [f3,bb3,d4] [g3,bb3,eb4]@2 ~@2 f3 [bb3,eb4]@2 [f3,bb3,d4]@2 [g3,bb3,eb4]@2 [f3,bb3,d4]@2 g3!2 [f3,bb3,d4] [g3,bb3,eb4]@2 bb3 bb3@2 [g3,bb3,eb4]@2 [f3,bb3,d4]@2 [g3,bb3,eb4]@2 [f3,bb3,d4]@2 g3!2 [f3,bb3,d4] [g3,bb3,eb4]@2 ~@2 f3 [bb3,eb4]@2 [f3,bb3,d4]@2 [g3,bb3,eb4]@2 [f3,bb3,d4]@2 g3!2 [f3,bb3,d4] [g3,bb3,eb4]@2 [bb3,d4,f4]@3 ~@14, ~@10 [bb3,eb4]@2 ~@3 [f3,bb3,d4]@3 ~@6 eb3@8 ~@15 [f3,bb3,d4]@3 ~@6 eb3@7 ~@17, ~@16 g3@2 g3@4 ~@4 [bb3,eb4]@2 ~@3 [f3,d4]@3 ~@8 [bb3,eb4]@2 ~@4 g3@2 g3@4 ~@4 [bb3,eb4]@2 ~@20]/5", // Bb Eb Bb Eb Bb Eb Eb5 Bb …
})).s("gm_piano").gain(0.35)

// drums · kick
const kick = s("bd").struct("<~@9 [x!4]!81 ~>").gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@9 [~ x ~ x ~ x ~ x]!81 ~>").gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@9 [~ x ~ x ~ x ~ x]!81 ~>").gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<~@9 [x!16]!80 [x!15 ~] ~>").gain(0.25)

// drums · splash
const splash = s("cr").struct("<~@89 [~@15 x] ~>").gain(0.4)

stack(synth_strings_1, bass, overdriven_guitar, piano, kick, rim, snare, hihat, splash)

More by Bruce Hornsby