Strudelify
Twilight Zone cover art

Get Ready

Twilight Zone

2 Unlimited

KeyB♭ minorTempo130 bpm
0:00/0:00
// Twilight Zone — 2 Unlimited
// 130 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 102 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 · [...]/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 · synth bass 1 · "bass"
const bass = note(`<
  ~@4
  [bb1@3 ab1 bb1@2 ab1 bb1@2 ab1 bb1@2 db2@2 ab1@2]!56
  ~@10
  [bb1@3 ab1 bb1@2 ab1 bb1@2 ab1 bb1@2 db2@2 ab1@2]!31
  [bb1@3 ab1 bb1@2 ab1 bb1@2 ab1 bb1@2 ~@4]
>`).s("gm_synth_bass_1").gain(0.5)

// other · lead 2 sawtooth · "synth 1" · Bb
const lead_2_sawtooth = note("<~@68 [[bb4,bb5]@3 ~ [bb4,bb5]@3 ~]!2 ~@32>").s("gm_lead_2_sawtooth").gain(0.5)

// chords · pad halo · "synth 2" · Bsus2
const pad_halo = note("<~@68 [[b3,db4]@3 ~ [b3,db4]@3 ~]!2 ~@32>").s("gm_pad_halo").gain(0.2)

// other · distortion guitar · "lead m"
const distortion_guitar = note(`<
  ~@3 A@3 B ~ A@3 ~@17 A@2 B ~ A@3 ~ A@2 B ~ A@3 ~@23 C ~@3 A@2 B ~ A@3 ~@25
>`.pickRestart({
  A: "~@12 bb2@3 ~", B: "~@6 bb2 ~", C: "~@6 a2 ~ a2 ~ a2@2 ~@4",
})).s("gm_distortion_guitar").gain(0.6)

// other · synth brass 2 · "lead f"
const synth_brass_2 = note(`<
  ~@19 A B C D@2 B C E@2 ~@23 A B C D@2 B C E@2 ~@25 A B C D@2 B C D@2 B C D@2 B C F@2
>`.pickRestart({
  A: "~@5 f4 ab4 bb4", B: "db5@3 ~ db5@4 bb4 ~ f4@2 ab4@2 bb4@2", C: "db5 bb4 ~ bb4@3 ab4@2 bb4 ~ f4@2 ab4@2 bb4@2",
  D: "[db5 bb4!2 ~ bb4 ab4!2 bb4@5 ~ f4 ab4 bb4]/2", E: "[db5 bb4!2 ~ bb4 ab4!2 bb4@5 ~@4]/2",
  F: "[db5 bb4!2 ~ bb4 ab4!2 bb4@5 ~ f4 ~@2]/2",
})).s("gm_synth_brass_2").gain(0.45)

// other · piano · "backs 1"
const piano = note("<~@20 A B C@2 A B C@2 ~@24 A B C@2 A B C@2 ~@26 A B C@2 A B C@2 A B C@2 A B C@2>".pickRestart({
  A: "f4@2 f4@2 db4 ~@3", B: "f4 db4 ~ db4@2 ~ c4@2 db4@2 ~@6", C: "[f4@2 db4@2 db4 ~@3 db4@2 c4 ~ c4@2 db4@10 ~@8]/2",
})).s("gm_piano").gain(0.45)

// other · synth brass 1 · "synth 5"
const synth_brass_1 = note(`<
  A@3 B A@3 B A@3 B C@3 D C@3 D ~@8 A@3 B A@3 B A@3 B A@3 B C@3 D C@3 D ~@18 A@3 B A@3 B C@3 D C@3 D ~@16
>`.pickRestart({
  A: "[bb3,bb4]!2 ~ [bb3,bb4]!2 ~ [bb3,bb4]!2 ~ [bb3,bb4]!2 ~ [b3,b4] ~ [ab3,ab4] ~", // Bb B Ab
  B: "[bb3,bb4] ~ [bb3,bb4] ~ [bb3,bb4] ~ [ab3,ab4] [bb3,bb4] ~@2 [ab3,ab4] [bb3,bb4] ~@4", // Bb Ab Bb Ab Bb
  C: "[bb3,bb4]!2 ~ [bb3,bb4] [ab3,ab4] ~ [bb3,bb4] [gb3,gb4] ~ [f3,f4] [eb3,eb4] ~ [bb3,bb4] ~ [b3,b4] ~", // Bb Ab Bb Gb F Eb Bb B
  D: "[bb3,bb4] ~ [bb3,bb4] ~ [bb3,bb4] ~ [ab3,ab4] [bb3,bb4] ~@8", // Bb Ab Bb
})).s("gm_synth_brass_1").gain(0.5)

