Strudelify

The Promised Land

DJ Paul Elstak

KeyA minorTempo168 bpm
0:00/0:00
// The Promised Land — DJ Paul Elstak
// 168 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 155 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(168/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 · piano · "A.PIANO 3"
const piano = note(`<
  ~ A@2 B@2 C@2 D E F@2 G@2 H@2 I J K@2 G@2 H@2 L ~@25 K@2 G@2 H@2 I J K@2 G@2 H@2 M N O@2 P@2 Q@2 O P O@2 P@2 Q@2 O ~
  R@2 S@2 T@2 U V R@2 S@2 T@2 U ~@25 O@2 P@2 Q@2 O P O@2 P@2 Q@2 O P F@2 G@2 H@2 I J A@2 B@2 C@2 D E W@2
>`.pickRestart({
  A: "[e5@8 f5 e5@2 d5@2 c5 a4 e5, [a2,e3,a3,e4]@31 ~, a4@27 ~@5, c5@25 ~@7]/2", // A5
  B: "[d5@9 e5 d5 c5@2 b4 g4 d5, [g2,d3,g3,d4]@31 ~, g4@27 ~@5, b4@25 ~@7]/2", // G5
  C: "[c5@8 d5 c5@2 b4@2 a4 f4 c5, [f2,c3,f3,c4]@31 ~, f4@27 ~@5, a4@25 ~@7]/2", // F5
  D: "e5@6 f5@4 e5@2 ~ c5 a4@2, [a2,e3,a3,e4]@15 ~, [a4,c5]@6 d5 ~", // A5 Am
  E: "d5@3 e5@2 d5 c5 b4, [g2,d3,g3,d4]@15 ~, [g4,b4]@13 ~@3", // G5 G
  F: "[[a2,e3,a3,c4,e4,a4]@25 ~ [a2,e3,a3,c4,e4,a4,c5]@5 ~]/2", // Am
  G: "[[g2,d3,g3,d4,g4,b4,d5]@25 ~ [g2,d3,g3,d4,g4,b4,d5]@5 ~]/2", // G
  H: "[[f2,c3,f3,c4,f4,a4,c5]@25 ~ [f2,c3,f3,c4,f4,a4,c5]@5 ~]/2", // F
  I: "[a2,e3,a3,c4,e4,a4]@9 ~ [a2,e3,a3,e4,a4,c5,e5]@5 ~", J: "[g2,d3,g3,d4,g4,b4,d5]@15 ~",
  K: "[[a2,e3,a3,c4,e4,a4,c5]@25 ~ [a2,e3,a3,c4,e4,a4,c5]@5 ~]/2", // Am
  L: "[a2,e3,a3,c4,e4,a4,c5]@9 ~ [a2,e3,a3,a4,c5,e5,a5]@5 ~", M: "[a2,e3,a3,c4,e4,a4]@9 ~ [a2,e3,a3,a4,c5,e5,a5]@5 ~",
  N: "[g2,d3,g3,g4,b4,d5,g5] ~", // G
  O: "~@2 [c4,e4,a4,c5] ~ [c4,a4,c5] ~ [c4,e4,a4,c5]!2 ~@2 [c4,e4,a4,c5]!2 ~@2 [c4,e4,a4,c5] ~, ~@2 e4 ~@5", // Am F Am
  P: "~@2 [b3,d4,g4,b4] ~ [b3,g4,b4] ~ [b3,d4,g4,b4]!2 ~@2 [b3,d4,g4,b4]!2 ~@2 [b3,d4,g4,b4] ~, ~@2 d4 ~@5", // G Em G
  Q: "~@2 [a3,c4,f4,a4] ~ [a3,f4,a4] ~ [a3,c4,f4,a4]!2 ~@2 [a3,c4,f4,a4]!2 ~@2 [a3,c4,f4,a4] ~, ~@2 c4 ~@5", // F Dm F
  R: "[[a2,e3,a3,c4,e4,a4,c5]@21 ~ [a2,e3,a3,c4,e4,a4,c5]@5 ~ [a2,e3,a3,c4,e4,a4,c5]@3 ~]/2", // Am
  S: "[[c3,g3,c4,e4,g4,c5]@21 ~ [c3,g3,c4,e4,g4,c5]@5 ~ [c3,g3,c4,e4,g4,c5]@3 ~]/2", // C
  T: "[[d3,a3,d4,f4,a4,d5]@21 ~ [d3,a3,d4,f4,a4,d5]@5 ~ [d3,a3,d4,f4,a4,d5]@3 ~]/2", // Dm
  U: "[f3,c4,f4,a4,c5,f5]@5 ~ [f3,c4,f4,a4,c5,f5]@5 ~ [f3,c4,f4,a4,c5,f5]@3 ~", // F
  V: "[g3,e4,g4,b4,e5]@7 ~ [f3,d4,f4,a4,d5]@7 ~", W: "[[e3,a3,e4,a4,c5,e5]@25 ~@7, a2@31 ~]/2",
})).s("gm_piano").gain(0.19)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@25 A B A C A B A C A@2 D@2 E@2 A D A@2 D@2 E@2 A ~@17 A@2 D@2 E@2 A D A@2 D@2 E@2 A ~@9 A@2 F@2 G@2 H ~ A B A C A B
  A I ~@8 A J A K A J A ~ A@2 D@2 E@2 A D A@2 D@2 E@2 A D A@2 D@2 E@2 A D ~@10
