Strudelify
Happiness Is a Warm Gun cover art

The Beatles

Happiness Is a Warm Gun

The Beatles

KeyA minorTempo77 bpm
0:00/0:00
// Happiness Is a Warm Gun — The Beatles
// 77 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 8, 4/4 at bar 8, 5/4 at bar 13, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 49 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(77/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.

// chords · soprano sax · "backup"
const soprano_sax = note("<~@28 A B C B D@2 E F@2 G H G I J ~ K I G L M@2>".pickRestart({
  A: "~@6 e5 [e5,g5]", B: "~@2 a3 g3 ~@2 [f5,a5]@2, [e5,a5] f3",
  C: "[g5,b5]@4 [f5,a5]@2 [g5,b5] [f5,a5] ~@4 e5@2 [e5,g5]@2, g3 ~", // G F G F Em
  D: "[[g5,b5]@4 [f5,a5]@2 [g5,b5] [f5,a5] [e5,g5]@6 [a3,a5]@4 g5@2 [f3,f5,a5]@4 ~@2 [g3,g5,b5]@4 [f5,a5]@2, g3@4 c4@2 ~ e5@3 ~@6]/2", // G F G F Em A F G …
  E: "[e5,g5]@3 [a3,a5]@2 g5 [f3,f5,a5]@2, c4@2 ~ e5@3 ~@2", // Em A F
  F: "[~ [g3,g5,b5]@2 [f5,a5] [e5,g5]@3 [a3,a5]@2 g5 [f3,f5,a5]@2 ~ [g3,g5,b5]@2 [f5,a5], ~@4 c4@2 ~ e5@3 ~@6]/2", // G F Em A F G F
  G: "[e5,g5] ~ [e5,g5]!2 ~@2 a3 g3, ~ [e5,a5]", H: "f3@4 [f5,a5]@4 [g5,b5]@4 [f5,a5]@2 [g5,b5] [f5,a5], ~@3 g3",
  I: "f3@4 [f5,a5]@4 [g3,g5,b5]@4 [f5,a5]@2 [g5,b5] [f5,a5]", J: "[f5,g#5]", K: "~@2 [e5,g5]!2 ~@2 a3 g3, ~ [e5,a5]",
  L: "f3@2 [f5,a5]!2 [g3,g5,b5]@2 [f5,a5]@2", M: "[[e5,g5]@3 ~]/2",
})).s("gm_soprano_sax").gain(0.48).pan(0)

