Strudelify
Helter Skelter cover art

The Beatles

Helter Skelter

The Beatles

KeyE majorTempo90 bpm
0:00/0:00
// Helter Skelter — The Beatles
// 90 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 3 "Guitar 1" named as a guitar, played on electric guitar clean (its lead 2 sawtooth patch is not one)
// note: Full arrangement: all 103 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar 3.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · electric guitar clean · "Guitar 1"
const electric_guitar_clean = note(`<
  A B@2 C D E F G@5 E H G I G I J G@6 E K G I G I J G@2 I G I J B C D E F G@5 E H G I G I J G@5 E K G I G I J G@8 L@3 M
  N@8 O P N@6 Q R@5 S ~
>`.pickRestart({
  A: "~@7 [g#4,b4]", B: "[d4,e4]!16", C: "[c#4,e4]!16", D: "[c4,e4]!16", E: "g2!8", F: "e2@2 e2@2 e2!4 e2@2 e2@2 e2!4",
  G: "e2!8", H: "[a2,e3,g3,b3,e4]@7 ~", I: "a2!8", J: "[e2,b2,e3,g#3,d4,e4]", K: "[a2,e3,g3,b3,e4]",
  L: "[e2@48 [e2,b2,e3,g#3,d4,e4]@29 ~@19]/3", M: "~@5 e3@4 e3@4 e3@4 e3@4 e3@4 e3@4 e3@3",
  N: "~ e3@4 e3@4 e3@4 e3@4 e3@4 e3@4 e3@4 e3@3", O: "~ e3@4 e3@4 e3@4 ~@19", P: "~@13 e3@4 e3@4 e3@4 e3@4 e3@3",
  Q: "~ e3@4 e3@4 e3@4 e2@4 e2@4 e2@4 e2@4 e2@3", R: "~ e2@4 e2@4 e2@4 e2@4 e2@4 e2@4 e2@4 e2@3",
  S: "~ e2@4 e2@4 e2@4 ~@16 [e2,b2,e3,g#3,d4,e4]@3", // E7
})).s("gm_electric_guitar_clean").gain(0.45)

// other · distortion guitar · "Guitar 2"
const distortion_guitar = note(`<
  ~@15 A B C D E@2 ~@7 A B C D F@2 G H I J ~@13 A B C D ~@2 K L ~@4 A B C E@2 M@7 ~@2 N@2 ~@24
>`.pickRestart({
  A: "[a2,e3]@2 [a2,e3]@2 [a2,f#3]@2 [a2,f#3]@2 g3 f#3 e3 d#3 c#3 b2 a2@2", // A5 D
  B: "[e2,b2]@2 [e2,b2]@2 [e2,c#3]@2 [e2,c#3]!2 d3 c#3 b2 a2 g#2 f#2 e2@2", // E5 C#m
  C: "[a2,e3]@2 [a2,e3]@2 [a2,f#3]@2 [a2,b2,f#3]@2 g3 f#3 e3 d#3 c#3 b2 a2@2", // A5 D B7
  D: "~@2 e4 e4@2 f4 f#4@2 g4 g4@2 g4!3 g4@2", E: "e2/2", F: "[e2@24 [e4,b4]@2 ~ [e4,b4] ~@4]/2",
  G: "g5 a5@7 ~@18 g5@2 a5@4", H: "g5@8 ~@8 d5@2 e5@2 d5@2 g4@2 a4@2 g4@2 e4@2 b4 c#5",
  I: "~@16 g4@2 a4@2 g4@2 d5 e5@3 d5@2 g4@4", J: "e4",
  K: "e5@6 g5 g#5 g#5@2 e5@2 d5@2 e5@2 d5@4 e4@2 a4 b4@3 a4@2 g4@4", L: "d4@2 e4@4 e4 g4 ~@8",
  M: "e2@6 d3@2 d3 c#3 b2 a2 g2 f#2 e2@2", N: "[~@13 e6@24 ~@27]/2",
})).s("gm_distortion_guitar").gain(0.72)

