Strudelify

I Can't Stop Raving

Dune

KeyB♭ majorTempo161 bpm
0:00/0:00
// I Can't Stop Raving — Dune
// 161 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(161/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 · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@24 A B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A ~@24 A B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A ~@8 A B C
  A@2 B C ~ A B C A@2 B C A ~@8
>`.pickRestart({
  A: "eb2 ~ eb2!3 ~ eb2!3 ~ eb2!3 ~ eb2!2", B: "f2 ~ f2!3 ~ f2!3 ~ f2!3 ~ f2!2", C: "d2 ~ d2!3 ~ d2!3 ~ d2!3 ~ d2!2",
})).s("gm_synth_bass_1").gain(0.37)

// other · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note(`<
  ~@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 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 ~@8 A B C D A B C D A B C D A B C D
>`.pickRestart({
  A: "bb4@3 ~ bb4 ~ c5@3 ~ c5 ~ d5@3 ~", B: "c5@3 ~ c5 ~ bb4@3 ~ bb4 ~ a4@3 ~", C: "f4@3 ~ f4 ~ g4@3 ~ g4 ~ a4@3 ~",
  D: "bb4@3 ~ bb4 ~ a4@3 ~ a4 ~ g4@3 ~",
})).s("gm_lead_3_calliope").gain(0.28).pan(0.7)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<~@112 A B C D A B C D A B C D A B C D>".pickRestart({
  A: "d5", B: "c5@7 ~", C: "g5@2 f5@9 ~ d5@4", D: "bb4@3 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.35)

// other · drawbar organ · "ORGAN 1"
const drawbar_organ = note(`<
  ~@8 A B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A ~@32 A B C A@2 B C A@2 B C A@2 B C
  A@2 B C A@2 B C A ~@8 A B C A@2 B C A@2 B C A@2 B C A
>`.pickRestart({
  A: "[eb4,eb5]@3 ~ [eb4,eb5] ~ [eb4,eb5]@3 ~ [eb4,eb5] ~ [eb4,eb5]@3 ~", // Eb
  B: "[f4,f5]@3 ~ [f4,f5] ~ [f4,f5]@3 ~ [f4,f5] ~ [f4,f5]@3 ~", // F
  C: "[d4,d5]@3 ~ [d4,d5] ~ [d4,d5]@3 ~ [d4,d5] ~ [d4,d5]@3 ~", // D
})).s("gm_drawbar_organ").gain(0.28).pan(0.3)

// chords · piano · "A.PIANO 3"
const piano = note(`<
  ~@32 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 ~ 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 A B C D A B C ~ A B C D A B C D ~@8
>`.pickRestart({
  A: "eb3@4 [eb4,g4,bb4]@2 ~ [eb4,bb4]@2 eb3 [eb4,g4,bb4]@2 eb3@2 [eb4,bb4]@2, ~@3 eb3 ~@4, ~@7 g4 ~@6 g4 ~", // Eb Eb5 Eb Eb5
  B: "f3@4 [f4,a4,c5]@2 ~ [f4,a4,c5]@2 f3 [f4,a4,c5]@2 f3@2 [f4,a4,c5]@2, ~@3 f3 ~@4", // F
  C: "d3@4 [d4,f4,a4]@2 ~ [d4,f4,a4]@2 d3 [d4,f4,a4]@2 d3@2 [d4,f4,a4]@2, ~@3 d3 ~@4", // Dm
  D: "eb3@4 [eb4,g4,bb4]@2 eb3 [eb4,g4,bb4] ~ eb3 [eb4,g4,bb4]@2 eb3 ~ [eb4,g4,bb4]@2", // Eb
})).s("gm_piano").gain(0.22)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 E ~@8 A B@2 C@2 D@2 E A
  B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 E A B@2 C@2 D@2 ~ A B@2 C@2 D@2 E A B@2
  C@2 D@2 F
>`.pickRestart({
  A: "[bb3,eb4,g4]", B: "[[c4,a4] [a3,d4], f4]/2", C: "[bb3 bb4, [eb4,g4]]/2", D: "[c4 d4, [f4,a4]]/2",
  E: "[eb4,g4,bb4]", F: "[eb4,g4,bb4]@7 ~",
})).s("gm_synth_strings_1").gain(0.2).pan(0.6)

// bass · synth bass 1 · "+SYN BASS3"
const bass_2 = note("<~@48 A@24 B C D B@2 C D B@2 C D B@2 C D B@2 C D B@2 C D B ~@16 B C D B@2 C D B ~@8>".pickRestart({
  A: "g2!4 g3!2 g2!4 g3!2 g2!2 g3!2", B: "eb2!4 eb3!2 eb2!4 eb3!2 eb2!2 eb3!2", C: "f2!4 f3!2 f2!4 f3!2 f2!2 f3!2",
  D: "d2!4 d3!2 d2!4 d3!2 d2!2 d3!2",
})).s("gm_synth_bass_1").gain(0.25)

// chords · lead 3 calliope · "CALLIOPE"
const lead_3_calliope_2 = note("<A B C D@2 E@2 F ~@120>".pickRestart({
  A: "[bb3,eb4]", B: "[c4,f4]", C: "[a3,d4]", D: "[bb3 g4, eb4]/2", E: "[a4 d4, f4]/2", F: "[eb4,g4]",
})).s("gm_lead_3_calliope").gain(0.2).pan(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@20 A B@3 ~@7 B ~@7 B ~@7 B ~@20 A B@3 ~@36 A B@2 ~@17>".pickRestart({
  A: "~@12 x!4", B: "x!16",
})).gain(0.22)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@20 [x!12 ~@4] ~@47 [x!12 ~@4] ~@39 [x!12 ~@4] ~@19>").gain(0.17)

// drums · clap
const clap = s("cp").struct(`<
  ~@23 A B C B D B C B D B C B D B C B D B C B D B C B D ~@23 A B C B D B C B D B C B D B C B D B C B D B C B D ~@16 B C
  B D B C B D ~@8
>`.pickRestart({
  A: "x!16", B: "~@12 x!4", C: "~@10 x ~ x!4", D: "~@8 x!8",
})).gain(0.28)

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

// drums · open hat
const open_hat = s("oh").struct("<~@24 [~ x ~ x ~ x ~ x]!24 ~@24 [~ x ~ x ~ x ~ x]!24 ~@16 [~ x ~ x ~ x ~ x]!8 ~@8>")
  .gain(0.39)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@16 A@32 ~@16 A@32 ~@8 A@7 ~ A@8 ~@8>".pickRestart({
  A: "x!16",
})).gain(0.22)

stack(
  bass, lead_3_calliope, acoustic_guitar_nylon, drawbar_organ, piano, synth_strings_1, bass_2, lead_3_calliope_2, kick,
  snare, snare_soft, clap, hihat, open_hat, crash, tambourine
)

More by Dune