Strudelify

Talk to Me

Kiss

KeyD majorTempo130 bpm
0:00/0:00
// Talk to Me — Kiss
// 130 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · distortion guitar · "Ace"
const distortion_guitar = note(`<
  A B C D A E C D A B C D A E C D A E C D F G H I F G H J K@2 L M H I L M H J L M H J F G H J F G H J N@4 O@4 P@2 Q@2 R
  S T U R S T U R S T V@3 L M H I L W H J F G H J F G H J F G H J N@4 O@4 P@2 Q@2 R S T U R S T U R X ~@6
>`.pickRestart({
  A: "[b2,f#3,b3,d#4] b2!7, ~ [f#3,b3,e4]@7", B: "[b2,f#3,b3,e4] b2!7, ~ [f#3,b3,f#4]@7",
  C: "f#2!7 [b2,e3,a3], [c#3,f#3,a#3,c#4]@7 ~", // Esus4 F#
  D: "[b2,f#3,b3] b2 [b2,f#3,b3] [b2,f#3,b3,d#4]!2 [b2,f#3,b3,e4] b2!2, ~@3 [f#3,b3,d#4]", // B5 B Bsus4 B
  E: "[b2,f#3,b3,e4] b2!7, ~ [f#3,b3,d#4]@7", F: "[f#3,b3,e4]", G: "[f#3,b3,d#4,f#4]",
  H: "[c#3,f#3,a#3,c#4]@7 [b2,e3,a3]", I: "[f#3,b3] b2 [f#3,b3]!2 [f#3,b3,d#4] [f#3,b3,e4] [f#3,b3,d#4]@2",
  J: "[f#3,b3] b2 [f#3,b3] [f#3,b3,d#4]!2 [f#3,b3,e4] [f#3,b3,d#4]@2", // B5 B Esus2 B
  K: "[[b2,f#3,b3,c#4]@3 [b2,f#3,b3,d#4]@3 [b2,f#3,b3,e4]@9 [b2,f#3,b3,e4]]/2", L: "[b2,f#3,b3,e4]",
  M: "[b2,f#3,b3,d#4]", N: "[[b2,f#3,b3,c#4]@3 [b2,f#3,b3,d#4]@3 [b2,f#3,b3,e4]@10]/2",
  O: "[[a2,e3,a3,b3]@3 [a2,e3,a3,c#4]@3 [a2,e3,a3,d4]@10]/2", // Asus2 A Asus4
  P: "[[d3,a3,d4,e4]@3 [d3,a3,d4,f#4]@3 [d3,a3,d4,g4]@10]/2", // Dsus2 D Dsus4
  Q: "[[d3,a3,d4,e4]@3 [d3,a3,d4,f#4]@3 [d3,a3,d4,g4]@9 [a3,d4,g4]]/2", // Dsus2 D Dsus4
  R: "[a3,d4,g4]!3 [a3,d4,f#4] [a3,d4,g4] [a3,d4,f#4]@2 [e3,a3,c#4]", // Dsus4 D Dsus4 D A
  S: "[e3,a3,d4]!3 [e3,a3,c#4] [e3,a3,d4] [e3,a3,c#4]@2 [a3,d4,g4]", T: "[a3,d4,g4]!3 [a3,d4,f#4] ~ [e3,a3] [f#3,a3] ~",
  U: "[a2,f#3,a3] [a2,e3,a3] ~ [g2,d3,g3] [g2,e3,g3] [g2,d3,g3] ~ [a3,d4,g4]", // D A5 G5 C G5 Dsus4
  V: "[[a2,f#3,a3] [a2,e3,a3] ~ [g2,d3,g3]!2 [g2,d3,g3]@18 ~]/3", W: "[b2,f#3,b3,d#4] ~@3",
  X: "[e3,a3,d4]!3 [e3,a3,c#4] [e3,a3,d4] [e3,a3,c#4]@2 ~", // Dsus2 A Dsus2 A
})).s("gm_distortion_guitar").gain(0.4).pan(0.2)

