Strudelify

Hakke & zage

Gabber Piet

KeyB♭ majorTempo172 bpm
0:00/0:00
// Hakke & zage — Gabber Piet
// 172 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 lead 2 sawtooth (copy of ch 1 "Hakke & Z" piano)
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(172/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 · piano · "Hakke & Z"
const piano = note(`<
  A@4 ~@7 B@2 C@3 D E C F G B@2 C@3 D E C F G C@5 D E C F H B@4 ~@16 C@11 D E C F H B@2 C@3 D E C F G ~@16 C@3 D E C F G
  B@16 ~
>`.pickRestart({
  A: "[e5@5 eb5@3 e5@3 eb5@3 e5@3 b4@4 d5@3 c5@5 ~@10 a3@5 c4 ~@7 e1@3 ~@9, ~@29 a2@17 [g3,a3,b3]@3 [e2,f2,g2]@2 [f1,g1,a1]@3 ~@10, ~@29 a4@14 ~ e4@3 [d3,e3,f3]@3 [b1,c2,d2]@3 ~@11, ~@34 e3@11 [c4,d4]@3 [a2,b2,c3,e4]@4 ~@12]/4", // G Em F Dm Bm Csus2 Am
  B: "~@2 [f4,a4,bb4,d5] ~@3 [f4,a4,bb4,d5] ~@3 [f4,a4,bb4,d5] ~@3 [f4,a4,bb4,d5] ~", // Bbmaj7
  C: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~", // Bb
  D: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~", // Bb F
  E: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,eb5] ~@3 [f4,a4,eb5] ~", // F F7
  F: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~", // F
  G: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~", // F Bb
  H: "~@2 [f4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,bb4,d5] ~@3 [f4,a4,bb4,d5] ~", // F Bbmaj7
})).s("gm_piano").gain(0.31)

// bass · synth bass 1
const bass = note(`<
  ~@11 A B A@3 C D E F G A B A@3 C D E F G A B A@3 C D E F G ~@4 H@8 I@8 A@7 B A@3 C D E F G A B A@3 C D E F G H@8 I@8
  A@3 C D E F G A@3 B A@3 B A@3 B A@3 B ~
>`.pickRestart({
  A: "bb1@3 ~ f1@3 ~ bb1@3 ~ f1@3 ~", B: "bb1@3 ~ f1@3 ~ bb1@2 f1@2 g1@2 a1@2", C: "bb1@3 ~ f1@3 ~ c2@3 ~ f1@3 ~",
  D: "c2@3 ~ c2@3 ~ f1@3 ~ f1@3 ~", E: "bb1@3 ~ a1@3 ~ g1@3 ~ g1@3 ~", F: "f1@3 ~ c2@3 ~ f1@3 ~ c2@3 ~",
  G: "f1@3 ~ f1@3 ~ bb1@3 ~ f1@3 ~", H: "bb1 ~ bb2 ~ bb1 ~ bb2 ~ b1 ~ b2 ~ ab1 ~ ab2 ~", I: "bb1!16",
})).s("gm_synth_bass_1").gain(0.64)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@21 A@2 B@3 C D B E F ~@9 G A@4 H@8 ~@8 B@8 ~@8 A@2 B@3 C D B E F H@8 ~@16 A@16 ~
>`.pickRestart({
  A: "~ [f4,a4,bb4,d5]!2 ~@2 [f4,a4,bb4,d5]!2 ~@2 [f4,a4,bb4,d5]!2 ~@2 [f4,a4,bb4,d5]!2 ~", // Bbmaj7
  B: "~ [f4,bb4,d5]!2 ~@2 [f4,bb4,d5]!2 ~@2 [f4,bb4,d5]!2 ~@2 [f4,bb4,d5]!2 ~", // Bb
  C: "~ [f4,bb4,d5]!2 ~@2 [f4,bb4,d5]!2 ~@2 [f4,a4,c5]!2 ~@2 [f4,a4,c5]!2 ~", // Bb F
  D: "~ [f4,a4,c5]!2 ~@2 [f4,a4,c5]!2 ~@2 [f4,a4,eb5]!2 ~@2 [f4,a4,eb5]!2 ~", // F F7
  E: "~ [f4,a4,c5]!2 ~@2 [f4,a4,c5]!2 ~@2 [f4,a4,c5]!2 ~@2 [f4,a4,c5]!2 ~", // F
  F: "~ [f4,a4,c5]!2 ~@2 [f4,a4,c5]!2 ~@2 [f4,bb4,d5]!2 ~@2 [f4,bb4,d5]!2 ~", // F Bb
  G: "~@9 [f4,a4,bb4,d5]!2 ~@2 [f4,a4,bb4,d5]!2 ~", H: "bb2 ~ bb3 ~ bb2 ~ bb3 ~ b2 ~ b3 ~ ab2 ~ ab3 ~",
})).s("gm_lead_2_sawtooth").gain(0.25)

// chords · pad sweep
const pad_sweep = note("<~@45 A@8 ~@34 A@8 ~@33>".pickRestart({
  A: "[~ [bb4,c5,eb5,f5], [bb3,c4,eb4,f4]]/8", // Bbsus4
})).s("gm_pad_sweep").gain(0.33)

// other · trombone
const trombone = note(`<
  ~@11 A@2 B ~@7 A@2 B ~@7 A@2 B ~@7 B ~ B ~@17 B ~ B ~ B ~ B ~ B ~@7 A@2 B ~@23 B ~@7 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@2
