Strudelify

You Really Got a Hold on Me

The Beatles

KeyA majorTempo110 bpm
0:00/0:00
// You Really Got a Hold on Me — The Beatles
// 110 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 32, 4/4 at bar 33, 3/4 at bar 52, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 61 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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 · fretless bass
const bass = note(`<
  ~ A B A C D E F G H I J K L M N O P F@2 H I J K L M Q R S T U@2 V W V W X Y@3 Z AA AB AC AD AE AF AG AH AI AJ@2 AK AL
  AM AN AO@5
>`.pickRestart({
  A: "a1@3 ~@2 c#2 e2@3 a2@2 g#2", B: "f#2@5 ~ c#2@2 c#2 f#2@2 e2", C: "f#2@10 ~@2 c#2@2 ~@2 c#2@2 e2 f#2@3 e2@2",
  D: "a1@3 ~@2 c#2 e2@4 f#2 g#2", E: "a2@3 ~@2 c#2 e2@3 a2 ~ g#2", F: "f#2@5 ~ c#2@3 c#2 ~ e2",
  G: "f#2@5 ~ c#2@3 f#2 ~ e2", H: "a1@3 ~@2 c#2 e2@3 a1 b1 c#2", I: "d2@3 d2 ~ f#2 a2@3 d2 ~ c#2",
  J: "b1@3 ~@2 f#2 e2@3 e2 f#2 g#2", K: "a2@3 a2 ~ c#2 e2@3 e2 f#2 g#2", L: "a2@3 a2 ~ c#2 e2@3 a2 ~ g#2",
  M: "f#2@3 f#2@2 ~ c#2@3 c#2@2 e2", N: "f#2@3 f#2@2 ~ c#2@3 f#2@2 f#2", O: "a1@3 ~@2 c#2 e2@3 c#2@2 e2",
  P: "a2@3 ~@2 c#2 e2@3 a1 c#2 e2", Q: "f#2@6 f#2@4 ~@2 c#2@6 e2 f#2@3 e2 f#2", R: "a1@3 a2 ~ c#2 e2@3 a2@2 c#2",
  S: "d2@3 ~@2 f#2 a2@3 f#2@2 ~", T: "a1 ~ a1 ~", U: "[a1 ~ e1@5 a1]/2", V: "c#2 ~ e2 f#2@3 e2@2 c#2 f#2@3",
  W: "e2 a1 ~ a1", X: "~@2 c#2 e2@3 c#2@2 e2 a2@3",
  Y: "[~@2 c#2 e2@3 a1 c#2 e2 f#2@5 ~ c#2@3 c#2 ~ e2 f#2@5 ~ c#2@3 c#2 ~ e2 a1@3]/3", Z: "~@2 c#2 e2@3 a1 b1 c#2 d2@3",
  AA: "d2 ~ f#2 a2@3 d2 ~ c#2 b1@3", AB: "~@2 f#2 e2@3 e2 f#2 g#2 a2@3", AC: "a2 ~ c#2 e2@3 e2 f#2 g#2 a2@3",
  AD: "a2 ~ c#2 e2@3 a2 ~ g#2 f#2@3", AE: "f#2@2 ~ c#2@3 c#2@2 e2 f#2@3", AF: "f#2@4 ~@2 c#2@6 e2 f#2@3 e2 f#2 a1@6",
  AG: "a2 ~ c#2 e2@3 a2@2 c#2 d2@3", AH: "~@2 f#2 a2@3 f#2@2 ~ a1@3", AI: "~ a1 ~ a1",
  AJ: "[~@3 e1@15 a2@3 a2 ~ c#2]/2", AK: "e2@3 c#2 ~ e2 a2@3 a2 ~ c#2", AL: "e2@3 a2 ~ g#2 f#2@3 f#2@3",
  AM: "c#2@3 c#2 ~ e2 f#2@3 f#2@2 f#2", AN: "c#2 f#2 a1 ~", AO: "[a1 f#1 e1 a1 f#1 e1 a1@48 ~@6]/5",
})).s("gm_fretless_bass").gain(0.6).pan(0.4)

// other · electric guitar muted · "Muted Gtr Lead"
const electric_guitar_muted = note(`<
  A B C D C ~@5 E F ~ D C ~@6 E F ~ D C ~@5 G H I H J ~@5 K@2 ~ L@2 ~@4 M N O P ~@2 Q@5
>`.pickRestart({
  A: "~@5 e2!2 f#2 a2 b2 a2 f#2", B: "a2@3 c#3@3 c#3@2 b2 a2@2 b2", C: "f#2 ~", D: "~@3 c#3@3 c#3@2 b2 a2@2 b2",
  E: "~@10 a2 a#2", F: "b2 ~", G: "~@2 e2!2 f#2 a2 b2 a2 f#2 a2@3",
  H: "b2@2 a2 [c#3,f#3]@3 b2@2 c#3 [c#3,f#3]@3, e3 ~ e3 ~", I: "[b2,e3] [a2,e3] ~ a2", J: "[b2,e3] [a2,e3] ~@2",
  K: "[~@7 a2 a#2 b2@6 ~@9]/2", L: "[c#3@3 c#3@2 b2 a2@2 b2 f#2@6 ~@9]/2", M: "~@11 e2", N: "e2 f#2 a2 b2 a2 f#2 a2@6",
  O: "~@3 c#3", P: "c#3@2 b2 a2@2 b2 f#2@6", Q: "[a2 f#2 e2 a2 f#2 e2 a2@48 ~@6]/5",
})).s("gm_electric_guitar_muted").gain(0.55).pan(0.8)