// chords · distortion guitar · "Ace" · soft notes · Dsus4 D A5 F#m D A5 G5 C …
const distortion_guitar_soft = note(`<
  ~@117
  [~@7 [a3,d4,g4]]
  [[a3,d4,g4]!3 [a3,d4,f#4] ~ [e3,a3] [f#3,a3] ~]
  [[a2,f#3,a3] [a2,e3,a3] ~ [g2,d3,g3] [g2,e3,g3] [g2,d3,g3] ~ [a3,d4,g4]]
  [[a3,d4,g4]!3 [a3,d4,f#4] [a3,d4,g4] [a3,d4,f#4]@2 [e3,a3,c#4]]
  [[e3,a3,d4]!3 [e3,a3,c#4] [e3,a3,d4] [e3,a3,c#4]@2 [a3,d4,g4]]
  [[a3,d4,g4]!3 [a3,d4,f#4] ~ [e3,a3] [f#3,a3] ~]
  ~
>`).s("gm_distortion_guitar").gain(0.15).pan(0.2)

// bass · electric bass pick · "Gene"
const bass = note(`<
  ~@20 A@2 B A@3 B A C@2 D ~ E ~ D ~ E ~ D ~ E ~ A@2 B A@3 B A F@4 G@4 H@2 I@2 J K L M J K L M J K L N@3 D ~ E ~ D ~ E ~
  A@2 B A@3 O P A@2 O A F@4 G@4 H@2 I@2 J K L M J K L M J Q ~@6
>`.pickRestart({
  A: "b1!8", B: "f#1!7 b1", C: "[b1@3 f#2@3 b2@9 b1]/2", D: "b1@2 ~@2 b1!2 ~@2", E: "f#1@2 ~@2 f#1!2 ~@2",
  F: "[b1@3 f#2@3 b2@10]/2", G: "[a1@3 e2@3 a2@10]/2", H: "[d2@3 a2@3 d3@10]/2", I: "[d2@3 a2@3 d3@9 a1]/2",
  J: "d2!5 d2@2 a1", K: "a1!5 a1@2 a1", L: "d2!8", M: "a1!3 g1!4 d2", N: "[a1!3 g1!3 g1@18]/3", O: "f#2!8",
  P: "b1!5 f#1 g#1 a#1", Q: "a1!5 a1@2 ~",
})).s("gm_electric_bass_pick").gain(0.64)

// bass · electric bass pick · "Gene" · soft notes
const bass_soft = note("<~@117 [~@7 a1] [d2!8] [a1!3 g1!4 d2] [d2!5 d2@2 a1] [a1!5 a1@2 a1] [d2!8] ~>")
  .s("gm_electric_bass_pick").gain(0.24)

// chords · distortion guitar · "Paul"
const distortion_guitar_2 = note(`<
  ~@20 A B C A@2 B C A D@2 A@2 C A@3 C A@3 C A@2 B C A@2 B C A E@4 F@4 G@2 H@2 I J K L I J K L I J K M@3 A@2 C A@3 C A@2
  B C A@2 B C A@2 B C A E@4 F@4 G@2 H@2 I J K L I J K L I N ~@6
>`.pickRestart({
  A: "b2!8", B: "b2!6 a2@2", C: "f#2!8", D: "[[b2,f#3,b3,c#4]@3 [b2,f#3,b3,d#4]@3 [b2,f#3,b3,e4]@9 ~]/2",
  E: "[[b2,f#3,b3,c#4]@3 [b2,f#3,b3,d#4]@3 [b2,f#3,b3,e4]@10]/2", // Bsus2 B Bsus4
  F: "[[a2,e3,a3,b3]@3 [a2,e3,a3,c#4]@3 [a2,e3,a3,d4]@10]/2", // Asus2 A Asus4
  G: "[[d3,a3,d4,e4]@3 [d3,a3,d4,f#4]@3 [d3,a3,d4,g4]@10]/2", // Dsus2 D Dsus4
  H: "[[d3,a3,d4,e4]@3 [d3,a3,d4,f#4]@3 [d3,a3,d4,g4]@9 [d3,a3,d4]]/2", // Dsus2 D Dsus4 D5
  I: "[d3,b3,d4]!3 [d3,a3,d4] [d3,b3,d4] [d3,a3,d4]@2 [a2,e3,a3]", // G D5 G D5 A5
  J: "[a2,f#3,a3]!3 [a2,e3,a3] [a2,f#3,a3] [a2,e3,a3]@2 [d3,a3,d4]", // D A5 D A5 D5
  K: "[d3,a3,d4] [d3,b3,d4]!2 [d3,a3,d4] ~ [e3,a3] [f#3,a3] ~", // D5 G D5 A5 F#m
  L: "[a2,f#3,a3] [a2,e3,a3] ~ [g2,d3,g3] [g2,e3,g3] [g2,d3,g3] ~ [d3,a3,d4]", // D A5 G5 C G5 D5
  M: "[[a2,f#3,a3] [a2,e3,a3] ~ [g2,d3,g3]!2 [g2,d3,g3]@18 ~]/3", // D A5 G5
  N: "[a2,f#3,a3]!3 [a2,e3,a3] [a2,f#3,a3] [a2,e3,a3]@2 ~", // D A5 D A5
})).s("gm_distortion_guitar").gain(0.4).pan(0.8)

