Strudelify

Hard Times

Westbam

KeyE♭ minorTempo136 bpm
0:00/0:00
// Hard Times — Westbam
// 136 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "MARIMBA" marimba (copy of ch 1 "VIBRAFOON" vibraphone)
// note: Full arrangement: all 184 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(136/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 · fiddle
const fiddle = note(`<
  ~@72 A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H A
  B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H ~@24
>`.pickRestart({
  A: "[ab2,db3]@3 ~@6 [ab2,db3]@2 ~@13", B: "[ab2,db3]@3 ~@6 [ab2,db3]@3 ~@3 [ab2,db3]@2 ~@2 [b2,e3]@2 ~@3",
  C: "[db3,gb3] ~@2 [db3,gb3] ~@4", D: "[db3,gb3]@3 ~@6 [db3,gb3]@3 ~@3 [db3,gb3]@3 ~ gb3@2 ~@3, ~@19 db3 ~@4",
  E: "[e3,a3]@2 ~@7 [e3,a3]@2 ~@13", F: "[e3,a3]@3 ~@6 [e3,a3]@3 ~@3 [e3,a3]@3 ~ [e3,a3]@2 ~@3",
  G: "[gb3,b3]@2 ~@7 [gb3,b3]@3 ~@9 b3@2 ~, ~@21 gb3 ~@2", // B5
  H: "[ab3,c4]@3 ~@6 [ab3,c4]@4 ~@2 [ab3,c4]@3 ~ [ab3,c4]@2 ~@3", // Ab
})).s("gm_fiddle").gain(0.41)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@48 A@8 B@2 C@2 D E F G B@2 C@2 D E F G H@2 I@2 J K L M H@2 I@2 J K L M N@2 O@2 P Q R S N@2 O@2 P Q R S H@2 I@2 J K L
  M B@2 C@2 D E F G B@2 C@2 D E F G B@2 C@2 D E F G B@2 C@2 D E F M H@2 I@2 J K L M N@2 O@2 P Q R S T@4 ~@20
