Strudelify

Move Your Ass

Scooter

KeyG minorTempo162 bpm
0:00/0:00
// Move Your Ass — Scooter
// 162 bpm, 4/4, key G 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(162/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
const bass = note(`<
  ~@8 A B A B A B A B A B A B A B A B ~@16 C D E F C D E F C D E F C D E F C D E F C D E F ~@8 A B A B A B A B A B A B A
  B A B A B A B A B A B ~@16 C D E F C D E F C D E F C D E F ~@10
>`.pickRestart({
  A: "~@2 d2 ~@3 d2 ~@3 d2 ~@3 d2 ~", B: "~@2 d2 ~@3 d2 ~@3 d2 ~@3 c2 ~", C: "~@2 c2 ~@3 c2 ~@3 c2 ~@3 c2 ~",
  D: "~@2 eb2 ~@3 eb2 ~@3 eb2 ~@3 eb2 ~", E: "~@2 g2 ~@3 g2 ~@3 g2 ~@3 g2 ~", F: "~@2 f2 ~@3 f2 ~@3 f2 ~@3 g2 ~",
})).s("gm_synth_bass_1").gain(0.52)

// bass · synth bass 1
const bass_2 = note(`<
  A@8 B C B C B C B C B C B C B C B C ~@40 A@8 B C B C B C B C A@8 B C B C B C B C ~@42
>`.pickRestart({
  A: "b2 c3 ~@2 d2@5 c3!2 b2!2 a2!2 b2", B: "d3!10 ~ d3 ~ d3!2 ~", C: "d3!10 ~ d3 ~ d3 c3 ~",
})).s("gm_synth_bass_1").gain(0.27).pan(0.3)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  A@8 ~@16 B C D E B C D E B C D E B C D E F G F G F G F G F G F G F G F G F G F G F G F G ~@32 B C D E B C D E B C D E
  B C D E F G F G F G F G F G F G F G F G B C D E B C D E H@2