// chords · distortion guitar · "Paul" · soft notes · D5 G D5 A5 F#m D A5 G5 …
const distortion_guitar_soft_2 = note(`<
  ~@117
  [~@7 [d3,a3,d4]]
  [[d3,a3,d4] [d3,b3,d4]!2 [d3,a3,d4] ~ [e3,a3] [f#3,a3] ~]
  [[a2,f#3,a3] [a2,e3,a3] ~ [g2,d3,g3] [g2,e3,g3] [g2,d3,g3] ~ [d3,a3,d4]]
  [[d3,b3,d4]!3 [d3,a3,d4] [d3,b3,d4] [d3,a3,d4]@2 [a2,e3,a3]]
  [[a2,f#3,a3]!3 [a2,e3,a3] [a2,f#3,a3] [a2,e3,a3]@2 [d3,a3,d4]]
  [[d3,a3,d4] [d3,b3,d4]!2 [d3,a3,d4] ~ [e3,a3] [f#3,a3] ~]
  ~
>`).s("gm_distortion_guitar").gain(0.15).pan(0.8)

// other · distortion guitar · "Solo 1"
const distortion_guitar_3 = note("<~@61 A B C D E F G H I J@2 K L@4 ~@19 M@4 N@4 O@2 P@3 ~@15>".pickRestart({
  A: "~@7 [a4,d5]", B: "[d5,f#5]!3 d5 [d5,f#5] d5@2 a4", C: "[c#5,e5]!3 a4 [c#5,e5] a4@2 [a4,d5]",
  D: "[d5,f#5]!3 d5 [d5,f#5] ~ f#5@2, ~@5 d5@2 ~", E: "d5 c#5 ~ c#5 b4 ~ b4 a4, ~@2 a4@2 ~ g4@2 ~",
  F: "d3@4 a3@2 d4!3 e4 f#4 g4 a4@4", G: "a4 ~ b4 ~ e5@2 e5@2 e5@2 e5@2 e5@2 b4@2",
  H: "d5@4 f#5@6 ~@2 f#5@3 ~, ~@5 a5@2 ~", I: "[f#5,a5]@2 [f#5,a5] ~ [f#5,a5]@2 [f#5,a5] ~ f#5@4 d5@2 b4@2, ~@4 a5 ~@3",
  J: "[d5@3 d4 f#4 a4 f#4 c#5@2 c#5 b4 f#4 a4 g#4 a4@2]/2", K: "a3 b3 d4 ~ f#4@2 e4 d4 e4@2 d4@2 b3 d4 a3@2",
  L: "[a3 b3 a3 ~ g3 a3 g3 ~ g3@32 ~@6 [c#4,g4]@18]/4", M: "[b4@3 b4@5]/2", N: "[a4@3 a4@5]/2", O: "[d5@3 d5@5]/2",
  P: "[d5@3 d5@8 ~]/3",
})).s("gm_distortion_guitar").gain(0.68)