// chords · synth strings 1 · "pad"
const synth_strings_1 = note("<~@20 A@24 ~@8 A@8 ~@26 A@16>".pickRestart({
  A: "[[f4,bb4,db5]@61 ~@3]/4", // Bbm
})).s("gm_synth_strings_1").gain(0.32)

// chords · piano · "ac piano"
const piano_2 = note("<~@20 A B C D A B C D ~@24 A B C D A B C D ~@26 A B C D A B C D A B C D A B C E>".pickRestart({
  A: "~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~", // Bbm
  B: "~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [gb4,bb4,eb5] ~", // Bbm Ebm
  C: "~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [eb4,ab4,c5] ~", // Bbm Ab
  D: "~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [gb4,bb4,eb5]@3 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~", // Bbm Ebm Bbm
  E: "~@2 [f4,bb4,db5] ~@2 [f4,bb4,db5] ~@2 [gb4,bb4,eb5]@3 [f4,bb4,db5] ~@4", // Bbm Ebm Bbm
})).s("gm_piano").gain(0.66)

// drums · kick
const kick = s("bd").struct("<~@4 [x!4]!64 ~@2 [x!4]!31 [x!3 ~]>").gain(0.5)

// drums · rim
const rim = s("rim").struct("<~@4 A@16 ~@8 A@24 ~@8 A@8 ~@2 A@16 ~@16>".pickRestart({
  A: "~ x ~@6",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@4 A@15 B A@11 C A@7 C A@11 B A@15 B ~@2 A@15 B A@15 D>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x!3 ~ x!3", C: "~@4 x ~@2 x ~ x ~ x!5", D: "~ x ~@2",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct("<~@20 [~ x ~ x]!8 ~@24 [~ x ~ x]!8 ~@26 [~ x ~ x]!15 [~ x ~@2]>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!64
  ~@2
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!31
  [x!2 ~@2 x!2 ~@2 x!2 ~@6]
>`).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@4 [~ x ~ x ~ x ~ x]!64 ~@2 [~ x ~ x ~ x ~ x]!31 [~ x ~ x ~ x ~@2]>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@28 A ~@3 A ~@3 A ~@3 A ~@19 B ~@41>".pickRestart({
  A: "x!2 ~@2", B: "x",
})).gain(0.45)

// drums · cowbell
const cowbell = s("cb").struct("<~@60 [x!4]!8 ~@34>").gain(0.4)

// drums · congas
const congas = s("conga:13").struct("<~@4 [~@3 x]!16 ~@8 [~@3 x]!24 ~@18 [~@3 x]!16 ~@16>").gain(1.27)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@4
  [x!2 ~ x!2 ~ x!2 ~ x!2 ~@5]!16
  ~@8
  [x!2 ~ x!2 ~ x!2 ~ x!2 ~@5]!24
  ~@18
  [x!2 ~ x!2 ~ x!2 ~ x!2 ~@5]!16
  ~@16
>`).gain(1.27)

// drums · congas
const congas_3 = s("conga:33").struct("<~@4 [~@7 x]!16 ~@8 [~@7 x]!24 ~@18 [~@7 x]!16 ~@16>").gain(1.27)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@60 [x!2 ~@2 x!2 ~ x!6 ~@3]!8 ~@34>").gain(1.9)

// drums · agogo bells · soft notes
const agogo_bells_soft = s("agogo:2").struct("<~@60 [~@2 x!2 ~@2 x ~@9]!8 ~@34>").gain(0.95)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<~@60 [~@13 x!2 ~]!8 ~@34>").gain(1.9)

// drums · agogo bells · soft notes
const agogo_bells_soft_2 = s("agogo:4").struct("<~@60 [~@15 x]!8 ~@34>").gain(0.95)

stack(
  bass, lead_2_sawtooth, pad_halo, distortion_guitar, synth_brass_2, piano, synth_brass_1, synth_strings_1, piano_2,
  kick, rim, snare, clap, hihat, open_hat, crash, cowbell, congas, congas_2, congas_3, agogo_bells, agogo_bells_soft,
  agogo_bells_2, agogo_bells_soft_2
)

More by 2 Unlimited