>`.pickRestart({
  A: "~@2 a2!2 ~@2 a2!2 ~@2 a2!2 ~@2 a2!2", B: "~@2 a2!2 ~@2 a2!2 ~@2 c3!2 ~@2 d3!2",
  C: "~@2 a2!2 ~@2 a2!2 ~@2 d3!2 ~@2 c3!2", D: "~@2 g2!2 ~@2 g2!2 ~@2 g2!2 ~@2 g2!2",
  E: "~@2 f2!2 ~@2 f2!2 ~@2 f2!2 ~@2 f2!2", F: "~@2 c3!2 ~@2 c3!2 ~@2 c3!2 ~@2 c3!2",
  G: "~@2 d3!2 ~@2 d3!2 ~@2 d3!2 ~@2 d3!2", H: "~@2 f3!2 ~@2 f3!2 ~@2 f3!2 ~@2 f3!2",
  I: "~@2 a2!2 ~@2 a2!2 ~@2 d3!2 ~@4", J: "~@2 a2!2 ~@2 a2!2 ~@2 c3!2 ~@2 e2!2",
  K: "~@2 a2!2 ~@2 a2!2 ~@2 c3!2 ~@2 c3!2",
})).s("gm_synth_bass_1").gain(0.35)

// bass · synth bass 2 · "SYN BASS 2"
const bass_2 = note(`<
  ~ A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D F G H G I G H G I G@2 J@2 K@2 G J G@2 J@2 K@2 G L A@2 B@2 C@2 D E A@2
  B@2 C@2 D M G@2 J@2 K@2 G J G@2 J@2 K@2 G ~ A@2 N@2 O@2 P Q G@2 R@2 S@2 T ~ G H G I G H G U ~@8 G V G W G V G ~ G@2
  J@2 K@2 G J G@2 J@2 K@2 G J G@2 J@2 K@2 G J A@2 B@2 C@2 D E X@2
