Strudelify

Knockin'

Double Vision

KeyD majorTempo131 bpm
0:00/0:00
// Knockin' — Double Vision
// 131 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(131/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 2 · "SYN BASS 2"
const bass = note(`<
  ~@9 A@7 ~ A@7 B A@7 B A@7 B A C A C A C A B A C A C A C A B A C A C A C A B A@3 B A@7 B A@7 B A C A C A C A B A@7 B
  A@7 D ~@9
>`.pickRestart({
  A: "d1 d2 d1 d2 d1 d2 d1 d2", B: "d1 ~@15", C: "d1 d2 d1 d2 d1 d2 d1 c2",
  D: "d1 ~ d3!2 d2 ~ d3!2 d2@2 d3!2 d2 ~ c3!2",
})).s("gm_synth_bass_2").gain(0.42)

// bass · lead 8 bass lead · "BASS&LEAD"
const bass_2 = note("<A B C B C D C E@2 ~@76 F G F G F G F ~@26>".pickRestart({
  A: "~ [d1,d2]@7", B: "d1 d2 ~ d2 ~ d2 ~ [d1,d2]", C: "d1 d2 ~ d2 ~ d2 ~ d2", D: "~ d2 ~ d2 ~ d2 ~ [d1,d2]",
  E: "[~@2 d2@2 ~@2 d2@2 ~@2 d2@2 ~@2 [d1,d2]@4 [d1,d2] ~ [d1,d2] ~ [d1,d2] ~ [d1,d2] ~ [d2,d3] ~ c2@2 [f1,f2] ~, ~@28 c3 ~@3]/2", // D F
  F: "d2 d3 d2 d3 d2 d3 d2 d3 d2 d3 d2 d3 d2 d3 d2 d3", G: "d2 d3 d2 d3 d2 d3 d2 d3 d2 d3 d2 d3 d2 d3 c2 c3",
})).s("gm_lead_8_bass_lead").gain(0.29)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@9 A B A B A B C@2 D E D F D G D H ~@16 D E D F D G D H I J I J I J I J D E D F D G D K ~@4 D E D F D G D H D E D F D
  G D H I J I J I J I J D E D F D G D H D E D F D G D H D E D F D G D H ~
>`.pickRestart({
  A: "~@2 d4 ~@3 d4 ~@3 d4 ~@3 d4@2", B: "~@2 d4 ~@3 d4 ~@3 d4 ~@3 d4 ~",
  C: "[~@2 d4 ~@3 d4 ~@3 d4 ~@3 [c2,c3,c4]@17 ~]/2", D: "d4@3 ~ d4 ~ d4 ~ d4 ~ d4@2 ~@2 d4@2",
  E: "~@2 d4 ~ d4 ~ d4 ~ d4!3 ~ d4 ~ d4 ~", F: "~@2 d4 ~ d4 ~ d4 ~ d4 ~ d5 ~ c5 ~ f4 ~",
  G: "~@2 d4 ~ d4 ~ d4 ~ d4!3 ~ d4!3 ~", H: "~@2 d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ f4@2 ~@2",
  I: "a4 d4 ~ d4 ~ d4 ~ d4 ~ d4 g4 ~ f4 ~ d4 ~", J: "a4 d4 ~ d4 ~ d4 ~ d4 ~ d4 g4 ~ f4 ~@3",
  K: "~@2 d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ f4@2 d4 ~",
})).s("gm_lead_2_sawtooth").gain(0.35).pan(0.7)

// bass · synth bass 1 · "SYN BASS 1" · D5
const bass_3 = note(`<
  ~@25
  [[a3,d4] ~ d3 [a3,d4] d3 ~ [a3,d4] ~@3 [a3,d4] ~@3 [a3,d4] ~]!7
  ~
  [[a3,d4] ~ d3 [a3,d4] d3 ~ [a3,d4] ~@3 [a3,d4] ~@3 [a3,d4] ~]!8
  ~@24
  [[a3,d4] ~ d3 [a3,d4] d3 ~ [a3,d4] ~@3 [a3,d4] ~@3 [a3,d4] ~]!3
  [~@6 [a3,d4] ~@9]
  ~@49
>`).s("gm_synth_bass_1").gain(0.33).pan(0.9)

// bass · synth bass 1 · "SYN BASS 1" · D5
const bass_4 = note(`<
  ~@25
  [~ [a3,d4] ~ d3 [a3,d4] d3 ~ [a3,d4] d3!2 ~ [a3,d4] d3!2 ~ [a3,d4]]!7
  [~@2 [d3,a3] ~@13]
  [~ [a3,d4] ~ d3 [a3,d4] d3 ~ [a3,d4] d3!2 ~ [a3,d4] d3!2 ~ [a3,d4]]!8
  ~@24
  [~ [a3,d4] ~ d3 [a3,d4] d3 ~ [a3,d4] d3!2 ~ [a3,d4] d3!2 ~ [a3,d4]]!3
  [~@2 [a3,d4] ~@7 [a3,d4] ~@5]
  ~@49
>`).s("gm_synth_bass_1").gain(0.17).pan(0.1)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_2 = note(`<
  ~@9 A B C B C B D ~ E F G H I J G K ~@16 E F G H I J G K L M L M N M N M E F G H I J G O ~@4 E F G H I J G K E F G H I
  J G K P Q P Q R Q R P E F G H I J G K E F G H I J G K E F G H I J G S T