>`.pickRestart({
  A: "~@8 [a3,bb3]@3 ~ [a3,bb3]@3 ~", B: "bb3@4 f3@3 ~ bb3@4 f3@3 ~",
})).s("gm_trombone").gain(0.5).pan(0.7)

// chords · muted trumpet
const muted_trumpet = note(`<
  ~@11 A@2 B ~@7 A@2 B ~@7 A@2 B ~@7 B ~ B ~@17 B ~ B ~ B ~ B ~ B ~@7 A@2 B ~@23 B ~@7 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@2
>`.pickRestart({
  A: "~@8 [a4,bb4]@3 ~ [a4,bb4]@3 ~", B: "[a4,bb4]@4 [e4,f4]@3 ~ [a4,bb4]@4 [e4,f4]@3 ~",
})).s("gm_muted_trumpet").gain(0.35).pan(0.3)

// drums · clap
const clap = s("cp").struct("<~@11 [x!4]!42 ~@8 [x!4]!34 ~@8 [x!4]!24 ~>").gain(0.64)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@11 [~ x ~ x ~ x ~ x]!42 ~@8 [~ x ~ x ~ x ~ x]!34 ~@8 [~ x ~ x ~ x ~ x]!24 ~>")
  .gain(0.72)

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

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@7 A@2 B C@4 D C D C D C D C@3 D C D C D C D C@3 D C D C D C D C D C D C D C D C D C D A ~@7 C D C D C D C D C D C D
  C D C D C@3 D C D C D C D C D C D C D C D A ~@7 C D C D C D C D C D C D C D C D C D C D C D C D A
>`.pickRestart({
  A: "x", B: "x!2", C: "x!4", D: "x ~@3 x ~@3 x ~@3 x ~@2 x",
})).gain(0.64)

// drums · ht
const ht = s("ht").struct("<~@45 [~@4 x ~@2 x ~ x ~@2 x ~@3]!8 ~@34 [~@4 x ~@2 x ~ x ~@2 x ~@3]!8 ~@33>").gain(0.48)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@20 A ~@9 A ~@9 A ~@23 A ~@3 A ~@7 A ~@9 A ~@23 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "x!5 ~ x!5 ~ x ~ x!2",
})).gain(0.64)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct(`<
  ~@3 A B C D E@2 F G ~@33 H ~@6 I@2 ~@6 I@2 E G E G E G E G ~@24 I@2 ~@6 I@2 ~@8 E G E G E G E G E G E G E G E G ~
>`.pickRestart({
  A: "x ~@4 x ~@4 x ~@5", B: "x ~@4 x ~@5 x ~@4", C: "x ~@4 x ~@4 x ~@4 x", D: "~@4 x ~@5 x ~@4 x", E: "~@15 x",
  F: "~@7 x ~@7 x", G: "~@3 x ~@3 x ~@3 x ~@4", H: "~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x ~@2", I: "x!16",
})).gain(2.42)

stack(
  piano, bass, lead_2_sawtooth, pad_sweep, trombone, muted_trumpet, clap, pedal_hat, crash, ride_bell, ht, shaker,
  jingle_bells
)