// other · rock organ · "Org 3 Harmony 1"
const rock_organ = note(`<
  ~@5 A B C D E F ~@5 A B C G E F ~@5 H I J K@2 ~@3 L M N O P Q@2 ~@5 R S T U ~@10
>`.pickRestart({
  A: "e4@3 f#4@2 e4 a4@3 f#4@2 e4", B: "~@2 e4 f#4@2 e4 f#4@3 e4@3", C: "a4@3 b4@2 a4 c#5@3 b4@2 a4",
  D: "~@3 b4@2 a4 c#5@3 b4@3", E: "a4@3 f#4@3 e4@2 g4 g4@2 g4", F: "f#4 f#4@2 ~@3", G: "~@2 a4 b4@2 a4 c#5@3 b4@3",
  H: "~@6 e5@2 e5 e5@2 e5", I: "d5 ~@3", J: "c#5 b4 a4 ~@3 c#5 b4 a4 ~@3", K: "[c#5 b4 a4 ~@3 b4@2 b4@7 ~@9]/2",
  L: "~@6 f#5@2 e5 e4@3", M: "f#4@2 e4 a4@3 f#4@2 e4 ~@2 e4", N: "f#4@2 e4 f#4@3 e4@3 a4@3",
  O: "b4@2 a4 c#5@3 b4@2 a4 ~@2 a4", P: "b4@2 a4 c#5@3 b4@3 a4@3", Q: "[f#4@3 e4@2 g4 g4@2 g4 f#4@2 f#4@4 ~@9]/2",
  R: "~@3 e5@2 e5 e5@2 e5 d5@3", S: "~@9 c#5 b4 a4", T: "~@3 c#5 b4 a4 ~@3 c#5 b4 a4", U: "~@3 b4@2 b4@7",
})).s("gm_rock_organ").gain(0.7).pan(0.3)

// other · rock organ · "Org 3 Harmony 2"
const rock_organ_2 = note("<~@12 A B C D ~@7 A B C D ~@2 E F@2 ~@11 G H I J ~ K L M ~ A N C O ~@5>".pickRestart({
  A: "~@5 e4 f#4@2 f#4 a4@2 f#4", B: "b4@2 a4 a4@2 a4 ~@6", C: "~@5 a4 c#5@2 c#5 e5@2 c#5",
  D: "f#5@2 e5 c#5@2 b4 a4@3 ~@3", E: "a4 f#4 e4 ~@3 a4 f#4 e4 ~@3", F: "[a4 f#4 e4 ~@3 g#4@2 g#4@7 ~@9]/2",
  G: "~@2 e4 f#4@2 f#4 a4@2 f#4 b4@2 a4", H: "a4@2 a4 ~@9", I: "~@2 a4 c#5@2 c#5 e5@2 c#5 f#5@2 e5",
  J: "c#5@2 b4 a4@3 ~@6", K: "~@9 a4 f#4 e4", L: "a4 f#4 e4 a4 f#4 e4 a4 f#4 e4 a4 f#4 e4", M: "~@3 g#4@2 g#4@7",
  N: "b4@3 a4@2 a4 ~@6", O: "f#5 e5 c#5!2 b4 a4 ~@6",
})).s("gm_rock_organ").gain(0.64).pan(1)

// other · piano
const piano = note(`<
  [~@5 e3!2 f#3 a3 b3 a3 f#3]
  [a3 ~@3]
  ~@29
  [~@2 e3!2 f#3 a3 b3 a3 f#3 a3@3]
  ~@18
  [~@11 e3]
  [e3 f#3 a3 b3 a3 f#3 a3@3 ~@3]
  ~@9
>`).s("gm_piano").gain(0.45).pan(0.2)

