Strudelify
Come Together cover art

1969 · Abbey Road

Come Together

The Beatles

KeyD minorTempo85 bpm
0:00/0:00
// Come Together — The Beatles
// 85 bpm, 4/4, key D minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 5 "OVERDRIVE" overdriven guitar (copy of ch 8 "OVERDRIVE" overdriven guitar, 0.5 beats early)
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/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 · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B A B C@3 D E F G ~ A B A B C@3 D E F G ~ H I A B A B C@3 D E F G ~ H I A B A B J K@2 L M N@2 O ~@2 C@3 D E F G ~ H
  I A B A B J K@2 L J K@2 ~
>`.pickRestart({
  A: "~@2 g3 [c4,f4]@5", B: "~@4 g3@2 [c4,f4]@9 ~", C: "[d3,a3] [d3,b3] [d3,a3] [d3,b3]",
  D: "[d3,a3]@4 [d3,b3]@4 [d3,a3]@4 [d3,b3]@3 ~", E: "[a2,e3]@2 ~ e3 e3@2 gb3@2, ~ [a2,gb3] a2@2",
  F: "[a2,e3]@2 [a2,gb3] [a2,e3] e3@2 gb3 e3, ~@8 a2@7 ~", G: "[g2,d3] ~@7, e3 ~@15",
  H: "[b2,gb3]@2 gb3@2 [b2,gb3] ~ [b2,eb3,gb3] ~ [b2,gb3] ~ [b2,gb3] ~ eb3 ~ a2@2, ~@2 b2 ~@9 [b2,gb3]@4", // B5 B B5
  I: "[b2,d3,g3] ~ [g2,b2,d3,g3] ~ [b2,d3,g3] ~ [g2,b2,d3]@2 [a2,a3]@2 ~@6, g2@2 ~@2 g2@2 g3 ~ e3 ~@7", // G A
  J: "[d3,a3] ~ [d3,a3] ~ [d3,b3]@2 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,b3] ~ [d3,a3] ~", // D5 G D5 G D5
  K: "[d3,a3] ~ [d3,a3] ~ [d3,b3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,b3] ~ [d3,a3] ~", // D5 G D5 G D5
  L: "[d3,a3] ~ [d3,a3] ~ [d3,b3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ b3@2 [d3,a3] ~, ~@12 d3 ~@3", // D5 G D5
  M: "[a2,e3] ~ [g2,a2,e3] ~ [a2,gb3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,gb3] ~ [a2,e3] ~", // A5 A7 D A5 D A5
  N: "[a2,e3] ~ [a2,e3] ~ [a2,gb3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,gb3] ~ [a2,e3] ~", // A5 D A5 D A5
  O: "[a2,e3] ~ [a2,e3] ~ [a2,gb3] ~ [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,gb3] ~ [a2,b2] ~, ~@13 e3@2 ~", // A5 D A5 D Asus2
})).s("gm_epiano2").gain(0.42).pan(0.7)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A@3 B A@3 B C@2 D ~ A@3 B A@3 B C@2 D ~ E F A@3 B A@3 B C@2 D ~ E F A@3 B A@3 B C G C G A@5 B C@2 D ~ E F A@3 B H I H
  J H I H ~
>`.pickRestart({
  A: "d1 ~ d1@2 g1@2 f2@6 d2@4", B: "d1 ~ d1@2 g1@2 f2@6 d2@3 ~", C: "a0 ~ a0@2 d1@2 a1@6 e1@4", D: "g0 ~@15",
  E: "b0@2 b0@2 b0 ~ b0 ~ b0@2 b0 ~ b0@2 a0@2", F: "g0@2 g0 ~ g0 ~ g0@2 a0@2 ~@6", G: "a0 ~ a0@2 d1@2 a1@6 e1@2 ~@2",
  H: "d1 ~ d1@2 d2@2 d1 ~ d1 ~ d1@2 g1 a1 c2@2", I: "d1 ~ d1@2 d2@2 d1 ~ d1 ~ d1@2 g1 a1 f1@2",
  J: "d1 ~ d1@2 d2@2 d1@2 g1 a1 c2@2 f1 g1 a1@2",
})).s("gm_electric_bass_finger").gain(0.54)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  A B A B ~@4 C@2 D ~ A B A B ~@8 E F A B A B ~@8 E F A B A B ~@9 G ~@8 E F A B A B ~@8
>`.pickRestart({
  A: "~@2 g3 [c4,f4]@5", B: "~@4 g3@2 [c4,f4]@9 ~",
  C: "[a2,e3] ~ [a2,e3] ~ [a2,gb3]@2 [a2,e3] ~ [a2,e3] ~ [a2,e3] ~ [a2,gb3]@2 [a2,e3] ~", D: "[g2,d3,g3]@3 ~@13",
  E: "gb3 b2 [b2,b3] [b2,gb3]!2 [b2,gb3,b3]!2 [a2,b2,e3,a3], b3@2 ~ b3@2 ~@3, b2 ~ gb3@4 ~@10", // B B5 Asus2
  F: "[g2,g3]!2 [g2,d3,g3] [g2,a2,d3,g3] [a2,e3,a3] ~@3, d3 ~@3", G: "d3 ~ d3 ~ g3@2 [c4,f4]@6 d4@4",
})).s("gm_distortion_guitar").gain(0.27).pan(0.3)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@16 A B@3 C@2 ~@2 D E ~@4 A B@3 C@2 ~@2 D E ~@14 A B@3 C@2 ~@2 D E ~@5 F G H@2 ~ F I
>`.pickRestart({
  A: "~@2 c5@4 a4 ~ c5@2 a4 ~ g4 ~ a4@2", B: "~@2 c5@4 a4 ~ c5@2 a4 ~ g4 ~ a4 ~",
  C: "[~@2 b4@4 ~@2 b4@4 ~@2 b4@5 ~ b4@9 ~@3]/2", D: "a5 e5@5 e5@2", E: "~ d5 b4@6 ~@8", F: "~@12 f5 ~ f5 e5",
  G: "~ d5@11 ~@4", H: "[~@12 f5 ~ f5 e5@2 d5@8 ~@7]/2", I: "~ d5@8 ~@7",
})).s("gm_synth_brass_1").gain(0.42).pan(0.9)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@4 A B A C D@2 E ~@5 F G H I J@2 K ~ L@2 ~@4 A B A C D@2 E M@3 ~@4 N@2 O P Q@2 R S T ~ F G H I J@2 K ~ L@2 ~@4 U@3 V
  U W X ~
