Strudelify

When I Kiss You

Sparks

KeyF minorTempo138 bpm
0:00/0:00
// When I Kiss You — Sparks
// 138 bpm, 4/4, key F minor. 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 91 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/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 · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  A@2 B A@26 C@2 A@2 D@3 A C@2 A@2 D@3 A@10 E ~@5 A C@2 A@2 D@3 A C@2 A@2 D@3 A@3 C@2 A@2 D@3 A C@2 A F
>`.pickRestart({
  A: "f1!5 ~ f1 ~ f1!3 ~ f1 ~ f1 ~", B: "f1!3 ~ f1 ~ f1 ~ f1!3 ~ f1 ~ f1 ~", C: "bb1!5 ~ bb1 ~ bb1!3 ~ bb1 ~ bb1 ~",
  D: "c1!5 ~ c1 ~ c1!3 ~ c1 ~ c1 ~", E: "f1!5 ~ f1 ~@9", F: "f1!5 ~ f1 ~ f1!2 ~@6",
})).s("gm_synth_bass_1").gain(0.51)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@8 A B C D A B C D A B C D A B C D E@2 F@2 G H I J K L M N G H I J K L M N A B C D ~@8 E@2 F@2 G H I J K L M N G H I
  J K L M N G@3 H I J K L M N G H I J O
>`.pickRestart({
  A: "[f3,ab3,c4,eb4]@7 ~ [f3,ab3,c4,eb4]@7 ~", // Fm7
  B: "[f3,ab3,c4,eb4]@6 ~@2 [c4,eb4]@3 ~ [f3,ab3,c4,eb4]@4, ~@6 [f3,ab3]@5 ~@5", // Fm7 Cm Fm7 Fm
  C: "[eb3,gb3,bb3,db4]@7 ~ [eb3,gb3,bb3,db4]@8", // Ebm7
  D: "[eb3,gb3,bb3,db4]@6 ~@2 [bb3,db4]@3 ~ [eb3,gb3,bb3,db4]@4, ~@6 [eb3,gb3]@5 ~@5", // Ebm7 Bbm Ebm7 Ebm
  E: "[~@13 [eb4,g4,bb4]@3, [f4,ab4,c5]@31 ~]/2", F: "[[f4,ab4,c5]@31 ~]/2",
  G: "[c4,f4,ab4]@2 ~ [c4,f4,ab4] ~@2 [c4,f4,ab4]@2 ~ [c4,f4,ab4] ~@2 [c4,f4,ab4] ~@3", // Fm
  H: "[db4,f4,bb4]@2 ~ [db4,f4,bb4]@2 ~ [db4,f4,bb4]@2 ~ [db4,f4,bb4] ~@2 [f4,bb4] ~@3, ~@6 db4 ~", // Bbm Bb5
  I: "[db4,f4,bb4]@2 ~ [db4,f4,bb4] ~@2 [db4,f4,bb4]@2 ~ [db4,f4,bb4] ~@2 [db4,f4]@2 ~@2, ~@12 bb4 ~@3", // Bbm Db
  J: "[db4,f4,bb4]@2 ~ [db4,f4,bb4] ~@2 [c4,f4,ab4]@2 ~ [c4,f4,ab4]@3 ~@4", // Bbm Fm
  K: "[c4,f4,ab4]@2 ~ [c4,f4,ab4]@2 ~ [c4,f4,ab4]@2 ~ [f4,ab4] ~@2 [c4,f4,ab4] ~@3, ~@9 c4@2 ~@5", // Fm
  L: "[eb4,g4]@2 ~ [c4,eb4,g4] ~@2 [c4,eb4,g4]@2 ~ [c4,eb4,g4] ~@2 [c4,eb4,g4]@2 ~@2, c4 ~@15", // Eb Cm
  M: "[c4,eb4]@2 ~ [c4,eb4,g4] ~@2 [c4,eb4,g4]@2 ~ [c4,eb4,g4] ~@2 [c4,eb4]@2 ~@2, g4 ~@11 g4 ~@3", // Cm
  N: "[eb4,g4] ~@2 [eb4,g4] ~@2 [c4,eb4,g4]@2 ~ [c4,eb4,g4]@3 ~@4, c4@2 ~ c4@2 ~@11", // Eb Cm
  O: "[c4,f4,ab4]@2 ~ [c4,f4,ab4]@2 ~ [c4,f4,ab4]@2 ~ [f4,ab4] ~@6, ~@9 c4@2 ~@5", // Fm
})).s("gm_piano").gain(0.22).pan(0.4)

