Strudelify

It Started With a Kiss

Hot Chocolate

KeyG majorTempo114 bpm
0:00/0:00
// It Started With a Kiss — Hot Chocolate
// 114 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 3 slap bass 1 (copy of ch 2 electric bass finger)
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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 · piano
const piano = note(`<
  A ~@26 B C D E F C D G ~@24 F C D E F C D G H I J K L M N@2 ~@17 H I J K H I J O P Q R S T U V W X Q Y Z AA ~
>`.pickRestart({
  A: "[d4,f#4,a4,d5]", B: "[g2,g3]@3 [d4,g4,b4,d5]@4 ~@3 [e4,g4,c5] ~ [d4,g4,b4,d5]@3 ~",
  C: "[d2,d3]@3 [d4,f#4,a4,d5]@5 ~@2 [e4,g4,c5] ~ [d4,f#4,a4,d5]@4", // D C D
  D: "[c4,e4,a4,c5]@8 [c4,e4,a4]@2 ~ [c4,e4,b4]@2 ~ g4@2, ~@13 [a3,c4]@2 ~", E: "[g3,c4,e4]@2 [c4,e4,g4]@3 ~@3",
  F: "[g2,g3]@3 [g4,b4,d5]@3 ~@4 [e4,g4,c5] ~ [d4,g4,b4,d5]@3 ~, ~@3 d4@5 ~@8", G: "[c4,e4]@11 ~@5, g3 ~@3",
  H: "[g4,b4,e5] ~@2 [f#4,b4,d5] [g4,b4,e5] ~ [e4,g4,b4]@2", I: "[g4,b4,e5]@2 ~@4 [f#4,b4,d5]@2 [g4,b4,e5]@7 ~",
  J: "[f#4,a4,d5] ~@2 [f#4,a4,c5] [f#4,a4,d5] ~ [d4,f#4,a4]@2", K: "[f#4,a4,d5]@2 ~@4 [f#4,a4,c5]@2 [f#4,a4,d5]@7 ~",
  L: "~@8 [b4,b5]@2 ~ [a4,a5]@2 [g4,g5]@2 ~", M: "[e4,g4,c5,e5]@8 [b4,b5]@2 ~ [a4,a5]@2 [g4,g5]@2 ~",
  N: "[~@7 a5@3 ~@6, [d5,d6]@3 [d5,d6]@3 [d5,d6]@3 ~@7, ~ a5@3 a5@3 ~@9]/2", O: "[f#4,a4,d5]@3 ~",
  P: "[g4,b4,d5]@11 ~ [g4,c5,e5]@2 ~@2", Q: "[f#4,a4,d5]@7 ~", R: "[e4,a4,c5]@7 ~",
  S: "[e4,g4,c5]@7 ~ [e4,a4,c5]@6 ~@2", T: "[g4,b4,d5]@9 ~@2 [g4,b4,d5] ~ [g4,b4,e5] ~@2",
  U: "[f#4,a4,d5]@11 ~ [f#4,a4,d5]@3 ~", V: "[e4,a4,c5]@9 ~ [e4,a4]@2 ~ [e4,a4,c5] ~@2, g4 ~@9 d5 ~@5",
  W: "[e4,g4,c5]@11 ~ [e4,a4,c5]@2 ~@2", X: "[g4,d5]@9 ~@2 [g4,b4,d5] ~ [g4,b4,e5] ~@2, b4@3 ~@5",
  Y: "[e4,a4,c5]@9 ~ [e4,a4]@2 ~ [e4,c5]@2 ~, ~@10 d5 ~@2 a4 ~@2", // Am A5 C
  Z: "[e4,g4,c5]@4 [e4,a4,c5] ~ [g4,e5] ~, ~@12 c5 ~@3", AA: "[d4,g4,b4,d5]",
})).s("gm_piano").gain(0.4).pan(0.2)

