Strudelify
Wipe Out cover art

Past Times Behind

Wipe Out

The Beach Boys

KeyE majorTempo160 bpm
0:00/0:00
// Wipe Out — The Beach Boys
// 160 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B A@2 C@2 A@2 D C A E F ~ F ~ G ~ F ~ H I F J A B A@2 C@2 A@2 D C A E F ~ F ~ G ~ F ~ H I F J A B A@2 C@2 A@2 D C
  A E F ~ F ~ G ~ F ~ H I F J A B A@2 C@2 A@2 D C A E K
>`.pickRestart({
  A: "e1@2 e2 d2 b1@2 d2@2", B: "e1@4 e2@2 d2@2 b1@4 d2@3 ~", C: "a1@2 a2 g2 e2@2 g2@2", D: "b1@2 b2 a2 f#2@2 a2@2",
  E: "b1 ~ b1@3 ~ b1 ~ b1@3 ~ b1@3 ~", F: "e1@3 ~@13", G: "a1@3 ~@13", H: "b1@3 ~@13", I: "a1 ~@7",
  J: "b1 ~ b1@3 ~ b1@3 ~ b1@3 ~ b1@2", K: "e1@2 ~@2 e1@3 ~@9",
})).s("gm_acoustic_bass").gain(0.72)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B C D E F G H I J K L@2 M ~ N ~ O ~ P ~ Q R M S B C D E F G H I J K L@2 M ~ N ~ O ~ P ~ Q R M S B C D E F G H I J K
  L@2 M ~ N ~ O ~ P ~ Q R M S B C D E F G H I J K L@2 T
>`.pickRestart({
  A: "~@5 b2 d3 d#3", B: "e3@2 e3 ~ [e3,b3,e4]@2 [d3,e3,b3,e4]@2 b2@2 b2@2 [d3,e3,b3,e4]@2 d#3@2",
  C: "e3 ~ e3 ~ [e3,b3,e4]@2 [d3,e3,f3,b3,e4]@2 b2@2 b2@2 [d3,e3,b3,e4]@2 d#3 ~", // E5 Bdim E7
  D: "e3 ~ e3 ~ [e3,b3,e4]@2 [d3,e3,b3,e4] ~ b2@2 b2@2 [d3,e3,b3,e4]@2 d#3 ~", // E5 E7
  E: "e3 ~ e3 ~ [e3,b3,e4]@2 [d3,e3,b3,e4]@2 ~@2 e3@2 [e3,g3,b3,e4]@2 g#3@2, ~@8 b2@5 ~@3", // E5 E7 Em
  F: "a3 ~ a3 ~ [e3,a3,e4]@2 [e3,g3,a3,b3,e4] ~ e3@2 e3@2 [e3,g3,a3,e4]@2 g#3 ~", // A5 Em A7
  G: "a3@2 a3 ~ [e3,a3,e4]@2 [e3,g3,a3,e4]@2 ~@2 b2@2 [d3,e3,a3,e4]@2 d#3 ~, ~@2 e3 ~", // A5 A7 Dsus2
  H: "e3 ~ e3 ~ [e3,b3,e4]@2 [b3,e4] ~ b2@2 b2@2 [d3,e3,b3,e4]@2 d#3 ~, ~@3 d3@3 ~@2, ~@3 e3 ~@4", // E5 E7
  I: "e3 ~ e3 ~ b3@2 [d3,e3,b3]@2 ~@2 e3@2 [e3,g3,b3,e4]@2 a3@2, ~ e4 ~@2, ~@4 e3 ~@3 b2@4 ~@4", // E7 Em
  J: "b3 ~ b3 ~ [b3,f#4,b4]@2 [b3,f#4,b4] ~ f#3@2 f#3@2 [b3,f#4,b4] ~@3, ~@6 a3@7 ~@3", // B5
  K: "a3@2 a3 ~ [a3,e4,a4]@2 [g3,a3,e4,a4] ~@3 b2@2 [d3,a3,e4,a4]@2 d#3 ~, ~@8 e3@5 ~@3", // A5 A7 Dsus2
  L: "[e3 ~ e3 ~ [e3,b3,e4]@2 [d3,e3,b3,e4] ~ b2 ~@9 [b3,f#4,b4]@2 [b3,f#4,b4]@2 b2 [b3,f#4] [b3,f#4,b4] ~ [b2,f#4,b4]@2 ~ [f#4,b4] b2 ~, ~@5 b2@4 b2@2 ~@5, ~@12 [e3,e4]@11 ~@9, ~@12 b3@6 ~@8 b3@3 ~@3, ~@16 d3@7 ~@9]/2", // E5 E7 B5 E
  M: "[e3,b3,e4]@3 ~@13", N: "~ [b3,e4]@3 ~@12, e3@3 ~@13", O: "~ [e4,a4]@2 ~@13, a3 ~@7", P: "[e3,b3,e4] ~@7",
  Q: "[b3,f#4,b4] ~@7", R: "[a3,e4,a4]@3 ~@13",
  S: "~@2 [b3,f#4,b4]@2 [b3,f#4,b4]@3 [b3,f#4,b4] [b3,f#4,b4]@2 [b2,b3,f#4,b4]@2 [d3,b3,f#4,b4] [b3,f#4,b4] ~ [b3,f#4,b4], ~@7 d#3", // B5 Bm B5
  T: "[e3,b3,e4]@2 ~@2 [e3,b3,e4]@3 ~@9", // E5
})).s("gm_electric_guitar_clean").gain(0.72)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@14 A ~ A ~ A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~ A ~ A ~@13
>`.pickRestart({
  A: "~@2 x!2 ~ x ~ x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~ A@12 ~@11 B A@12 ~@11 B A@12 ~@10 C D A@12 E>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~@2 x ~ x ~@2 x!2 ~ x ~ x!3 ~", C: "~@7 x", D: "x!2 ~@10 x ~@3", E: "x!2 ~@2",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@24
  [~@3 x ~ x!2 ~@2 x ~ x ~@3 x]
  ~@23
  [~@3 x ~ x!2 ~@2 x ~ x ~@3 x]
  ~@22
  [~@15 x]
  ~@14
>`).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@37 A B A B A B A B A B A C ~@22 D E ~@13>".pickRestart({
  A: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", B: "x!3 ~ x!5 ~ x!3 ~ x!2", C: "x!2 ~@14", D: "~@6 x!6 ~@4", E: "~@8 x!2 ~ x!2 ~@3",
})).gain(0.48)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@37 A B A B A B A B A B A ~@38>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~@3 x ~@5 x ~@3 x ~@2",
})).gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<~@13 [x!4]!12 ~@12 [x!4]!12 ~@12 [x!4]!12 ~@13>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@13 A B A B A B A B A B A C ~@38 A D E@2 ~ B ~ F G H I@12 ~>".pickRestart({
  A: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", B: "x!3 ~ x!5 ~ x!3 ~ x!2", C: "x!2 ~@14", D: "x!3 ~ x!5 ~ x!3 ~ x ~",
  E: "x!2 ~@5 x!3 ~@3 x!3", F: "x!16", G: "~@3 x!3 ~@7 x ~@2", H: "~@4 x ~ x!2 ~@4 x ~@3", I: "~@3 x",
})).gain(0.48)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@13 A B A B A B A B A B A ~@39 A C ~@3 B ~@17>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~@3 x ~@5 x ~@3 x ~@2", C: "~@3 x ~@5 x ~@3 x ~ x",
})).gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@61 A B ~@2 C@2 A ~ D ~ E F G@12 ~>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", B: "x!2 ~@2 x!3 ~ x ~ x!2 ~@2 x!2", C: "~@2 x!5 ~@3 x!3 ~@3", D: "x!16",
  E: "x!3 ~@13", F: "~ x ~@4 x ~", G: "~@2 x!2 ~@4",
})).gain(0.56)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct(`<
  ~@61
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]
  [~@2 x!2 ~@3 x ~ x ~@2 x!2 ~@2]
  ~@4
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]
  ~@18
>`).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@85 [x!2 ~@2]>").gain(0.8)

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

stack(
  bass, electric_guitar_clean, kick, kick_soft, snare, snare_soft, low_tom, low_tom_soft, hihat, mid_tom, mid_tom_soft,
  high_tom, high_tom_soft, crash, ride
)

More by The Beach Boys