Strudelify

Insomnia (D Donatis mix)

Faithless

KeyB minorTempo130 bpm
0:00/0:00
// Insomnia (D Donatis mix) — Faithless
// 130 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 122 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 · rock organ · "Main Synth"
const rock_organ = note(`<
  ~@73 A B A B C B D E A B A B C B D E A B A B C B D E A B A B C B D E A B A B C B D E A B A B C B D E ~
>`.pickRestart({
  A: "b3 ~ [b4,e5] ~ [b4,e5] ~ b3 [b4,d5] ~@2 [b4,d5] ~ [b4,d5] ~ b3 [b4,c#5]", // E5 Bm Bsus2
  B: "~@2 [b4,c#5] ~ [b4,c#5] ~ b3 [b4,d5] ~@2 [b4,d5] ~ [b4,c#5]@2 [b4,d5]@2", // Bsus2 Bm Bsus2 Bm
  C: "b3 ~ [b4,e5] ~ [b4,e5] ~ b3 [b4,f#5] ~@2 [b4,f#5] ~ [b4,f#5] ~ b3 [b4,c#5]", // E5 B5 Bsus2
  D: "b3 ~ [b4,e5] ~ [b4,e5] ~ b3 [b4,f#5] ~@2 [b4,f#5] ~ [b4,f#5] ~ f#3 [b4,c#5]", // E5 B5 Bsus2
  E: "~@2 [b4,c#5] ~ [b4,c#5] ~ f#3 [b4,d5] ~@2 [b4,d5] ~ [b4,c#5]@2 [b4,d5]@2", // Bsus2 Bm Bsus2 Bm
})).s("gm_rock_organ").gain(0.72)

// chords · acoustic bass · "SFX"
const acoustic_bass = note("<A@6 B@2 A@6 B@2 ~@54 A@3 ~@6 A@3 ~@5 A@3 ~@13 A@3 ~@13 A@3>".pickRestart({
  A: "[[c4,d#4,g4]@5 ~]/3", B: "[c4,d#4,g4]/2",
})).s("gm_acoustic_bass").gain(0.02)

// other · piano
const piano = note("<~@2 A B C ~ D ~@2 E@4 F G ~@107>".pickRestart({
  A: "~@12 f#6!3 ~", B: "f#6!3 ~ f#6!2 ~ f#6!2 ~@7", C: "~@11 f#4 ~ d5 ~@2, ~@6 b4 ~",
  D: "~@9 d5 ~@6, ~@7 f#4@2 ~@7, ~@4 b4 ~@3",
  E: "[~@17 b5@14 ~ c#5@8 ~ d5@9 ~@14, ~ f#6@16 ~@14 c#6@9 d6@7 ~@17, ~ f#4@15 ~@16]/4", F: "~@2 f#6@13 ~", G: "b5",
})).s("gm_piano").gain(0.26)

// chords · rock organ · "Sub sound" · Bm B7 Bm B7 Bm
const rock_organ_2 = note(`<
  ~@16
  [[b3,b4,d5] ~@3 [b3,f#4,a4] ~@3]!8
  ~@2
  [[b3,b4,d5] ~@3 [b3,f#4,a4] ~@3]!8
  [[b3,b4,d5] ~@7]!37
  ~@51
>`).s("gm_rock_organ").gain(0.22)

// bass · synth bass 1 · "Acid bass"
const bass = note("<~@16 [b1!3 ~ b1 ~ b1!2 ~ b1!2 ~ b1 ~ b1!2]!54 ~@11 [b0 ~@3] ~@40>").s("gm_synth_bass_1").gain(0.22)

// bass · synth bass 1 · "Bass"
const bass_2 = note("<~@89 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: "~@2 b0 ~ b0@2 ~ b0 ~@2 b0 ~ b0@2 ~ b0", B: "~@2 f#1 ~ f#1@2 ~ f#1 ~@2 g1 ~ g1@2 f#1 ~",
})).s("gm_synth_bass_1").gain(0.5)

// chords · lead 2 sawtooth · "Main 2"
const lead_2_sawtooth = note(`<
  ~@81 A B A B C B D E A B A B C B D E A B A B C B D E A B A B C B D E A B A B C B D E ~
>`.pickRestart({
  A: "b3 ~ [b4,e5] ~ [b4,e5] ~ b3 [b4,d5] ~@2 [b4,d5] ~ [b4,d5] ~ b3 [b4,c#5]", // E5 Bm Bsus2
  B: "~@2 [b4,c#5] ~ [b4,c#5] ~ b3 [b4,d5] ~@2 [b4,d5] ~ [b4,c#5]@2 [b4,d5]@2", // Bsus2 Bm Bsus2 Bm
  C: "b3 ~ [b4,e5] ~ [b4,e5] ~ b3 [b4,f#5] ~@2 [b4,f#5] ~ [b4,f#5] ~ b3 [b4,c#5]", // E5 B5 Bsus2
  D: "b3 ~ [b4,e5] ~ [b4,e5] ~ b3 [b4,f#5] ~@2 [b4,f#5] ~ [b4,f#5] ~ f#3 [b4,c#5]", // E5 B5 Bsus2
  E: "~@2 [b4,c#5] ~ [b4,c#5] ~ f#3 [b4,d5] ~@2 [b4,d5] ~ [b4,c#5]@2 [b4,d5]@2", // Bsus2 Bm Bsus2 Bm
})).s("gm_lead_2_sawtooth").gain(0.45)

// drums · kick
const kick = s("bd").struct("<~@16 A@8 ~@2 B@40 ~@15 C ~@7 B@32 ~>".pickRestart({
  A: "x!2", B: "x!4", C: "x",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct("<~@16 [~ x ~ x]!8 ~@2 [~ x ~ x]!12 ~@51 [~ x ~ x]!32 ~>").gain(0.25)

// drums · snare
const snare = s("sd").struct("<~@101 [x!16]!4 ~@12 [x!16]!2 [x!15 ~] [x!16] ~>").gain(0.2)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@81 [x!16]!8 ~@33>").gain(0.1)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [~ x ~ x ~ x ~ x]!8 ~@2 [~ x ~ x ~ x ~ x]!12 ~@51 [~ x ~ x ~ x ~ x]!32 ~>")
  .gain(0.3)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@81 [~ x ~ x ~ x ~ x]!8 ~@33>").gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@26 [~@5 x!2 ~]!12 ~@51 [~@5 x!2 ~]!32 ~>").gain(2.01)

stack(
  rock_organ, acoustic_bass, piano, rock_organ_2, bass, bass_2, lead_2_sawtooth, kick, clap, snare, snare_soft,
  open_hat, open_hat_soft, cabasa
)

More by Faithless