>`.pickRestart({
  A: "db5 ~@5 db5 ~@2 eb5 ~@2 e5 ~@2 eb5 ~@2 ab5 ~@2 eb5 ~@2",
  B: "db2@4 db2 ~ db5 ~@2 [db2,eb5] ~@2 e5 ~@2 eb5 ~@2 ab5 ~@2 eb5 ~@2, db5 ~@23", // Dbsus2
  C: "gb2@4 gb2 ~ db5 ~@2 [gb2,eb5] ~@2 e5 ~@2 eb5 ~@2 ab5 ~@2 eb5 ~@2, db5 ~@23", // Ebm
  D: "a2@4 a2 ~ db5 ~@2 [a2,eb5] ~@2 e5 ~@2 eb5 ~@2 ab5 ~@2 eb5 ~@2, db5 ~@23", // Adim
  E: "a2@4 a2 ~ db5 ~@2 [a2,eb5] ~@2 e5 ~@2 eb5 ~@2 ab5 ~@2 [a2,eb5] ~@2, db5 ~@23", // Adim
  F: "b2@4 b2 ~ db5 ~@2 [b2,eb5] ~@2 e5 ~@2 eb5 ~@2 ab5 ~@2 [b2,eb5] ~@2, db5 ~@23", // B
  G: "c3@4 c3 ~ db5 ~@2 [c3,eb5] ~@2 e5 ~@2 eb5 ~@2 ab5 ~@2 eb5 ~@2, db5 ~@23", H: "db2@4 db2 ~@4 db2 ~@14",
  I: "gb2@4 gb2 ~@4 gb2 ~@14", J: "a2@4 a2 ~@4 a2 ~@14", K: "a2@4 a2 ~@4 a2 ~@11 a2 ~@2",
  L: "b2@4 b2 ~@4 b2 ~@11 b2 ~@2", M: "c3@4 c3 ~@4 c3 ~@14",
  N: "db2@3 db5 db2 ~ eb5 ~@2 e5@2 ~@4 db5 ~@5 db5 ~@2, ~@9 db2 ~@14",
  O: "gb2@3 db5 gb2 ~ eb5 ~@2 e5@2 ~@4 db5 ~@5 db5 ~@2, ~@9 gb2 ~@14",
  P: "a2@3 db5 a2 ~ eb5 ~@2 e5@2 ~@4 db5 ~@5 db5 ~@2, ~@9 a2 ~@14",
  Q: "a2@3 db5 a2 ~ eb5 ~@2 e5@2 ~@4 db5 ~@5 [a2,db5] ~@2, ~@9 a2 ~@14", // A
  R: "b2@3 db5 b2 ~ eb5 ~@2 e5@2 ~@4 db5 ~@5 [b2,db5] ~@2, ~@9 b2 ~@14", // Bsus2
  S: "c3@3 db5 c3 ~ eb5 ~@2 e5@2 ~@4 db5 ~@5 db5 ~@2, ~@9 c3 ~@14", T: "~@3 db5 ~@2 eb5 ~@2 e5@2 ~@4 db5 ~@5 db5 ~@2",
})).s("gm_lead_2_sawtooth").gain(0.41)

// chords · lead 2 sawtooth · soft notes
const lead_2_sawtooth_soft = note("<~@48 A@24 ~@16 B C@15 D ~@7 A@32 ~@8 E F@11 D ~@19>".pickRestart({
  A: "~@2 db5 ~@5 db5 ~@2 eb5 ~@2 e5 ~@2 eb5 ~@2 ab5 ~@2 eb5", B: "~@6 db5 ~ eb5 ~@3 e5@2 ~@4 db5 ~@5",
  C: "db5 ~@5 db5 ~ eb5 ~@3 e5@2 ~@4 db5 ~@5", D: "db5 ~@23", E: "~@5 db5 ~@2 eb5 ~@2 e5@2 ~@5 db5 ~@5",
  F: "db5 ~@4 db5 ~@2 eb5 ~@2 e5@2 ~@5 db5 ~@5",
})).s("gm_lead_2_sawtooth").gain(0.26)

// other · orchestra hit · "ORCHESTHI"
const orchestra_hit = note(`<
  ~@8 A ~@6 B A ~@6 B A ~@7 A ~@3 A ~@2 B A ~@7 A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@6 B
  A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@7
>`.pickRestart({
  A: "[db5,db6]@23 ~", B: "~@6 db6@2 ~@4 [db5,db6] ~@2 [db5,db6] ~@2 [db5,db6] ~@2 [db5,db6] ~@2, ~@6 db5 ~@17",
})).s("gm_orchestra_hit").gain(0.31)

// other · orchestra hit · "ORCHESTHI" · soft notes
const orchestra_hit_soft = note(`<
  ~@15 A ~@7 A ~@15 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A
  ~@8
>`.pickRestart({
  A: "db5 ~@11, db6 ~@23",
})).s("gm_orchestra_hit").gain(0.15)

// chords · fiddle
const fiddle_2 = note(`<
  ~@72 A B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H I
  B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H J ~@23