>`.pickRestart({
  A: "a1/2", B: "g1/2", C: "f1/2", D: "a1", E: "g1", F: "g1 ~@7", G: "a1 ~@3 a1 ~@3 a1 ~@3 a1 ~@3",
  H: "a1 ~@3 a1 ~@3 c2 ~@3 d2 ~@3", I: "a1 ~@3 a1 ~@3 d2 ~@3 c2 ~@3", J: "g1 ~@3 g1 ~@3 g1 ~@3 g1 ~@3",
  K: "f1 ~@3 f1 ~@3 f1 ~@3 f1 ~@3", L: "g1@2 ~@2 g1@2 ~@2 g1@3 ~ g2@2 d2@2", M: "g1@3 ~ g1@4 ~@8", N: "c2/2", O: "d2/2",
  P: "f2", Q: "g2 f2", R: "c2 ~@3 c2 ~@3 c2 ~@3 c2 ~@3", S: "d2 ~@3 d2 ~@3 d2 ~@3 d2 ~@3",
  T: "f2 ~@3 f2 ~@3 f2 ~@3 f2 ~@3", U: "a1 ~@3 a1 ~@3 d2 ~ d2@2 c2 ~ a1@2", V: "a1 ~@3 a1 ~@3 c2 ~@3 e1 ~@3",
  W: "a1 ~@3 a1 ~@3 c2 ~@3 c2 ~@3", X: "[a1@3 ~]/2",
})).s("gm_synth_bass_2").gain(0.25)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<A@16 B@8 ~@8 A@40 B@8 C@8 D@8 ~@24 A@32 E@3>".pickRestart({
  A: "[~@15 [a2,c4,e4,a4]@32 [g2,b3,d4,g4]@32 [f2,a3,c4,f4]@32 [a2,c4,e4,a4]@16 [g2,d4,g4,b4]]/8", // Am G F Am G
  B: "[~@15 [a2,c4,e4,a4]@32 [g2,b3,d4,g4]@32 [f2,a3,c4,f4]@32 [a2,c4,e4,a4]@17]/8", // Am G F Am
  C: "[~@15 [a2,c4,e4,a4]@32 [c3,e4,g4,c5]@32 [d3,f4,a4,d5]@32 [f3,c4,f4,a4]@16 [g3,b3,e4,g4]]/8", // Am C Dm F Em
  D: "[~@7 [f3,a3,d4,f4]@8 [a2,c4,e4,a4]@32 [c3,e4,g4,c5]@32 [d3,f4,a4,d5]@32 [f3,c4,f4,a4]@17]/8", // Dm Am C Dm F
  E: "[~@15 [a2,c4,e4,a4]@25 ~@8]/3", // Am
})).s("gm_synth_strings_1").gain(0.25)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@24 A B C B C B C B C B C D E F G H I B C D E F G H I ~@24 J@2 K@2 L@2 M ~@17 B C B C B C B N ~@24 J@2 K@2 L@2 M O
  ~@18
>`.pickRestart({
  A: "~@6 g4 ~ g4@2 e4@2 d4@2 c4@2", B: "a3 ~ a3 ~ a3 d4 e4 a3", C: "~ a3 ~ a3 e4 d4 a3 d4", D: "b3 ~ b3 ~ b3 d4 e4 b3",
  E: "~ b3 ~ b3 e4 d4 b3 d4", F: "c4 ~ c4 ~ c4 d4 e4 c4", G: "~ c4 ~ c4 e4 d4 c4 d4", H: "e4 ~ e4 ~ e4 c4 d4 g4",
  I: "~@2 g4@2 ~@2 g4 ~ g4@2 e4@2 g4@2 d4@2", J: "~ a3 ~ a3 ~ a3 ~ a3", K: "~ b3 ~ b3 ~ b3 ~ b3",
  L: "~ c4 ~ c4 ~ c4 ~ c4", M: "~ e4 ~ e4 ~ e4 ~ e4", N: "~@2 a3@2 ~@2 a3@2 a3 ~ a3@2 ~@2 a3 ~",
  O: "~ d4 ~ d4 ~ d4 ~ d4",
})).s("gm_lead_2_sawtooth").gain(0.17)