// chords · acoustic guitar steel · "g1"
const acoustic_guitar_steel = note("<A@8 B@6 C D E F G H I@5 J@8 K L M K N O N P Q ~ N O N P R ~>".pickRestart({
  A: "[~@63 [a2,e4], ~@3 g4@3 ~ f#4@3 ~ f#4@3 ~ e4@3 e3 g4@3 ~ f#4@3 ~ f#4@3 ~ e4@3 e3 [d3,f4]@2 d3 ~ [d3,f4]@2 d3 ~ [d3,f4]@2 d3 ~ [a2,e4]@2 a2 ~ [a2,e4]@2 a2 ~ [d3,f4]@2 d3 ~ [d3,f4]@2 d3 ~@2, ~@6 a2@3 g3@2 c4@2 g3@2 ~ e3@2 e2@2 e3@2 b2@3 g3@2 b3@2 g3@2 ~ e3@2 e2@2 ~@2 a2@3 g3@2 c4@2 g3@2 ~ e3@2 e2@2 e3@2 b2@3 g3@2 b3@2 g3@2 ~ e3@2 e2@2 ~@5 d4@2 f4@2 ~@4 d4@2 f4@2 ~@4 d4@2 f4@2 ~@4 a3@2 b3@2 ~@4 c4@2 e4@2 ~@4 d4@2 f4@2 ~@4 d4@2 f4@2 ~@3, ~@8 e3@2 e2@2 e3@2 a2@3 g3@2 c4@2 g3@2 ~ e3@2 e2@2 e3@2 b2@3 g3@2 b3@2 g3@2 ~ e3@2 e2@2 e3@2 a2@3 g3@2 c4@2 g3@2 ~ e3@2 e2@2 e3@2 b2@3 g3@2 b3@2 g3@2 ~ a3@2 ~@2 a3@4 a3@2 ~@2 a3@4 a3@2 ~@2 a3@4 e3@2 ~@2 e3@4 e3@2 ~@2 c4@4 a3@2 ~@2 a3@4 a3@2 ~@2 a3@4]/8", // A5 Dm A5 Dm
  B: "[~@40 e3@2 [a2,e3,g3,c#4,e4]!2 ~ [a2,e3,g3,c#4,e4]!2 ~, e3@2 a2@2 a3@4 e3@2 a2@2 e3@4 a3@2 d3@2 a3@4 a3@2 d3@2 a3@4 e3@3 c4@4 ~ e3@3 c4@4 ~@2 d4@2 f4@2 ~@4 d4@2 f4@2 ~@4 d4@2 ~ a3@2 ~@2 e3@4 ~@20, ~ a3@2 c4@2 ~ [a2,b3]@3 a3@2 c4@2 ~ [d3,f4]@3 d4@2 f4@2 ~ [d3,f4]@3 d4@2 f4@2 ~ e4@8 b3@8 ~@2 a3@2 ~@2 a3@4 a3@2 ~@2 a3@4 a3@2 e4@8 ~@3 c4@2 c4@2 ~@15, ~@30 a2@3 a3@3 a3@5 a3@3 e3@8 ~@17 c4@2 c4@2 ~@3 a3@2 ~@18, ~@17 a2@2 a2@2 a2@2 [d3,f4]@2 d3 ~ [d3,f4]@2 d3 ~ [d3,f4]@2 a2@2 a2@2 [a2,e4]@2 a2 ~@8]/6", // A7 Asus2 Dm A5
  C: "[e3,g3,c#4,e4]!2 ~ [a2,e3,g3,c#4,e4]!2 ~ [a2,e3,g3,c#4,e4]!2", // C#dim A7
  D: "~ [a2,e3,g3,c#4,e4]!2 ~ [a2,e3,g3,c#4,e4]!2 ~ [c3,e3,g3,c4,e4]", // A7 C
  E: "[c3,e3,g3,c4,e4] ~ [c3,e3,g3,c4,e4]!2 ~ [c3,e3,a3,c4,e4]!2 ~", // C Am
  F: "[c3,e3,a3,c4,e4]!2 ~ [a2,e3,g3,c#4,e4]!2 ~ [a2,e3,g3,c#4,e4]!2", // Am A7
  G: "~ [e3,g3,c#4,e4]!2 ~ [a2,e3,g3,c#4,e4]!2 ~ [a2,e3,g3,c#4,e4]", // C#dim A7
  H: "[a2,e3,g3,c#4,e4] ~ [a2,e3,g3,c#4,e4]!2 ~ [a2,e3,g3,c#4,e4]!2 ~", // A7
  I: "[[c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]@2 ~@2 [c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]@2 [c3,e3,a3,c4,e4]@12 [a2,e3,g3,c#4,e4]!3 [a2,e3,g3,c#4,e4]@2 [a2,e3,g3,c#4,e4] [c3,e3,g3,c4,e4]@12 [a2,e3,g3,c#4,e4]!3 [a2,e3,g3,c#4,e4]@2 [a2,e3,g3,c#4,e4] [g2,b2,d3,g3,b3,f4]@14 [a2,e3,g3,c#4,e4]!3 [a2,e3,g3,c#4,e4]@2 [a2,e3,g3,c#4,e4] [c3,e3,g3,c4,e4]@12 [a2,e3,g3,c#4,e4]!2]/5", // C Am A7 C A7 G7 A7 C …
  J: "[[a2,e3,g3,c#4,e4] [a2,e3,g3,c#4,e4]@2 [a2,e3,g3,c#4,e4] [g2,b2,d3,g3,b3,f4]@14 [a2,e3,g3,c#4,e4]!3 [a2,e3,g3,c#4,e4]@2 [a2,e3,g3,c#4,e4] [c3,e3,g3,c4,e4]@12 [a2,e3,g3,c#4,e4]!3 [a2,e3,g3,c#4,e4]@2 [a2,e3,g3,c#4,e4] [g2,b2,d3,g3,b3,f4]@14 ~@64 c3@2 [c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]@2 a2@2, ~@14 c3 [c4,e4] a2 [c4,e4] f2 [a3,c4] g2 [g3,b3] c3 [c4,e4] a2 [c4,e4] f2 [a3,c4] g2 [g3,b3] ~@2, ~@29 g3@2 g3@2 a3@2 a3@2 f3@2 f3@2 d3@2 d3@2 g3@2 g3@2 a3@2 a3@2 f3@2 f3@2 d3@2 d3@2 ~@3]/8", // A7 G7 A7 C A7 G7 C Am …
  K: "[a2,c3,e3,a3,c4,e4]!2 f2 [f2,c3,f3,a3,c4,f4]!2 g2 [g2,b2,d3,g3,b3,g4]!2", // Am F G
  L: "c3 [c3,e3,g3,c4,e4]!2 a2 [a2,c3,e3,a3,c4,e4]!2 f2 [f2,c3,f3,a3,c4,f4]", // C Am F
  M: "[f2,c3,f3,a3,c4,f4] g2 [g2,b2,d3,g3,b3,g4]!2 c3 [c3,e3,g3,c4,e4]!2 a2", N: "[c3,e3,g3,c4]!4 [a2,c3,e3,a3]!4",
  O: "[f2,a2,c3,f3]!4 [g2,b2,d3,g3]!4", P: "[f2,a2,c3,f3]!2 [f2,a2,c3,f3,f4]!2 [g2,b2,d3,g3,b3,f4]!4",
  Q: "[f2,c3,f3,g#3,c4,f4]", R: "[g2,c3,e3,g3,c4,e4]",
})).s("gm_acoustic_guitar_steel").gain(0.25)