>`.pickRestart({
  A: "~@5 [ab2,db3]@3 ~@5 [ab2,db3]@2 ~@9", B: "~@4 [ab2,db3]@3 ~@6 [ab2,db3]@3 ~@3 [ab2,db3]@2 ~@3",
  C: "[b2,e3]@2 ~@2 [db3,gb3]@3 ~@6 [db3,gb3]@3 ~@8", D: "~@4 [db3,gb3]@3 ~@6 [db3,gb3]@3 ~@3 [db3,gb3]@3 ~@2",
  E: "gb3@2 ~@2 [e3,a3]@2 ~@7 [e3,a3]@2 ~@9, db3 ~@23", F: "~@4 [e3,a3]@3 ~@6 [e3,a3]@3 ~@3 [e3,a3]@3 ~@2",
  G: "[e3,a3]@2 ~@2 [gb3,b3]@2 ~@7 [gb3,b3]@3 ~@8", // A5 B5
  H: "~ b3@2 ~ [ab3,c4]@3 ~@6 [ab3,c4]@4 ~@2 [ab3,c4]@3 ~@2, ~ gb3 ~@22", // Ab
  I: "[ab3,c4]@2 ~@3 [ab2,db3]@3 ~@5 [ab2,db3]@2 ~@9", J: "[ab3,c4] ~@11",
})).s("gm_fiddle").gain(0.2)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_2 = note(`<
  ~@72 A B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H I
  B C D E F G H I B C D E F G H I B C D E F G H I B C D E F G H J ~@23
>`.pickRestart({
  A: "~@5 [ab3,db4]@3 ~@5 [ab3,db4]@2 ~@9", B: "~@4 [ab3,db4]@3 ~@6 [ab3,db4]@3 ~@3 [ab3,db4]@2 ~@3",
  C: "[b3,e4]@2 ~@2 [db4,gb4]@3 ~@6 [db4,gb4]@3 ~@8", D: "~@4 [db4,gb4]@3 ~@6 [db4,gb4]@3 ~@3 [db4,gb4]@3 ~@2",
  E: "gb4@2 ~@2 [e4,a4]@2 ~@7 [e4,a4]@2 ~@9, db4 ~@23", F: "~@4 [e4,a4]@3 ~@6 [e4,a4]@3 ~@3 [e4,a4]@3 ~@2",
  G: "[e4,a4]@2 ~@2 [gb4,b4]@2 ~@7 [gb4,b4]@3 ~@8", // A5 B5
  H: "~ b4@2 ~ [ab4,c5]@3 ~@6 [ab4,c5]@4 ~@2 [ab4,c5]@3 ~@2, ~ gb4 ~@22", // Ab
  I: "[ab4,c5]@2 ~@3 [ab3,db4]@3 ~@5 [ab3,db4]@2 ~@9", J: "[ab4,c5] ~@11",
})).s("gm_lead_2_sawtooth").gain(0.2)

// chords · dulcimer · "SANTUR"
const dulcimer = note("<~@120 A@8 B@32 C@7 D@8 ~@9>".pickRestart({
  A: "[db5 ~ db5 ~@3 db5 ~ db5 eb5 ~ eb5 e5 ~ e5 eb5 ~ eb5 ab5 ~ ab5 eb5 ~@2 db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 eb5, ~@23 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@3]/8",
  B: "[db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 eb5, ~@11 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@3]/8",
  C: "[db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 ~ db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 eb5, ~@11 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@2 eb5@10 ~@2 eb5@4 ~@2 eb5@4 ~@3]/7",
  D: "[db5 ~ db5 ~@3 db5 ~ db5 eb5@2 ~ e5 ~ e5 eb5@2 ~ ab5 ~ ab5 eb5@2 eb5@169, ~@11 eb5@4 ~@2 eb5@4 ~@171]/8",
})).s("gm_dulcimer").gain(0.2)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_3 = note(`<
  ~@56 A@2 B@2 C@2 D E F@2 G@2 H@2 D E I J K L M N O P I J K L M N O P I J K L M N O P I J K L M N O P I J K L M N O P I
  J K L M N O P I J K L M N O P I J K L M N O P I J K L M N O P I J K L M N O P I J K L M N O P ~@24
