Strudelify
Workaholic cover art

Get Ready

Workaholic

2 Unlimited

KeyF minorTempo130 bpm
0:00/0:00
// Workaholic — 2 Unlimited
// 130 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · alto sax
const alto_sax = note(`<
  ~@5 A B A C A B A C ~@5 A B A C A B A C ~@19 D A B A C A B A C ~@20 D A B A C A B A C ~@10 A B A C A B A C ~@7 D A B A
  C A B A C ~
>`.pickRestart({
  A: "[f2,f3,f4] ~@2 [f2,f3,f4] ~@2 [f2,f3,f4] ~@2 [f2,f3,f4] ~@2 [gb2,gb3,gb4] ~ [eb2,eb3,eb4] ~", // F Gb Eb
  B: "[f2,f3,f4] ~@2 [f2,f3,f4] ~@2 [f2,f3,f4] ~@2 [f2,f3,f4] ~@2 [bb2,bb3,bb4] ~ [ab2,ab3,ab4] ~", // F Bb Ab
  C: "[f2,f3,f4] ~@2 [f2,f3,f4] ~@2 [f2,f3,f4] ~ [bb2,bb3,bb4] ~ [bb2,bb3,bb4] ~ [ab2,ab3,ab4] ~ [ab2,ab3,ab4] ~", // F Bb Ab
  D: "~@7 [bb2,bb3,bb4]", // Bb
})).s("gm_alto_sax").gain(0.52)

// chords · alto sax · soft notes
const alto_sax_soft = note(`<
  ~@5 A B A C A B A C ~@5 A B A C A B A C ~@19 D A B A C A B A C ~@20 D A B A C A B A C ~@10 A B A C A B A C ~@7 D A B A
  C A B A C ~
>`.pickRestart({
  A: "c3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 db3 ~ bb2 ~", B: "c3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 f3 ~ eb3 ~",
  C: "c3 ~@2 c3 ~@2 c3 ~ f3 ~ f3 ~ eb3 ~ eb3 ~", D: "~@7 f3",
})).s("gm_alto_sax").gain(0.33)

// bass · electric bass finger · "FINGERDBA"
const bass = note(`<
  ~@18 A B A B A B A B A B A B A B A B C D C E A B A F A B A G H B H B H B H B I A B A B A B A B C D C E A B A F A B A G
  H B H B H B H B I ~@13 H B H B A B A F A B A G H B H B H B H B I
>`.pickRestart({
  A: "eb1 f1 ~ eb1 f1 ~ eb1!2 f1!3 ~ eb1 ~ eb1 ~", B: "eb1 f1 ~ eb1 f1 ~ eb1!2 f1!2 eb1 ~ f1 ~ ab1 ~",
  C: "f1!3 ~ f1 ~ f1!2 ~ f1 ~ f1 eb1 ~ eb1 ~", D: "f1!3 ~ f1 ~ f1 ab1 ~ ab1 ~ ab1 f1 ~ ab1 ~", E: "f1 ~@15",
  F: "ab1 bb1 ~ ab1 bb1 ~ ab1 bb1!2 ab1 bb1 ~ bb1 ~ ab1 ~", G: "ab1 bb1 ~ ab1 bb1 ~ ab1 bb1!2 ab1!2 ~ bb1 ~ db2 ~",
  H: "eb1 f1 ~ eb1 f1 ~ eb1!2 f1!3 ~ gb1 ~ eb1 ~", I: "eb1 ~@15",
})).s("gm_electric_bass_finger").gain(0.46)

