Strudelify

Sure Know Something

Kiss

KeyD majorTempo113 bpm
0:00/0:00
// Sure Know Something — Kiss
// 113 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(113/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 · electric bass pick
const bass = note(`<
  A B C D E F@2 G A B C D E H@2 I A B C D E J K L M@8 N@4 A B C D E H@2 I A B C D E J K L M@8 O@4 P@3 A B C D E J Q@4
  K@2 R@2 S R K@4 R@2 S R K L M@8 O@4 P@3 ~
>`.pickRestart({
  A: "e1@2 e2@2 d2 b1 d2 e2", B: "~@2 e2@2 d2 b1 g1 a1", C: "~@2 a1@2 g1 e1 g1 a1", D: "~@2 a1@2 g1 e1 a1 b1",
  E: "~@2 d2@2 e2 d2 b1 a1", F: "[~@2 a2@2 g2 e2 d2 e2@3 [g1,g4]@3 [a1,d4]@3]/2",
  G: "b3 ~ d4 [d2,b3], g1@3 b1@3 ~@2, ~ g4 ~@2", H: "[~@2 a2@2 g2 e2 d2 e2@3 g1@3 a1@3]/2", I: "g1@3 b1@3 d2@2",
  J: "~@2 a2@2 g2 e2 d2 e2", K: "e1!8", L: "e1!5 c2!2 d2",
  M: "[d2@2 c2 ~ b1 a1 b1 d2@3 c2 ~ b1 a1 b1 c2@3 b1 ~ a1 g1 ~ c2@3 b1 ~ a1 g1 ~ d2]/4",
  N: "[d2@2 c2 ~ b1 a1 b1 d2@2 e1@2 f#1@2 a1 b1 c2@3 b1 ~ a1 g1 d2 d2@9]/4",
  O: "[d2@2 c2 ~ b1 a1 b1 d2@2 e1@2 f#1@2 a1 b1 c2@3 b1 ~ a1 g1 ~ c2@3 b1 ~ a1 g1 ~ d2]/4",
  P: "[d2@2 c2 ~ b1 a1 b1 d2@2 e1@2 f#1@2 a1 b1 c2@3 b1 ~ a1 g1 e1!2]/3", Q: "e1/2", R: "c2!8", S: "d2!8",
})).s("gm_electric_bass_pick").gain(0.46)

// chords · synth strings 1
const synth_strings_1 = note("<~@77 A B A B C B D@2 A B A B C B ~@18>".pickRestart({
  A: "[g4,b4] [f#4,a4]", B: "[e4,g4]", C: "[f#4,a4]", D: "[~@5 [a4,b4] [f#4,a4] [e4,g4]@7 ~@2]/2",
})).s("gm_synth_strings_1").gain(0.41)

// other · tremolo strings
const tremolo_strings = note("<~@67 A@2 B C D@2 E F G ~@33>".pickRestart({
  A: "[e4@18 d3 e3 g3@2 a3@2 b3@2 d4@2 e4@2 d4@2]/2", B: "f#4@11 g4@5", C: "e4@5 e4 g4@2",
  D: "[e5@2 a4@4 e5@2 a4@4 d5@2 g4@8 b4 d5 e5 g5 e5 d5 e5@2 d5@2]/2", E: "e5", F: "~@5 f#5 e5 d5", G: "b5",
})).s("gm_tremolo_strings").gain(0.51)

// chords · distortion guitar
const distortion_guitar = note("<~@22 A ~@27 A ~@16 B C@2 D E@2 ~ F G@2 ~@15 H ~@16>".pickRestart({
  A: "b3!8", B: "b3", C: "[~@2 d3 e3 ~@2 a3@2 b3@2 ~@2 e4@2 f#4@11 g4@5 ~@2]/2", D: "~@3 g4",
  E: "[e5@2 a4@4 e5@2 a4@4 d5@2 g4@8 b4 d5 e5 g5 ~ d5 e5@2 ~@2]/2", F: "~@10 f#5@2 e5 d5@3", G: "[b5@5 ~@3]/2",
  H: "b3!5 ~@3",
})).s("gm_distortion_guitar").gain(0.46).pan(0.7)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@8 A B C D E F@2 G A B C H I J K L M N@3 M N@3 M O@3 A B C D E F@2 G A B C H I J K L M N@3 M N@3 M N@3 M P@3 B C H I
  Q R@6 S@2 T U R@6 S@2 V W M N@3 M N@3 M N@3 M X@3