// other · distortion guitar · "Solo verse"
const distortion_guitar_4 = note("<~@7 A B C D E B C D E B C D F ~@104>".pickRestart({
  A: "~@4 [b3,b4] [c#4,c#5] [d#4,d#5]@2", B: "[e4,e5]", C: "[d#4,d#5]", D: "[c#4,c#5]",
  E: "[b3,b4]@4 [b3,b4] [c#4,c#5] [d#4,d#5]@2", F: "[b3,b4]",
})).s("gm_distortion_guitar").gain(0.36).pan(0.6)

// other · lead 2 sawtooth · "Chorus"
const lead_2_sawtooth = note(`<
  ~@20 A@2 ~@2 A@2 B C D@2 ~@3 E ~@2 F@2 ~@3 G A@2 B C A@2 B C D@4 H@4 I@4 ~@11 J@3 ~@2 K@2 ~@2 L@2 A@2 M C A@2 M C A@2
  M C D@4 H@4 I@4 N O N ~ N O N ~ N O N ~@5
>`.pickRestart({
  A: "d#4@2 d#4 d#4@2 ~@3", B: "~@7 f#4", C: "f#4!7 ~", D: "[e4@3 f#4@3 g#4@4 ~@6]/2", E: "f#4!3 f#4@3 f#4@2",
  F: "[~@7 f#4@2 f#4!3 f#4@2 f#4@2]/2", G: "f#4!3 f#4@2 f#4 f#4@2", H: "[d4@3 e4@3 f#4@4 ~@6]/2",
  I: "[g4@3 a4@3 b4@4 ~@6]/2", J: "[~@4 a4@2 g4 g4@12 ~@5]/3", K: "[~@5 e4!2 f#4@2 f#4!2 f#4@3 f#4@2]/2",
  L: "[~@5 e4!2 f#4@2 f#4!2 f#4@2 f#4 f#4@2]/2", M: "e4 e4@2 f#4@2 e4@2 f#4", N: "f#4@2 f#4 g4@2 f#4@3",
  O: "e4@2 e4 f#4@2 e4@3",
})).s("gm_lead_2_sawtooth").gain(0.44)

// other · lead 2 sawtooth · "Chorus" · soft notes
const lead_2_sawtooth_soft = note("<~@120 [f#4@2 f#4 g4@2 f#4@3] [e4@2 e4 f#4@2 e4@3] [f#4@2 f#4 g4@2 f#4@3] ~>")
  .s("gm_lead_2_sawtooth").gain(0.11)

// other · lead 2 sawtooth · "Chorus 2"
const lead_2_sawtooth_2 = note("<~@108 A B A ~ A B A ~ A B ~@6>".pickRestart({
  A: "d4@2 d4 e4@2 d4@3", B: "c#4@2 c#4 d4@2 c#4@3",
})).s("gm_lead_2_sawtooth").gain(0.4)

// other · lead 2 sawtooth · "Chorus 2" · soft notes
const lead_2_sawtooth_soft_2 = note(`<
  ~@118
  [d4@2 d4 e4@2 d4@3]
  ~
  [d4@2 d4 e4@2 d4@3]
  [c#4@2 c#4 d4@2 c#4@3]
  [d4@2 d4 e4@2 d4@3]
  ~
>`).s("gm_lead_2_sawtooth").gain(0.12)

