Strudelify
Pump Up the Jam cover art

Pump Up The Jam

Pump Up the Jam

Technotronic

KeyC minorTempo124 bpm
0:00/0:00
// Pump Up the Jam — Technotronic
// 124 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 161 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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 · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  ~@3 A ~@3 B ~@3 B ~@3 B ~@7 B ~@7 B ~@7 B C@2 D@2 C@2 E@2 C@2 D@2 C@2 F@2 ~@3 B ~@3 B ~@3 B ~@11 B ~@7 B ~@7 B C@2 G@2
  C@2 H@2 ~@3 B ~@3 B ~@3 B ~@7 B ~@3 B ~@3 B ~@3 B ~@7 B ~@6 E@2 C@2 D@2 C@2 E@2 I
>`.pickRestart({
  A: "~@7 [f2,f3,ab3,c4]@2 ~ [f2,f3,ab3,c4] ~ [g2,g3,bb3,d4] ~ [g2,g3,bb3,d4]@2", // Fm Gm
  B: "~@7 [f2,ab3,c4]@2 ~ [f2,f3,ab3,c4] ~ [g3,d4]@2 [g2,g3,bb3,d4]@2, ~@7 f3 ~@4 [g2,bb3] ~@3", // Fm G5 Gm
  C: "[[eb4,bb4]@31 ~]/2", // Eb5
  D: "[~@23 [f2,ab3,c4]@2 ~ [f2,f3,ab3,c4] ~ [g3,d4]@2 [g2,g3,bb3,d4]@2, [eb4,g4]@15 ~, ~@23 f3 ~@4 [g2,bb3] ~@3]/2", // Fm G5 Gm Eb Gm
  E: "[[eb4,g4]@15 ~]/2", F: "[eb4,g4]/2",
  G: "[gb4 ~@22 [f2,ab3,c4]@2 ~ [f2,f3,ab3,c4] ~ [g3,d4]@2 [g2,g3,bb3,d4]@2, [eb4,g4]@15 ~, ~@23 f3 ~@4 [g2,bb3] ~@3]/2", // Fm G5 Gm Eb Gm
  H: "[[eb4,g4]@31 ~]/2", I: "[c4,eb4,g4]@2 ~ [eb4,g4] ~ [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@7, ~@3 c4@2 ~@11",
})).s("gm_pad_poly").gain(0.49).pan(0.6)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  A ~ B ~ B ~ B ~ A ~ B ~ B C ~@2 D E F ~ D E F ~ G H@2 I H@2 J ~ H@2 K L G M H N H O H I H@3 P G M H N G M H N G M H N
  G M H N G M H N G M H N G M H N G M H P G M H N G M H N G M H N G M H N G M H N G M H P G M H N G M H N G M H N G M H
  N G M H N G M H N G M H N G M H N G M H N G M H N G M H N G M H N G M H P G M H N Q
>`.pickRestart({
  A: "c2 ~@7", B: "c2@3 ~@13", C: "~@10 e2 ~ e2 eb2@3", D: "c2 ~@2 c2 ~@2 c2@2 ~@2 c2 d2 eb2@3 ~",
  E: "c2@2 ~ c2@2 ~ c2 ~@9", F: "c2@2 ~ c2 ~@2 c2@3 ~ c2 d2 eb2@4", G: "c2@2 ~ c2@3 ~@3 c2 ~ d2 eb2@3 ~",
  H: "c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~", I: "c2@2 ~ c2@2 ~@4 f2 ~ d2 eb2@3 ~", J: "c2@2 ~ c2@2 ~@5 c2 d2 eb2@3 ~",
  K: "c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@2 ~@2", L: "f2@3 eb2@3 ~@10", M: "c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@4",
  N: "c2@2 ~ c2@2 ~@4 f2 ~ d2 eb2@2 ~@2", O: "c2@2 ~ c2 ~@5 c2 ~ d2 eb2@3 ~", P: "c2@2 ~ c2@2 ~@11",
  Q: "c2@2 ~ c2@2 c2@2 ~ c2 ~@7",
})).s("gm_synth_bass_2").gain(0.49)

// chords · pad poly · "POLYSYNTH"
const pad_poly_2 = note("<~@24 A@2 B C A@2 B C ~@4 C ~@43 A@2 B C A@2 B C ~@52 C ~@3 A@2 B C ~@13>".pickRestart({
  A: "[c4,eb4,g4]@3 ~@9 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~", B: "[c4,eb4,g4]@2 ~@10 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~",
  C: "[c4,eb4,g4]@3 ~@13", // Cm
})).s("gm_pad_poly").gain(0.44).pan(0.4)

