Strudelify

Two of Us

The Beatles

KeyG majorTempo109 bpm
0:00/0:00
// Two of Us — The Beatles
// 109 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 7, 4/4 at bar 8, 2/4 at bar 12, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Nylon Gtr 1.
setcpm(109/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.

// bass · fretless bass · "Fretless E.Bass"
const bass = note(`<
  ~@2 A B@3 C D E F@2 G H I J K L M@2 N O P Q R@2 S T U V W X Y@3 Z AA AB AC AD AE F@2 G H B@2 C D AF K I AG AH@4 AI AJ
  AK AL AM R@2 S T AN N O P AO W AP V AQ AR@4 B@3 AS AT@2 B AS AT@2 B AS AT@2 B AS AT@2
>`.pickRestart({
  A: "g2@2 g2@2 g3@4 d3 e3 g3 ~ a2 b2 d3 ~", B: "g2@2 g2@2 g3@4 a2 b2 d3 ~ d3 e3 g3 ~", C: "g2!2 g3@2 c3 b2 c3@2",
  D: "b2 a2 b2@2 a2 g2 a2@2", E: "g2@2 a2@2 g2!2 g3@2", F: "a2 b2 d3 ~ d3 e3 g3 ~ g2@2 g2@2 g3@4",
  G: "c3 b2 c3@2 b2 a2 b2@2", H: "a2 g2 a2@2 g2@2 a2@2", I: "g2@2 g2 b2 ~ c3 d3@2", J: "d3@4 d3 e3 g3 ~ g2@4 g2@2 b2@2",
  K: "~@2 c3@2 d3@4 d3@4 d3 e3 g3 ~", L: "g2@2 g2 a2 ~ b2 c3@2", M: "[c3@2 d3@2 g2@16 g2@2 g2@2 g3@4 a2 b2 d3 ~]/2",
  N: "d3 e3 g3 ~ g2@2 g2@2 g3@4 a2 b2 d3 ~", O: "d3 e3 g3 ~ g2@2 g2@2 g3@4 c3@2 b2@2", P: "c3@2 b2 a2 b2@2 a2 g2",
  Q: "a2@2 g2@2 a2@2 g2!2", R: "g3@4 a2 b2 d3 ~ d3 e3 g3 ~ g2@2 g2@2", S: "g3@2 c3 b2 c3@2 b2 a2",
  T: "b2@2 a2 g2 a2@2 g2@2", U: "a2@2 g2@2 g2 b2 ~ c3", V: "d3@4 d3@4 d3 e3 g3 ~ g2@4", W: "g2 b2 ~ c3 d3@2 d3@2",
  X: "d3 e3 g3 ~ g2@4 g2@2 a2@2 ~@2 b2@2", Y: "[c3@2 c3 d3 g2@16 a#2@3 a2]/3", Z: "a#2 c3 d3 f3 ~@4",
  AA: "d3 f3 g3 a3 g2!2 a2 a#2", AB: "c3 d3 f3 d3 a2!4", AC: "d3 e3 g3 e3 a2!3 c3", AD: "d3 e3 g3 b3 a3!2 g3 e3",
  AE: "d3@2 e3 d3 g2!2 g3@2", AF: "g2@2 a2@2 g2@2 g2 b2", AG: "d3@4 d3 e3 g3 ~ g2@4 g2@2 a2@2",
  AH: "[~ b2 c3@2 c3 d3 g2@16 a#2@3 a2 a#2 c3 d3 f3 ~@2]/4", AI: "~@2 d3 f3 g3 a3 g2!2", AJ: "a2 a#2 c3 d3 f3 d3 a2!2",
  AK: "a2!2 d3 e3 g3 e3 a2!2", AL: "a2 c3 d3 e3 g3 b3 a3!2", AM: "g3 e3 d3@2 e3 d3 g2!2",
  AN: "a2@4 g2@2 g2@2 g3@4 a2 b2 d3 ~", AO: "a2 g2 a2 g2", AP: "d3 e3 g3 ~ g2@4 g2@2 b2@2 ~@2 c3@2",
  AQ: "g2 a2 ~ b2 c3@2 c3 d3", AR: "g2/4", AS: "g2@2 g2@2 g3@4 a2 b2 d3 e3@2 d3 b2 a2", AT: "g2!2 g3@2 e3 d3 b2 a2",
})).s("gm_fretless_bass").gain(0.59)

// other · whistle
const whistle = note("<~@80 A B A B A B A B A B A B A B A B>".pickRestart({
  A: "b6@4 b6@5 b6@2 c7 b6@2 a6@2", B: "g6@4 g6@4 ~@3 g6@2 g6 a6@2",
})).s("gm_whistle").gain(0.36).pan(0.4)

// chords · acoustic guitar nylon · "Nylon Gtr 1"
const acoustic_guitar_nylon = note(`<
  A@2 B ~@4 C ~@4 D ~@8 E ~@4 F ~@11 G H ~@3 D ~@3 I ~@11 J K ~@3 L ~@3 E ~@7 A@2 B@18
>`.pickRestart({
  A: "d4 b4 d4 b4@2 b4 d4 e4", B: "~@7 e4", C: "~@10 e3 [e3,a3,c4,g4] ~@4", D: "~@3 g4 ~@12", E: "~@15 g4",
  F: "~@7 g4 ~@8", G: "~@3 [d3,g3,b3] f#4 ~ f#4 ~", H: "f#4!4 ~@4", I: "~@11 g4 ~@4", J: "~@5 [d3,g3,b3] f#4 ~",
  K: "f#4 ~ f#4!4 ~@2", L: "~@6 e3 [e3,a3,c4,g4] ~@8",
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(0)

// chords · acoustic guitar nylon · "Nylon Gtr 2 Bank 32"
const acoustic_guitar_nylon_2 = note(`<
  ~ A B@4 C D E B@2 F G H I J K L@2 B M N O B@2 P Q R S T U V@5 W X Y Z B AA F G B@2 AB D E AC AD AE AF@5 AG X AH AI B
  AJ AK Q R B AL N O AM AN AO AP AQ@2 ~ A B@18
>`.pickRestart({
  A: "~@5 d3 e3 f#3",
  B: "[g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4]", // G
  C: "[g2,b2,d3] [g3,b3,g4] [g2,b2,d3] [g3,b3,g4] [c3,e3,g3] [g3,c4,e4] [c3,e3,g3] [g3,c4,e4]", // G C
  D: "[b2,d3,g3] [g3,c4,e4] [b2,d3,g3] [g3,c4,e4] [a2,e3,a3] [a3,c4,g4] [a2,e3,a3] [a3,c4,g4]", // G C G C A5 Am7 A5 Am7
  E: "[a2,e3,a3] [a3,c4,g4] [a2,e3,a3] [a3,c4,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4]", // A5 Am7 A5 Am7 G
  F: "[c3,e3,g3] [g3,c4,e4] [c3,e3,g3] [g3,c4,e4] [b2,d3,g3] [g3,c4,e4] [b2,d3,g3] [g3,c4,e4]", // C G C G C
  G: "[a2,e3,a3] [a3,c4,g4] [a2,e3,a3] [a3,c4,g4] [a2,e3,a3] [a3,c4,g4] [a2,e3,a3] [a3,c4,g4]", // A5 Am7 A5 Am7 A5 Am7 A5 Am7
  H: "[g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [d3,a3,d4] [a3,d4,f#4]", // G D5 D
  I: "[d3,a3,d4] [a3,d4,f#4] [c3,e3,g3] [g3,c4,e4] [g2,b2,d3,g3] [g3,b3,g4] [g2,b2,d3,g3] [g3,b3,g4]", // D5 D C G
  J: "[g2,b2,d3,g3] [g3,b3,g4] [d3,a3,d4] [a3,d4,f#4] [d3,a3,d4] [a3,d4,f#4] [c3,e3,g3] [g3,c4,e4]", // G D5 D D5 D C
  K: "[g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [g3,b3,g4] [c3,e3,g3] [g3,c4,e4]", // G C
  L: "[[c3,e3,g3] [g3,c4,e4] [g2,b2,d3,g3,b3,g4]@8 [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4]]/2", // C G
  M: "[g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3] [g3,b3,g4] [g2,b2,d3] [g3,b3,g4] [c3,e3,g3] [g3,c4,e4]", // G C
  N: "[c3,e3,g3] [g3,c4,e4] [b2,d3,g3] [g3,c4,e4] [b2,d3,g3] [g3,c4,e4] [a2,e3,a3] [a3,c4,g4]", // C G C G C A5 Am7
  O: "[a2,e3,a3] [a3,c4,g4] [a2,e3,a3] [a3,c4,g4] [a2,e3,a3] [a3,c4,g4] [g2,b2,d3,g3] [d3,g3,b3,g4]", // A5 Am7 A5 Am7 A5 Am7 G
  P: "[g2,b2,d3,g3] [d3,g3,b3,g4] [c3,e3,g3] [g3,c4,e4] [c3,e3,g3] [g3,c4,e4] [b2,d3,g3] [g3,c4,e4]", // G C G C
  Q: "[b2,d3,g3] [g3,c4,e4] [a2,e3,a3] [a3,c4,g4] [a2,e3,a3] [a3,c4,g4] [a2,e3,a3] [a3,c4,g4]", // G C A5 Am7 A5 Am7 A5 Am7
  R: "[a2,e3,a3] [a3,c4,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4]", // A5 Am7 G
  S: "[d3,a3,d4] [a3,d4,f#4] [d3,a3,d4] [a3,d4,f#4] [c3,e3,g3] [g3,c4,e4] [g2,b2,d3,g3] [g3,b3,g4]", // D5 D D5 D C G
  T: "[g2,b2,d3,g3] [g3,b3,g4] [g2,b2,d3,g3] [g3,b3,g4] [d3,a3,d4] [a3,d4,f#4] [d3,a3,d4] [a3,d4,f#4]", // G D5 D D5 D
  U: "[c3,e3,g3] [g3,c4,e4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [g3,b3,g4]", // C G
  V: "[[c3,e3,g3]@2 [g3,c4,e4]@2 [c3,e3,g3]@2 [g3,c4,e4]@2 [g2,b2,d3,g3,b3,g4]@32 [a#2,f3,a#3,d4,f4]@10 [a#2,f3,a#3,d4] [f3,a#3,d4,f4] [a#2,f3,a#3,d4] [f3,a#3,d4,f4] [a#2,f3,a#3,d4] [f3,a#3,d4,f4] [a2,d3,a3,d4,f4]@10 [a2,d3,a3,d4] [d3,a3,d4,f4] [a2,d3,a3,d4] [d3,a3,d4,f4] [a2,d3,a3,d4,f4]@2 [g2,d3,g3,a#3,d4]@2 [d3,g3,a#3,d4,g4]@2 [g2,d3,g3,a#3,d4]@2 [d3,g3,a#3,d4,g4]@2]/5", // C G A# Dm D5 Dm D5 Dm …
  W: "[g2,d3,g3,a#3,d4] [d3,g3,a#3,d4,g4] [g2,d3,g3,a#3,d4] [d3,g3,a#3,d4,g4] [a2,e3,a3,c4] [e3,a3,c4,e4] [a2,e3,a3,c4] [e3,a3,c4,e4]", // Gm Am
  X: "[a2,e3,a3,c4] [e3,a3,c4,e4] [a2,e3,a3,c4] [e3,a3,c4,e4] [a2,e3,a3,c4] [e3,a3,c4,e4] [a2,e3,a3,c4] [e3,a3,c4,e4]", // Am
  Y: "[a2,e3,a3,c4] [e3,a3,c4,e4] [a2,e3,a3,c4] [e3,a3,c4,e4] [a2,d3,a3,d4] [d3,a3,d4,f#4] [a2,d3,a3,d4] [d3,a3,d4,f#4]", // Am D5 D D5 D
  Z: "[a2,d3,a3,d4] [d3,a3,d4,f#4] [a2,d3,a3,d4] [d3,a3,d4,f#4] [a2,d3,a3,d4] [d3,a3,d4,f#4] [a2,d3,a3,d4]@2 [g2,b2,d3,g3]@2 [d3,g3,b3,g4]@2 [g2,b2,d3,g3]@2 [d3,g3,b3,g4]@2", // D5 D D5 D D5 D D5 G
  AA: "[g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3] [g3,b3,g4] [g2,b2,d3] [g3,b3,g4]", // G
  AB: "[g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [c3,e3,g3] [g3,c4,e4] [c3,e3,g3] [g3,c4,e4]", // G C
  AC: "[g2,b2,d3,g3] [d3,g3,b3,g4] [d3,a3,d4] [a3,d4,f#4] [d3,a3,d4] [a3,d4,f#4] [c3,e3,g3] [g3,c4,e4]", // G D5 D D5 D C
  AD: "[g2,b2,d3,g3] [g3,b3,g4] [g2,b2,d3,g3] [g3,b3,g4] [g2,b2,d3,g3] [g3,b3,g4] [d3,a3,d4] [a3,d4,f#4]", // G D5 D
  AE: "[d3,a3,d4] [a3,d4,f#4] [c3,e3,g3] [g3,c4,e4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4]", // D5 D C G
  AF: "[[g2,b2,d3,g3]@2 [g3,b3,g4]@2 [c3,e3,g3]@2 [g3,c4,e4]@2 [c3,e3,g3]@2 [g3,c4,e4]@2 [g2,b2,d3,g3,b3,g4]@32 [a#2,f3,a#3,d4,f4]@10 [a#2,f3,a#3,d4] [f3,a#3,d4,f4] [a#2,f3,a#3,d4] [f3,a#3,d4,f4] [a#2,f3,a#3,d4] [f3,a#3,d4,f4] [a2,d3,a3,d4,f4]@10 [a2,d3,a3,d4] [d3,a3,d4,f4] [a2,d3,a3,d4] [d3,a3,d4,f4] [a2,d3,a3,d4,f4]@2 [g2,d3,g3,a#3,d4]@2 [d3,g3,a#3,d4,g4]@2]/5", // G C G A# Dm D5 Dm D5 …
  AG: "[g2,d3,g3,a#3,d4] [d3,g3,a#3,d4,g4] [g2,d3,g3,a#3,d4] [d3,g3,a#3,d4,g4] [g2,d3,g3,a#3,d4] [d3,g3,a#3,d4,g4] [a2,e3,a3,c4] [e3,a3,c4,e4]", // Gm Am
  AH: "[a2,e3,a3,c4] [e3,a3,c4,e4] [a2,e3,a3,c4] [e3,a3,c4,e4] [a2,e3,a3,c4] [e3,a3,c4,e4] [a2,d3,a3,d4] [d3,a3,d4,f#4]", // Am D5 D
  AI: "[a2,d3,a3,d4]@2 [d3,a3,d4,f#4]@2 [a2,d3,a3,d4] [d3,a3,d4,f#4] [a2,d3,a3,d4] [d3,a3,d4,f#4] [a2,d3,a3,d4] [d3,a3,d4,f#4] [a2,d3,a3,d4]@2 [g2,b2,d3,g3]@2 [d3,g3,b3,g4]@2", // D5 D D5 D D5 D D5 D …
  AJ: "[g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3] [g3,b3,g4]", // G
  AK: "[g2,b2,d3] [g3,b3,g4] [c3,e3,g3] [g3,c4,e4] [c3,e3,g3] [g3,c4,e4] [b2,d3,g3] [g3,c4,e4]", // G C G C
  AL: "[g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [c3,e3,g3] [g3,c4,e4]", // G C
  AM: "[g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [d3,g3,b3,g4] [d3,a3,d4] [a3,d4,f#4] [d3,a3,d4] [a3,d4,f#4]", // G D5 D D5 D
  AN: "[c3,e3,g3] [g3,c4,e4] [g2,b2,d3,g3] [g3,b3,g4] [g2,b2,d3,g3] [g3,b3,g4] [g2,b2,d3,g3] [g3,b3,g4]", // C G
  AO: "[d3,a3,d4] [a3,d4,f#4] [d3,a3,d4] [a3,d4,f#4] [c3,e3,g3] [g3,c4,e4] [g2,b2,d3,g3] [d3,g3,b3,g4]", // D5 D D5 D C G
  AP: "[g2,b2,d3,g3] [d3,g3,b3,g4] [g2,b2,d3,g3] [g3,b3,g4] [c3,e3,g3] [g3,c4,e4] [c3,e3,g3] [g3,c4,e4]", // G C
  AQ: "[g2,b2,d3,g3,b3,g4]/2", // G
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(1)

// drums · kick
const kick = s("bd").struct("<~ A@16 B C A@12 D ~ E A@19 ~ F A@19 G ~@2 A@19>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "~ x!3", D: "x!3 ~", E: "~@2 x!2", F: "~@3 x", G: "x",
})).gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@32 [x!8] [x!4 ~@4] ~@19 [~@2 x!6] [x!6 ~@2] ~@41>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@34 [~@2 x!5 ~@9] ~@20 [~@6 x!5 ~@5] ~@40>").gain(0.35)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@2 A B C D E F G E H A D H@3 I J K C G C D F H L C H@4 M ~@3 N O H P Q E H A C@2 D E A H@4 R ~@4 S H I T F H L E@2 C
  G L H@4 U ~@4 D V W@16
>`.pickRestart({
  A: "x!5 ~@3 x!5 ~@3", B: "x ~@3 x ~@3 x!8", C: "x ~@3 x!5 ~@3 x ~@3", D: "x!5 ~@3 x ~@3 x ~@3",
  E: "x ~@3 x ~@3 x!5 ~@3", F: "x!5 ~@3 x ~@3 x!4", G: "x ~@3 x ~@3 x ~@3 x!4", H: "x!4",
  I: "x ~@3 x ~@3 x ~@3 x ~ x!2", J: "x!3 ~@13", K: "~@4 x ~@3 x!5 ~@3", L: "x ~@3 x!5 ~@3 x!4", M: "x ~ x!5 ~@9",
  N: "~@3 x", O: "x ~@3 x ~ x!3 ~@3 x ~@3", P: "x ~@3 x ~@3 x ~ x!3 ~ x ~", Q: "x!3 ~ x ~ x ~ x ~@3 x!4",
  R: "x ~@3 x ~ x!5 ~@5", S: "x ~@3 x ~@3 x ~ x!3 ~@3", T: "x ~ x ~ x!3 ~ x ~ x ~ x ~@3", U: "x ~@3 x ~@3 x ~ x!5 ~",
  V: "x ~@3 x!9 ~@3", W: "x!3 ~ x!3 ~ x!3 ~ x!3 ~",
})).gain(0.35)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@80 [~@3 x ~@3 x ~@3 x ~@3 x]!16>").gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@17 A ~@13 B ~ B@2 ~@17 C ~ C@2 ~@18 D ~@21>".pickRestart({
  A: "~ x ~@2", B: "~ x", C: "~@3 x", D: "x",
})).gain(0.4)

stack(bass, whistle, acoustic_guitar_nylon, acoustic_guitar_nylon_2, kick, snare, hihat, low_tom, low_tom_soft, crash)

More by The Beatles