Strudelify

This Is the Way

E-Type

KeyD minorTempo140 bpm
0:00/0:00
// This Is the Way — E-Type
// 140 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 138 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note(`<
  ~@12 A B C D A B C E A B C F A B C E A B C F ~@4 A B C E A B C E A B C E A B C E ~@8 A B C E A B C F ~@4 A B C E A B C
  E A B C E A B C E ~@12 A B C E A B C F A B C E A B C E A B C E A B C E A B C E A B C G@7
>`.pickRestart({
  A: "~@3 [a3,d4,f4]!2 ~ [a3,d4,f4]!2 ~ [a3,d4,f4] ~ [a3,d4,f4]!2 ~ [a3,d4,f4]!2", // Dm
  B: "~@3 [a3,c4,f4]!2 ~ [a3,c4,f4]!2 ~ [a3,c4,f4] ~ [a3,c4,f4]!2 ~ [a3,c4,f4]!2", // F
  C: "~@3 [g3,c4,e4]!2 ~ [g3,c4,e4]!2 ~ [g3,c4,e4] ~ [g3,c4,e4]!2 ~ [g3,c4,e4]!2", // C
  D: "~@3 [g3,b3,d4]!2 ~ [g3,b3,d4]!2 ~@8", // G
  E: "~@3 [g3,b3,d4]!2 ~ [g3,b3,d4]!2 ~ [g3,b3,d4] ~ [g3,b3,d4]!2 ~ [g3,b3,d4]!2", // G
  F: "~@3 [g3,b3,d4]!2 ~ [g3,b3,d4]!2 ~ [g3,b3,d4] ~ [g3,b3,d4] ~@4", // G
  G: "[~@3 [g3,b3,d4]!2 ~ [g3,b3,d4]!2 ~ [g3,b3,d4] ~ [g3,b3,d4]!2 ~ [g3,b3,d4] [g3,b3,d4]@96 ~]/7", // G
})).s("gm_synth_brass_2").gain(0.15).pan(0.7)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@16 A B C D A B C D E F G H E F G H I@4 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 I@4 A B C D A
  B C D A B C D A B C D J ~@11 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 K@6
>`.pickRestart({
  A: "d2@3 ~ d2@2 ~ d2 ~@2 d2@3 ~ d2 ~", B: "f1@3 ~ f1@2 ~ f1@2 ~ f1@2 ~@2 f1@2",
  C: "c2@3 ~ c2@2 ~ c2 ~@2 c2@2 ~@2 c2@2", D: "g1@3 ~ g1@2 ~ g1 ~@2 g1@3 ~ g1@2", E: "d1 d2 d1 d2 d1 d2 d1 d2",
  F: "f1 f2 f1 f2 f1 f2 f1 f2", G: "c1 c2 c1 c2 c1 c2 c1 c2", H: "g1 g2 g1 g2 g1 g2 f1 f2",
  I: "d1 d2 d1 d2 g1 a1 f1 c2", J: "d2@3 ~@13", K: "[[d1,d2]@95 ~]/6",
})).s("gm_synth_bass_2").gain(0.8).pan(0.7)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@8 A B C D A B C D A B C D A B C D ~@12 A B C D A B C D A B C D A B C D ~@20 A B C D A B C D A B C D A B C D ~@12 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 ~@6
>`.pickRestart({
  A: "a4 d4 f4 d4 a4 d4 f4 d4", B: "a4 c4 f4 c4 a4 c4 f4 c4", C: "g4 c4 e4 c4 g4 c4 e4 c4",
  D: "g4 b3 d4 b3 g4 b3 d4 b3",
})).s("gm_acoustic_guitar_nylon").gain(0.41).pan(0.3)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A B@3 C D@3 ~@84 A B@3 C D@3 ~@32 E@4 ~@2>".pickRestart({
  A: "c5@2 f5 g5, f6", B: "[e6@4 ~ f5 g5 c6 bb5@2 [a5,gb6]@2, a5@5 ~@7, ~@2 eb6@3 ~]/3",
  C: "[bb5,g6,bb6] [g5,g6] [d5,d6] [bb4,bb5]", D: "[f6@4 c7@2 ~@2 [c5,e5]@3 ~, f5@2 ~, ~@6 c6@5 ~]/3",
  E: "[d3@27 ~@5, d2 ~@3]/4",
})).s("gm_string_ensemble_1").gain(0.45)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  A B C@2 D E F@2 G@4 H@3 I G@4 H@3 J ~@12 G@16 ~@20 G@20 A B C@2 D E F@2 G@4 H@3 J G@24 K@6
>`.pickRestart({
  A: "[f2,f4,a4,c5]", B: "[e2,e4,a4,c5]", C: "[[eb4,g4,c5]@2 [eb4,g4,bb4] [gb2,d4,gb4,a4], eb2@3 ~]/2",
  D: "[g2,d4,g4,bb4]", E: "[f2,d4,f4,bb4]", F: "[[f4,g4,c5]@4 [e4,g4,c5]@3 ~, c3@7 ~]/2",
  G: "[[d3,d4] f3 [c3,e4] [d3,b3,d4], [f4,a4] g4, ~ c4@2 ~]/4", H: "[[d3,d4] f3 [c3,e4,g4], [f4,a4]@2 ~, ~ c4@2]/3",
  I: "[d3,b3,d4,g4]", J: "[d3,b3,d4,g4]@3 ~", K: "d3/6",
})).s("gm_synth_strings_2").gain(0.35).pan(0.4)