// bass · lead 8 bass lead · "Bass"
const bass = note(`<
  ~@5 A B C D E F G H I J K L K M N O P Q R S T I J K L K M U V W X Y Z AA@2 AB A B C D E F G H I J K L K M AC P Q R S T
  I J K L K M AD O@2 AE@5 AF@8 AG@5 AH@8 AI@6 ~
>`.pickRestart({
  A: "g1@2 g1@2 g1@2 g1@2 g1@2 g1 f#1 g1 a1 b1 d2", B: "e2@2 e2@2 e2@2 e2@2 e2 d#2 e2 d#2 e2 d#2 e2@2", C: "e2!15 d2",
  D: "e2@2 e2!2 e2@2 e2!2 e2@2 e2!5 d2", E: "e2@4 e2@2 e2@2 d2 e2 e2@2 e2@2 d2@2 e2@2 e2@2 e2@2 e2@2 e2@4 e2@2 e2@2",
  F: "e2!4 e2@2 e2!8 e2@2", G: "e2@2 e2!2 e2@2 e2!2 d2 e2!5 e2@2", H: "g1@2 g1@2 g1@2 g1!2 g1@2 g1@2 g1@2 g1@2",
  I: "a1 ~@7", J: "d2 e2!13 e2@2", K: "a1@2 a1@2 a1@2 a1@2 g2 f#2 e2 d#2 c#2 b1 a1@2",
  L: "e1@2 e1@2 e1@2 e1@2 d2 c#2 b1 a1 g#1 f#1 e1@2", M: "e1", N: "e2!12 d2 e2 d2 e2",
  O: "e2!8 d2 e2 d2 e2 d2 e2 d2 e2", P: "e2@2 e2!2 e2@2 e2@2 e2!6 e2@2", Q: "d2 e2!3 d2 e2!3 d2 e2 d2 e2 d2 e2 d2 e2",
  R: "e2@2 e2@2 e2@2 e2!8 e2@2", S: "d2 e2!7 d2 e2!5 e2@2", T: "g1!8", U: "e3!13 d3 b2 a2",
  V: "d2 e2!7 d2@3 c#2@3 g#1@2", W: "a1@2 a1@2 a1!2 a1@2 a1@2 a1@2 a1@2 a1@2",
  X: "e2@2 e2@2 e2@4 d2 e2@3 e2@4 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 b1@4", Y: "a1!8", Z: "e2", AA: "e3!6 e3@2 e2!6 e2@2",
  AB: "e3!8 e2!6 e2@2", AC: "e2@2 e2@2 e2!3 d2!2 e2 d2 e2 d2 e2 d2 e2", AD: "e2!16", AE: "e2!8 a1 b1 d2 e2 a1 b1 d2 e2",
  AF: "[e1@77 e1@16 d3@2 e1@14 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 e2@2 e2@2 e2@2 e2@2 d2@2 d2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 d2@2 d2@2 d2@2 e2@2 d2@2 e2@2 d2@2 e2@2 d2@2 e2@2 a1@2 b1@2 d2@2 e2@2 a1@2 b1@2 d2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 e2@4 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 e2@2 d2@2 e2@2 d2@2 e2@2 d2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 g2@2 a2@2 a2@2 b2@2 d3]/8",
  AG: "[~ e3@2 e3@2 e2@2 d2@2 d2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 g2@2 a2@2 a2@2 b2@2 d3@2 e3@2 e3@2 e2@2 d2@2 d2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 g2@2 a2@2 a2@2 b2@2 d3@2 e3@2 e3@2 e2@2 d2@2 d2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 g2@2 b2@2 d3@6 e3@8 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 g2@2 b2@2 d3@2 e3@2 d3@2 e3@2 d3@2 e3@2 d3@2 ~@19]/5",
  AH: "[~@13 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 e2@2 g2@2 a2@2 b2@2 d3@6 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 e2@2 g2@2 a2@2 b2@2 d3@6 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 e2@2 g2@2 a2@2 b2@2 d3@6 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 e2@2 g2@2 a2@2 b2@2 d3@6 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 e2@2 g2@2 a2@2 b2@2 d3@6 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 e2@2 d2@2 e2@2 g2@2 a2@2 b2@2 d3@6 e2@2 e2@2 e2@2 e2@2 e2@2 g2@2 a2@2 a2@2 e2@2 c#2@4 b1@4 a1@2 g1@4 f#1@2 e1@4 f#1@2 e1@4 f#1@2 e1@4 f#1]/8",
  AI: "[~ e1@4 f#1@4 ~@4 e2@8 e2@8 e2@8 e2@8 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@2 e2@3 e2@3 e2@4 e2@4 e1@16 e3@8 b2@8 e1@32 e1@32 ~@19]/6",
})).s("gm_lead_8_bass_lead").gain(0.4)