// other · drawbar organ · "ORGAN 1"
const drawbar_organ = note(`<
  ~@24 A B C B C B C B C B C D E F G H I B C D E F G H I ~@24 J@2 K@2 L@2 M ~@17 B C B C B C B N O P O P O P O P Q R Q S
  Q R Q T ~@8 J@2 K@2 L@2 M U ~@18
>`.pickRestart({
  A: "~@6 [g3,g4] ~ [g3,g4]@2 [e3,e4]@2 [d3,d4]@2 [c3,c4]@2", B: "[a2,a3] ~ [a2,a3] ~ [a2,a3] [d3,d4] [e3,e4] [a2,a3]",
  C: "~ [a2,a3] ~ [a2,a3] [e3,e4] [d3,d4] [a2,a3] [d3,d4]", D: "[b2,b3] ~ [b2,b3] ~ [b2,b3] [d3,d4] [e3,e4] [b2,b3]",
  E: "~ [b2,b3] ~ [b2,b3] [e3,e4] [d3,d4] [b2,b3] [d3,d4]", F: "[c3,c4] ~ [c3,c4] ~ [c3,c4] [d3,d4] [e3,e4] [c3,c4]",
  G: "~ [c3,c4] ~ [c3,c4] [e3,e4] [d3,d4] [c3,c4] [d3,d4]", H: "[e3,e4] ~ [e3,e4] ~ [e3,e4] [c3,c4] [d3,d4] [g3,g4]",
  I: "~ [g3,g4] ~ g4 [g3,g4] [e3,e4] [g3,g4] [d3,d4], ~@6 g3 ~@9", J: "~ [a2,a3] ~ [a2,a3] ~ [a2,a3] ~ [a2,a3]",
  K: "~ [b2,b3] ~ [b2,b3] ~ [b2,b3] ~ [b2,b3]", L: "~ [c3,c4] ~ [c3,c4] ~ [c3,c4] ~ [c3,c4]",
  M: "~ [e3,e4] ~ [e3,e4] ~ [e3,e4] ~ [e3,e4]", N: "~@2 [a2,a3]@2 ~@2 [a2,a3]@2 [a2,a3] ~ [a2,a3]@2 ~@2 [a2,a3] ~",
  O: "~ [a2,a3] ~ [a2,a3] ~ [a2,a3] ~@2", P: "~ [a2,a3] ~ [a2,a3] ~ [a2,a3] [c3,c4]@2",
  Q: "[a2,a3]@2 ~@2 [a2,a3]@2 ~@2 [a2,a3]@2 ~@2 [a2,a3] ~ [a2,a3] ~", // A
  R: "[a2,a3]@2 ~@2 [a2,a3]@2 ~@2 [c3,c4]@2 [e2,e3] ~ [e2,e3] ~ e2@2, ~@14 e3 ~", // A C E
  S: "[a2,a3]@2 ~@2 [a2,a3]@2 ~@2 [a2,a3]@2 [c3,c4] ~ [c3,c4] ~ [c3,c4]@2", T: "[a2,a3]@3 ~",
  U: "~ [d3,d4] ~ [d3,d4] ~ [d3,d4] ~ [d3,d4]", // D
})).s("gm_drawbar_organ").gain(0.38)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<~@105 A B A B A B A B C D C E C D C F ~@34>".pickRestart({
  A: "~ a3 ~ a3 ~ a3 ~@2", B: "~ a3 ~ a3 ~ a3 c4@2", C: "a3@2 ~@2 a3@2 ~@2 a3@2 ~@2 a3 ~ a3 ~",
  D: "a3@2 ~@2 a3@2 ~@2 c4@2 e3 ~ e3 ~ e3@2", E: "a3@2 ~@2 a3@2 ~@2 a3@2 c4 ~ c4 ~ c4@2", F: "a3@3 ~",
})).s("gm_lead_1_square").gain(0.48)

// other · synth bass 2 · "+SYNBASS 4"
const synth_bass_2 = note("<~@9 A@2 ~@6 A@2 ~@5 A@2 ~@23 A@2 ~@29 A@2 ~@38 A@2 ~@15 A@2 ~@14 A@2>".pickRestart({
  A: "[a3@29 ~@3]/2",
})).s("gm_synth_bass_2").gain(0.25)