// drums · kick
const kick = s("bd").struct(`<
  ~@20 A@8 B ~ C@7 D C@3 E A@8 B F B F B F B F B G B F A@11 H C I C@7 I A@12 B F B F B J B F B G B F A@3 K A@11 ~
>`.pickRestart({
  A: "x!2", B: "x ~@2 x ~ x ~@2", C: "x ~@3 x!2 ~@2", D: "x!2 ~@6", E: "x", F: "x!4", G: "x ~@3 x ~@2 x ~@4 x ~@3",
  H: "~@4 x!2 ~@2", I: "x ~@3 x!2 ~ x", J: "x ~@3 x ~ x!3 ~@3 x ~@3", K: "x ~@2 x ~@4",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@19 A B@5 C B D B ~ B@7 E B@3 E B C B@3 C B@3 ~ B ~ B ~ B F B G B ~ B@3 H B@3 C B@3 ~@2 A B@8 C@2 B@2 C@2 B C@3 B D B
  ~ B ~ B I B J B G B ~ B@3 K B@6 ~@6
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@3 x!2", D: "~@4 x ~@7 x!4", E: "~@2 x!2 ~@2 x ~", F: "~@2 x ~ x!2 ~ x!2 ~ x!6",
  G: "~@2 x ~@2 x ~@2 x ~@7", H: "~@4 x ~@7 x ~ x!2", I: "~@8 x!2 ~@6", J: "~@10 x!3 ~@3", K: "~ x!2 ~",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@115 [~@7 x] ~@2 [~ x ~ x] [~@2 x ~@3 x!2] [~ x ~ x]!3 ~>").gain(0.24)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@19 A B C B C B C B D ~ E ~@7 F ~@3 G B C B C B C B C ~ H ~ I J K ~@3 L ~ M ~@10 N O ~@10 B C B C B C B C B C B D ~ H
  ~ P ~ Q ~ L ~ L ~ M ~@3 R ~@12
>`.pickRestart({
  A: "~@3 x", B: "~ x!7", C: "x!8", D: "x!6 ~@2", E: "~ x!2 ~@4 x", F: "~@4 x!2 ~ x", G: "~@5 x ~ x", H: "~@10 x!6",
  I: "~@2 x ~@2 x ~@2 x ~ x!6", J: "~@14 x!2", K: "x!4 ~@8 x ~@3", L: "~@13 x!3", M: "~@12 x!4", N: "~@15 x",
  O: "~@6 x!2 ~@8", P: "~@8 x ~@2 x ~@2 x ~", Q: "~ x ~ x ~@8 x!4", R: "~@5 x!3",
})).gain(0.48)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@29 A ~@7 B ~@3 B ~@9 C ~ D E F ~@3 G ~ H ~@10 I J ~@23 C ~ K ~ L ~ M ~ G ~ H ~@3 N ~@12
>`.pickRestart({
  A: "~@2 x ~ x ~@3 x!2 ~ x!2 ~ x ~", B: "~@4 x!2 ~@2", C: "~@2 x ~ x!2 ~ x!2 ~ x!3 ~@3", D: "~@10 x!3 ~@3",
  E: "~@14 x!2", F: "x!12 ~@4", G: "~@10 x!5 ~", H: "~@4 x!10 ~@2", I: "~@15 x", J: "x!3 ~ x ~ x!2 ~@8",
  K: "~@2 x ~@2 x ~@10", L: "~@10 x!2 ~@4", M: "~@2 x!3 ~ x!3 ~@4 x ~@2", N: "~@5 x!2 ~",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@29 A ~@21 B ~@3 C ~@4 D E ~@11 F ~@23 B ~@4 D G ~@2 D E ~@16>".pickRestart({
  A: "~ x", B: "~@2 x ~ x!2 ~@10", C: "~@8 x!8", D: "~@14 x!2", E: "x!10 ~@6", F: "x!3 ~@13", G: "x ~ x!3 ~@11",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@20 A ~@7 B ~ A ~@7 A ~@3 A ~@7 B ~ B ~ B ~ B ~ B C B ~ A ~@2 D A ~@2 D A ~@2 E ~ F A ~@7 A ~@3 A ~@3 A ~@3 B ~ B ~ B
  ~ B ~ B C B ~ A ~@2 G A ~@2 D A ~@2 D A ~@3
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@2 x ~", C: "~@2 x ~@2 x ~@2 x ~@7", D: "~ x ~ x", E: "~@4 x!2 ~@2", F: "~@3 x", G: "~ x ~@2",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@4 A ~@57 B C@2 D B C@2 E B C@2 ~@35 B C@2 F B C@2 E B G H I ~@4>".pickRestart({
// … 12 more lines

More by Kiss