// chords · guitar harmonics · "Guitar 3"
const guitar_harmonics = note("<~@77 A@2 ~@24>".pickRestart({
  A: "[~@13 e6@24 ~@27]/2",
})).s("gm_guitar_harmonics").gain(0.48)

// chords · overdriven guitar · "Guitar 4"
const overdriven_guitar = note("<~@71 A@2 ~@2 B@4 ~@24>".pickRestart({
  A: "[a5 g5@2 e5 d5@2 b4 a4@2 e4 d4@2 b4 a4@3]/2",
  B: "[e2@19 [g#4,c#5]@5 [e4,a4]@5 [c#4,f#4]@5 [b3,e4]@4 [g3,c4]@5 [e3,a3]@5 [c#3,f#3]@5 [b2,e3]@24 e6@24 ~@27]/4", // C#5 A5 F#5 E5 C5 A5 F#5 E5
})).s("gm_overdriven_guitar").gain(0.54)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A@8 B A@4 B A@7 B A@4 B A@5 B A C@2 A@8 B A@4 B A@6 B A@4 B A@8 B D E F G@6 F G H F G@6 F I J K L M N ~
>`.pickRestart({
  A: "x!4", B: "x", C: "x!8", D: "~ x", E: "~@13 x ~@18", F: "~@13 x ~@7 x ~@7 x ~@2", G: "~@5 x ~@7 x ~@7 x ~@7 x ~@2",
  H: "~@5 x ~@26", I: "~@5 x ~@7 x ~@5 x ~ x ~@7 x ~@2", J: "~@5 x ~@7 x ~@5 x ~@5 x ~@6", K: "~@13 x ~@5 x ~@5 x ~@6",
  L: "~@9 x ~@3 x ~@18", M: "~@29 x ~@2", N: "~ x ~@3 x ~@26",
})).gain(0.6)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B@2 C@4 D C@2 E F C@4 G C H C I C@3 J C@4 G C@2 K C@2 L C ~ B M C@3 D C@2 E F C@4 G C@2 I C@3 J C@4 G C@3 N C O
  C@2 P Q R S T@4 U V W T X Y T@4 U V Z AA AB AC AD AE ~@2
>`.pickRestart({
  A: "~@12 x!4", B: "x!16", C: "~ x ~ x", D: "~@4 x ~@3 x!2 ~@6", E: "~@4 x ~@7 x!2 ~@2", F: "~@8 x!2 ~ x ~@4",
  G: "~@8 x!2 ~ x ~ x ~ x", H: "~@4 x ~@3 x!2 ~ x ~@4", I: "~@4 x ~@7 x!4", J: "~@9 x ~ x ~ x!3", K: "~@4 x ~@6 x ~@4",
  L: "~@8 x ~@2 x ~ x!3", M: "~@2 x ~@3 x!2", N: "~@4 x ~@6 x ~ x!3", O: "~@4 x ~@3 x ~@2 x ~@4", P: "~@5 x ~@10",
  Q: "~@6 x ~ x!5 ~ x!2 ~@7 x ~@2 x ~@3 x ~", R: "~@8 x!3 ~ x!2 ~@3 x ~@3 x ~@3 x ~ x ~ x ~ x", S: "~@3 x ~@17 x ~@10",
  T: "~@5 x ~@15 x ~@10", U: "~@5 x ~@15 x ~@7 x ~ x", V: "~ x ~ x ~ x ~ x ~ x ~ x ~@9 x ~@10",
  W: "~@5 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@4", X: "~@5 x ~@26", Y: "~@21 x ~@10",
  Z: "~@5 x ~ x ~ x ~ x ~@5 x ~ x ~@5 x ~ x ~@4", AA: "~@17 x ~@5 x ~@3 x ~@4", AB: "~@3 x ~@7 x ~@5 x ~@5 x ~@5 x ~ x",
  AC: "~@3 x ~ x ~ x ~ x ~ x ~@5 x ~@5 x ~@8", AD: "~ x ~@3 x ~@19 x ~ x ~ x!3", AE: "x!29 ~@3",
})).gain(0.6)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A ~@2 B C ~@6 D ~@13 E ~@10 A ~@2 B C ~@22 F ~@5 G ~@17 H I ~@5>".pickRestart({
  A: "~@11 x ~ x ~ x", B: "~@15 x", C: "~@13 x ~ x", D: "~@12 x!4", E: "~@8 x!3 ~ x!2 ~@2", F: "~@9 x ~@2 x!4",
  G: "~@5 x ~ x ~ x ~ x ~@20", H: "~@3 x ~ x ~ x ~@21 x ~ x", I: "~ x ~@3 x ~ x ~ x ~@22",
})).gain(0.54)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A@4 B A@2 C ~ A@4 ~ A B A B A@3 ~ A@4 ~ A@2 B A@2 ~ A@2 ~ C A@3 B A@2 C ~ A@4 ~ A@2 B A@3 ~ A@4 ~ A@3 B A D A@2
  ~@3 E F@4 G H I J K E F@4 G H L ~@7