// other · french horn · "FR.HORN"
const french_horn = note("<A@2 B C D E F G ~@84 A@2 B C D E F G ~@38>".pickRestart({
  A: "[a3@6 c4 a3]/2", B: "c4", C: "bb3 a3", D: "bb3@3 bb4", E: "a4 g4", F: "f4", G: "e4@3 ~",
})).s("gm_french_horn").gain(0.39).pan(0.8)

// bass · slap bass 2 · "SLAPBASS 2"
const bass_2 = note("<~@15 A B ~@6 A B ~@2 A ~@31 A B ~@2 A ~@39 A ~@20 C@2 ~@12>".pickRestart({
  A: "~@12 d1@3 ~", B: "d1@3 ~@13", C: "~@4 d1@3 ~@9",
})).s("gm_slap_bass_2").gain(0.64)

// other · drawbar organ · "ORGAN 1"
const drawbar_organ = note("<~@15 A B ~@6 A B ~@2 A ~@4 C@4 ~@23 A B ~@2 A ~@4 C@4 ~@31 A ~@20 D@2 ~@12>".pickRestart({
  A: "~@6 [d1,d2] ~", B: "[d1,d2]@3 ~@13", C: "d2 ~ d3 ~ d2 ~ d3 ~ g2 ~ a2 ~ f2 ~ c3 ~", D: "~@2 [d1,d2] ~@5",
})).s("gm_drawbar_organ").gain(0.42).pan(0.7)

// other · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  ~@16 A B C D A B C D ~@8 E@4 A B C D A B C D A B C D A B C D A B C D A B C D ~@8 E@4 A B C D A B C D A B C D A B C D A
  B C D ~@8 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 F@4 ~@2
>`.pickRestart({
  A: "d3@2 a3 d3 d4@2 d3 a3@2 d3 d4@3 d3 a3 d4", B: "f3@2 a3 f3 c4@2 f3 a3@2 f3 c4@3 f3 a3 c4",
  C: "c3@2 g3 c3 c4@2 c3 g3@2 c3 c4@3 c3 g3 c4", D: "g2@2 g3 g2 d4@2 g2 g3@2 g2 d4@3 g2 b3 d4",
  E: "d3 ~ d4 ~ d3 ~ d4 ~ g3 ~ a3 ~ f3 ~ c4 ~", F: "[[d1,d2]@15 ~]/4",
})).s("gm_pad_poly").gain(0.64).pan(0.6)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@16 A B C D A B C E ~@12 A B C D A B C E A B C D A B C E ~@20 A B C D A B C E A B C D A B C E ~@20 A B C D A B C E A
  B C D A B C E A B C D A B C E ~@6
>`.pickRestart({
  A: "[f5,a5,d6]", B: "[f5,a5,c6]", C: "[e5,g5,c6]", D: "[d5,g5,b5]", E: "[d5,g5,b5]@3 ~",
})).s("gm_rock_organ").gain(0.13).pan(0.7)