>`.pickRestart({
  A: "~@2 [c5,f5]@4 d5 ~ [c5,f5]@2 d5 ~ c5@2 d5 ~", B: "~@2 [c5,f5]@4 d5@2 [c5,f5]@2 d5 ~ c5@2 d5 ~",
  C: "~@2 [c5,f5]@4 d5 ~ [c5,f5]@2 d5 ~ c5@2 d5@2", D: "[~ e5@14 ~]/2", E: "[f5,b5,d6,g6]@3 [c5,d5,e5] ~@12, bb5 ~@15",
  F: "~@2 [c6,f6]@4 [a5,d6] ~ [c6,f6]@2 [a5,d6] ~ c6@2 [a5,d6] ~, d5@4 ~@8 g5 ~@3", // F5 D5 F5 D5
  G: "~@2 [c6,f6]@4 [a5,d6]@2 [c6,f6]@2 [a5,d6] ~ c6@2 [a5,d6] ~, ~@12 g5 ~@3", // F5 D5 F5 D5
  H: "~@2 [c6,f6]@4 [a5,d6] ~ [c6,f6]@2 [a5,d6] ~ c6@2 [a5,d6] ~, ~@12 g5 ~@3", // F5 D5 F5 D5
  I: "~@2 [c6,f6]@4 [a5,d6] ~ [c6,f6]@2 [a5,d6] ~ c6@2 [a5,d6]@2, ~@12 g5 ~@3", // F5 D5 F5 D5
  J: "[~ [g5,db6,e6]@2 [gb5,c6,eb6] [g5,db6,e6]@2 [gb5,c6,eb6] [g5,db6,e6]@2 [gb5,c6,eb6] [g5,db6,e6]@6]/2", // Dbdim Cdim Dbdim Cdim Dbdim Cdim Dbdim
  K: "[f5,g5,b5,d6,f6]@2 [g5,a5] [c5,d5,e5,f5] ~@12", L: "[gb5@6 a5@2 g5@4 a5 ~@3, [d5,b5]@3 ~]/2",
  M: "[[db5,d5,f5] ~ db5 d5 [c5,e5] ~@11 gb5@16 g5@7 ~ [d5,e5,f5,a5] ~@7, ~ f5 ~ d5@17 ~@4, ~@32 e5 ~@15]/3", // Db C Dm
  N: "~@2 [c5,f5] ~@3 [c5,f5] ~@3 c5 ~ [c5,f5]@2 d5 ~", O: "~@2 [c5,f5] ~@3 [c5,f5] ~@3 [c5,f5] ~ [c5,f5]@2 d5 ~",
  P: "~@2 [c5,f5] ~@3 [d5,f5] ~@2 [c5,f5] ~@2 d5@2 c5@2, ~@3 f5", // F5 Dm F5
  Q: "[~@2 e5@23 ~ [eb5,e5,gb5,g5] ~ [d5,gb5] d5 c5 db5, ~@2 d5 ~@29]/2", R: "~ e5@3", S: "[d5,g5]",
  T: "~@12 [a5,b5,c6,d6] [c5,d5,e5,f5,g5] ~@2", U: "~@2 [c5,f5] ~@3 [c5,f5] ~@3 [c5,f5] ~ [d5,f5]@2 c5 ~",
  V: "~@2 [c5,f5] ~@3 [c5,f5] ~@3 [ab5,a5,c6] ~ [g5,b5] [f5,a5] [d5,f5] ~", // F5 Ab G F Dm
  W: "~@2 [c5,f5] ~@3 [c5,f5] ~@3 [c5,f5] ~@3 [d5,f5]@2", X: "~@2 [c5,f5] ~@3 [c5,f5] ~@3 [c5,f5] ~ d6 c6 a5 f5",
})).s("gm_rock_organ").gain(0.34).pan(0.3)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@43 A@2 B C D E F G H I@2 ~@14 J K L M N@2 ~@2>".pickRestart({
  A: "[~@10 g4 ab4 a4 c5 a4 ~ c5@2 a4@6 [c5,f5]@4 d5 ~@3, ~@15 g4@4 ~@13]/2", // F5
  B: "[c5,f5]@6 [a4,d5] c5 ~@2 [c5,f5]@2 [d5,g5]@4", C: "[c5,f5] d5 [c5,f5]@5 ~@3 a4@2 f5 d5 [a4,b4,f5] [ab4,d5]",
  D: "g4 f4 g4@4 f4 d4 ~@2 c5@2 c5!2 ~ c5, c5@3 ~@13", E: "c5 ~ [e5,a5]@2 d5 c5 a4 ~ [e5,a5]@2 d5 c5 a4@2 [e5,a5]@2",
  F: "d5 c5 a4@2 [e5,a5]@2 d5 c5 a4@2 [e5,a5]@2 a4 [d5,a5] ~ a4", // A5 D5
  G: "[e5,a5] ~ [e5,a5]@2 d5 c5 a4@2 [e5,a5]@2 d5 c5 a4@2 [e5,a5]@2", // A5
  H: "d5 c5 [a4,e5]@3 [d5,g5]@2 ~ e5@2 a4 [d5,g5]@2 a4 e5@2, ~@7 a4@3 ~@6", I: "[d5 a4 [c6,f6]@16 ~@14]/2",
  J: "~@4 e4@2 ~ e4@2 ~ e4@3 d4@3", K: "c5", L: "~@6 f5 d5 ~ f5 d5 ~ f5 d5 ~ f5", M: "d5@10 f5 d5 ~@4",
  N: "[~@10 c5 d5 ~ a4 c5 f5@2 d5@9 f5 d5 ~ f5 ~@2]/2",
})).s("gm_overdriven_guitar").gain(0.32).pan(1)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@4 A B C D E@2 F ~@5 G H@3 I J K ~ L M ~@4 A B C D E@2 N O@3 ~@4 H@3 P Q@2 R@2 S T G H@3 I J K ~ L M ~@4 H@6 U V
>`.pickRestart({
  A: "[d3,d4]@4 ~@2 a4 ~@3 a4 ~ g4 ~ a4 ~, ~ [d3,b3] [d3,a3] [d3,b3]", // D G D5 G
  B: "[d3,a3]@4 ~@2 a4@2 ~@2 a4 ~ g4 ~ a4 ~, ~ [d3,b3] [d3,a3] [d3,b3]", // D5 G D5 G
  C: "[d3,a3]@4 ~@2 a4 ~@3 a4 ~ g4 ~ a4 ~, ~ [d3,b3] [d3,a3] [d3,b3]", // D5 G D5 G
  D: "[d3,a3]@4 ~@2 a4 ~@3 a4 ~ g4 ~ a4@2, ~ [d3,b3] [d3,a3] [d3,b3]", // D5 G D5 G
  E: "[~@2 gb4@2 [a3,e4]@2 [a3,gb4]@2 [a3,e4]@2 [a3,gb4]@2 [a3,e4]@2 gb4 [a3,e4], a3@7 ~@21 a3 ~@3, e4 ~@7, ~@2 a4@27 ~@3]/2", // A5 D A5 D A5
  F: "[bb3,db4,e4,f4] ~@3 [d4,e4,f4,g4,a4,b4] [b3,c4] ~@10, [g3,d4]@3 ~@13", G: "d4 [d4,b4] [d4,a4] [d4,b4]",
  H: "[d4,a4] [d4,b4] [d4,a4] [d4,b4]", I: "[a3,e4] [a3,gb4] [a3,e4] [a3,gb4]",
  J: "[a3,e4]@2 [a3,gb4]@2 [a3,e4]@2 [a3,gb4] [a3,e4]", K: "[g3,d4,g4] ~@7", L: "[b3,b4]@3 [a3,a4]",
  M: "[g3,g4]@4 [a2,a3] ~@3, f4 ~@15", N: "[bb3,db4,e4,f4] ~@3 [d4,e4,f4,g4,a4,b4] [b3,c4] ~@9 g4, [g3,d4]@3 ~@13",
  O: "[~@6 f4@9 ~ [b2,b3]@12 [a2,a3]@4 [g2,g3]@8 [a3,a4] ~@7, ~@2 b4@11 ~@3, ~@6 bb4 ~@33 a2@2 ~@6]/3", // B A G A
  P: "[d4,a4] [d4,b4] [d4,a4] b4", // D5 G D5
  Q: "[~ [a3,gb4] [a3,e4] [a3,gb4] [a3,e4] [a3,gb4] [a3,e4] [a3,gb4], [a3,e4] ~@7, ~@2 a4@25 ~@5]/2", // D A5 D A5 D A5 D A5
  R: "[[a3,e4] [a3,gb4] [a3,e4] [a3,gb4] [a3,e4] [a3,gb4] [a3,e4] [a3,gb4], ~ a4@7]/2", // A5 D A5 D A5 D A5 D
  S: "d3@13 [f4,g4,a4,b4] [f3,g3,a3,b3,c4,d4,e4] [a2,b2,c3,d3,e3]", T: "g2 ~@15",
  U: "[d4,a4]@2 [d4,b4]@2 [d4,a4]@2 [d4,b4] a4", V: "[d3,d4] ~@15",
})).s("gm_percussive_organ").gain(0.13)

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

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

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 A ~@2 B C ~@7 A ~@2 B C ~@9 A ~@2 B C ~@19 A ~@2 B C ~@16 D>".pickRestart({
  A: "~@5 x ~@2", B: "~@3 x ~@4", C: "~@3 x ~ x ~@2", D: "x",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A@2 B A ~@8 A@2 B A ~@10 A@2 B A ~@10 A@2 B ~@4 C ~@16 D A B ~@4 C ~@2 E ~
