Strudelify
Missing You cover art

No Brakes

Missing You

John Waite

KeyG majorTempo106 bpm
0:00/0:00
// Missing You — John Waite
// 106 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Lead Guit.
setcpm(106/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 · fretless bass · "Bass Gtr"
const bass = note(`<
  ~ A B C D A B C D A E C D A B C D F G C H A B C D A B C D F I C H A E J K A B C H A B J D A B J D A B C D F G J D A B
  C L A M C D F I C N O P C L A E C Q A B C L A E C D F I C R A B C R A B C R A B C R A B C R S
>`.pickRestart({
  A: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", B: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2 a1@2 b1@2",
  C: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2", D: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2",
  E: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ a1@2 b1@2", F: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  G: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ d2 ~ d2@2", H: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 f#1@2",
  I: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 d2@2", J: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  K: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 f#1 ~", L: "d2 ~ d2 ~ d2 ~ d2 ~ d2@2 c2@2 b1@2 a1@2",
  M: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2 a1@2 b1 ~", N: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ c2@2 b1@2",
  O: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", P: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 b1@2",
  Q: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 c2@2", R: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2 c2@2 b1@2", S: "g1",
})).s("gm_fretless_bass").gain(0.41)

// chords · overdriven guitar · "Lead Guit" · D5
const overdriven_guitar = note("<~@72 [~ [a3,d4] ~ a3 [a3,d4]@2 a3@2] ~@33>")
  .s("gm_overdriven_guitar").gain(0.25).pan(0.2)

// other · epiano2 · "E.Piano"
const epiano2 = note("<~@33 A@8 ~@16 A@8 ~@8 A@12 ~@4 A@16 B>".pickRestart({
  A: "[d5,d6] [g5,g6] [a5,a6] [b5,b6]", B: "[g5,g6]@15 ~",
})).s("gm_epiano2").gain(0.48).pan(0.2)

// other · marimba · D G A B G A G D …
const marimba = note(`<
  ~@33
  [[d5,d6] ~ [g4,g5] ~ [a4,a5] ~ [b4,b5] ~ [g4,g5] ~ [g4,g5] ~ [a4,a5] ~ [g4,g5] ~]!8
  ~@16
  [[d5,d6] ~ [g4,g5] ~ [a4,a5] ~ [b4,b5] ~ [g4,g5] ~ [g4,g5] ~ [a4,a5] ~ [g4,g5] ~]!48
  ~
>`).s("gm_marimba").gain(0.46).pan(0.9)

// chords · string ensemble 1 · "Pad"
const string_ensemble_1 = note("<~ A@8 ~@8 B@4 A@8 B@4 A@16 ~@4 C@4 D@16 A@8 ~@4 E@4 A@8 ~@9>".pickRestart({
  A: "[g3,a3,d4]/8", B: "[g4@10 f#4@6 a4@16 c5@16 d5@15 ~, d4@63 ~]/4", C: "[g4@5 f#4@4 a4@7 c5@8 d5@8, d4@63 ~]/4",
  D: "[[g3,a3,d4]@127 ~]/8", E: "[g4@10 f#4@8 a4@14 c5@16 d5@15 ~, d4@63 ~]/4",
})).s("gm_string_ensemble_1").gain(0.24).pan(0.3)

// other · electric guitar muted · "StaccGtr"
const electric_guitar_muted = note(`<
  ~ A@2 B C A@2 B C D@8 E@2 B C D@8 E@2 B C F@8 D@12 E@2 B C F@28 E@2 B C F@16 ~
>`.pickRestart({
  A: "[g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~", // G5
  B: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~", // C5
  C: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  D: "g3 ~ b3 ~ d4 ~ g3 ~ d4 ~ a3 ~ g3 ~ a3 ~",
  E: "[e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~ [e3,b3] ~", // E5
  F: "d4 ~ g3 ~ a3 ~ b3 ~ g3 ~ g3 ~ a3 ~ g3 ~",
})).s("gm_electric_guitar_muted").gain(0.31).pan(0.2)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~ A B C D E F G H ~@3 I ~@3 J ~@7 K ~@3 L ~@4 M N@2 O P N M Q ~@3 I ~@3 R ~@3 S ~@3 T M N@2 O P N M Q U@2 V@4 W X M
  N@2 O P N M O M N@2 O ~@3 T M N@2 O P N M O M N@2 O P N M O ~
>`.pickRestart({
  A: "~ b3 d4 g3 d4@2 ~@2, g3 ~@3", B: "g3@2 d4 ~ d4@3 a3", C: "g3@2 d4 ~@2 a3 g3 ~, ~@2 d4 ~",
  D: "~ b3 d4 c4@2 b3 a3@2, g3 ~@3", E: "~@2 d4 ~@3 g3 ~, g3 ~@3, ~ b3@2 ~ d4@4",
  F: "~@2 d4 ~@3 g3 a3, g3 ~@3, ~ b3@2 ~ d4@4", G: "~@2 d4 ~ d4@2 g3 a3, g3 ~@3, ~ b3@2 ~@5",
  H: "~ b3 d4 c4@2 b3 a3@2, g3@3 ~@5", I: "~ b3 ~ c4@2 b3 a3@2, ~ d4@3", J: "~@3 c4@2 ~@3, ~ d4@3",
  K: "~@3 c4@2 ~ a3@2, ~ b3@2 ~@5, ~ d4@3", L: "~@3 c4@2 ~@3, ~ b3@2 ~@5, ~ d4@3", M: "[d4,g4]@2 ~@4 [d4,g4]@7 ~@3",
  N: "[d4,g4] ~@2 [d4,g4]@3 ~@2", O: "~ [d4,g4]!2 d4 [e4,a4]@2 [e4,a4] ~", P: "[d4,g4] ~@5 [d4,g4]@6 ~@4",
  Q: "~@2 [d4,g4]@2 [d4,g4]@2 d4@2 [e4,a4]@4 [e4,a4]@3 ~", R: "~ b3 ~ c4@2 ~@3, ~ d4@3",
  S: "~ b3 ~ c4@2 b3 ~@2, ~ d4@3", T: "~ [a3,d4] ~ [a3,d4] [a3,d4]@2 [a3,d4]@2",
  U: "[e4@3 a3@2 g3@4 ~@2 a3@2 g3 a3 g3, ~@9 e4@5 ~@2]/2",
  V: "[~@2 c4@4 ~@6 c4@2 ~@4 c4@4 ~@6 c4@2 ~@12 g3@3 ~@5 a3@2 g3@2 ~@2 a3@2 g3@2 e4@2 g3@2, d4@5 ~ g3@7 ~ g3@4 ~@4 g3@7 ~ g3@4 ~@4 a3@8 ~@18, ~@5 d4@3 d4@2 ~@3 d4@3 e4@6 ~ e4@3 ~ e4@2 ~@3]/4",
  W: "~ c4@2 g3@2 d4 c4 g3, d4@3 ~@5", X: "~ c4 g3 ~ c4 g3 d4 g3, d4@2 ~ d4@2 ~@3",
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.8)

// chords · electric guitar clean · "Guitar" · soft notes
const electric_guitar_clean_2 = note("<~ A B C D E F G D ~@7 H ~@7 I ~@3 J ~@19 J ~@3 K ~@53>".pickRestart({
  A: "~@5 a3 g3 a3", B: "~ b3@2 g3@2 a3 g3 ~", C: "~ b3@2 g3@2 ~@2 a3", D: "~@3 g4@5", E: "~@3 g3@2 a3 ~ a3",
  F: "~@3 g3@2 a3 ~@2", G: "~@6 g3@3 ~ a3@2 ~@4", H: "~ b3 ~@3 b3 a3@2", I: "~@5 b3@3", J: "~@5 b3 a3@2", K: "~@3 a3",
})).s("gm_electric_guitar_clean").gain(0.24).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@3]!103 [x ~@2 x!2 ~@2 x] x>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<A B@31 C B@7 C B@15 C B@7 C B@6 D E B@15 E B@15 F ~>".pickRestart({
  A: "~@5 x!3", B: "~ x ~ x", C: "~@2 x ~@2 x!3", D: "~@2 x ~@2 x!2 ~", E: "~ x!2 ~@2 x!3", F: "~@4 x ~@5 x ~ x!2 ~@2",
})).gain(0.4)

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

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

// drums · tambourine
const tambourine = s("tb").struct("<~@33 A@7 B ~@16 A@7 B ~@8 A@7 B A@4 ~@4 A@7 B A@7 B ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!3",
})).gain(0.4)

stack(
  bass, overdriven_guitar, epiano2, marimba, string_ensemble_1, electric_guitar_muted, electric_guitar_clean,
  electric_guitar_clean_2, kick, snare, hihat, crash, tambourine
)