// other · pad metallic · "METAL PAD"
const pad_metallic = note(`<
  ~@23 A B C D E F G H I ~@17 J ~@9 K L M N O P Q@2 I ~@9 J ~@7 J ~@13 R S T U V W X@2 Y ~@5 J ~@7 J ~@7 J ~@8
>`.pickRestart({
  A: "~@14 d3 ~", B: "d3 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3!2", C: "~ d3 ~ d3!2 ~ d3!2 ~ d3 ~@2 d3 ~ d3 ~",
  D: "d3!2 ~ d3!2 ~ d3!2 ~ d3!2 ~ d3@2 c3 ~", E: "d3 ~ d3 ~ d3@2 c3 d3@2 f3@2 ~@3 d3 ~",
  F: "d3 ~ d3!2 ~ d3 ~ d3 ~ d3 ~ d3!2 ~ c3 d3", G: "~ d3 ~ d3!2 ~ d3!3 ~ c3@2 ~@2 e3@2",
  H: "~@2 d3!3 ~ d3!3 ~ c3 d3 ~@2 c3@2", I: "d3!2 ~ d3!2 ~ d3 ~ g3@3 ~ f3 ~ d3 ~", J: "~@2 d3!3 ~ d3!3 ~@7",
  K: "~@14 f3 ~", L: "d3 ~ d3!2 ~ d3!4 ~ d3!2 ~ f3@2 ~", M: "d3 ~ d3!2 ~ d3 ~ d3!2 ~ d3!2 ~ f3 ~ d3",
  N: "~ d3 ~ d3!6 ~ d3!2 ~ f3 ~ d3", O: "~ d3 ~ d3!2 ~ d3 ~ d3@2 ~@6", P: "~@2 d3 ~ d3 ~ d3!2 ~ d3!4 ~ d3!2",
  Q: "[~ d3!6 ~ d3 ~ d3!3 ~ d3 f3@2 ~ d3!3 ~ d3!3 ~ c3 d3@2 ~ c3@2]/2", R: "~@14 f4 ~",
  S: "d4 ~ d4!2 ~ d4!4 ~ d4!2 ~ e4@2 ~", T: "c4 ~ c4!2 ~ c4 ~ c4!2 ~ c4 c4@2 c4 ~ c4",
  U: "~ c4 ~ c4!6 ~ c4!2 ~ c4 ~ d4", V: "~ d4!2 ~ d4 ~ c4 ~ b3@2 ~@6", W: "~@2 d4 ~ d4 ~ d4!7 ~ d4 c4",
  X: "[~ c4!6 ~ c4 ~ c4!3 ~ c4 c4@2 ~ c4!3 ~ c4!3 ~ c4 c4@2 ~ c4 ~]/2", Y: "d4!2 ~ d4!2 ~ d4 ~ g4@3 ~ f4 ~ d4 ~",
})).s("gm_pad_metallic").gain(0.8).pan(0.3)

// other · pad metallic · "METAL PAD" · soft notes
const pad_metallic_soft = note("<~@99 A B C D E F G@2 H ~@30>".pickRestart({
  A: "~@14 a4 ~", B: "f4 ~ f4!2 ~ f4!4 ~ f4!2 ~ g4@2 ~", C: "e4 ~ e4!2 ~ e4 ~ e4!2 ~ e4 e4@2 e4 ~ e4",
  D: "~ e4 ~ e4!6 ~ e4!2 ~ e4 ~ f4", E: "~ f4!2 ~ f4 ~ e4 ~ d4@2 ~@6", F: "~@2 f4 ~ f4 ~ f4!7 ~ f4!2",
  G: "[~ e4!6 ~ e4 ~ e4!3 ~ e4 e4@2 ~ e4!3 ~ e4!3 ~ e4 e4@2 ~ e4 ~]/2", H: "d3!2 ~ d3!2 ~ d3 ~ g3@3 ~ f3 ~ d3 ~",
})).s("gm_pad_metallic").gain(0.32).pan(0.3)

// drums · rim
const rim = s("rim").struct("<~@99 x ~@32 x ~@5>").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A ~@3 B@3 C B@11 D B@4 E D E D B@19 D B@7 D B@4 E D E D B@16 A ~@2 F A ~@7 B@7 ~ B@24 A ~@5
>`.pickRestart({
  A: "x", B: "x!4", C: "x!2 ~ x!2 ~ x ~", D: "x ~ x ~ x!2 ~ x", E: "x ~ x ~ x ~ x!2", F: "~@12 x!4",
})).gain(0.8)

// drums · clap
const clap = s("cp").struct("<~@16 A@7 B A@7 B ~@4 A@23 B A@7 B ~@4 A@20 ~@8 A@7 B A@24 ~@6>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@16 A@7 B A@7 B ~@2 C@2 A@23 B A@7 B ~@2 C@2 A@16 ~@12 A@7 ~ A@24 ~@6>".pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3", C: "~@3 x ~@3 x ~@3 x ~@3 x",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 x ~@90 x ~@38>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A@7 B A@7 B ~@2 A@25 B A@7 B ~@2 A@18 ~@12 A@7 ~ A@24 C ~@5>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "x",
})).gain(0.72)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@16 A@7 B A@7 B ~@2 C@2 A@23 B A@7 B ~@2 C@2 A@16 ~@12 A@7 ~ A@24 ~@6
>`.pickRestart({
  A: "x!8", B: "x!6 ~@2", C: "~ x ~ x ~ x ~ x",
})).gain(0.56)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@16 A@7 B A@7 B ~@4 A@23 B A@7 B ~@4 A@16 ~@12 A@7 ~ A@24 ~@6>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~@4",
})).gain(0.32)

// drums · shaker
const shaker = s("sh").struct("<~@16 A@8 ~@12 A@16 ~@20 A@16 ~@2 A@2 ~@8 A@32 ~@6>".pickRestart({
  A: "x!16",
})).gain(0.4)

stack(
  synth_brass_2, bass, acoustic_guitar_nylon, string_ensemble_1, synth_strings_2, french_horn, bass_2, drawbar_organ,
  pad_poly, rock_organ, pad_metallic, pad_metallic_soft, rim, kick, clap, hihat, mid_tom, open_hat, crash, tambourine,
  tambourine_soft, shaker
)