// other · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@27 A B C D E F G H I B C D E F G H J ~@15 K B C D E F G H I B C D E F G H J ~@9 K B C D E L
>`.pickRestart({
  A: "~@12 f4@2 g4 ~", B: "ab4@5 ~ ab4@5 ~ ab4@2 ab4@2", C: "bb4@5 ~ bb4@5 ~ bb4@2 bb4@2", D: "bb4!4",
  E: "bb4@3 ab4@3 f4 g4", F: "ab4@3 ab4@3 ab4!2", G: "g4@3 g4@3 g4!2", H: "g4!3 eb4", I: "eb4@5 ~ f4 g4",
  J: "eb4@5 ~@3", K: "~@6 f4 g4", L: "ab4@3 ab4@3 ~@2",
})).s("gm_epiano2").gain(0.49)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A B C D A B C D ~@19 E F G@4 H@2 I J K@4 H@2 I A B C D ~@11 E F G@4 H@2 I J K@4 H@2 I ~ L F M@3 F N@3 J O@4
>`.pickRestart({
  A: "[f5,f6] ~ [c5,c6] ~ [bb4,bb5] ~ [c5,c6] ~ [f5,f6] ~ [bb4,bb5] ~ [ab4,ab5] ~ [bb4,bb5] ~", // F C Bb C F Bb Ab Bb
  B: "[f5,f6] ~ [ab4,ab5] ~ [g4,g5] ~ [ab4,ab5] ~ [f5,f6] ~ [bb4,bb5] ~ [ab4,ab5] ~ [bb4,bb5] ~", // F Ab G Ab F Bb Ab Bb
  C: "[f5,f6] ~ [c5,c6] ~ [bb4,bb5] ~ [c5,c6] ~ [eb5,eb6]@4 [c5,c6] ~ [bb4,bb5] ~", // F C Bb C Eb C Bb
  D: "[f5,f6] ~ [c5,c6] ~ [bb4,bb5] ~ [c5,c6] ~ [eb5,eb6]@4 [c5,c6] ~@3", // F C Bb C Eb C
  E: "[f3,f4] [bb3,bb4] [c4,c5] [f4,f5] [bb4,bb5] [c5,c6] [f5,f6] [g5,g6]", F: "[f2,ab5,ab6]",
  G: "[bb2@16 bb2@16 ~@16 f2@15 ~, [bb5,bb6]@19 [ab5,ab6]@13, ~@32 f2@15 ~@17]/4", H: "[c3@15 ~ c3@15 ~, [g5,g6]]/2",
  I: "[c3,eb5,eb6]", J: "[f2,c5,c6]", K: "[bb2@15 ~ bb2@16 ~@16 f2@16, [db5,db6]@19 [c5,c6]@13, ~@32 f2@15 ~@17]/4",
  L: "~@6 [f5,f6] [g5,g6]", M: "[bb2@8 bb2@8 ~@3 [ab5,ab6]@3 [f5,f6] [g5,g6], [bb5,bb6]@19 ~@5, ~@32 f2@15 ~]/3",
  N: "[c3@15 ~@17 c3@16, [g5,g6]@7 [eb5,eb6]@5, ~@16 c3@15 ~@17]/3", // G Eb
  O: "[bb2@15 ~ bb2@16 ~@6 [c5,c6]@23 ~@3, [db5,db6]@19 ~@13, ~@32 f2@15 ~@17]/4", // C Db
})).s("gm_string_ensemble_1").gain(0.26).pan(0.4)

// bass · lead 2 sawtooth · "SAW WAVE"
const bass_2 = note(`<
  A@24 ~@4 A B@2 A@2 C@3 A B@2 A@2 C@3 A@10 D ~@5 A B@2 A@2 C@3 A B@2 A@2 C@3 A@3 B@2 A@2 C@3 A B@2 A D
>`.pickRestart({
  A: "f2!5 ~ f2 ~@2 f2!2 ~ f2 ~ f2 ~", B: "bb2!5 ~ bb2 ~@2 bb2!2 ~ bb2 ~ bb2 ~", C: "g2!5 ~ g2 ~@2 g2!2 ~ g2 ~ g2 ~",
  D: "f2!5 ~ f2 ~@9",
})).s("gm_lead_2_sawtooth").gain(0.14)