// bass · electric bass finger · "FINGERDBAS"
const bass_2 = note(`<
  A ~ B ~ A ~ B ~ A ~ B ~ B C D ~ E@2 F@2 E@2 F@2 G@8 H@4 I@4 J@8 K@24 L@8 K@16 L@8 K@48 M@4 N ~@4
>`.pickRestart({
  A: "~@3 c2@4 ~@9", B: "~@3 c2@5 ~@8", C: "~@13 e2 ~ e2", D: "eb2@3 ~@13",
  E: "[~@3 c2 ~@2 c2 ~@2 c2@2 ~@2 c2 d2 eb2@3 ~ c2@2 ~ c2@2 ~ c2 ~@6]/2",
  F: "[~@3 c2@2 ~ c2 ~@2 c2@3 ~ c2 d2 eb2@4 ~@13]/2",
  G: "[~@3 c2@2 ~ c2@3 ~@3 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 f2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@5 c2 d2 eb2@3 ~@14]/8",
  H: "[~@3 c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@2 ~@2 f2@3 eb2@3 ~@7]/4",
  I: "[~@3 c2@2 ~ c2@3 ~@3 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@4 c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 f2 ~ d2 eb2]/4",
  J: "[~@3 c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@3 ~ c2@2 ~ c2 ~@5 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 f2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@8]/8",
  K: "[~@3 c2@2 ~ c2@3 ~@3 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@4 c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 f2 ~ d2 eb2@2 ~@2 c2@2 ~ c2@3 ~@3 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@4 c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 f2 ~ d2 eb2]/8",
  L: "[~@3 c2@2 ~ c2@3 ~@3 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@4 c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 f2 ~ d2 eb2@2 ~@2 c2@2 ~ c2@3 ~@3 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~@2 eb2@4 c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@8]/8",
  M: "[~@3 c2@2 ~ c2@3 ~@3 c2 ~@2 eb2@3 ~ c2@2 ~ c2@2 ~@7 eb2@4 c2@2 ~ c2@2 ~@7 eb2@3 ~ c2@2 ~ c2@2 ~@8]/4",
  N: "~@3 c2@2 ~ c2@3 ~@7",
})).s("gm_electric_bass_finger").gain(0.22)

// bass · electric bass finger · "FINGERDBAS" · soft notes
const bass_soft = note(`<
  ~@24 A@3 ~ A@2 ~@4 A ~ A@2 ~@2 A@3 ~ A ~@3 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2
  ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2
  A@2 ~@2 A@2 ~@2 A B@2 ~ C@5
>`.pickRestart({
  A: "~@14 d2 ~", B: "~@12 c2 ~ d2 ~",
  C: "[~@12 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@4 c2@2 ~ c2@2 ~@4 c2 ~ d2 eb2@3 ~ c2@2 ~ c2@2 ~@4 f2 ~ d2 eb2@2 ~@15]/5",
})).s("gm_electric_bass_finger").gain(0.16)

// bass · synth bass 2 · "SYN BASS 2"
const bass_3 = note("<A ~ B ~ A ~ B ~ A ~ B ~ B ~ C ~@146>".pickRestart({
  A: "~@3 c2@2 ~@3", B: "~@6 c2@5 ~@5", C: "e2 ~ e2 eb2@3 ~@10",
})).s("gm_synth_bass_2").gain(0.2).pan(0.3)

// bass · electric bass finger · "FINGERDBAS"
const bass_4 = note("<A ~ B ~ A ~ B ~ A ~ B ~ B ~ C ~@146>".pickRestart({
  A: "~@9 c2@4 ~@3", B: "~@9 c2@5 ~@2", C: "~@3 e2 ~ e2 eb2@3 ~@7",
})).s("gm_electric_bass_finger").gain(0.1).pan(0)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<~@64 A@2 B C D B A E ~@40 A@2 B C D B A E ~@41>".pickRestart({
  A: "c4 ~@2 ab4 ~@2 eb4 ~@2 c4 ~ d4 eb4@2 d4@2", B: "c4 ~@2 ab4 ~@2 eb4 ~@2 c4 ~ d4 eb4@2 d4 ~", C: "c4 ~@7",
  D: "c4 ~@2 ab4@2 ~ eb4 ~@2 c4 ~ d4 eb4@2 d4@2", E: "c4 ~@15",
})).s("gm_lead_2_sawtooth").gain(0.44)

