Strudelify

Move Your Body

Odyssey

KeyA majorTempo137 bpm
0:00/0:00
// Move Your Body — Odyssey
// 137 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(137/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@4 A B C D A B C D A B C E 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 E A B C D A B C D A B C D A B C
  D ~@4 A B C D A B C D A B C D A B C D A B C E A B C D A B C D A B C D A B C D A B C D A B C D ~@9
>`.pickRestart({
  A: "a1 ~@2 a1!2 ~ a1 ~ a1 ~@2 a1!2 ~ a1 ~", B: "e1 ~@2 e1!2 ~ e1 ~ e1!3 ~ e1 ~ e1 ~",
  C: "g1 ~@2 g1!2 ~ g1 ~ g1 ~@2 g1!2 ~ g1 ~", D: "d1 ~@2 d1!2 ~ d1 ~ d1!3 ~ d1 ~ d1 ~", E: "d1 ~@7",
})).s("gm_synth_bass_2").gain(0.64)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  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 ~@4 A B C D A B C D A B C D A B C E A B C D A B C D A
  B C D A B C D A B C D F G@2 F A B C D A B C D A B C D A B C E A B C D A B C D A B C D A B C D A B C D A B C H ~@9
>`.pickRestart({
  A: "[e3,a3]!2 ~ [e3,a3]!2 ~ [e3,a3] ~ [e3,a3]!3 ~ [e3,a3] ~ [e3,a3] ~", // A5
  B: "[e3,b3]!2 ~ [e3,b3]!2 ~ [e3,b3] ~ [e3,b3]!3 ~ [e3,a3] ~ [e3,b3] ~", // E5 A5 E5
  C: "[d3,b3]!2 ~ [d3,b3]!2 ~ [d3,b3] ~ [d3,b3]!3 ~ [d3,a3] ~ [d3,b3] ~", // G D5 G
  D: "[d3,a3]!2 ~ [d3,a3]!2 ~ [d3,a3] ~ [d3,a3]!3 ~ [d3,a3] ~ [d3,a3] ~", E: "[d3,a3] ~@15",
  F: "a3!2 ~ a3!2 ~ a3 ~ a3!3 ~ a3 ~ a3 ~", G: "b3!2 ~ b3!2 ~ b3 ~ b3!3 ~ a3 ~ b3 ~", H: "a3 ~@7, d3 ~@15",
})).s("gm_synth_brass_1").gain(0.24).pan(0.7)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1_2 = note("<A B C D A B C D A B C D A B C E ~@109>".pickRestart({
  A: "~@2 [e3,a3]!2 ~ [e3,a3]!2 ~ [e3,a3] ~ [e3,a3]!3 ~ [e3,a3] ~", // A5
  B: "[e3,a3] ~ [e3,b3]!2 ~ [e3,b3]!2 ~ [e3,b3] ~ [e3,b3]!3 ~ [e3,a3] ~", // A5 E5 A5
  C: "[e3,b3] ~ [d3,b3]!2 ~ [d3,b3]!2 ~ [d3,b3] ~ [d3,b3]!3 ~ [d3,a3] ~", // E5 G D5
  D: "[d3,b3] ~ [d3,a3]!2 ~ [d3,a3]!2 ~ [d3,a3] ~ [d3,a3]!3 ~ [d3,a3] ~", E: "[d3,b3] ~@15",
})).s("gm_synth_brass_1").gain(0.09).pan(1)

// other · clavinet
const clavinet = note(`<
  ~@24 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 ~@32 A B C D A B C E ~@8 A B C D A B C E ~
>`.pickRestart({
  A: "e4 a4 e4 a4 e4 a4 e4 a4", B: "e4 b4 e4 b4 e4 b4 e4 b4", C: "d4 b4 d4 b4 d4 b4 d4 b4",
  D: "d4 a4 d4 a4 d4 a4 d4 a4", E: "d4@2 a4@2 d4@2 a4@2 d4@2 a4@2 d4@2 a4 ~",
})).s("gm_clavinet").gain(0.19).pan(0.3)

// other · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note("<~@68 a4 [b4@3 e5]!2 [a4@7 ~] a4 [b4@3 e5]!2 [a4@7 ~] ~@49>")
  .s("gm_synth_strings_2").gain(0.24)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1_3 = note(`<
  ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@12
>`.pickRestart({
  A: "~@6 a4 ~",
})).s("gm_synth_brass_1").gain(0.09).pan(0.7)

// other · synth brass 1 · "SYNBRASS 1" · soft notes
const synth_brass_1_soft = note(`<
  ~@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11
>`.pickRestart({
  A: "a4 ~@7",
})).s("gm_synth_brass_1").gain(0.06).pan(0.7)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A B A@3 B A C A B A@3 B A C ~@7 D ~@4 A B A@3 B A ~ A B A@3 B A C A B A@3 B A@2 ~@16 A@7 ~@4 D A B A ~ A B A@3 B
  A C A B A@3 B A@2 ~@9
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~@2 x", C: "~@4 x ~@2 x!4 ~ x!4", D: "~@7 x!4 ~ x!4",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@36 x [~@7 x] x ~@86>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 A B C ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~ A B A B A B A B A B A B A B A B
  ~@8 A B A B A B A B A B A B A B C ~ A B A B A B A B A B A B A B A B A B A B A B A B ~@9
>`.pickRestart({
  A: "x ~@2 x ~@3 x ~@3 x ~@3 x", B: "~@3 x ~@3 x ~@3 x!2 ~@2 x", C: "~@3 x ~@3 x ~@3 x ~@3 x",
})).gain(0.05)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@12 A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B
  ~@8 A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B ~@9
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@3 x!2 ~@2 x ~",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 [x!3 ~] ~@35 [x!3 ~] ~@39 [x!3 ~] ~@33>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@7 A ~@7 A ~@3 A ~@3 A ~@11 A ~@7 A ~@7 A ~@3 A ~@19 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@8
>`.pickRestart({
  A: "x",
})).gain(0.5)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@15 A ~@35 A ~@23 A ~@15 A ~@33>".pickRestart({
  A: "~@3 x",
})).gain(0.3)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@29 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@3 x",
})).gain(4.08)

// drums · shaker
const shaker = s("sh").struct("<~@16 A@16 ~@12 A@24 ~@12 A@11 ~ A@24 ~@9>".pickRestart({
  A: "x!2 ~ x!2 ~ x ~ x!8",
})).gain(0.35)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@16 A@16 ~@12 A@24 ~@12 A@11 ~ A@24 ~@9>".pickRestart({
  A: "~@2 x ~@2 x ~ x ~@8",
})).gain(0.2)

stack(
  bass, synth_brass_1, synth_brass_1_2, clavinet, synth_strings_2, synth_brass_1_3, synth_brass_1_soft, kick, snare,
  low_tom, hihat, open_hat, mid_tom, crash, crash_soft, vibraslap, shaker, shaker_soft
)

More by Odyssey