// bass · electric bass finger · "FINGERDBAS"
const bass_3 = note("<A@8 ~@16 A@4 ~@16 A@10 B ~@4 A ~@16 A@2 ~@13>".pickRestart({
  A: "f2!2 f3!2 f2!2 f3!2 f2!2 f3!2 f2!2 f3!2", B: "f2!2 f3!2 f2!2 f3!2 ~@8",
})).s("gm_electric_bass_finger").gain(0.22).pan(0.6)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<A@8 ~@8 B C D E B C D E ~@20 A@4 ~@28 F@2 ~@13>".pickRestart({
  A: "[f4 c4 bb3 c4 f4 bb3 ab3 bb3 f4 ab3 g3 ab3 f4 bb3 ab3 bb3 f4 c4 bb3 c4 eb4@2 c4 bb3 f4 c4 bb3 c4 eb4@2 c4 ~, f3@31 ~]/4",
  B: "f4 c4 bb3 c4 eb4 bb3 ab3 bb3", C: "c4 ab3 g3 ab3 eb4 bb3 ab3 bb3", D: "f4 c4 bb3 c4 eb4@2 c4 bb3",
  E: "f4 c4 bb3 c4 eb4@2 c4 ~", F: "[c4,f4,ab4] ~@2 [c4,f4,ab4] ~@2 [c4,f4,ab4] ~@2 [c4,f4,ab4] ~@2 [c4,f4,ab4] ~@3",
})).s("gm_synth_strings_1").gain(0.22).pan(0.4)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~@6 [~@3 f3!10 ~@3] [~@2 f3!12 ~@2] ~@42 [~@3 f3!10 ~@3] [~@2 f3!12 ~@2] ~@39>")
  .s("gm_electric_guitar_clean").gain(0.22).pan(0.6)

// other · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@6
  [f3!3 ~@10 f3!3]
  [f3!2 ~@12 f3!2]
  ~@42
  [f3!3 ~@10 f3!3]
  [f3!2 ~@12 f3!2]
  ~@39
>`).s("gm_electric_guitar_clean").gain(0.09).pan(0.6)

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

// drums · snare
const snare = s("sd").struct("<~@4 A B C D ~@19 E ~@16 A F C G ~@7 H I J@3 ~@17 J ~@13>".pickRestart({
  A: "~@2 x ~@3 x ~@3 x!2 ~ x!2 ~", B: "~@2 x ~@3 x ~@3 x ~ x ~ x!2", C: "~@2 x ~@3 x ~@3 x ~@2 x!3",
  D: "~@2 x ~@3 x ~@2 x!3 ~@2 x!2", E: "~ x!15", F: "~@2 x ~@3 x ~@2 x!3 ~ x!3", G: "~@2 x!2 ~@2 x!2 ~ x!3 ~ x!3",
  H: "~@12 x!4", I: "~@8 x!8", J: "x!16",
})).gain(0.29)

// drums · clap
const clap = s("cp").struct("<~@28 [~ x ~ x]!16 ~@16 [~ x ~ x]!16 ~@2 [~ x ~ x]!12 [~ x ~@2]>").gain(0.35)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@27
  x
  ~@20
  [x ~@2 x!2 ~ x ~ x ~@2 x!2 ~ x ~]!6
  [x ~@2 x!2 ~ x ~ x ~@7]
  [x ~@2 x!2 ~ x ~ x ~@2 x!2 ~ x ~]
  ~@35
>`).gain(0.29)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@2 A@2 B@2 A@2 B@3 A B@3 A B@3 A B@3 A@3 C D@16 A B@2 A@2 B@3 A B E ~@5 D@16 F@2 D@12 G
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x", D: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", E: "x!3 ~",
  F: "x ~@3 x!2 ~@2 x ~@3 x!2 ~@2", G: "x!2 ~@2 x!2 ~@2 x!2 ~@6",
})).gain(0.53)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B@2 C A B@2 A@2 B@3 A B@3 A B@3 A B@3 A@3 ~ A@17 B@2 A@2 B@3 A B D ~@5 A@30 C
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@3 x ~@2 x ~ x", C: "~ x ~ x ~ x ~@2", D: "~ x ~ x ~@4",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@3 A ~@7 A ~@11 A ~@7 A ~@7 A ~ A B A ~@7 A ~ A ~ A ~@7 A ~@9 A ~@7 A ~@4
>`.pickRestart({
  A: "x", B: "x ~ x!2",
})).gain(0.29)

// drums · tambourine
const tambourine = s("tb").struct("<~@28 [x!16]!16 ~@16 [x!16]!16 ~@2 [x!16]!12 [x!11 ~@5]>").gain(0.29)

stack(
  bass, piano, epiano2, string_ensemble_1, bass_2, bass_3, synth_strings_1, electric_guitar_clean,
  electric_guitar_clean_2, kick, snare, clap, low_tom, hihat, open_hat, crash, tambourine
)

More by Sparks