// chords · acoustic guitar nylon · "Rythm Nylon Gtr"
const acoustic_guitar_nylon = note(`<
  ~ A B A B C A D B E F G C A D B C A D B E F G C A D B E F H I@2 J K J L C M D N O P Q C M D N O R S T@2 C U D V W@5
>`.pickRestart({
  A: "[a3,c#4,e4]!11 [g#2,d#3,g#3,b3,d#4,g#4], [a2,e3]@3 [a2,e3]@3 [a2,e3]@3 [a2,e3]@2 ~", // A G#m A5
  B: "[a3,c#4,f#4]!11 [e2,b2,e3,g#3,b3,e4], [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@2 ~", // F#m E F#5
  C: "[a3,c#4,e4]!12, [a2,e3]!4", D: "[a3,c#4,f#4]!12, [f#2,c#3,f#3]!4", E: "[a3,c#4,e4]!6 [a3,c#4,g4]!6, [a2,e3]!4",
  F: "[d4,f#4]!12, [d3,a3]!4", G: "[a3,b3,f#4]!6 [g#3,b3,e4]!6, [b2,d#3]!2 [e2,b2,d3]!2",
  H: "[a2,e3,a3,c#4,e4] ~ [a2,e3,a3,c#4,e4] ~", I: "[[a2,e3,a3,c#4,e4] ~ [e2,b2,d3,g#3,b3,e4]@5 [a2,e3,a3,c#4,e4]]/2",
  J: "[a3,c#4,e4]@2 [a3,c#4,e4] [a2,e3,a3,c#4,e4]@3 [a3,c#4,e4]@2 [a3,c#4,e4] [f#2,c#3,f#3,a3,c#4,f#4]@3, [a2,e3] ~ [a2,e3] ~", // A F#m A5
  K: "[e2,b2,e3,g#3,b3,e4] [a2,e3,a3,c#4,e4] ~ [a2,e3,a3,c#4,e4]", // E A
  L: "[e2,b2,e3,g#3,b3,e4]@3 [a2,e3,a3,c#4,e4]@3 ~@3 [a3,c#4,e4]!3, ~@3 [a2,e3]", // E A A5
  M: "[a3,c#4,e4]!8 [g#2,d#3,g#3,b3,d#4,g#4] [a3,c#4,f#4]!3, [a2,e3]@3 [a2,e3]@3 [a2,e3]@2 ~ [f#2,c#3,f#3]@3", // A G#m F#m A5 F#5
  N: "[a3,c#4,f#4]!8 [e2,b2,e3,g#3,b3,e4] [a3,c#4,e4]!3, [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@2 ~ [a2,e3]@3", // F#m E A F#5 A5
  O: "[a3,c#4,e4]!3 [a3,c#4,g4]!6 [d4,f#4]!3, [a2,e3]!3 [d3,a3]", P: "[d4,f#4]!9 [a3,b3,f#4]!3, [d3,a3]!3 [b2,d#3]",
  Q: "[a3,b3,f#4]!3 [g#3,b3,e4]!6 [a3,c#4,e4]!3, [b2,d#3] [e2,b2,d3]!2 [a2,e3]", // B7 E A B E7 A5
  R: "[d4,f#4]!9 [a2,e3,a3,c#4,e4]@3, [d3,a3]!3 ~", S: "~ [a2,e3,a3,c#4,e4] ~ [a2,e3,a3,c#4,e4]",
  T: "[~@3 [e2,b2,d3,g#3,b3,e4]@15 [a3,c#4,e4]!6, ~@6 [a2,e3]!2]/2", // E7 A A5
  U: "[a3,c#4,e4]!5 [g#2,d#3,g#3,b3,d#4,g#4] [a3,c#4,f#4]!6, [a2,e3]@3 [a2,e3]@2 ~ [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@3", // A G#m F#m A5 F#5
  V: "[a3,c#4,f#4]!5 [e2,b2,e3,g#3,b3,e4] [a2,e3,a3,c#4,e4]@3 ~@3, [f#2,c#3,f#3]@3 [f#2,c#3,f#3]@2 ~@7", // F#m E A F#5
  W: "[~ [a2,e3,a3,c#4,e4]@8 ~]/5", // A
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~ A@28 B@2 C D C E C F@13 G H I A@3 J K ~@4>".pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "x!2", C: "~@3 x", D: "~@2 x!2 ~@8", E: "~@2 x!2 ~@5 x ~@2", F: "~@2 x!2 ~@4 x!2 ~@2",
  G: "~ x ~ x", H: "~ x ~@2", I: "~@6 x ~@4 x", J: "x ~@4 x ~@6", K: "~ x",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~ A@28 B@2 ~ C D B E B@12 C A F G A@4 F ~@4>".pickRestart({
  A: "~ x ~ x", B: "x!2", C: "x ~ x!2", D: "x ~@2 x!3 ~@6", E: "x ~@6 x ~ x!2 ~ x!2 ~ x!2 ~@7", F: "~ x ~@2",
  G: "~@3 x",
})).gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct("<~@33 [~@7 x!2 ~@3] ~@21 [~@7 x!2 ~@2 x] [~ x!2 ~@2 x ~@6] ~@4>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@30 [~@2 x!2] x ~@18 [~ x!3] ~@10>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 [~ x] ~@21 [~@3 x ~ x] [x!2 ~] ~@4>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@56 [~ x] ~@4>").gain(0.4)

stack(
  bass, electric_guitar_muted, rock_organ, rock_organ_2, piano, acoustic_guitar_nylon, kick, snare, hihat, low_tom,
  open_hat, mid_tom, crash
)

More by The Beatles