Strudelify

Hardcore Vibes

Dune

KeyA minorTempo165 bpm
0:00/0:00
// Hardcore Vibes — Dune
// 165 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 126 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(165/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.

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<~@66 A@3 B A@3 B A@3 C A@3 C A@3 C A@3 C ~@36>".pickRestart({
  A: "a2@2 a3@2 a2 a3@2 a2 a3@2 a2 e3@2 a2 d3@2", B: "a2@2 a3@2 a2 a3@2 a2 a3@2 a2 b3@2 a2 g3@2",
  C: "a2@2 a3@2 a2 a3@2 a2 a3@2 a2 b3@2 a2 g3 ~",
})).s("gm_lead_2_sawtooth").gain(0.39)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@20 A@3 B@8 C ~@2 D@3 B@4 E@8 B@4 F@4 C ~@20 G@2 ~@10 D@3 H I@3 B@12 C I@3 J@4 K@8 H
>`.pickRestart({
  A: "[[a3,a4,c5]@16 ~@16 d5@15 ~, e4@2 ~, ~@16 [g3,g4,b4]@31 ~]/3", // Am G
  B: "[[f3,f4] a3 ~ d5, [a4,c5] [g3,g4,b4], ~ e4@2 ~]/4", C: "[f3,f4,a4,c5]",
  D: "[[a3,a4,c5] ~ d5, e4@2 ~, ~ [g3,g4,b4]@2]/3", // Am G
  E: "[[f3,f4]@16 a3@16 ~@16 d5@15 ~ [f3,f4]@16 a3@16 ~@16 d5@16, [a4,c5]@32 [g3,g4,b4]@31 ~@17 e4@32 ~@16, ~@16 a5@63 ~@49, ~ e4@2 ~ [a4,c5]@2 [g3,g4,b4]@2]/8", // F Am G Am G
  F: "[[f3,f4]@16 a3@16 ~@16 d5@15 ~, [a4,c5]@32 [g3,g4,b4]@31 ~, ~ e4@2 ~]/4", G: "[a4,a5]/2", H: "[f3,f4,a4,c5]@15 ~",
  I: "[a3 ~ d5, e4@2 ~, ~ [g3,g4,b4]@2]/3", // G
  J: "[[f3,f4]@15 ~ a3@16 ~@16 d5@16, [a4,c5]@31 ~ [g3,g4,b4]@32, ~ e4@2 ~]/4", // F Am G
  K: "[[f3,f4]@16 a3@16 ~@16 d5@16 [f3,f4,a4,c5]@15 ~ a3@16 ~@16 d5@16, [a4,c5] [g3,g4,b4] ~ [g3,g4,b4], ~ a5@7, ~ e4@2 ~@2 e4@2 ~]/8", // F Am G
})).s("gm_synth_strings_1").gain(0.18)

// other · music box
const music_box = note(`<
  ~@20 A B C D A B C D A B C D ~@2 A B C D A B C D A B C D A B C D A B C D A B C D ~@32 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 A B C D
>`.pickRestart({
  A: "a5 ~@3 c6 ~@3 e6 ~@3 c6 ~@3", B: "g5 ~@3 b5 ~@3 e6 ~@3 b5 ~@3", C: "d6 ~@3 b5 ~@3 g5 ~@3 e6 ~@3",
  D: "d6 ~@3 c6 ~@3 a5 ~@3 g5 ~@3",
})).s("gm_music_box").gain(0.26)

// other · piano · "A.PIANO 3"
const piano = note(`<
  ~@20 A B C D A B E D A B E D ~@2 A B E D A B E D A B C D A B E D A B E D A B C D ~@32 A B E F A B E D A B E D A B E D
  A B E F A B E F A B E D A B E F A B E F