>`.pickRestart({
  A: "~@3 db2@4 ~ db2 ~@3 db2 ~@11", B: "~@3 gb2@4 ~ gb2 ~@3 gb2 ~@11", C: "~@3 a2@4 ~ a2 ~@3 a2 ~@11",
  D: "a2 ~@2 b2@4 b2 ~@4 b2 ~@11", E: "b2 ~@2 c3@4 c3 ~@4 c3 ~@11", F: "~@3 db2@4 db2 ~@4 db2 ~@11",
  G: "~@3 gb2@4 gb2 ~@4 gb2 ~@11", H: "~@3 a2@4 a2 ~@4 a2 ~@11", I: "[ab3,db4]@3 ~@6 [ab3,db4]@2 ~@13",
  J: "[ab3,db4]@3 ~@6 [ab3,db4]@3 ~@3 [ab3,db4]@2 ~@2 [b3,e4]@2 ~@3", K: "[db4,gb4] ~@2 [db4,gb4] ~@4",
  L: "[db4,gb4]@3 ~@6 [db4,gb4]@3 ~@3 [db4,gb4]@3 ~ gb4@2 ~@3, ~@19 db4 ~@4", M: "[e4,a4]@2 ~@7 [e4,a4]@2 ~@13",
  N: "[e4,a4]@3 ~@6 [e4,a4]@3 ~@3 [e4,a4]@3 ~ [e4,a4]@2 ~@3", O: "[gb4,b4]@2 ~@7 [gb4,b4]@3 ~@9 b4@2 ~, ~@21 gb4 ~@2",
  P: "[ab4,c5]@3 ~@6 [ab4,c5]@4 ~@2 [ab4,c5]@3 ~ [ab4,c5]@2 ~@3", // Ab
})).s("gm_lead_2_sawtooth").gain(0.41)

// chords · pad sweep · "SWEEPPAD"
const pad_sweep = note("<~@104 A@32 ~@48>".pickRestart({
  A: "[ab5@47 gb5@48 a5@48 b5@24 ab5@25, db6]/8",
})).s("gm_pad_sweep").gain(0.15)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A@8 B ~ B ~ B ~ B@2 A@8 ~@4 A@12 B ~ B ~@5 C@16 ~@8 A@24 ~@16 C@24 ~@8 A@24 ~@8
>`.pickRestart({
  A: "x ~@2 x ~ x ~ x", B: "x", C: "x!4",
})).gain(0.51)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@56 [~@3 x ~ x ~@2]!16 ~@48 [~@3 x ~ x ~@2]!24 ~@40>").gain(0.31)

// drums · snare
const snare = s("sd").struct("<~@8 A@8 ~@8 A@8 ~@4 A@36 ~@8 A@24 ~@16 A@56 ~@8>".pickRestart({
  A: "~ x ~ x",
})).gain(0.51)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@19 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@5 A ~ A ~@7 A ~@7 A ~@7
  A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "~@7 x",
})).gain(0.41)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A B A B A B A B A B A B A B A B ~@8 A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@24 A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~ x ~@6", B: "x!2 ~@2",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@19 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@5 A ~ A ~@7 A ~@7 A ~@7
  A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "~@18 x!2 ~@4",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B A B A B A B A B A B A B A B ~@8 A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@24 A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x ~@4 x", B: "~ x ~@6",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@19 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@7 A ~@5 A ~ A ~@7 A ~@7 A ~@7
  A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "~@4 x!2 ~@2",
})).gain(0.41)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@62 A ~@7 A ~@55 A ~@7 A ~@7 A ~@41>".pickRestart({
  A: "~@3 x ~@4",
})).gain(2.34)

// drums · shaker
const shaker = s("sh").struct(`<
  [~ x ~ x ~ x ~ x]!16
  ~@8
  [~ x ~ x ~ x ~ x]!8
  ~@8
  [~ x ~ x ~ x ~ x]!64
  ~@24
  [~ x ~ x ~ x ~ x]!56
>`).gain(0.41)

stack(
  fiddle, lead_2_sawtooth, lead_2_sawtooth_soft, orchestra_hit, orchestra_hit_soft, fiddle_2, lead_2_sawtooth_2,
  dulcimer, lead_2_sawtooth_3, pad_sweep, kick, kick_soft, snare, low_tom, pedal_hat, mid_tom, open_hat, high_tom,
  cabasa, shaker
)