// bass · synth bass 1 · "SYN BASS"
const bass_2 = note(`<
  ~@18 A@8 ~@12 A@3 B A@3 B A@8 C ~@12 A@3 B A@3 B A@8 C ~@5 A@4 ~@4 A@7 B A@3 B A@8 C
>`.pickRestart({
  A: "f3!4 c3!2 eb3!2 f3!4 c3!2 eb3!2", B: "bb3!4 f3!2 ab3!2 bb3!4 f3!2 ab3!2", C: "f3 ~@15",
})).s("gm_synth_bass_1").gain(0.39).pan(0.3)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@37 A B C B D E F E G H@2 I ~@14 J@2 K A B C B D E F E G H@2 I ~@14 L ~@7 A B C B D E F E G H@2 I ~@6
>`.pickRestart({
  A: "~@10 f4 ~ ab4 ~ f4 ~", B: "[ab4,c5]@3 [f4,ab4]@6 ~ ab4@2 ~ ab4@2 ~",
  C: "[g4,bb4]@2 ~ [f4,ab4]@2 ~ [g4,bb4]@4 f4@2 ab4@2 f4@2", // Gm Fm Gm
  D: "[ab4,c5]@3 ~ bb4 ab4 [f4,bb4]@4 f4 ~ ab4 ~ f4 ~, ~@2 f4 ~@5", E: "[ab4,c5]@2 ~ [f4,ab4]@6 ~ ab4@2 ~ ab4@2 ~",
  F: "[g4,bb4]@2 ~ [f4,ab4]@2 ~ [g4,bb4]@4 f4@2 ab4 ~ f4 ~", // Gm Fm Gm
  G: "[ab4,c5]@2 ~@2 bb4 ab4 [f4,bb4]@4 f4@2 ab4 ~ f4 ~, ~@2 f4 ~@5", H: "[c5@25 c5@3 ~ c5@3]/2", I: "bb4 ab4@7 ~@8",
  J: "~@4 f4!2 ~ bb4 ~ ab4@6 ~", K: "~@4 f4!2 ~ ab4 ~ ab4 f4@6", L: "b4@2 ~ b4@2 ~ b4 bb4 ~ ab4@5 ~@2",
})).s("gm_piano").gain(0.8)

// chords · string ensemble 2 · "SLOWSTRIN"
const string_ensemble_2 = note("<~@38 A B A C A B A C ~@21 A B A C A B A C ~@26 A B A C A B A C ~@9>".pickRestart({
  A: "[f4,ab4,c5]", B: "[eb4,g4,bb4]", C: "[f4,bb4,d5]",
})).s("gm_string_ensemble_2").gain(0.46)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@26 A B A B A B A B ~@21 A B A B A B A B ~@55>".pickRestart({
  A: "[a3,d4,f4] ~@2 [a3,d4,f4] ~@3 [g3,c4,eb4]", // Dm Cm
  B: "[a3,d4,f4]@2 ~@4 [a3,d4,f4]@2 ~@2 [a3,d4,f4]@2 [c4,f4,ab4] ~ [c4,f4,ab4]@2", // Dm Fm
})).s("gm_overdriven_guitar").gain(0.56)

// other · timpani
const timpani = note("<A B@2 C D ~@8 E ~@70 E ~@33>".pickRestart({
  A: "c3!16", B: "c3!4 ~ c3!11, ~@4 g3@3 ~@9", C: "c3!4 ~ c3!7 ~ c3!3, ~@4 g3@3 ~@5 g3@3 ~",
  D: "c3!4 ~ c3!4 ~@7, ~@4 g3@3 ~@9", E: "c3 ~@15",
})).s("gm_timpani").gain(0.32)

// drums · kick
const kick = s("bd").struct("<~@9 A@4 ~@5 A@19 B A@16 B A@11 B A@16 B ~@5 A@4 ~@4 A@20 B>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@18 A@19 ~ A@16 ~ A@11 ~ A@16 ~@6 A@4 ~@4 A@2 B C A@16 ~>".pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@3", B: "~@4 x ~@2 x ~@4 x ~@2 x", C: "~ x ~@2 x ~ x!10",
})).gain(0.56)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@9 A@4 B ~@4 A@19 ~ A@16 B A@11 ~ A@16 B ~@5 A@4 B ~@3 A@20 B>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.16)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A@4 ~@5 A@19 ~ A@16 ~ A@11 ~ A@16 ~@6 A@4 ~@4 A@20 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@8 A ~@7 A ~@7 A ~@3 A ~@7 A ~@7 A@2 ~@7 A ~@3 A ~@7 A ~@7 A ~@13 A ~@3 A ~@7 A ~@7 A
>`.pickRestart({
  A: "x",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9 A@4 B C B C B A@8 D@8 A@3 E A@16 F D@8 A@3 E A@16 F B C B C B A@4 ~@4 A@20 G
>`.pickRestart({
  A: "x!16", B: "~@2 x ~@3 x ~ x ~ x!2 ~@2 x ~", C: "~@2 x ~@3 x ~ x ~@2 x ~@2 x ~", D: "~ x!2 ~@2 x!3 ~ x!3 ~ x!3",
  E: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", F: "x!4 ~@12", G: "x",
})).gain(0.4)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@13 A B A B A ~@8 C@8 ~@21 C@8 ~@21 A B A B A ~@29>".pickRestart({
  A: "~ x ~@2", B: "~@2 x ~@2 x ~@2", C: "x ~@2 x!2 ~@3 x ~@3 x ~@3",
})).gain(0.24)

// drums · cowbell
const cowbell = s("cb").struct("<~@34 [x ~@2 x]!3 ~@26 [x ~@2 x]!3 ~@52>").gain(0.32)

// drums · bongos
const bongos = s("bongo:4").struct("<~@13 A B A B A ~@66 A B A B A@2 B A B ~@25>".pickRestart({
  A: "~@6 x ~ x ~@2 x ~@2 x ~", B: "x ~@5 x ~@4 x ~@2 x ~",
})).gain(1.05)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@13 A B A B A ~@66 A B A B A@2 B A B ~@25>".pickRestart({
  A: "x ~ x!2 ~ x ~@4 x ~@2 x!3", B: "~@2 x!2 ~ x ~@2 x ~ x ~@2 x ~@2",
})).gain(1.05)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@13 A ~ A ~ A ~@8 B C B C B C B C B C B ~@26 B C B ~@18 A ~ A ~ A@2 ~ A ~@26
>`.pickRestart({
  A: "x", B: "~@2 x!2 ~ x!2 ~ x!2 ~ x ~@2 x ~", C: "~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x ~",
})).gain(1.28)

// drums · congas
const congas_2 = s("conga:18").struct("<~@13 A@5 ~@8 B C B C B C B C B C B ~@26 B C B ~@18 A@9 ~@25>".pickRestart({
  A: "~@2 x!2 ~@4 x ~ x!2 ~ x!3", B: "x ~@6 x ~@8", C: "x ~@5 x!2 ~@8",
})).gain(1.28)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~@26 [~@13 x ~@2]!11 ~@26 [~@13 x ~@2]!3 ~@52>").gain(0.77)

// drums · congas
const congas_3 = s("conga:33").struct("<~@13 A B A B A ~@8 C@11 ~@26 C@3 ~@18 A B A B A@2 B A B ~@25>".pickRestart({
  A: "~@4 x!4 ~ x ~@6", B: "x ~@3 x!4 ~ x ~@6", C: "~@2 x!2 ~@7 x ~@4",
})).gain(1.28)

// drums · congas · soft notes
const congas_soft_2 = s("conga:33").struct("<~@26 [~@5 x ~@2]!11 ~@26 [~@5 x ~@2]!3 ~@52>").gain(0.77)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<~@34 [~@9 x ~@6]!3 ~@26 [~@9 x ~@6]!3 ~@52>").gain(2.04)

// drums · shaker
const shaker = s("sh").struct("<~@13 A@41 B A@28 B A@9 ~@4 A@20 B>".pickRestart({
  A: "x!16", B: "x",
})).gain(0.4)

// drums · lt
const lt = s("lt").struct("<~@13 [x ~ x!2 ~ x!4 ~ x!2 ~ x!3]!5 ~@66 [x ~ x!2 ~ x!4 ~ x!2 ~ x!3]!9 ~@25>").gain(0.4)

stack(
  alto_sax, alto_sax_soft, bass, bass_2, piano, string_ensemble_2, overdriven_guitar, timpani, kick, snare, pedal_hat,
  open_hat, crash, tambourine, tambourine_soft, cowbell, bongos, bongos_2, congas, congas_2, congas_soft, congas_3,
  congas_soft_2, agogo_bells, shaker, lt
)

More by 2 Unlimited