>`.pickRestart({
  A: "~@2 [e2,e3,b3,d4,g4]@2 ~ [e2,e3,b3,d4,g4] ~ [e2,e3,b3,d4,g4]", // Em7
  B: "~@2 [e2,e3,b3,d4,g4]@2 ~ [e2,e3,b3,d4,g4] ~ [a2,a3,c4,e4,a4]", // Em7 Am
  C: "~@2 [a2,a3,c4,e4,a4]@2 ~ [a2,a3,c4,e4,a4] ~ [a2,a3,c4,e4,a4]", // Am
  D: "~@2 [a2,a3,c4,e4,a4]@2 ~ [a2,a3,c4,e4,a4] ~ [b2,d3,d4,f#4,b4]", // Am Bm
  E: "~@2 [d3,d4,f#4,b4]@2 ~ [d3,d4,f#4,b4] ~ [a2,a3,c4,e4,a4]", // Bm Am
  F: "[~@2 [a2,a3,c4,e4,a4]@2 ~ [a2,a3,c4,e4,a4] ~ [e3,b3,d4,g4]@3 g4@3 d4@3]/2", G: "b3 g4 d4 b3",
  H: "~@2 [a2,a3,c4,e4,a4]@2 ~ [a2,a3,c4,e4,a4] ~ [b2,d3,d4,f#4]", // Am Bm
  I: "~@2 [d3,d4,f#4]@2 ~ [d3,d4,f#4] ~ [a2,a3,c4,e4,a4]", J: "~@2 [a2,a3,c4,e4,a4]@2 ~ [a2,a3,c4,e4,a4] ~ e3",
  K: "e3!8", L: "[e3,b3,d4,g4]!5 [c3,g3,c4]!2 [d3,a3,d4]", M: "[d3,a3,d4]!4",
  N: "[[d3,a3,d4]@4 [d3,a3,d4]@4 [d3,a3,d4]@4 [d3,a3,d4]@2 ~@4 c4@2 [b2,g3]@3 ~ [a2,e3,a3]@2 [g2,d3,g3]@2 ~@6 c4@2 [b2,g3]@3 ~ [a2,e3,a3]@2 [g2,d3,g3]@2 ~@2 [d3,a3,d4]@2, ~@7 [c3,g3]@3 ~@5 [c3,g3]@3 ~@6]/3", // D5 Em A5 G5 Em A5 G5 D5 …
  O: "[[d3,a3,d4]@4 [d3,a3,d4]@4 [d3,a3,d4]@4 [d3,a3,d4]@2 ~@4 c4@2 [b2,g3]@3 ~ [a2,e3,a3]@2 [g2,d3,g3]@2 [d3,a3,d4]@2 [d3,a3,d4]@18, ~@7 [c3,g3]@3 ~@14]/3", // D5 Em A5 G5 D5 C5
  P: "[[d3,a3,d4]@4 [d3,a3,d4]@4 [d3,a3,d4]@4 [d3,a3,d4]@2 ~@4 c4@2 [b2,g3]@3 ~ [a2,e3,a3]@2 [g2,d3,g3]@2 [e2,b2,e3]@2 e2@2 e2@4 [e2,e3,b3,d4,g4]@4 ~@2 [e2,e3,b3,d4,g4]@2 ~@2 [e2,e3,b3,d4,g4]@2, ~@7 [c3,g3]@3 ~@5 [b2,e3]@3 ~@6]/3", // D5 Em A5 G5 E5 Em7 C5 E5
  Q: "~@2 [a2,a3,c4,e4,a4]@2 ~ [a2,a3,c4,e4,a4] ~ [e3,b3,d4,g4]", // Am Em7
  R: "[~ g4 d4 ~@2 g4 d4 ~@2 g4 d4 ~@2 g4 d4 ~@2 g4 d4 ~@2 g4 d4 b3, e3 e3 e3 e3 e3 e3, ~@3 b3@2 ~@2 b3@2 ~@2 b3@2 ~@2 b3@2 ~@2 b3@2 ~@3]/6",
  S: "~ e4 c4 g3, c3", T: "~ f#4 d4 a3, d3", U: "~ g3 c4@2 e4@4 c4@4 g3@4, c3", V: "e2!8",
  W: "e2!5 [c3,g3,c4]!2 [d3,a3,d4]", // C5 D5
  X: "[[d3,a3,d4]@4 [d3,a3,d4]@4 [d3,a3,d4]@4 [d3,a3,d4]@2 ~@4 c4@2 [b2,g3]@3 ~ [a2,e3,a3]@2 [g2,d3,g3]@2 [e2,b2,e3]@2 e2@2 e2@4 ~@12, ~@7 [c3,g3]@3 ~@5 [b2,e3]@3 ~@6]/3", // D5 Em A5 G5 E5 C5 E5
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  A@15 B A@6 C@2 A@3 B A@6 B D A@7 B A@6 C@2 A@3 B A@17 E ~@17 C F A@3 B A@11 E
>`.pickRestart({
  A: "x ~ x ~ x ~ x!2", B: "x!4", C: "x!8", D: "x ~@3 x ~ x!2", E: "x", F: "x!3 ~ x ~ x ~",
})).gain(0.46)

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

// drums · hihat
const hihat = s("hh").struct("<A@7 B A@14 C D A@11 ~ A@14 C A@40 ~@2 A@15 E>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~@3 x ~@2 x", C: "x!8", D: "x ~ x ~ x!3 ~", E: "x",
})).gain(0.46)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@23 A ~ B@2 ~@2 B@2 ~@2 B ~@17 A ~ B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~@27 B@2 ~@2 B@2 ~@2 B@2 ~@2 B@2 ~
>`.pickRestart({
  A: "~ x ~ x ~@4", B: "~@7 x",
})).gain(0.51)

// drums · crash
const crash = s("cr").struct(`<
  A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@2 A ~@5 A ~@19 A ~@3 A ~@3 A ~@3 A ~@2 A
>`.pickRestart({
  A: "x",
})).gain(0.51)

// drums · ride bell
const ride_bell = s("rd").struct("<~@67 [x!4]!6 x ~@19 [x!4]!15 x>").gain(0.46)

stack(
  bass, synth_strings_1, tremolo_strings, distortion_guitar, electric_guitar_clean, kick, snare, hihat, open_hat, crash,
  ride_bell
)

More by Kiss