>`.pickRestart({
  A: "[d4,d5,eb5]/8", B: "c4", C: "eb4", D: "d4", E: "f4", F: "~@2 [c4,g4] ~@3 [c4,g4] ~@3 [c4,g4] ~@3 [c4,g4] ~",
  G: "~@2 [c4,g4] ~@3 [c4,g4] ~@3 [c4,g4] ~@3 [c4,g4]!2", H: "c4/2",
})).s("gm_lead_2_sawtooth").gain(0.27).pan(0.6)

// chords · synth strings 1
const synth_strings_1 = note("<~@24 A@7 B@8 C@8 D@16 E@2 ~@31 A@7 B@8 C@8 D@8 F A@7 G@3>".pickRestart({
  A: "[~@4 [c2,g3]@16 ~@13 a4@2 ~ bb4@13 a4 ~ bb4 c5@8 g4@3 a4@5 [c2,g3]@16 ~@13 a4@2 ~ [g2,d4,bb4]@12, ~@4 g4@29 ~@35 g4@29 ~@15, ~@5 [eb2,bb3]@4 [g2,d4]@4 [f2,c4]@4 ~@4 [eb2,bb3]@4 ~@3]/7", // C5 Gm Eb5 G5 F5 Eb5
  B: "[~ a4 ~ bb4 c5@6 bb4@4 ~ a4@5 [c2,g3]@16 ~@13 a4@2 ~ bb4@13 a4 ~ bb4 c5@8 g4@3 a4@5 [c2,g3]@16 ~@13 a4@2 ~ [g2,d4,bb4]@12, ~@4 [f2,c4]@16 g4@29 ~@35 g4@29 ~@15, ~@9 [eb2,bb3]@4 [g2,d4]@4 [f2,c4]@4 ~@4 [eb2,bb3]@4 ~@3]/8", // C5 Gm F5 Eb5 G5 F5 Eb5
  C: "[~ a4 ~ bb4 c5@6 bb4@4 ~ a4@5 c3@16 eb3@16 g3@16 f3@16 c3@16 eb3@16 g3@12, ~ [f2,c4]@4 ~@27]/8", // F5
  D: "[~ f3@4 c3@4 eb3@4 g3@4 f3@4 c3@4 eb3@4 g3@3]/8", E: "[~ f3@4 ~@3]/2", F: "~ f3@3",
  G: "[~ a4 ~ bb4 c5@6 bb4@4 ~ a4@5 [c2,g3,g4]@28, ~ [f2,c4]@4 ~@7]/3", // C5 F5
})).s("gm_synth_strings_1").gain(0.27).pan(0.4)

// chords · synth strings 1 · soft notes
const synth_strings_1_soft = note("<~@40 A@24 ~@48 A@16 ~@10>".pickRestart({
  A: "[~ g4@4 bb4@4 d5@4 c5@4 g4@4 bb4@4 d5@4 c5@3]/8",
})).s("gm_synth_strings_1").gain(0.18).pan(0.4)

// other · synth brass 1
const synth_brass_1 = note("<~@16 A B A B A B A B ~@56 A B A B A B A B A B A B A B A B ~@42>".pickRestart({
  A: "[d4,d5]!12 ~ [d4,d5]!3", B: "[d4,d5]!8 ~ [d4,d5]!2 ~ [d4,d5]!2 ~@2",
})).s("gm_synth_brass_1").gain(0.15).pan(0.7)

// other · synth brass 1 · soft notes
const synth_brass_1_soft = note("<~@16 A B A B A B A B ~@56 A B A B A B A B A B A B A B A B ~@42>".pickRestart({
  A: "~@12 [d4,d5] ~@3", B: "~@8 [d4,d5] ~@2 [d4,d5] ~@4",
})).s("gm_synth_brass_1").gain(0.08).pan(0.7)

// other · lead 1 square
const lead_1_square = note("<~@40 A B C D A B C D ~@90>".pickRestart({
  A: "[g3,g4]@2 ~@2 [g3,g4]@2 ~@2 [g3,g4]@2 ~@2 [g3,g4] ~ [g3,g4] ~", // G
  B: "[g3,g4]@2 ~@2 [g3,g4]@2 ~@2 [g3,g4]@2 ~ [g3,g4]!2 ~ [g3,g4] ~", // G
  C: "[bb3,bb4]@2 ~@2 [bb3,bb4]@2 ~@2 [bb3,bb4]@2 ~@2 [bb3,bb4] ~ [bb3,bb4] ~", // Bb
  D: "[c4,c5]@2 ~@2 [c4,c5]@2 ~@2 [c4,c5]@2 ~ [f3,f4]!2 ~ [f3,f4] ~", // C F
})).s("gm_lead_1_square").gain(0.31)

// other · piano
const piano = note("<~@32 A B C D A B C D ~@64 A B C D A B C D ~@26>".pickRestart({
  A: "g5 ~ g5!2 ~ g5!2 ~ g5 ~ g5!5 ~", B: "g5 ~ g5!5 ~ g5 ~ g5!2 ~ g5!2 ~",
  C: "[g5,bb5] ~ bb5!2 ~ bb5!2 ~ bb5 ~ bb5!2 ~ bb5!2 ~", D: "[bb5,c6] ~ c6!2 ~ c6!2 ~ [f5,c6] ~ f5!2 ~ f5!2 ~",
})).s("gm_piano").gain(0.23).pan(0.7)

// other · piano · soft notes
const piano_soft = note("<~@32 A B C D A B C D ~@64 A B C D A B C D ~@26>".pickRestart({
  A: "~@4 g5 ~@2 g5 ~@7 g5", B: "~@7 g5 ~@4 g5 ~@2 g5", C: "~@2 g5 ~ bb5 ~@2 bb5 ~@4 bb5 ~@2 bb5",
  D: "~@2 bb5 ~ c6 ~@2 c6 ~@2 c6 ~ f5 ~@2 f5",
})).s("gm_piano").gain(0.12).pan(0.7)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@15 A ~@7 A ~@10 B A@5 ~@7 A ~@14 A@2 ~@2 B A@5 ~@7 A ~@7 A ~@6 A@2 ~@15 A ~@15 A ~@10
>`.pickRestart({
  A: "x!16", B: "~@12 x!4",
})).gain(0.26)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@32 [x!16]!2 [x!12 ~@4] ~@29 [x!16]!2 [x!12 ~@4] ~@71>").gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<A ~@23 A ~@3 A ~@3 A ~@63 A ~@3 A ~@3 A ~@23 A ~@3 A ~@5>".pickRestart({
  A: "x",
})).gain(0.41)

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

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@3 ~ A@16 ~@16 A@24 ~@8 A@24 ~@16 A@16 ~@10>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.36)

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

// drums · ride
const ride = s("rd").struct("<~@28 [x!16]!12 ~@60 [x!16]!12 ~@26>").gain(0.26)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 A@8 ~@8 A@8 ~@8 A@16 ~@12 A@20 ~@8 A@8 ~@8 A@8 ~@10>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.31)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~@40 [~ x ~ x]!24 ~@48 [~ x ~ x]!16 ~@10>").gain(0.34)

stack(
  bass, bass_2, lead_2_sawtooth, synth_strings_1, synth_strings_1_soft, synth_brass_1, synth_brass_1_soft,
  lead_1_square, piano, piano_soft, kick, snare, snare_soft, low_tom, hihat, open_hat, crash, ride, tambourine, whistle
)

More by Scooter