Strudelify

Dub in Life

Eiffel 65

KeyB♭ majorTempo126 bpm
0:00/0:00
// Dub in Life — Eiffel 65
// 126 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 string ensemble 1 (copy of ch 1 lead 2 sawtooth)
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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.

// bass · electric bass finger
const bass = note(`<
  ~@10 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A@13 B C D A B C D A B C D A B C
  D A B C D A B C D A B C D A B C D E F G H E F G H ~ A B C D A B C D A B C D A B C D A B C D A B C D E F G H E F G H ~
>`.pickRestart({
  A: "c2 c3 c2 c3 c2 c3 c2 c3", B: "eb2 eb3 eb2 eb3 eb2 eb3 eb2 eb3", C: "g1 g2 g1 g2 g1 g2 g1 g2",
  D: "bb1 bb2 bb1 bb2 bb1 bb2 bb1 bb2", E: "c2", F: "eb2", G: "g1", H: "bb1",
})).s("gm_electric_bass_finger").gain(0.48).pan(0.6)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@10 A B C@2 A D E@2 F@2 G@2 F@2 G@2 F@2 G@2 F@2 G@2 A B C@2 A D E@2 A B C@2 A D E@2 ~@12 F@2 G@2 F@2 G@2 F@2 G@2 F@2
  G@2 A B C@2 A D E@2 A B C@2 A D E@2 F@2 G@2 F@2 G@2 ~ F@2 G@2 F@2 G@2 F@2 G@2 F@2 G@2 A B C@2 A D E@2 ~@9
>`.pickRestart({
  A: "eb6", B: "f6", C: "d6/2", D: "a6", E: "bb6/2", F: "eb4/2", G: "d4/2",
})).s("gm_string_ensemble_1").gain(0.14).pan(0)

// other · string ensemble 2 · "Daniel J. Hill"
const string_ensemble_2 = note(`<
  ~@2 A B C D A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D ~@28 A B C D A B C D A B C D A B C D A B C D
  A B C D ~@17 A B C D A B C D A B C D A B C D ~
>`.pickRestart({
  A: "c3", B: "eb3", C: "g2", D: "bb2",
})).s("gm_string_ensemble_2").gain(0.4).pan(0.7)

// other · recorder
const recorder = note("<~@50 A@8 B@8 C@8 D@5 ~@28 C@8 D@5 ~@16>".pickRestart({
  A: "[~ g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5]/8",
  B: "[~ g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 bb4 f5 bb5@2 a5@2 f5@2 bb4 f5 bb5@2 a5@2 f5@2 eb5@2 d5@2 eb5@2 d5]/8",
  C: "[~ g4 bb4 d5@2 eb5@2 d5@2 bb4 f5 bb5@2 a5@2 f5@2 bb4 f5 bb5@2 a5@2 f5@2 eb5@2 d5@2 eb5@2 d5@2 g4 bb4 d5@2 eb5@2 d5@2 bb4 f5 bb5@2 a5@2 f5@2 bb4 f5 bb5@2 a5@2 f5@2 eb5@2 d5@2 eb5@2 d5]/8",
  D: "[~ g4 bb4 d5@2 eb5@2 d5@2 bb4 f5 bb5@2 a5@2 f5@2 bb4 f5 bb5@2 a5@2 f5@2 eb5@2 d5@2 eb5@2 d5@2 ~@7]/5",
})).s("gm_recorder").gain(0.4).pan(0.3)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@26 A B C D A B C D A B C D A B C D A B C D A B C D A@13 B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C
  D A B C D A B C D ~ A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~
>`.pickRestart({
  A: "c3!8", B: "eb3!8", C: "g2!8", D: "bb2!8",
})).s("gm_lead_2_sawtooth").gain(0.3).pan(0.7)

// other · pad sweep
const pad_sweep = note("<A@2 ~@134>".pickRestart({
  A: "e7/2",
})).s("gm_pad_sweep").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@10 [x!4]!84 ~@8 [x!4]!25 ~@8 x>").gain(0.64).pan(0.6)

// drums · snare
const snare = s("sd").struct("<~@10 A@8 ~@8 A@28 ~@8 A@32 ~@4 A@4 ~ A@24 ~@8 B>".pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(0.64).pan(0.6)

// drums · open hat
const open_hat = s("oh").struct("<~@10 A@8 ~@8 A@28 ~@6 A@34 ~@4 A@4 ~ A@24 ~@9>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.64).pan(0.6)

// drums · splash
const splash = s("cr").struct(`<
  ~@2 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@16 A ~@7 A ~@7 A ~@15 A
>`.pickRestart({
  A: "x",
})).gain(0.64).pan(0.6)

stack(bass, string_ensemble_1, string_ensemble_2, recorder, lead_2_sawtooth, pad_sweep, kick, snare, open_hat, splash)

More by Eiffel 65