>`.pickRestart({
  A: "~@4 d4 ~@3 d4 ~@3 d4 ~@3", B: "d4@2 ~@2 d4 ~@3 d4 ~@3 d4 ~@3", C: "d4 ~@3 d4 ~@3 d4 ~@3 d4 ~@3",
  D: "d4 ~@3 d4 ~@3 d4 ~@7", E: "~@2 d4@3 ~ d4 ~ d4 ~ d4 ~ d4@2 ~@2", F: "d4@2 ~@2 d4 ~ d4 ~ d4 ~ d4!3 ~ d4 ~",
  G: "d4 ~ d4@3 ~ d4 ~ d4 ~ d4 ~ d4@2 ~@2", H: "d4@2 ~@2 d4 ~ d4 ~ d4 ~ d4 ~ d5 ~ c5 ~",
  I: "f4 ~ d4@3 ~ d4 ~ d4 ~ d4 ~ d4@2 ~@2", J: "d4@3 ~ d4 ~ d4 ~ d4 ~ d4!3 ~ d4!2",
  K: "d4@3 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ f4@2", L: "~ a4 d4 ~ d4 ~ d4 ~ d4 ~ d4 ~@4 d4",
  M: "~ a4 d4 ~ d4 ~ d4 ~ d4 ~ d4 ~@5", N: "~ a4 d4 ~ d4 ~ d4 ~ d4 ~ d4 g4 ~ f4 ~ d4",
  O: "d4@3 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~@3", P: "~@2 a4 d4 ~ d4 ~ d4 ~ d4 ~ d4 ~@4",
  Q: "d4 ~ a4 d4 ~ d4 ~ d4 ~ d4 ~ d4 ~@4", R: "~@2 a4 d4 ~ d4 ~ d4 ~ d4 ~ d4 g4 ~ f4 ~",
  S: "d4@3 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~ d4 ~", T: "f4@2 ~@4 d4 ~ f4@2 ~@6",
})).s("gm_lead_2_sawtooth").gain(0.2).pan(0.2)

// bass · lead 8 bass lead · "BASS&LEAD"
const bass_5 = note(`<
  ~@41 A B A B A B A ~ A B A B A B A ~ A B A B A B A ~ A B A ~ A B A B A B A ~ A B A B A B A ~ C D C D C D C E A B A B A
  B A ~ A B A B A B A B ~@9
>`.pickRestart({
  A: "~@2 d3!2 ~@2 d3!2 ~@2 d3!2 ~@2 d3!2", B: "~@2 d3!2 ~@2 d3!2 ~@2 d3!2 ~@2 c3!2",
  C: "~@2 [d3,c4] d3 d4 ~ d3!2 ~@2 [d3,c4] d3 d4 ~ d3!2", D: "~@2 [d3,c4] d3 d4 ~ d3!2 ~@2 [d3,c4] d3 d4 ~ c3!2",
  E: "~@2 c4 ~ d4 ~@5 c4 ~ d4 ~@3",
})).s("gm_lead_8_bass_lead").gain(0.43)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_3 = note("<~@91 A@2 ~@16 B C D E F G H I J>".pickRestart({
  A: "[~@14 [c2,c3,c4]@17 ~]/2", B: "~@4 d4@3 ~ d4 ~ d4 ~ d4 ~ d4@2", C: "~@2 d4@2 ~@2 d4 ~ d4 ~ d4 ~ d4!3 ~",
  D: "d4 ~ d4 ~ d4@3 ~ d4 ~ d4 ~ d4 ~ d4@2", E: "~@2 d4@2 ~@2 d4 ~ d4 ~ d4 ~ d4 ~ d5 ~",
  F: "c5 ~ f4 ~ d4@3 ~ d4 ~ d4 ~ d4 ~ d4@2", G: "~@2 d4@3 ~ d4 ~ d4 ~ d4 ~ d4!3 ~",
  H: "d4!3 ~ d4@3 ~ d4 ~ d4 ~ d4 ~ d4@2", I: "~@2 d4@3 ~ d4 ~ d4 ~ d4 ~ d4 ~@3", J: "~@2 d4 ~ f4@2 ~@10",
})).s("gm_lead_2_sawtooth").gain(0.27).pan(0)

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

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~ A@15 ~ A@7 B A@7 B A@7 B A@7 B A@7 B A@7 ~ A@11 B A@7 B A@7 ~ A@7 B A@7 ~ A@8 ~
>`.pickRestart({
  A: "x!4", B: "x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@15 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@11 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@8 ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.32)

// drums · china
const china = s("cr").struct("<~@25 x ~@7 x ~@7 [~ x ~ x ~ x ~ x]!8 ~@69>").gain(0.39)

// drums · china · soft notes
const china_soft = s("cr").struct("<~@41 [~ x!3] [x!4]!7 ~@69>").gain(0.06)

stack(
  bass, bass_2, lead_2_sawtooth, bass_3, bass_4, lead_2_sawtooth_2, bass_5, lead_2_sawtooth_3, kick, pedal_hat,
  open_hat, china, china_soft
)