Strudelify
Endless Summer cover art

20 Years Of Hardcore

Endless Summer

Scooter

KeyC majorTempo162 bpm
0:00/0:00
// Endless Summer — Scooter
// 162 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 145 bars on a 16-step grid, each part at one level. 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 · "SYN BASS 1"
const bass = note(`<
  ~@24 A B C B D B C E A B C B D B C E A B C B D B C E ~@8 E@16 ~@8 A B C B D B C E A B C B D B C E A B C B D B C E ~@17
  A B C B D B C E A B C B D B C E A B C B D B C E
>`.pickRestart({
  A: "g2 ~ g2!3 ~ g2!3 ~ g2!3 ~ g2!2", B: "e2 ~ e2!3 ~ e2!3 ~ e2!3 ~ e2!2", C: "f2 ~ f2!3 ~ f2!3 ~ f2!3 ~ f2!2",
  D: "d2 ~ d2!3 ~ d2!3 ~ d2!3 ~ d2!2", E: "a2 ~ a2!3 ~ a2!3 ~ a2!3 ~ a2!2",
})).s("gm_synth_bass_1").gain(0.6)

// chords · piano · "A.PIANO 3"
const piano = note(`<
  ~@16 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 ~@24 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 ~@13 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: "g3@2 [d4,g4,b4] ~ [d4,g4,b4]@2 g3 [d4,g4,b4] g3 [d4,g4,b4]@2 ~ [d4,g4,c5] ~ [d4,g4,d5]@2", // G Csus2 G5
  B: "e3@2 [e4,g4,c5] ~ [e4,g4,c5]@2 e3 [e4,g4,c5] e3 [e4,g4,c5]@2 ~ [f4,a4,c5] ~ [e4,g4,c5]@2", // C F C
  C: "f3@2 [c4,f4,a4] ~ [c4,f4,a4]@2 f3 [c4,f4,a4]@2 f3 [c4,f4,a4]@2 f3 [c4,f4,a4]@2 f3", // F
  D: "a3@2 [c4,e4,a4] ~ [c4,e4,a4]@2 a3 [c4,e4,a4] a3 [c4,e4,a4]@2 ~ [c4,e4,b4] ~ [c4,e4,c5]@2", // Am Cmaj7 C
  E: "a3@2 [c4,e4,a4] ~ [c4,e4,a4]@2 a3 [c4,e4,a4] ~@8", // Am
})).s("gm_piano").gain(0.3).pan(0.4)

// chords · pad halo · "HALO PAD"
const pad_halo = note(`<
  A B@3 A B@3 A B@3 A B@3 A B@3 A C@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~@24 A B@3 A C@3 A B@3 A B@3 A B@3 A B@3 A B@3
  A B@3 ~@9 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3
>`.pickRestart({
  A: "[g3,b3]", B: "[e3 f3 e3, c4]/3", C: "[e3@2 f3@2 e3 ~, c4@5 ~]/3",
})).s("gm_pad_halo").gain(0.21).pan(0.4)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<~@8 A@12 B@4 A@24 ~@24 A@4 B@4 A@24 ~@9 A@32>".pickRestart({
  A: "[[d5,b5] e5 f5 e5, g5 a5, ~ c6@3]/4", B: "[[d5,b5]@2 e5@2 f5@2 e5 ~, g5@4 a5@3 ~, ~@2 c6@5 ~]/4",
})).s("gm_synth_strings_1").gain(0.21).pan(0.6)

// bass · synth bass 1 · "SYN BASS 1"
const bass_2 = note("<~@48 A B A B A B A B A B A B A B A B A B A B A B A B ~@73>".pickRestart({
  A: "a2!2 e3 ~ a2!2 e3 ~ a2!2 e3 a2!3 e3 a2", B: "a2!2 e3 a2!3 a3 ~ a2!2 e3 a2!3 a3 a2",
})).s("gm_synth_bass_1").gain(0.32)

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

// drums · snare
const snare = s("sd").struct("<~@30 A@2 ~@31 A ~@22 A@2 ~@16 B C B C B C B C ~@8 D ~@7 D ~@6 A@2 ~@8>".pickRestart({
  A: "x!16", B: "~@4 x ~@2 x ~@2 x ~@5", C: "x ~@2 x ~ x ~@2", D: "~@8 x!8",
})).gain(0.3)

// drums · clap
const clap = s("cp").struct("<~@104 [~ x ~ x]!8 ~@33>").gain(0.3)

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

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

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

// drums · ride
const ride = s("rd").struct("<~@88 A@3 B A@3 B A@3 B A@3 B ~@25 A@3 B A@3 B A@3 B A@3 B>".pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@104 [x!16]!8 ~@33>").gain(0.3)

stack(bass, piano, pad_halo, synth_strings_1, bass_2, kick, snare, clap, hihat, open_hat, crash, ride, tambourine)

More by Scooter