Strudelify
Deeper Underground cover art

1999 · Synkronized

Deeper Underground

Jamiroquai

KeyC♯ minorTempo105 bpm
0:00/0:00
// Deeper Underground — Jamiroquai
// 105 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 4 "Mini Moog 2" lead 2 sawtooth (copy of ch 3 "Mini Moog 1" lead 8 bass lead); ch 3 "Mini Moog 1" lead 8 bass lead (copy of ch 7 "Bass" fretless bass)
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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.

// bass · pad poly · "Bass Pad"
const bass = note("<A B C D A B C D A B C D A B C D ~@50 A B C D A B C D ~@34>".pickRestart({
  A: "c#1", B: "f1", C: "e1", D: "a#0",
})).s("gm_pad_poly").gain(0.8)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@4 A@2 B@2 C D E F G@2 H@2 ~@50 A@2 B@2 C D E F ~@34>".pickRestart({
  A: "c#4", B: "d4/2", C: "[c#3,f4]", D: "[f3,g#4]", E: "[e3,b4]", F: "[a#2,d5]",
  G: "[c#5 c5 g#4@2 f5 e5 g#4@2, c#4, c#3 f3]/2", H: "[[e3,b4] [a#2,a#4], d4]/2",
})).s("gm_string_ensemble_1").gain(0.26)

// other · lead 4 chiff · "Lead"
const lead_4_chiff = note(`<
  ~@31 A B C D B E D B E F G ~@2 H I ~@10 A B J K B L K B J M N ~@31 A B J K O P K ~@3
>`.pickRestart({
  A: "~@15 c#5", B: "c#6@3 ~ c#6@2 ~ c#5 c#6@3 ~ c#6@2 ~@2", C: "a5@2 a5 ~ a5@2 a5 ~",
  D: "~@4 a5@2 ~ a5 b5!2 ~ b5 c6!3 c#5", E: "a5@4 a5@2 ~@2 a5@3 ~ a5@2 ~@2", F: "~@4 a5@2 ~ a5 b5!2 ~ b5 c6!4",
  G: "c#6@3 ~@13", H: "~@12 f#7 e7 c#7 b6", I: "e7@4 c#7@2 ~@2 g6 f#6 e6@2 ~@4", J: "a5@3 ~ a5@2 ~@2 a5@3 ~ a5@2 ~@2",
  K: "~@4 a5!2 ~ a5 b5!2 ~ b5 c6!2 ~ c#5", L: "a5@3 ~ a5@2 ~@2 a5@3 ~ a5@3 ~", M: "~@4 a5!2 ~ a5 b5!2 ~ b5 c6!3 ~",
  N: "c#6@7 ~@9", O: "c#6@3 ~ c#6@2 ~ c#5 c#6@3 ~ c#6 ~@3", P: "a5@4 a5@2 ~@2 a5@3 ~ a5@3 ~",
})).s("gm_lead_4_chiff").gain(0.25)