>`.pickRestart({
  A: "~@12 x!2 ~@2", B: "~@11 x!3 ~@2", C: "~@7 x", D: "~@8 x ~@3 x!2 ~@2", E: "~@13 x!2 ~",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<A@4 ~@8 A@4 ~@10 A@4 ~@10 A@4 ~@20 A@4 ~@6 B ~>".pickRestart({
  A: "~@4 x!2 ~@10", B: "~@15 x",
})).gain(0.54)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@9 A ~@11 A ~@13 A ~@23 A ~@16>".pickRestart({
  A: "~@7 x",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<A@4 ~@8 A@4 ~@10 A@4 ~@10 A@3 ~@21 B A@2 ~@9>".pickRestart({
  A: "~@8 x!4 ~@4", B: "~@9 x!3 ~@4",
})).gain(0.48)

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

// drums · ride
const ride = s("rd").struct("<~@44 A B@2 C A B A B ~@16 A B@2 C A B A ~>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!2 ~@2",
})).gain(0.54)

stack(
  epiano2, bass, distortion_guitar, synth_brass_1, rock_organ, overdriven_guitar, percussive_organ, kick, snare,
  low_tom, hihat, hihat_soft, mid_tom, open_hat, open_hat_soft, high_tom, crash, ride
)

More by The Beatles