Strudelify

Hope Work That We Do DJs

Sublime

KeyC majorTempo99 bpm
0:00/0:00
// Hope Work That We Do DJs — Sublime
// 99 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(99/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 · electric guitar clean · "TabIt MIDI - Track 2"
const electric_guitar_clean = note(`<
  ~@5 A@4 B@2 C D A@8 B@2 C D A@8 B@2 C D A@7 ~ B@2 C D ~@8 E F E F ~@21
>`.pickRestart({
  A: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // C
  B: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [e4,g4,b4] ~@3 [e4,g4,b4] ~", // Am Em
  C: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // F C
  D: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~", // G
  E: "~@2 [e4,g4,c5]!2 ~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~", // C
  F: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [g4,b4,d5] ~@3 [g4,b4,d5] ~", // F G
})).s("gm_electric_guitar_clean").gain(0.33)

// bass · electric bass finger · "TabIt MIDI - Track 3"
const bass = note(`<
  ~@5 A@4 B@2 C D A@8 B@2 C D E@8 B@2 C F@2 E@6 G B@2 C D H I H I H I ~@6 H I H I H I H I H I H I H I H I H I H I G
>`.pickRestart({
  A: "c2@3 g2 g1@2 b1@2 c2@3 c2 g1@2 b1@2", B: "a1@2 ~ a1 c2@2 a1@2 e2@2 ~ e2 g2@2 e2@2",
  C: "f2 ~ f2 ~ f2@3 f2 c2!2 b1 ~ c2@3 c2", D: "g1!2 f#1 ~ g1@3 g2 g2@2 g1 ~ g1@4",
  E: "c2@3 c2 g1@2 b1@2 c2@3 c2 g1@2 b1@2",
  F: "[g1!2 f#1 ~ g1@3 g2 g2@2 g1 ~@5 c2@3 c2 ~@2 b1@2 c2@3 c2 g1@2 b1@2, ~@3 g1@2 g1@2 ~]/2", G: "c2 ~@15",
  H: "c2@2 g2!2 ~ g2 ~ g2 ~ g2 ~ g2 f2@2 g2@2", I: "f1@2 ~ c2 c2@2 ~ f1 g1 d2 g2 ~ g2@4",
})).s("gm_electric_bass_finger").gain(0.37)

// other · electric guitar muted · "TabIt MIDI - Track 4"
const electric_guitar_muted = note(`<
  ~@9 A B C D E F ~@3 E@2 F A B C G@5 H@3 I A B C J@8 ~@13 K L K M ~@21
>`.pickRestart({
  A: "a2@3 c3@3 d3@2 e3@3 g3@3 a3@2", B: "a2@3 c3@3 d3@2 e3@3 g3@3 e3@2", C: "f3@3 a3@3 c4@2 c3@3 e3@3 g3@2", D: "g3",
  E: "c4@2 c4 a#3 g3@2 a#3@2 c4@2 c4 a#3 g3@2 a#3@2", F: "c4@2 c4 a#3 g3@3 a#3 c4 ~@7", G: "g3/5",
  H: "c3@2 c4 a#3 g3@3 g3 c4 a#3 g3@4 a#3@2", I: "c3@2 c4 a#3 g3@3 a#3 c4@2 c4!3 ~@3", J: "g3/8",
  K: "c3@2 c3!2 e3@2 g3 ~@2 c3 g3 e3 c3 e3 c3@2", L: "f3@2 f3 a3@3 c4 ~@2 g3 b3 g3 d4 b3 g3@2",
  M: "f3@2 f3 a3@3 c4 ~@2 g3 b3 g3 d4 b3 g3 ~",
})).s("gm_electric_guitar_muted").gain(0.52)

// other · orchestra hit
const orchestra_hit = note("<~@4 A B ~@10 C D ~@22 E F ~@40>".pickRestart({
  A: "~@4 c5@2 ~ c5@2 ~ c5@2 ~@2 a#4@2", B: "c5 ~@7", C: "~@8 c6!3 ~ c6 ~ a#5 ~", D: "c6 ~@15",
  E: "~@8 c5!3 ~ c5 ~ a#4 ~", F: "c5 ~@15",
})).s("gm_orchestra_hit").gain(0.64)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A@4 B@2 C B D@3 E D E D F B@2 C B D@3 E D E D F B@2 C B D E C D E@3 G B@2 C B C@6 ~@6 C@20 ~
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@4 x ~ x!2 ~@4 x ~@3", C: "~ x ~ x", D: "x ~@2 x ~@2 x ~ x ~@2 x ~@4",
  E: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", F: "x ~@2 x ~@2 x ~@9", G: "x",
})).gain(0.54)

// drums · low tom
const low_tom = s("lt").struct("<~@8 [~@14 x!2] ~@11 [~@14 x!2] ~@11 [~@14 x!2] ~@49>").gain(0.54)

// drums · hihat
const hihat = s("hh").struct("<~@5 A@4 B@4 A@8 B@4 A@8 B@4 A@2 B A@4 C B@10 ~@6 B@20 ~>".pickRestart({
  A: "x!7 ~ x!8", B: "x!16", C: "x",
})).gain(0.54)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@11 A ~@11 A ~@11 B ~@37>".pickRestart({
  A: "~@12 x!4", B: "~@13 x!3",
})).gain(0.54)

// drums · open hat
const open_hat = s("oh").struct("<~@5 A@4 ~@4 A@8 ~@4 A@8 ~@4 A@2 ~ A@4 ~@38>".pickRestart({
  A: "~@7 x ~@8",
})).gain(0.54)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@11 A ~@11 A ~@11 B ~@37>".pickRestart({
  A: "~@9 x!5 ~@2", B: "~@13 x!2 ~",
})).gain(0.54)

// drums · crash
const crash = s("cr").struct("<~@9 A ~@3 A ~@7 A ~@3 A ~@7 A ~@11 A ~@36>".pickRestart({
  A: "x",
})).gain(0.54)

stack(
  electric_guitar_clean, bass, electric_guitar_muted, orchestra_hit, kick, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom, crash
)

More by Sublime