Strudelify

Wipeout

The Beach Boys

KeyC majorTempo150 bpm
0:00/0:00
// Wipeout — The Beach Boys
// 150 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 9 "GUITAR LEAD" electric guitar clean (copy of ch 3 "GUITAR LEAD" electric guitar clean); ch 5 "GUITAR SOLO" electric guitar clean (copy of ch 11 "GUITAR SOLO" electric guitar clean)
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/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 · electric bass finger · "BASS"
const bass = note(`<
  ~@4 A B C D E F G H I J K L M N O ~ P ~ Q ~ P ~ R Q O S C D E F G H I J K L M N O ~ P ~ Q ~ P ~ R Q O T U V@2 W X Y Z
  V AA G V AB O ~ P ~ Q ~ P ~ R Q O S C D E F G H I J K L M N C D E F G H I J K L M N ~@2 P
>`.pickRestart({
  A: "c2@3 ~ c2 ~ c2 ~ c2@3 ~ c2 ~ c2 ~, b1 ~@7 b1 ~@7", B: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ [b1,c2] ~ c2 ~, b1 ~@5 b1 ~@9",
  C: "c2 ~ c2 ~ c2@2 a#1 ~ g1 ~ g1@2 a#1@2 b1@2", D: "c2 ~ c2 ~ c2 ~ a#1 ~ g1 ~ g1@2 a#1 ~ b1 ~",
  E: "c2 ~ c2 ~ c2 ~ a#1 ~ g1 ~ g1@2 a#1 ~ b1@2", F: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ d#2@2 e2 ~",
  G: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2 ~ f2 ~, e2 ~@5 e2 ~@9", H: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@2 d#2@2, e2 ~@5 e2 ~@9",
  I: "c2@3 ~ c2 ~ a#1@2 g1 ~ g1@2 a#1 ~ b1@2", J: "c2 ~ c2 ~ c2 ~ a#1@2 g1 ~ g1 ~ g1 ~ g1 ~",
  K: "g2 ~ g2 ~ g2 ~ g2 ~ d3 ~ d3 ~ d3@2 ~@2", L: "[f2,g2] ~ f2 ~ f2 ~ c3@3 ~ c3 ~ c3@2 c3 ~",
  M: "c2 ~ c2 ~ c2 ~ a#1 ~ g1 ~ g1 ~ a#1@2 ~@2", N: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", O: "c2 ~@7",
  P: "c2@3 ~@13", Q: "f2@3 ~@13", R: "g2@3 ~@13", S: "~@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  T: "~ g1 ~@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", U: "[b1,d#2] ~@3 c2 ~ c2@3 ~ c2 ~ c2 ~ c2 ~, c2@3 ~@3 b1 ~@9",
  V: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2 ~ c2 ~, b1 ~@5 b1 ~@9", W: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ d#2 ~ e2 ~, b1 ~@5 b1 ~@9",
  X: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2 ~ f2 ~, ~@6 e2 ~@9", Y: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~, e2 ~@5 e2 ~@9",
  Z: "c2@2 ~@2 c2 ~ c2@3 ~ c2 ~ c2 ~ c2 ~, b1 ~@5 b1 ~@9",
  AA: "[f#2,a#2] ~@3 g2 ~ [f#2,a#2] ~@3 g2 ~ g2 ~ g2 ~, g2@3 ~@3 g2@3 ~@7", // F#
  AB: "[b1,c2] ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", // Cmaj7
})).s("gm_electric_bass_finger").gain(0.61)

// chords · electric guitar clean · "GUITAR SOLO"
const electric_guitar_clean = note("<~@54 A B C D E F G H I J K L M ~@38>".pickRestart({
  A: "[g4,c5]@3 ~ [g4,c5] ~ [g4,a#4]@4 g4@3 ~ g4 ~", // C5 Gm
  B: "[g4,c5]@3 ~ [g4,c5] ~ [g4,d#5]@4 c5@4 g4 ~, ~@6 c5 ~@3 g4@2 ~@4", C: "c4@3 ~ c4 ~ d#4@4 c4@3 ~ c4 ~, ~@6 f#4 ~@9",
  D: "g4@3 ~ g4 ~ [g4,a#4]@4 g4@3 ~ g4 ~", E: "[f4,d#5]@3 ~ [f4,d#5] ~ [f4,d#5]@3 ~ c5@4 f4 ~, ~@6 c5 ~@3 f4 ~@5",
  F: "[f4,d#5]@3 ~ [f4,c5] ~ [f4,c5]@4 [f4,d#5]@4 c5 ~, c5 ~@9 c5 ~@5", G: "g4@3 ~ g4 ~ a#4@4 g4@3 ~ g4 ~",
  H: "c4@3 ~ c4 ~ d#4@4 c4@4 d#4 ~", I: "[d4,g4]@3 ~ [d4,g4] ~ [e4,g4]@4 [d4,g4]@4 [d4,g4] ~",
  J: "[c4,f4]@3 ~ [c4,f4] ~ [d4,f4]@4 [c4,f4]@4 c4 ~", K: "c4@3 ~ c4 ~ d#4@4 c4 ~ d#4@2 c4 ~",
  L: "~@2 [g3,g4] ~ [g3,g4,a4] ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~ [g3,g4] ~", M: "c4@3 ~@13",
})).s("gm_electric_guitar_clean").gain(0.72)

// chords · electric guitar clean · "GUITAR-RHYTHM"
const electric_guitar_clean_2 = note(`<
  ~@18 A ~ B ~ C ~ B ~ D E B ~@13 F ~ F ~ C ~ F G@2 H I ~@13 F ~ F ~ C ~ F G@2 H I ~@28
>`.pickRestart({
  A: "[c4,e4,g4,c5]@3 ~@13, b4 ~@15", B: "[c4,e4,g4,c5]@3 ~@13", C: "[f2,c3,f3,a3,c4,f4] ~@3",
  D: "[g2,d3,g3,b3,d4,g4]@3 ~@13", E: "[f2,c3,f3,a3,c4,f4]@3 ~@13", F: "[g3,c4,e4,g4,c5]@3 ~@13",
  G: "[~@4 [d3,g3,b3,d4,g4] ~@3, ~@15 g2@4 ~@13]/2", H: "[f2,c3,f3,a3,c4,f4] ~@3, e4 ~@15",
  I: "[c3,g3,c4,e4,g4,c5]@3 ~@13", // C
})).s("gm_electric_guitar_clean").gain(0.8).pan(0.3)

// other · rock organ · "ORGAN 1"
const rock_organ = note(`<
  ~@5 A B@3 C D E B F G E H I ~@11 A B@3 C D E B F G E H I ~@36 J B@2 C D E B F G E H I J B@2 C D E B F G E H I ~@2 K
>`.pickRestart({
  A: "~@5 g4 a#4 b4", B: "c5!3 a#4 g4!2 a#4 b4", C: "c5!3 a#4 g4 c5 d#5 e5", D: "f5!3 d#5 c5!2 d#5 e5",
  E: "f5!3 d#5 c5 g4 a#4 b4", F: "c5!3 a#4 g4 c5 f5 f#5", G: "g5!3 f5 d5!2 g5 ~", H: "c5!3 a#4 g4!2 c5 a#4", I: "g4!8",
  J: "~ c5!2 a#4 g4!2 a#4 b4", K: "[c4,g4,c5,e5,g5,c6] ~@3",
})).s("gm_rock_organ").gain(0.61).pan(0.3)

// chords · rock organ · "ORGAN 2"
const rock_organ_2 = note(`<
  ~@18 A ~ B ~ C ~ B ~ D E B ~@13 F ~ G ~ C ~ G H@2 I J ~@13 F ~ G ~ C ~ G H@2 I J ~@28
>`.pickRestart({
  A: "[c5,e5,g5,c6]@3 ~@13, b5 ~@15", B: "[c5,e5,g5,c6]@3 ~@13", C: "[f3,c4,f4,a4,c5,f5] ~@3",
  D: "[g3,d4,g4,b4,d5,g5] ~@3", E: "[f3,c4,f4,a4,c5,f5]@3 ~@13", F: "[g4,c5,e5,g5,c6]@3 ~@13",
  G: "[g4,c5,e5,g5,c6] ~@3", H: "[~@4 [d4,g4,b4,d5,g5] ~@3, ~@15 g3@4 ~@13]/2", I: "[f3,c4,f4,a4,c5,f5] ~@3, e5 ~@15",
  J: "[c4,g4,c5,e5,g5,c6]@3 ~@13", // C
})).s("gm_rock_organ").gain(0.68).pan(0.7)

// chords · drawbar organ · "ORGAN 3"
const drawbar_organ = note(`<
  ~@6 A B@3 C@2 B D E C B F G ~@11 B@4 C H B@2 E C B I G ~@11 B@4 C J K B E C B L M ~@11 B@4 C@2 B@2 E C B N B@4 C O B P
  E C B Q R ~ S
>`.pickRestart({
  A: "~@4 [g4,a#4,c5] ~ [g4,a#4,c5,e5] ~@5 [g4,a#4,c5,d5,e5] ~@3, ~@2 e5 ~@5", // C7
  B: "~@4 [g4,a#4,c5,e5] ~ [g4,a#4,c5,e5] ~@5 [g4,a#4,c5,e5] ~@3", // C7
  C: "~@4 [c5,d#5,f5,a5] ~ [c5,d#5,f5,a5] ~@5 [c5,d#5,f5,a5] ~@3", // F7
  D: "~@4 [g4,a#4,c5,e5] ~ [g4,a#4,c5,e5] ~@5 [g4,a#4,c5] ~@3, ~@6 e5 ~", // C7
  E: "~@4 [d5,f5,g5,b5] ~ [d5,f5,g5,b5] ~@5 [d5,f5,g5,b5] ~@3", // G7
  F: "~@2 d5 ~ [g4,d5,g5] ~ [g4,d5,g5] ~ [g4,d5,g5] ~ [g4,d5,g5] ~ [g4,d5,g5] ~ [g4,d5] ~", // G5
  G: "[g4,c5,e5] ~@7, a#4 ~@15", H: "~@4 [c5,d#5,f5,a5] ~ [c5,d#5,a5] ~@5 [c5,d#5,f5,a5] ~@3",
  I: "~@2 g4 ~ [g4,b4,d5,g5] ~ [g4,b4,d5,g5] ~ [g4,b4,d5,g5] ~ [g4,b4,d5,g5] ~ [g4,b4,d5,g5] ~ [g4,b4,d5,g5] ~", // G
  J: "~@4 [c5,d#5,g5,a5] ~ [c5,d#5,g5,a5] ~@5 [c5,d#5,f5,a5] ~@3", // Am7b5 F7
  K: "~@4 [g4,a#4,c5,e5] ~ [g4,a#4,c5,d#5,e5] ~@5 [g4,a#4,c5,d#5,e5] ~@3", // C7
  L: "~@2 [d5,f5,g5,b5] ~ [d5,f5,g5,b5] ~ [d5,f5,g5,b5] ~ [d5,f5,g5,b5] ~ [d5,f5,g5,b5] ~ [d5,f5,g5,b5] ~ [d5,f5,g5,b5] ~", // G7
  M: "[e5,g5,c6] ~@7", // C
  N: "~@2 [b4,c5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,f5,g5] ~ [b4,d5,f5,g5] ~", // Cmaj7 G G7
  O: "~@3 [d#5,f5] [c5,a5] ~ [c5,d#5,f5,a5] ~@5 [c5,d#5,f5,a5] ~@3", // D#sus2 F F7
  P: "~@4 [g4,a#4,c5,e5] ~ [g4,a#4,c5,e5] ~@5 [g4,a#4,c5,e5] ~ [g4,a#4,c5,e5] ~", // C7
  Q: "~@2 [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~", // G
  R: "[g4,c5] ~@7, [a#4,e5] ~@15", S: "[c4,g4,c5,g5,c6] ~@3",
})).s("gm_drawbar_organ").gain(0.54).pan(0.7)

// chords · piano
const piano = note(`<
  ~@6 A B C D E F C@2 G H C I J ~ K ~ L ~ M ~ N O P Q R S T U V W C X Y Z X AA AB ~ AC ~ AD ~ AE ~ AF AG AH Q AI AJ AK
  AL AM AN AO@2 AP W AQ AA AB ~ AH ~ AD ~ AR ~ AS AT AR AU AV AQ@2 AW AX W X AO AP AY AZ BA BB@2 BC BD E BE@2 BF BG BH
  BC BA BI ~ BJ
>`.pickRestart({
  A: "[e3,g3,c4,e4]@5 ~ [e3,g3]@8 ~@2, ~@3 [c4,e4]@3 ~@2", B: "[e3,g3,c4,e4]@5 ~ [e3,c4,e4]@8 g3 ~, ~@6 g3@7 ~@3",
  C: "[e3,g3,c4,e4]@5 ~ [e3,g3,c4,e4]@9 ~", D: "[e3,g3,c4,e4]@5 ~ [g3,c4,e4]@6 g3 ~@3, ~@3 e3@4 ~",
  E: "[f3,a3,c4,f4]@5 ~ [f3,a3,c4,f4]@9 ~", F: "[f3,a3,c4,f4]@5 ~ [f3,a3]@9 ~, ~@6 [c4,f4]@7 ~@3",
  G: "[d3,g3,b3,d4]@5 ~ [d3,g3,b3,d4]@9 ~", H: "[c3,f3,a3,c4]@5 ~ [c3,f3,a3]@9 ~, ~@6 c4@7 ~@3",
  I: "~@2 [g2,g3,d4,g4] ~ [g2,g3,d4,g4] ~ [g2,g3,d4,g4] ~ [g2,g3,d4,g4] ~ [g2,g3,d4,g4] ~ [g2,g3,d4,g4] ~ [g2,g3,d4,f4,g4] ~", // G5 G7
  J: "[c2,c3,e4,g4,c5]@3 ~@13", K: "[c2,c3,c5,e5,g5,c6]@3 ~@13", L: "[f2,c3,f3,c4,f4,a4]@3 ~@13",
  M: "[c2,c3,c4,e4,g4]@3 ~@13", N: "[g2,d3,b3,d4,g4]@3 ~@13", O: "[f2,c3,a3,c4,f4] ~@3", P: "[c2,c3,g3,c4,e4]@3 ~@13",
  Q: "~@2 [g2,g3] ~ [g2,g3] ~ [g2,g3] ~ [g2,g3] ~ [g2,g3] ~ [g2,g3]@4", // G
  R: "[c3,g3,e4,g4]@4 c4 ~ [g3,e4]@6 c4 ~@3, c4@3 ~@3 [c4,g4]@5 ~@5", // C C5
  S: "[e3,c4,e4]@5 ~ [e3,g3,c4,e4]@6 ~@4, [g3,a3]@3 ~@13", // C Gsus2
  T: "[e3,g3,c4,e4,g4]@5 ~ [e3,g3,e4,g4]@6 c4 ~@3, ~@6 c4@5 ~@5", // C Em
  U: "[e3,g3,c4,e4]@5 ~ [e3,c4]@6 g3 ~ e3 ~, ~@6 [g3,e4]@5 ~@5", V: "[f3,a3,c4,f4]@4 a3 ~ [f3,a3,c4,f4]@7 ~@3",
  W: "[f3,a3,c4,f4]@5 ~ [f3,a3,c4,f4]@7 ~@3", X: "[e3,g3,c4,e4]@5 ~ [e3,g3,c4,e4]@7 ~@3",
  Y: "[g3,b3,d4,g4]@5 ~ [g3,b3,d4,g4]@8 ~@2", Z: "[f3,a3,c4,f4]@5 ~ [f3,a3,c4]@8 ~@2, ~@3 f4@3 ~@2",
  AA: "~@2 [g2,g3,b3,d4] ~ [g2,g3,b3,d4] ~ [g2,g3,b3,d4] ~ [g2,g3,b3,d4] ~ [g2,g3,b3,d4] ~ [g2,g3,b3,d4] ~ [g2,g3,b3,d4] ~", // G
  AB: "[c3,g3,c4,e4]@3 ~@13", AC: "[c2,c3,c4,g4,c5]@3 ~@13", AD: "[f2,f3,a4,c5,f5] ~@3", AE: "[c2,c3,c5,e5,g5,c6] ~@3",
  AF: "[g2,g3,d4,g4,b4] ~@3", AG: "[f2,f3,c4,f4,a4] ~@3", AH: "[c2,c3,e4,g4,c5] ~@3",
  AI: "[c3,e3,g3,c4]@4 e3 ~ [e3,c4]@6 g3 ~@3, ~@3 [g3,e4]@2 ~@3", // C
  AJ: "[e3,g3,c4,e4]@5 ~ [e3,c4]@6 g3 ~ c3 ~, ~@6 [g3,e4]@5 ~@5", AK: "[c3,e3,g3,c4]@5 ~ [c3,e3,g3,c4]@6 e3 ~ c3 ~",
  AL: "[e3,g3,c4,e4]@5 ~ [e3,g3,c4,e4]@6 [g3,c4,e4] ~ e3 ~", AM: "[f3,a3,c4,f4]@4 ~@2 [f3,a3,c4,f4]@6 a3 ~@3",
  AN: "[f3,a3,c4,f4]@5 ~ [f3,a3,c4]@6 a3 ~@3, ~@3 f4@2 ~@3", AO: "[e3,g3,c4,e4]@5 ~ [e3,g3,c4,e4]@6 ~@4",
  AP: "[g3,b3,d4,g4]@5 ~ [g3,b3,d4,g4]@7 ~@3", AQ: "[e3,g3,c4,e4]@5 ~ [e3,g3,c4,e4]@8 ~@2", AR: "[c2,c3,e5,g5,c6] ~@3",
  AS: "[g2,g3,d5,g5,b5]@3 ~@13", AT: "[f2,f3,c5,f5,a5] ~@3",
  AU: "~@2 [g2,b3,d4] ~ [g2,b3,d4] ~ [g2,b3,d4] ~ [g2,b3,d4] ~ [g2,b3,d4] ~ [g2,b3,d4]@3 ~", // G
  AV: "[c2,c3,g3,c4,e4]@5 ~ [e3,g3,c4]@7 ~@3, ~@6 e4@5 ~@5", // C
  AW: "[e3,g3,c4,e4]@5 ~ [e3,c4]@6 g3 ~@3, ~@6 [g3,e4]@5 ~@5", AX: "[f3,a3,c4,f4]@5 ~ [f3,a3,c4,f4]@8 ~@2",
  AY: "[f3,a3,c4,f4]@3 [f3,a3,c4]@5, ~@3 f4@4 ~", AZ: "[e3,g3,c4,e4]@5 ~ [e3,g3,c4,e4]@10",
  BA: "~@2 [g2,g3,b3,d4,g4] ~ [g2,g3,b3,d4,g4] ~ [g2,g3,b3,d4,g4] ~ [g2,g3,b3,d4,g4] ~ [g2,g3,b3,d4,g4] ~ [g2,g3,b3,d4,g4] ~ [g2,g3,b3,d4,g4] ~", // G
  BB: "[[e3,g3,c4,e4]@5 ~@4 e4@6 ~ [e3,c4,e4]@6 [e3,g3,c4,e4]@9 ~, ~@6 [e3,g3,c4]@8 ~ g3@5 ~@12]/2", // C
  BC: "[e3,g3,c4,e4]@6 [e3,g3,c4,e4]@9 ~", BD: "[e3,g3,c4,e4]@3 [e3,g3,e4]@5, ~@6 c4@7 ~@3",
  BE: "[[f3,a3,c4,f4]@6 [a3,c4,f4]@9 ~ [e3,g3,e4]@5 ~ [e3,g3,c4,e4]@9 ~, ~@6 f3@11 ~@15, ~@15 c4@5 ~@12]/2", // F Em C
  BF: "[e3,g3,c4,e4]@3 [e3,c4,e4]@5, ~@3 g3@4 ~", BG: "[g3,b3,d4,g4]@3 [g3,b3,d4,g4]@5",
  BH: "[f3,a3,c4,f4]@3 [f3,a3,c4,f4]@5", BI: "[c3,g3,c4,e4,g4] ~@7", BJ: "[c2,c3,c5,g5,c6] ~@3",
})).s("gm_piano").gain(0.41).pan(0.7)

// drums · kick
const kick = s("bd").struct("<[x!4]!104 x>").gain(0.61)

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

// drums · mid tom
const mid_tom = s("mt").struct("<A@18 B ~@23 A@12 ~@12 A@12 ~@24 A@2 ~>".pickRestart({
  A: "x!16", B: "x",
})).gain(0.34)

// drums · high tom
const high_tom = s("ht").struct("<~@18 [~ x!15] [x!16]!11 ~@75>").gain(0.34)

// drums · crash
const crash = s("cr").struct(`<
  ~@30 A ~ B ~ B@3 ~ B@2 ~@14 A ~ B ~ B@3 ~ B@2 ~@14 A ~ B ~ B@3 ~ B@2 ~@2 A ~ B ~ B@3 ~ B@2 ~@4 B
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x",
})).gain(0.68)

// drums · ride
const ride = s("rd").struct(`<
  ~@30 A B C D E@3 D E@2 B D ~@12 A B C D E@3 D E@2 B D ~@12 A B C D E@3 D E@2 B D A B C D E@3 D E@2 B D ~@3
>`.pickRestart({
  A: "~ x!2 ~ x!4", B: "x!8", C: "~@2 x ~ x ~ x ~ x ~ x ~@2 x!2 ~", D: "x", E: "~ x!7",
})).gain(0.54)

stack(
  bass, electric_guitar_clean, electric_guitar_clean_2, rock_organ, rock_organ_2, drawbar_organ, piano, kick, snare,
  mid_tom, high_tom, crash, ride
)

More by The Beach Boys