// bass · fretless bass · "Bass"
const bass_2 = note(`<
  ~@16 A B A B C B A D A B A B A B A D E F G E F H E F G A B A B A B A D A B A I J B A K E F H E F H E F H L M N O P Q N
  ~ R S R S R S T U A B V W A X A Y E F H E F H E F H Z F H E F H ~@3
>`.pickRestart({
  A: "c#2@3 g#1 c#2@3 g#1 d2 ~ d2 ~@5", B: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~@2 f#2 ~ [f#2,g2] f#2 e2 c#2 b1",
  C: "c#2@3 g#1 c#2@3 g#1 d2 ~ e1@6, ~@10 d2 ~@5", D: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~@2 [a#2,b2] ~ g2 f#2 e2 c#2 b1",
  E: "c#2@4 c#2@3 g#1 c#2@3 g#1 c#2@3 g#1", F: "c2 a1@2 f#2", G: "e1@2 e2@2 a1 d3 g#1 c#3",
  H: "e1@4 e2@4 a1@2 [c2,c#2,c#3] ~ g#1@2 [c2,c3] ~, ~@5 d3 ~ c#3", // C#maj7 C
  I: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~@2 e2 f#2 g2 f#2 e2 c#2 b1", J: "c#2@3 g#1 c#2@3 g#1 d2 ~ e1@5 ~, ~@10 d2 ~@5",
  K: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~@9", L: "c#0@2 c#0@2 ~@5 c#0 c#0@2 ~@4", M: "f0@2 f0@2 ~@4 f0!2 f0@2 ~@4",
  N: "e0@2 e0@2 ~@5 e0 e0@2 ~@4", O: "a#-1@2 a#-1@2 ~@3 a#-1!4 ~@3 a#-1 ~", P: "c#0@2 c#0@2 ~@4 c#0!3 ~@4 c#0",
  Q: "f0@2 f0@2 ~@4 f0!3 ~@5", R: "c#1@3 g#0 c#1@3 g#0 d1 ~ d1 ~@5",
  S: "[f1,f#1] ~ e1@2 c#1 ~ c#1 ~@2 f#1 ~ [f#1,g1] f#1 e1 c#1 b0", T: "c#1@3 g#0 c#1@3 g#0 d1 ~ e0@6, ~@10 d1 ~@5",
  U: "[f1,f#1] ~ e1@2 c#1 ~ c#1 ~@9", V: "c#2@3 g#1 c#2@3 g#1 d2 ~ d2 ~@3 d2@2",
  W: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~@2 c#3 ~ [f#2,g2] f#2 e2 c#2 b1", // F#maj7 Gmaj7
  X: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~@2 g2 ~ [f#2,g2] f#2 e2 c#2 b1", // F#maj7 Gmaj7
  Y: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~ b2 g2 f#2 g#2 e2 f#2 c#2 b1", Z: "c#2@7 g#1 c#2@3 g#1 c#2@3 g#1",
})).s("gm_fretless_bass").gain(0.8)

// other · distortion guitar · "Guitar"
const distortion_guitar = note("<~@41 A B A B A B A C A B A D A B A E ~@25 F@2 G@2 H@2 I@2 ~@18>".pickRestart({
  A: "c#2@3 g#1 c#2@3 g#1 d2 ~ d2 ~@5", B: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~@2 f#2 ~ [f#2,g2] f#2 e2 c#2 b1",
  C: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~@2 [a#2,b2] ~ g2 f#2 e2 c#2 b1", // F#maj7 Bmaj7
  D: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~@2 e2 f#2 g2 f#2 e2 c#2 b1", E: "[f2,f#2] ~ e2@2 c#2 ~ c#2 ~ g1 ~ g1 f#1 e1 c#1 b0 ~",
  F: "[c#3@7 g#3]/2", G: "[f#3@30 e3 ~]/2", H: "[e3@2 ~@2 c#3@7 g#3@3 b3@17 ~]/2",
  I: "[f#3 ~ f#3!2 ~@8 f#3@2 b4@16 ~@2]/2",
})).s("gm_distortion_guitar").gain(0.52)

// other · distortion guitar · "Guitar" · soft notes · Esus2
const distortion_guitar_soft = note(`<
  ~@86
  [~@2 c#3 b2 ~@12]
  ~
  [~ e3!2 ~ [e3,f#3] ~ f#3 [e3,f#3] e3 [e3,f#3] f#3 [e3,f#3] ~ e3 ~@2, ~@5 [e3,f#3]@2 ~@5 e3@2 ~@2]
  ~@19
>`).s("gm_distortion_guitar").gain(0.31)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A@3 B A@3 B A@3 B A@3 B C D A@2 B C@2 B E A D A B A@3 B A@3 B A@3 F C D A@2 B C@2 B A G H G I J H G K A@3 B A B A
  L M B A B M B A N C B C@2 B C A B C@2 B A@2 B C@2 ~@2
>`.pickRestart({
  A: "x ~ x ~@4 x!2 ~ x ~@5", B: "x ~ x ~@6 x ~ x ~@4", C: "x!2 ~@2 x!2 ~@2", D: "x!2 ~@3 x ~@2", E: "x!2 ~@2 x!2 ~ x",
  F: "x ~ x ~@5 x ~@2 x ~@4", G: "x ~ x ~@6 x!2 ~@5", H: "x ~ x ~@5 x!3 ~@5", I: "x ~ x ~@4 x!4 ~@3 x ~",
  J: "x ~ x ~@5 x!3 ~@4 x", K: "x!2 ~@3 x ~ x", L: "x!2 ~@6", M: "x ~@7 x ~ x ~@4 x", N: "~ x ~ x ~ x ~ x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A@3 B A@3 C A@3 B A@3 C A@4 B A@2 B D A@3 B A@3 C A@3 B A@3 E A@4 B A@2 B A@3 B F A B@2 D A@3 B A B A G A B A B A
  B A H ~@5 I A B A@2 B A@2 B A@2 ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x ~@4 x ~@3", C: "~@4 x ~@2 x ~@4 x ~ x!2", D: "~@4 x ~@4 x ~@2 x!2 ~@2",
  E: "~@4 x ~@4 x ~@2 x!4", F: "~@4 x ~@7 x ~@2 x", G: "~ x ~@2", H: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", I: "~@3 x",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A@16 B C B C B C B C@2 A@16 B C B C B C B C@2 B C B C B C B C A@7 D A@7 E ~@5 F G B G B G@3 B G B ~@2
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x!2", C: "x ~ x ~ x ~ x!3 ~ x!6", D: "x!4 ~@4",
  E: "x ~@2 x!2 ~ x ~ x ~@2 x!2 ~ x ~", F: "~@14 x!2", G: "x ~ x ~ x ~ x!3 ~ x!3 ~ x!2",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@89 [~ x ~@3 x ~@2] ~@18>").gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@16
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!16
  ~@9
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!16
  ~@9
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!8
  ~@34
>`).gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@16 A ~@7 A ~@16 A ~@7 A ~@7 A ~@24 A ~@25>".pickRestart({
  A: "x",
})).gain(0.8)

stack(
  bass, string_ensemble_1, lead_4_chiff, bass_2, distortion_guitar, distortion_guitar_soft, kick, snare, hihat,
  open_hat, tambourine, crash
)

More by Jamiroquai