>`.pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "x!6 ~@2", D: "~ x!3 ~@4", E: "~@17 x ~@3 x ~@3 x ~@3 x ~@2",
  F: "~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@2", G: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@6",
  H: "~@13 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", I: "~ x ~@30", J: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  K: "~ x ~@3 x ~@3 x ~@22", L: "~ x ~@11 x ~@7 x ~@10",
})).gain(0.54)

// drums · mid tom
const mid_tom = s("mt").struct("<~@74 [x!2 ~ x!2 ~ x ~ x ~ x!3 ~ x ~] ~@28>").gain(0.6)

// drums · crash
const crash = s("cr").struct(`<
  ~@13 A ~@4 A ~@7 A ~@4 A ~@5 A ~@11 A ~@4 A ~@6 A ~@4 A ~@5 A ~@2 A B C@6 ~@2 D ~@2 C@5 ~@3 C E@2 F D G ~
>`.pickRestart({
  A: "x", B: "~ x", C: "~@13 x ~@18", D: "~@29 x ~@2", E: "~@13 x ~@5 x ~@5 x ~@6", F: "~@3 x ~@28",
  G: "~ x ~@3 x ~@7 x ~@18",
})).gain(0.54)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@2 A B@2 ~@4 C ~@2 D C ~@4 C ~@3 E ~@3 F ~@4 C ~@2 G ~@2 H ~@2 B I ~@3 C ~@2 D C ~@4 C ~@2 E ~@3 F ~@4 C ~@3 J ~@24 K
  L ~@6
>`.pickRestart({
  A: "~@12 x!4", B: "x!16", C: "~@6 x!2", D: "~@7 x", E: "~@8 x ~ x ~ x!4", F: "~@2 x!2", G: "~@14 x!2",
  H: "~@9 x ~@2 x ~@3", I: "~@13 x ~ x", J: "~@8 x!3 ~ x ~@3", K: "~@29 x ~ x", L: "~@9 x ~ x ~@13 x ~@6",
})).gain(0.54)

stack(
  electric_guitar_clean, distortion_guitar, bass, guitar_harmonics, overdriven_guitar, kick, snare, low_tom, open_hat,
  mid_tom, crash, high_tom
)

More by The Beatles