// chords · church organ · "+CHRCHORG2"
const church_organ = note("<A@16 B@8 ~@131>".pickRestart({
  A: "[~@15 [c4,e4,a4]@32 [b3,d4,g4]@32 [a3,c4,f4]@32 [c4,e4,a4]@16 [d4,g4,b4]]/8", // Am G F Am G
  B: "[~@15 [c4,e4,a4]@32 [b3,d4,g4]@32 [a3,c4,f4]@32 [c4,e4,a4]@17]/8", // Am G F Am
})).s("gm_church_organ").gain(0.12)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@9 A@2 B@2 C@2 D E A@2 B@2 C@2 D ~@17 A@2 B@2 C@2 D E ~@8 A@2 B@2 C@2 D ~ A@2 B@2 C@2 D E A@2 B@2 C@2 D ~ A@2 C@2 F@2
  G H A@2 C@2 F@2 G ~@33 A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E ~@2
>`.pickRestart({
  A: "a6/2", B: "b6/2", C: "c7/2", D: "e7", E: "d7", F: "d7/2", G: "f7", H: "e7 d7",
})).s("gm_string_ensemble_1").gain(0.16)

// other · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note(`<
  ~@9 A@2 B@2 C@2 D E A@2 B@2 C@2 D ~@17 A@2 B@2 C@2 D E ~@8 A@2 B@2 C@2 D ~ A@2 B@2 C@2 D E A@2 B@2 C@2 D ~ A@2 C@2 F@2
  G H A@2 C@2 F@2 G ~@33 A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E ~@2
>`.pickRestart({
  A: "a5/2", B: "b5/2", C: "c6/2", D: "e6", E: "d6", F: "d6/2", G: "f6", H: "e6 d6",
})).s("gm_string_ensemble_1").gain(0.1)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@17 A@2 B@5 ~@5 B@4 ~@8 A@2 B@5 C ~@8 D E D B@4 F ~@8 A@2 B@5 ~@17 A@2 B@5 C G@7 ~@5 A B@2 ~@35
>`.pickRestart({
  A: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", B: "x!16", C: "x!12 ~@4", D: "x!14 ~ x", E: "x ~@2 x!13", F: "~@8 x!8",
  G: "~@4 x ~@2 x!4 ~ x ~@3",
})).gain(0.32)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@17 A@2 ~@22 A@2 ~@14 B C B ~@13 A@2 ~@22 A@2 ~@6 D@7 ~@5 A ~@37>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~@7 x", C: "~ x!2 ~@13", D: "~@11 x ~@4",
})).gain(0.16)

// drums · clap
const clap = s("cp").struct(`<
  ~@29 A@12 B@7 ~@9 A@7 ~ A@14 ~@10 A@7 ~ A@7 C D E D E D E D ~ D E D E D E D ~ A@24 ~@10
>`.pickRestart({
  A: "~ x ~ x", B: "~ x!3 ~ x!3", C: "~ x ~@2", D: "~ x ~ x ~ x ~ x", E: "~ x ~ x ~ x!3",
})).gain(0.48)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@25 A@23 B ~@16 A@15 B ~@8 A@7 B A@8 ~@4 A@3 B A@7 B A@16 B ~@17>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@25 A@7 B A@15 ~@17 A@15 ~@9 A@7 ~ A@7 B ~@4 A@3 ~ A@7 ~ A@16 ~@18>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@7 A ~@6 A@2 ~@3 A ~@2 B A ~@7 A ~@6 A@2 ~@7 A ~@5 C D A ~@7 A ~@6 A@2 ~@7 A ~@6 B A ~@3 A ~@3 A ~ A ~ A ~ A B
  A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~
>`.pickRestart({
  A: "x", B: "x ~@3 x ~@3 x ~@2 x ~@2 x ~", C: "x!2", D: "x!2 ~@2",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@33 A@15 ~@9 A@7 ~ A@15 ~@17 A@7 B C@7 ~ A@7 ~ A@16 ~@18>".pickRestart({
  A: "x!16", B: "x!12 ~@4", C: "~@4 x ~@2 x!4 ~ x ~@3",
})).gain(0.24)

stack(
  piano, bass, bass_2, synth_strings_1, lead_2_sawtooth, drawbar_organ, lead_1_square, synth_bass_2, church_organ,
  string_ensemble_1, string_ensemble_1_soft, kick, snare, snare_soft, clap, pedal_hat, open_hat, crash, tambourine
)

More by DJ Paul Elstak