// bass · electric bass finger
const bass = note(`<
  ~@3 A B C D A B E F G H I J G E K L M N O P Q R Q S T U V W X Y V Z AA AB AC D AA AD AE D G AF AG AH AI AJ AK AL M AM
  O P Q R Q S T U V W AN U V AO AP@2 AQ AR AS AT AU AV AA AW AC D AA AX AE AY AZ BA BB BC BD BE BF BG BH BI@2 BJ@2 BI@2
  BJ BK BL BM V BN BO BP V BN BO BP V BQ BR@2
>`.pickRestart({
  A: "g1@4 ~@2 g1 ~ g1@5 ~ g1 ~", B: "g1@4 ~@2 g1 ~ b1@2 d2@2 e2@2 d2@2", C: "c2@5 ~ c2 ~ c2@5 ~ c2 ~",
  D: "d2@4 ~@2 d2 ~ d2@2 e2@2 g2@2 a2@2", E: "c2@4 ~@2 c2 ~ c2@7 ~", F: "d2@4 ~@2 d2 ~ d2@2 e2@2 d2@2 b1@2",
  G: "c2@5 ~ c2 ~ c2@5 ~ g1 ~", H: "c2@5 ~ c2 ~ c2@7 ~", I: "b1@5 ~ b1 ~ b1@3 ~ e2@2 b1@2",
  J: "e1@5 ~ e1 ~ e1@2 g1@2 a1@2 b1@2", K: "b1@5 ~ b1 ~ b1@5 ~ f#1 ~", L: "e1@4 ~@2 e1 ~ e1@4 e2@2 c2@2",
  M: "d2@5 ~ d2 ~ d2@2 e3 ~@3 d2@2", N: "e2@4 ~@2 e2 ~ d3@2 e3 ~ b2@2 c3 ~", O: "d2@4 ~@2 d2 ~ d2@2 e3 ~@3 d2 ~",
  P: "d2@4 ~@2 d2 ~ d2@2 e2@2 b1@2 c2@2", Q: "d2@5 ~ d2 ~ d2@2 e3 ~@3 d2 ~", R: "d2@4 ~@2 d2 ~ d2@2 a2@2 b2@2 a2@2",
  S: "d2@4 ~@2 d2 ~ d2@2 e2@2 d2@2 e2@2", T: "g1@5 ~ g1 ~ b1@2 d2@2 e2@2 d2@2", U: "d2@5 ~ d2 ~ d2@2 e2@2 b2@2 a2@2",
  V: "a1@4 ~@2 a1 ~ a1@5 ~ b1 ~", W: "c2@4 ~@2 c2 ~ c2@2 c3 ~ d2@2 d3 ~", X: "g1@5 ~ g1 ~ g1@2 b1@2 d2@2 b1@2",
  Y: "d2@5 ~ d2 ~ d2@2 e2@2 b2@2 a2 ~", Z: "c2@5 ~ c2 ~ c2@2 e3 ~@3 a2@2", AA: "g1@5 ~ g1 ~ g1@5 ~ g1 ~",
  AB: "g1 ~ g1@3 ~ g1 ~ b1@2 d2@2 e2@2 d2@2", AC: "c2@5 ~ c2 ~ c2@5 ~ a1 ~", AD: "g1@4 ~@2 g1 ~ g1@2 b1@2 e2@2 d2@2",
  AE: "c2@5 ~ c2 ~ c2@4 ~@2 c2 ~", AF: "c2@4 ~@2 c2 ~ c2@2 e3 ~ c2@2 e2@2", AG: "b1@4 ~@2 b1 ~ b1@2 ~@2 b1@2 e2@2",
  AH: "e1@5 ~ e1 ~ e1!2 b1 ~ e2@2 b1@2", AI: "c2@4 ~@2 c2 ~ c2@5 ~ g1 ~", AJ: "c2@5 ~ c2 ~ c2@2 e2@2 g2@2 c2@2",
  AK: "b1@5 ~ b1 ~ b1@3 ~ b1@2 e2@2", AL: "e1@5 ~ e1 ~ e1@4 b1@2 e2@2", AM: "d2@4 ~@2 d2 ~ d3@2 e3 ~ b2@2 c3 ~",
  AN: "g1@5 ~ g1 ~ g1@2 b1 ~ d2@2 b1@2", AO: "c2@3 ~ c3 ~ c2@4 c3 ~ d2@2 d3@2", AP: "e2@5 ~ d3@2 e3 ~ b1 ~ d2@2 e2@2",
  AQ: "d2@5 ~ c3@2 d3 ~ a1@2 b1@2 c2@2", AR: "d2@4 ~@2 c3@2 d3 ~ a1@2 b1@2 d2@2",
  AS: "a1@4 ~@2 a1 ~ a1@2 e1@2 a1@2 b1@2", AT: "c2@6 e3 ~ c2@2 d2 ~ e2@2 a1@2", AU: "d2@4 ~@2 d2 ~ d2@2 a1@2 b1@2 c2@2",
  AV: "d2 e2 f#2 g2 a2 b2 d3 f#2", AW: "g1 ~ g1@3 ~ g1 ~ b1@2 d2@2 e2 ~ d2 ~", AX: "g1@4 ~@2 g1 ~ g1@2 b1 ~ e2@2 d2 ~",
  AY: "d2@4 ~@2 d2 ~ d2@2 e2@2 d2@2 b1 ~", AZ: "c2@4 ~@2 c2 ~ c2@2 e3 ~ c2@2 b1 ~",
  BA: "c2@4 ~@2 c2 ~ c2@2 e3 ~ c2@2 a1 ~", BB: "b1@5 ~ b1 ~ b1@3 ~ b1@2 e2 ~", BC: "e1@5 ~ e1 ~ e1@2 e2 ~ b1@2 d2 ~",
  BD: "c2@4 ~@2 c2 ~ c2 ~ e3 ~ c2@2 b1 ~", BE: "c2@4 ~@2 c2 ~ c2@2 e3 ~ c2@2 a1@2", BF: "b1@5 ~ b1 ~ b1@4 d2@2 e2@2",
  BG: "e1@4 ~@2 e1 ~ e1@3 ~ a1 a#1 b1@2", BH: "e1@4 ~@2 e1 ~ e1@3 ~ b1@2 d2@2", BI: "e2@5 ~ d3@2 e3 ~ b1 ~ d2@2 e2 ~",
  BJ: "d2@5 ~ c3@2 d3 ~ a1 ~ b1@2 c2 ~", BK: "d2@2 e2@2 f#2@2 g2@2 a2@2 b2@2 d3@2 f#2 ~",
  BL: "g1@4 ~@2 g1 ~ g1@2 b1@2 d2@2 b1@2", BM: "d2@5 ~ d2 ~ d2@2 e2@2 f#2@2 a2 ~", BN: "c2@6 c3 ~ c2@2 c3 ~ a2@2 c3 ~",
  BO: "g1@4 ~@2 g1 ~ g1@2 b1 ~ d2@2 b1 ~", BP: "d2@5 ~ d2 ~ d2@2 e2 ~ f#2@2 a2 ~", BQ: "c2@6 c2 ~ d2@2 e2 ~ g2@2 d2 ~",
  BR: "[g1@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@11 A B C D A B C D E@8 F@2 G@2 F@2 G@2 H@3 I@2 J@2 K A B C D A B C D E@8 F@2 G@2 F@2 G@2 L M N O P@2 Q@2 R@2 S@2 R@2
  S@2 A B C D A B C T@2 L M N O L M N U F@2 G@2 F@2 G@2 F@2 G@2 V@2
>`.pickRestart({
  A: "[c4,e4,g4]", B: "[c4,f#4,a4]", C: "[b3,f#4,a4]", D: "[b3,e4,g4]", E: "[[d4,b4] [e4,c5], g4]/2",
  F: "[[g4,b4] [f#4,a4], d5]/2", G: "[e4,g4,c5]/2", H: "g3/3", I: "[d4@25 ~ d4@4 e4@2]/2", J: "g3/2", K: "d4",
  L: "[b4,e5,g5] ~@2 [b4,d5,f#5] [b4,e5,g5] ~ [b4,e5,a5] ~", M: "[b4,e5,g5]@2 ~@4 [b4,d5,f#5]@2 [b4,e5,g5]@7 ~",
  N: "[a4,d5,f#5] ~@2 [a4,d5,e5] [a4,d5,f#5] ~ [a4,d5,g5] ~", O: "[a4,d5,f#5]@2 ~@4 [a4,d5,e5]@2 [a4,d5,f#5]@7 ~",
  P: "[a4,c5,g5]/2", Q: "[g5 f#5, [c5,d5]]/2", R: "[g3,b3,d4]/2", S: "[[g3,e4] [f#3,d4], c4]/2", T: "[b3,e4,g4]/2",
  U: "[a4,c5,d5,f#5]", V: "[[b3,d4,g4]@3 ~]/2",
})).s("gm_string_ensemble_1").gain(0.4)

// other · synth strings 1
const synth_strings_1 = note("<~@39 A B C@2 ~@36 A B C@2 ~@31>".pickRestart({
  A: "~@5 d6@2 e6", B: "g5", C: "[g5@3 a5@13]/2",
})).s("gm_synth_strings_1").gain(0.35).pan(0.7)

// chords · synth brass 2
const synth_brass_2 = note(`<
  ~@3 A@2 B C A@2 B C D E F G D E H G I@8 J K D@2 J K D@2 A@2 B C A@2 B C D E F G D E H G J D I@6 J K D@2 J K D@2 L M N
  O P@2 Q@2 A@2 B C A@2 B C D E F R D E H G@2 L M N S L M N T U K D@2 J K D@2 J K D@2 V@2
>`.pickRestart({
  A: "[b3,d4,g4]/2", B: "g4@3 a4@5, [c4,e4]", C: "g4@3 f#4@5, [a3,d4]", D: "[c4,e4,g4]", E: "[c4,d4,f#4,a4]",
  F: "[b3,d4,f#4,a4]", G: "[b3,e4,g4]", H: "[b3,f#4,a4]", I: "[[b3,d4] [c4,e4], g4]/2", J: "[b3,d4,g4]",
  K: "[a3,d4,f#4]", L: "[b3,e4,g4] ~@2 [b3,d4,f#4] [b3,e4,g4] ~ [b3,e4,a4] ~",
  M: "[b3,e4,g4] ~@2 [b3,d4,f#4] [b3,e4,g4] ~@3", N: "[a3,d4,f#4] ~@2 [a3,d4,e4] [a3,d4,f#4] ~ [a3,d4,g4] ~",
  O: "[a3,d4,f#4] ~@2 [a3,d4,f#4]!2 ~@3", P: "[a3,c4,g4]/2", Q: "[g4 f#4, [c4,d4]]/2",
  R: "~@4 b4 g4 a4 e4, b3, e4@7 ~, g4@5 ~@3", S: "[a3,d4,f#4] ~@2 [a3,d4,e4] [a3,d4,f#4] ~@3", T: "[a3,c4,d4,f#4]",
  U: "[b3,d4], f#4 ~@15", V: "[[b3,d4,g4]@3 ~]/2",
})).s("gm_synth_brass_2").gain(0.4)

// other · kalimba
const kalimba = note("<~@11 A B C ~ A B C ~@25 A B C ~ A B C ~@33 A B C ~ A B C ~@24>".pickRestart({
  A: "g4 c4 e4 g4 ~@4", B: "f#4 c4 d4 f#4 ~@4", C: "f#4 b3 d4 f#4 ~@4",
})).s("gm_kalimba").gain(0.4).pan(0.3)

// other · kalimba · soft notes
const kalimba_soft = note("<~@10 A B C D A B C D ~@24 A B C D A B C D ~@32 A B C D A B C D ~@24>".pickRestart({
  A: "~@15 g3", B: "[c4,e4] ~@14 a3", C: "[c4,d4] ~@13 d4 f#3", D: "[b3,d4] ~@15",
})).s("gm_kalimba").gain(0.2).pan(0.3)

// chords · kalimba
const kalimba_2 = note("<~@27 A B C D A B E F ~@24 A B C D A B E F ~@33 A B C D A B C D A B C D ~@2>".pickRestart({
  A: "[g2,g3]@3 ~ [b4,d5] ~ [d4,g4,b4,d5] ~@3 [e4,g4,c5] ~ [d4,g4,b4,d5]@3 ~, ~@3 [d4,g4]@2 ~@11", // G Bm G C G G5
  B: "[d2,d3]@3 ~ [a4,d5]@2 [d4,f#4,a4,d5] ~@3 [e4,g4,c5] ~ [d4,f#4,a4,d5]@3 ~, ~@3 [d4,f#4]@2 ~@11", // D D5 D C D
  C: "[c4,e4,a4,c5]@8 [c4,e4,a4]@2 ~ [c4,e4,b4]@2 [a3,c4,g4]@2 ~", D: "[g3,c4,e4]@3 ~ [c4,e4,g4]@6 ~@6",
  E: "[a4,c5]@8 [c4,e4,a4]@2 ~ [c4,e4,b4]@2 [a3,c4,g4]@2 ~", F: "[g3,c4,e4]@11 ~@5",
})).s("gm_kalimba").gain(0.35).pan(0.7)

// other · woodblock
const woodblock = note("<~@3 [e6 d6 g6!2 e6 d6 f#6!2]!109 ~@2>").s("gm_woodblock").gain(0.25)

// chords · pad new age
const pad_new_age = note("<~@19 A B A C A B A B ~@24 A B A C A B A B ~@55>".pickRestart({
  A: "[d4,g4,b4]", B: "[c4,e4,g4]", C: "b4@4 g4@2 a4@4 e4@5 ~",
})).s("gm_pad_new_age").gain(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@3 [~ x ~ x]!109 ~@2>").gain(0.45)

// drums · clap
const clap = s("cp").struct("<~@3 [~@3 x]!109 ~@2>").gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@74 [~@5 x ~ x] ~@39>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@3 [x!8]!109 x ~>").gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@26 A ~@31 A ~@7 A ~@3 A ~@20 A ~@3 A ~@3 A ~@14>".pickRestart({
  A: "~@4 x!2 ~ x",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@26 A ~@31 A ~@7 A ~@3 A ~@3 B ~@16 A ~@3 A ~@3 A ~@14>".pickRestart({
  A: "~@2 x ~@4 x ~@4 x ~@3", B: "~@5 x!3",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@27 A ~@7 A ~@23 A ~@7 A ~ A ~ A ~@3 A ~@16 A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "x",
})).gain(0.4)

stack(
  piano, bass, string_ensemble_1, synth_strings_1, synth_brass_2, kalimba, kalimba_soft, kalimba_2, woodblock,
  pad_new_age, kick, snare, clap, low_tom, hihat, mid_tom, high_tom, crash
)

More by Hot Chocolate