// chords · distortion guitar · "g2"
const distortion_guitar = note(`<
  ~@4 A B C D C B C B E F G H I@2 J@4 K L@2 M N O P Q R Q S@2 T@3 U V U V W ~ X Y X Z AA@2
>`.pickRestart({
  A: "~@6 [d4,f4,b4]@3 ~@7", B: "~ [d4,f4,b4] ~@3 [d4,f4,b4] ~@2", C: "~@2 [a3,c4,e4]@2 ~@6 [a3,c4,e4]@3 ~@3",
  D: "~@5 [d4,f4,b4] ~@2", E: "~@6 [a3,c4,e4] ~@3 [a3,c4,e4]@6", F: "~ d4 e3@2 g3@4 [c3,d3] c3 a2@2 c3@2 d3 e3",
  G: "d3 [c3,d3,e3] a2@2 e3@2 g3@4 [c3,d3] c3 a2@2 c3@2", H: "e3@2 g3@4 e3 d3 e3@4 g3@4",
  I: "[c3@2 a2@2 c3@2 d3 e3 d3 e3 d3 c3 a2@6 ~@2 [a2,e3]@6 [a2,e3]@6]/2", // A5
  J: "[[a2,e3]@6 [a2,e3]@6 [a2,e3]@6 [a2,e3]@6 a2@2 a#2@2 c3@2 [c3,g3]@6 g2@2 b2@2 a#2@2 a2@12 [a2,e3]@3 [a2,e3]@3 c3@2 e3@2]/4", // A5 C5 A5
  K: "g3@2 a3@2 g3@2 e3@2 [a2,e3]@3 [a2,e3]@3 g2@2", // A5
  L: "[b2@2 d3@2 g3@2 f3@2 d3@2 g2@2 [a2,e3]@3 [a2,e3]@3 c3@2 e3@2 g3@2 a3@2 g3@2 e3@2 [a2,e3]@2]/2", // A5
  M: "~ [a2,e3]@3 g2@2 b2@2 d3@2 g3@2 f3@2 d3@2", N: "g2@2 [a2,e3]@3 [a2,e3]@3 c3@2 e3@2 g3@2 a3@2",
  O: "g3@2 e3@2 [a2,e3]@3 [a2,e3]@3 g2@2 b2@2 d3@2", P: "g3 f3 d3 g2 ~@3 [c4,e4,g4]",
  Q: "~@3 [c4,e4,a4] ~@3 [c4,f4,a4]", R: "~@3 [b3,d4,g4] ~@3 [c4,e4,g4]", S: "[~@3 [b3,d4,g4] c3@3 a2@3 f2@3 g2@3]/2",
  T: "[c3 a2 f2 g2 c3 a2 f2 g2]/3", U: "~@3 [c4,e4,g4] ~@3 [c4,e4,a4]", V: "~@3 [c4,f4,a4] ~@3 [b3,d4,g4]",
  W: "[g#3,c4,f4]", X: "c3@3 b2 a2@3 g2", Y: "f2@2 ~ [a3,c4,f4] ~@4", Z: "f2@8 g2@3 d3 e3@2 d3@2", AA: "[c3@3 ~]/2",
})).s("gm_distortion_guitar").gain(0.48).pan(0.7)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@3 A B C D C E C D F G H I J@3 K@4 L M@2 N O P Q R S R T@2 U V@2 W X W X Y ~ W X W X Z@2
>`.pickRestart({
  A: "~@14 e3!2", B: "e3!4 e3@2 d2@2 ~@2 a1@2 ~@2 d2@2", C: "~ a1 ~ d2 ~ a1 ~ a2", D: "~ e2 ~ a2 ~ e2 ~ d2",
  E: "~@2 e2@2 ~@2 a2@2 ~@2 a1!2 c2@2 d2@2", F: "~ a1 ~ d2 ~ a1 ~ d2", G: "~@2 a2@2 ~@2 e2@2 ~@2 e3!5 c3",
  H: "a2 g2 a2@6 e2@2 g2@2 g#2@2 a2@2", I: "~@2 e2@3 a2@3",
  J: "[e2 g2 g#2 a2 a#2 b2 c3@3 g2 b2 a#2 a2@3 e2@3 a2@3 e2 g2 g#2]/3",
  K: "[a2@2 ~@4 e2@6 a2@6 e2@2 g2@2 g#2@2 a2@2 a#2@2 b2@2 c3@6 g2@2 b2@2 a#2@2 a2@12 a2!3 a2@2 a2 c2@2 e2@2]/4",
  L: "g2@2 a2@2 g2@2 e2@2 a1!3 a1@2 a1 g1@2",
  M: "[b1@2 d2@2 g2@2 f2@2 d2@2 g1@2 a1!3 a1@2 a1 c2@2 e2@2 g2@2 a2@2 g2@2 e2@2 a1!2]/2",
  N: "a1 a1@2 a1 g1@2 b1@2 d2@2 g2@2 f2@2 d2@2", O: "g1@2 a1!3 a1@2 a1 c2@2 e2@2 g2@2 a2@2",
  P: "g2@2 e2@2 a1!3 a1@2 a1 g1@2 b1@2 d2@2", Q: "g2 f2 d2 g1 c2@2 ~ b1", R: "a1@2 ~ g1 f1@4",
  S: "g1@2 a1 b1 c2@2 ~ b1", T: "[g1@2 a1 b1 c2@2 ~ a1@2 ~ f1@2 ~ g1@2 ~]/2", U: "c2@2 ~ a1@2 ~ f1@2",
  V: "[~ g1@2 ~ c2@2 ~ a1@2 ~ f1@2 ~ g1@2 ~]/2", W: "c2@2 ~ b1 a1@2 ~ g1", X: "f1@4 g1@2 a1 b1", Y: "c2",
  Z: "[c2@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@4 A B@7 C D E F G E F G H I J K L M N O P Q R Q@7 S Q S@2 ~ Q S P S@2 ~>".pickRestart({
  A: "~@3 x ~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2", D: "~ x ~@4 x!2", E: "~@5 x ~@2", F: "~@3 x ~@4",
  G: "~ x ~@5 x", H: "~@3 x!2 ~@3", I: "~@6 x ~@2 x ~@2 x ~@3", J: "~@2 x ~@5 x ~@2 x ~@2 x ~", K: "~@4 x ~@7 x ~@2 x",
  L: "~ x ~@2 x ~@2 x", M: "~ x ~@2 x ~@5 x ~@5", N: "~@2 x ~@2 x ~@2 x ~@5 x ~", O: "~@4 x ~@2 x ~@2 x ~@5",
  P: "x ~@3 x ~@2 x", Q: "x!2", R: "~ x", S: "x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B C D C@3 E C F G H I J H I J H K L M N O P Q R S T S@7 U S V ~@2 S W S H ~ J
>`.pickRestart({
  A: "~@12 x!4", B: "x!6 ~@4 x ~@5", C: "~ x ~@3 x ~@2", D: "~@2 x ~@3 x ~ x!2 ~ x ~@4", E: "~@2 x ~@3 x ~ x!3 ~@5",
  F: "~@3 x ~ x ~ x", G: "x!2", H: "~ x ~@2", I: "x ~@2 x", J: "~ x", K: "~@7 x!2 ~@2 x ~@2 x ~",
  L: "x ~@3 x ~ x ~@2 x!2 ~@2 x ~@2", M: "x ~ x ~@3 x ~ x ~ x ~@2 x!2 ~", N: "~ x ~@2 x ~ x ~@3 x ~ x ~@2 x",
  O: "x ~@2 x ~@2 x ~ x ~@3 x ~ x ~", P: "x ~@2 x!2 ~@2 x ~@2 x ~ x ~@3", Q: "x ~ x ~@2 x!2 ~@2 x ~@2 x ~ x ~",
  R: "~ x!3 ~@2 x ~", S: "~ x ~ x", T: "x!2 ~ x ~@2 x!2 ~@4 x ~@3", U: "~@4 x ~@3 x!2 ~ x!3 ~@2",
  V: "~@4 x ~@3 x!3 ~@2 x!2 ~", W: "~@4 x ~@3 x!2 ~ x ~@4",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A B ~ C ~@23 D ~@7 E ~@5 E ~ F ~@2>".pickRestart({
  A: "~@12 x!4", B: "x!6 ~@10", C: "~@3 x", D: "~@4 x!2 ~@10", E: "~@14 x!2", F: "~@7 x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@4 A B C B@3 D B E ~@10 F G@4 H B I B@7 J K L ~@2 K L K L ~@2>".pickRestart({
  A: "~@3 x!5", B: "x!8", C: "x!2 ~@6", D: "x!3 ~@4 x", E: "x!7 ~", F: "~@12 x!4", G: "x!16", H: "x!9 ~ x ~ x ~ x ~",
  I: "~@5 x!3", J: "x!4 ~@4", K: "~ x!7", L: "x!3 ~@5",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@10 [~@3 x] ~@35 [~@12 x!2 ~@2] ~@2>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@6 A ~@5 B C D E F D E F ~@20 E ~@3 E ~ E ~@2>".pickRestart({
  A: "~ x ~@2", B: "~@7 x", C: "x ~@6 x", D: "~@5 x ~@2", E: "~@3 x ~@4", F: "~ x ~@5 x",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@6 A ~@3 B ~@29 C ~@3 D ~ E ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "~@11 x ~@4", C: "~@3 x", D: "~@12 x!2 ~@2", E: "~@8 x!2 ~ x ~@4",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@6 A ~@13 B C D E A F G H ~@2 B ~@8 I ~ I ~ I ~ I ~ I ~>".pickRestart({
  A: "~@7 x", B: "~ x", C: "~@6 x ~@2 x ~@6", D: "~@8 x ~@2 x ~@4", E: "~@12 x ~@2 x", F: "~ x ~@14",
  G: "~@2 x ~@2 x ~@10", H: "~@4 x ~@2 x ~@8", I: "x",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@23
  [~@12 x!4]
  [x!3 ~ x ~ x ~ x ~ x ~ x ~ x!2]
  [x!5 ~ x ~ x ~ x ~ x ~ x ~]
  [x ~ x!7 ~ x ~ x ~ x ~]
  [x ~ x ~ x!7 ~ x ~ x ~]
  [x!4 ~@4]
  ~@20
>`).gain(0.64)

stack(
  soprano_sax, acoustic_guitar_steel, distortion_guitar, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom,
  crash, tambourine
)

More by The Beatles