// drums · kick
const kick = s("bd").struct("<~@4 A@11 ~ A@19 B A@11 B A@15 C A@15 C A@24 ~@4 A@19 C A@7 C A@19 C A@4 D>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x ~@2 x ~@2 x ~@9", D: "x ~@2 x ~ x ~@2 x ~@7",
})).gain(0.49)

// drums · clap
const clap = s("cp").struct("<~@16 [~ x ~ x]!88 ~@8 [~ x ~ x]!43 [~ x ~@2] ~@5>").gain(0.55)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@80 [~@5 x ~@2] [~ x ~@3 x ~@2]!3 [~ x ~@6] ~@70 [~@3 x] [~ x ~ x]!4 ~>").gain(0.22)

// drums · snare
const snare = s("sd").struct(`<
  ~@23 A B@3 C B@3 D B C@2 E B@2 F C B@2 C@2 B C@2 E B@2 C G B C B H B C B I B@3 J B@2 C G K C@2 B F B C L B F B J ~@8
  B@3 M B@3 N B@2 O C B O B P ~@7 N B O@2 Q B O@2 Q B@3 A B C@2 J B C@2 J B C@2 J B C@2 J B C@2 J B C@2 J B C@2 J B O@2
  R S ~@4
>`.pickRestart({
  A: "~@8 x!2 ~ x!2 ~ x!2", B: "~ x ~ x", C: "~@4 x ~@6 x!3 ~@2", D: "~@3 x!3 ~ x!2 ~ x ~ x ~ x!2",
  E: "~@3 x!3 ~ x!3 ~ x!3 ~@2", F: "~@4 x ~@6 x!2 ~@3", G: "~@4 x ~@6 x!3 ~ x", H: "~@4 x ~@2 x!2 ~ x ~ x ~ x!2",
  I: "~@4 x ~@2 x!3 ~ x!2 ~ x!2", J: "x ~@2 x ~@2 x ~@4 x!5", K: "x!2 ~ x", L: "~@4 x ~@6 x!2 ~ x ~",
  M: "~@4 x ~@3 x!2 ~ x!2 ~ x ~", N: "~@7 x!3 ~ x!2 ~ x!2", O: "~@4 x ~@7 x!2 ~@2", P: "~@3 x!3 ~ x!3 ~ x ~@4",
  Q: "~@4 x ~@7 x!2 ~ x", R: "x ~@2 x ~@2 x ~@9", S: "~ x ~@2",
})).gain(0.49)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@98 A ~@2 A ~@11 A@3 ~ A@3 ~@3 B ~@29 A@2 C D E@2 F ~>".pickRestart({
  A: "~@11 x ~@4", B: "~@7 x ~@8", C: "~@11 x!5", D: "~@3 x", E: "~@4 x ~@6 x!3 ~@2", F: "x ~@2 x ~@2 x ~@4 x!5",
})).gain(0.27)

// drums · low tom
const low_tom = s("lt").struct("<~@56 [~ x ~@2] ~@3 [~ x ~@2] ~@100>").gain(0.27)

// drums · hihat
const hihat = s("hh").struct("<[x!16]!15 x [x!4]!64 ~@4 [x!4]!20 ~@8 [x!4]!48 x>").gain(0.33)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [~ x ~ x ~ x ~ x]!64 ~@4 [~ x ~ x ~ x ~ x]!20 ~@8 [~ x ~ x ~ x ~ x]!48 ~>")
  .gain(0.38)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@16 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~@4 A B@3 A B@3 A
  B@3 A B@3 A B@3 ~@4 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~
>`.pickRestart({
  A: "x ~ x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2",
})).gain(1.94)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@16 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~@4 A B@3 A B@3 A
  B@3 A B@3 A B@3 ~@4 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~
>`.pickRestart({
  A: "~ x!3", B: "x!4",
})).gain(0.38)

stack(
  pad_poly, bass, pad_poly_2, bass_2, bass_soft, bass_3, bass_4, lead_2_sawtooth, kick, clap, clap_soft, snare,
  snare_soft, low_tom, hihat, open_hat, cabasa, shaker
)

More by Technotronic