>`.pickRestart({
  A: "a4 c5 e5 c5", B: "g4 b4 e5 b4", C: "d5@4 b4@4 g4@4 e5@3 ~", D: "d5 c5 a4 g4", E: "d5 b4 g4 e5",
  F: "d5@4 c5@4 a4@4 g4@3 ~",
})).s("gm_piano").gain(0.26)

// other · piano · "A.PIANO 3" · soft notes
const piano_soft = note(`<
  ~@20 A B C D A B E D A B E D ~@2 A B E D A B E D A B C D A B E D A B E D A B C D ~@32 A B E F A B E D A B E D A B E D
  A B E F A B E F A B E D A B E F A B E F
>`.pickRestart({
  A: "a3 c4 e4 c4", B: "g3 b3 e4 b3", C: "d4@4 b3@4 g3@4 e4@3 ~", D: "d4 c4 a3 g3", E: "d4 b3 g3 e4",
  F: "d4@4 c4@4 a3@4 g3@3 ~",
})).s("gm_piano").gain(0.13)

// drums · kick
const kick = s("bd").struct(`<
  A B A C A B A B A B A B A B A B A B A B ~@14 A B A D A B A D A B A D E F@2 G E F E H A B A D ~@8 A@3 B A@3 B A@3 B A@3
  B A@3 B ~@24 A B A D A B A D E F@2 G E F@2 G
>`.pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~", C: "x ~@3 x ~@3 x!2 ~ x!2 ~ x ~", D: "x ~@3 x ~@3 x!8", E: "x ~@6 x",
  F: "x", G: "x!16", H: "x ~@3 x ~@3 x ~ x!6",
})).gain(0.6)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B A B A B A B C@8 ~@14 D E F G D E H I D E F C ~@8 D E F C A J A J A J A ~@5 A J A J A J A J A J A J D H F G A J
  A J ~@19 K D E F G H E H I ~@8
>`.pickRestart({
  A: "~@4 x ~ x ~@3 x ~ x ~@2 x", B: "~@4 x ~ x!2 ~@2 x ~@5", C: "x!16", D: "~@4 x ~ x!2 ~ x!4 ~ x!2",
  E: "~@2 x ~ x ~ x!2 ~ x!4 ~ x ~", F: "~@2 x ~ x!4 ~ x!4 ~ x!2", G: "~@2 x ~ x ~ x!10",
  H: "~@2 x ~ x ~ x!2 ~ x!4 ~ x!2", I: "~@2 x ~ x!12", J: "~@4 x ~ x!2 ~@2 x ~@3 x!2", K: "~@15 x",
})).gain(0.3)

// drums · clap
const clap = s("cp").struct("<~@12 A@8 ~@14 A@12 ~@8 A@4 ~@20 A@8 ~@22 B@2 A@8 ~@8>".pickRestart({
  A: "~ x ~ x", B: "x!16",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@12 ~@14 A@12 ~@8 A@4 ~@16 A@16 ~@20 A@8 ~@8>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@12 ~@14 A@12 ~@8 A@4 ~@16 A@16 ~@20 A@8 ~@8>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 A@16 ~@14 A@12 ~@8 A@11 ~@5 A@20 ~@20 A@8 ~@8>".pickRestart({
  A: "x!16",
})).gain(0.24)

// drums · splash
const splash = s("cr").struct(`<
  ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B ~@12 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@3 ~ A@3 B A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~@13 A ~@6 B A ~ A ~ A ~ A ~ A@3 ~ A@3 ~
>`.pickRestart({
  A: "x", B: "x!4",
})).gain(0.18)

// drums · ride
const ride = s("rd").struct("<~@12 A@8 ~@14 A@12 ~@8 A@11 ~@5 A@20 ~@20 A@8 ~@8>".pickRestart({
  A: "x!8",
})).gain(0.24)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@34 [x!3 ~ x!3 ~ x!3 ~ x!3 ~]!24 ~@44 [x!3 ~ x!3 ~ x!3 ~ x!3 ~]!24>").gain(1.22)

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

stack(
  lead_2_sawtooth, synth_strings_1, music_box, piano, piano_soft, kick, snare, clap, hihat, open_hat, tambourine,
  splash, ride, cabasa, lt
)

More by Dune