Strudelify

Back In the U.S.S.R.

The Beatles

KeyA majorTempo144 bpm
0:00/0:00
// Back In the U.S.S.R. — The Beatles
// 144 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 15 "Bass 2" synth bass 1 (copy of ch 5 "Bass 1" slap bass 2); ch 9 "Solo2" distortion guitar (copy of ch 8 "Solo1" distortion guitar); ch 2 "Lead 2" clavinet (copy of ch 1 "Lead 1" distortion guitar)
// note: Full arrangement: all 103 bars on a 16-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): Solo 1 a.
setcpm(144/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 · slap bass 2 · "Bass 1"
const bass = note(`<
  ~@2 A@4 B C D E B C D C F G H I B J B C D E B C D C F G H K@3 B L M@2 B L N O P M B Q B C D E B C D C F G H I B L B C
  D E B C D C F G H K M@2 B L N O P M B Q B C D E B C D C F G H I B J B@6 ~
>`.pickRestart({
  A: "e1!8", B: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~", C: "d1@3 ~ d1@3 ~ d1@3 ~ d1@3 ~", D: "c1@3 ~ c1@3 ~ c1@3 ~ c1@3 ~",
  E: "d1@3 ~ d2@2 a1@2 f1@2 a1@2 a1@3 ~", F: "a1@2 a2@2 a1@2 g2@2 a1@2 f2@2 e2@3 ~", G: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~",
  H: "d1@2 d2@2 d1@2 c2@2 d1@2 b1@2 b1@3 ~", I: "d1@3 ~@13", J: "a1@2 d2@2 d#2@2 e2@5 ~ e1@3 ~", K: "e1@13 ~@3",
  L: "a1@3 ~ b1@3 ~ c2@3 ~ c#2@3 ~", M: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", N: "d2@3 ~ d2@3 ~ c#2@3 ~ c#2@3 ~",
  O: "c2@3 ~ c2@3 ~ b1@3 ~ b1@3 ~", P: "e2@3 ~ e2@3 ~ e2@3 ~ e2@3 ~", Q: "b1@3 ~ b1@3 ~ e2@3 ~ e1@3 ~",
})).s("gm_slap_bass_2").gain(0.5).pan(0.6)

// chords · clavinet · "Rhythm"
const clavinet = note(`<
  ~@2 A@2 B C D E@4 F@4 G@2 H I J D K@4 F@4 G@2 L M N I O P Q@3 R S T U V W D X@4 F@4 G@2 Y I Z D K@4 F@4 G@2 L AA Q@3 R
  S T U V W D K@4 AB@4 G@2 Y I AC AD@6 ~
>`.pickRestart({
  A: "~@12 [d4,e4]@3 ~", B: "[e3,g#3,d4]!8", C: "[a3,b3,d4,e4]!8", D: "[e4,a4]@13 ~@3",
  E: "[[f#4,a4]@2 [f#4,a4]@3 ~ [f#4,a4]@8 [e4,g4]@8 ~@2 [e4,g4,a4]@2 [e4,g4,a4]@3 ~ [d4,f#4]@12 ~@4 [e4,a4]@15 ~@3]/4", // F#m Em A7 D A5
  F: "[a4@2 [f#4,a4]@4 [f#4,a4]@5 ~@3 [e4,g4]@8 ~@2 [e4,g4,a4]@2 [e4,g4,a4]@3 ~ [d4,f#4]@4 [f#4,a4]@2 [f#4,a4]!2 ~ [f#4,a4] [f#4,a4]@2 [f#4,a4]@2 [f#4,a4]@2 [e4,a4]@15 ~@3]/4", // F#m Em A7 D F#m A5
  G: "[[e4,g4]@6 ~@2 [e4,g4]@5 ~ [d4,f#4]@8 [d4,f#4]@5 ~@5]/2", H: "[d4,f4,a4]@5 ~@11", I: "~ [c#4,e4,a4]!7",
  J: "~ [a3,d4,f4] [a#3,d#4,g4] [b3,e4,g#4]@4 ~", // Dm D# E
  K: "[[f#4,a4]@2 [f#4,a4]@3 ~ [f#4,a4]@7 ~ [e4,g4]@8 ~@2 [e4,g4,a4]@2 [e4,g4,a4]@3 ~ [d4,f#4]@12 ~@4 [e4,a4]@15 ~@3]/4", // F#m Em A7 D A5
  L: "[f#4,a4]@7 ~@3 [f#4,a4]@2 [f#4,a4]@4", M: "[g4,b4]@7 ~@3 [g4,b4]@2 [g4,b4]@4", N: "~ [g4,b4]@3 ~@4",
  O: "c#4!2 d4!2 d#4!2 [c#4,e4]!2", P: "~ [d4,f#4] f#4@2, ~@4 d4@3 ~",
  Q: "[d4@3 ~ [d4,f#4]@2 d4@5 ~ d4@2 c#4@8 ~@2 [c#4,e4]@3 ~ d4@2 c#4@15 ~@3, ~@3 f#4@5 ~@16]/3", // D C#m
  R: "d4@3 ~ d4@3 ~ [c#4,f4]@6 ~@2", S: "[c4,e4]@2 [c4,e4]@3 ~ f#4@10, ~@3 d#4@4 ~", T: "[d4,g#4]!8",
  U: "d4 [d4,f#4]!7", V: "~ [c#4,e4]!7", W: "d#4 [d#4,f#4] d#4 [d4,g#4]@4 ~, ~@2 f#4@5 ~",
  X: "[[f#4,a4]@2 [f#4,a4]@3 ~ a4@7 ~ [e4,g4]@8 ~@2 [e4,g4,a4]@2 [e4,g4,a4]@3 ~ [d4,f#4]@12 ~@4 [e4,a4]@15 ~@3, ~@3 f#4@5 ~@24]/4", // F#m Em A7 D A5
  Y: "[d4,f#4,a4] [d4,f#4,a4]@7", Z: "c#4!2 d4!2 d#4!2 [c#4,e4]!2, f#4", AA: "f#4 [d4,f#4] f#4@2, ~@4 d4@3 ~",
  AB: "[a4@2 [f#4,a4]@4 [f#4,a4]@5 ~@3 [e4,g4]@8 ~@2 [e4,g4,a4]@2 [e4,g4,a4]@3 ~ [d4,f#4]@4 [f#4,a4]@2 [f#4,a4]!2 ~ [f#4,a4] [f#4,a4]@2 [f#4,a4]@2 a4@2 [e4,a4]@15 ~@3, ~@44 f#4 ~@19]/4", // F#m Em A7 D F#m A5
  AC: "~@2 [a3,d4,f#4]@2 [a#3,d#4,g4]@2 [b3,e4,g#4]@9 ~", // D D# E
  AD: "~@2 [c#4,e4,a4]@3 ~ [c#4,e4,g4]@3 ~ [c#4,e4,f#4]@2 c4@2 c#4@2", // A C#dim F#7
})).s("gm_clavinet").gain(0.47).pan(0.4)

// chords · rock organ · "Rhythm 2"
const rock_organ = note(`<
  ~@14 A B C D E F ~@8 A B G D ~@2 H I ~ J K@2 L M N O P Q@2 ~@7 R S T U V@2 ~@8 A B G D ~ J W@2 L X Y Z P AA@2 ~@7 AB
  AC AD D AE@2 AF AG AH AF AH AI AJ
>`.pickRestart({
  A: "~@2 [e5,a5]@3 ~ [e5,g5]@2 ~@2 f#5@2 e5@4", B: "~@2 [g5,c6]@3 ~ [f#5,a#5]@3 ~ a5@2 g5@3 ~",
  C: "~@2 [a5,d6]@2 ~@2 [a5,c6]@3 ~ b5 ~ a5@2 ~@2", D: "[f#5,a5,d6] ~@7", E: "~@4 [e5,a5]@2 ~@4 [e5,a5] ~@3 [e5,a5] ~",
  F: "~@2 [d5,f#5] ~ d#5@2 [e5,g#5]@8 ~@2, ~@4 g5 ~@11", G: "~@2 [a5,d6]@3 ~ [a5,c6]@3 ~ b5 ~ a5@2 ~@2",
  H: "a5@4 d#5 e5@2 ~@3 d#5 e5 ~@2 [e5,a5]@2, ~@4 a5@6 a5@4 d#5 ~", I: "a5@2 a5@2 a5 ~@7 c#5@2 c#5@2, e5 ~@15",
  J: "~@8 e6@3 ~ c#6@3 ~, ~@8 e5@7 ~",
  K: "[a5@4 d#5 e5@2 ~@3 d#5 e5 ~@2 [e5,a5]@4 a5@2 a5 ~@7 c#5 ~ c#5@2, ~@4 a5@6 a5@4 d#5 ~@17]/2", // A5
  L: "~@4 [d5,a5,d6]@3 ~@9", M: "[e5,g5,a#5,c6] ~@4 [f#5,b5] ~@2", N: "e5 ~ [e5,b5,e6]@2 ~@4 [b5,e6] ~@7, ~@4 e5 ~@3",
  O: "d5 ~ [d5,a5,d6]@2 ~@4 [d5,a5,d6]@2 ~@2 [d5,a5,d6]@2 ~@2", P: "~@4 [e5,a5]@2 ~@4 e5@2 ~@2 [e5,a5] ~, ~@10 a5 ~@5",
  Q: "[~@2 [d5,f#5] ~ d#5@2 [e5,g#5]@13 ~@13, ~@4 g5 ~@27]/2", R: "~@2 [e5,a5]@3 ~ [e5,g5]@3 ~ f#5@2 e5@4",
  S: "~@2 [g5,c6]@2 ~@2 a#5@3 ~ a5@2 g5@3 ~", T: "~@2 [a5,d6]@3 ~ [a5,c6]@4 b5 ~ a5@2 ~@2", U: "[d5,f#5,a5,d6]@3 ~@13",
  V: "[a5@4 d#5 e5@2 ~@3 d#5 e5 ~@2 [e5,a5]@4 a5@2 ~@8 c#5@2 c#5 ~, ~@4 a5@6 a5@4 d#5 ~@17]/2", // A5
  W: "[a5@4 d#5 e5@2 ~@3 d#5 e5 ~@2 [e5,a5]@4 a5@2 a5 ~@7 c#5@2 c#5@2, ~@4 a5@6 a5@4 d#5 ~@17]/2", // A5
  X: "[e5,g5,a#5] ~@4 [f#5,b5] ~@2", Y: "e5 ~ [e5,b5]@2 ~@4 [e5,b5]@2 ~@6",
  Z: "d5 ~ [d5,a5]@2 ~@4 [d5,a5]@2 ~@2 [d5,a5]@2 ~@2", AA: "[~@2 d5@2 d#5@2 [e5,g#5]@13 ~@13, ~@2 f#5 ~ g5 ~@27]/2",
  AB: "~@2 d#5@4 [e5,g5]@3 ~ f#5@2 e5@3 ~, ~ a5 ~@6", AC: "~@2 [g5,c6]@3 ~ [f#5,a#5]@4 a5@2 g5@3 ~",
  AD: "~@2 [a5,d6]@2 ~@2 [a5,c6]@4 b5 ~ a5@2 ~@2", // D5 Am
  AE: "[~@2 e5@2 ~@2 [e5,a5] ~@3 [d5,f#5] ~ d#5@2 [e5,g#5]@8 ~@4 [e5,a5]@3 ~ [e5,g5]@2, ~@2 a5 ~@9 g5 ~@19]/2", // A5 D E A5 Em
  AF: "~@2 f#5@2 e5@3 ~@3 [e5,a5]@3 ~ [e5,g5]@2", AG: "~@2 f#5@2 e5@3 ~@3 [e5,a5]@2 ~@2 [e5,g5]@2",
  AH: "~@2 f#5@2 e5@4 ~@2 [e5,a5]@3 ~ [e5,g5]@2", AI: "~ f#5 e5@2 [e5,a5]@4", AJ: "[e5,a5] ~",
})).s("gm_rock_organ").gain(0.5).pan(0.6)

// other · distortion guitar · "Solo1"
const distortion_guitar = note("<~@60 A B C D E F G@3 H@3 ~@31>".pickRestart({
  A: "c#5 d5 c#5@2 d5@2 c#5!2 a4@2 g4 e4@2 e4 c5@2", B: "d5!2 d5@2 d5@2 f#5@2 d5 c5 a4@2 c5@2 f#4@2",
  C: "g4@3 ~ g4 e4 a4 e4@2 a4@2 g4@3 ~ f#4", D: "f#4!4 d4@6 ~@4 a4@2", E: "[c5,d5]!4 d5@2 c5@2 d5@3 ~ c5!4",
  F: "f#4 a4 c5 e5 f#5 f#4@3", G: "[c5@2 c5@2 d5@2 e5@2 a4@2 a4@3 ~ a4@4 d5@2 d5!8 d5@2 c#5@15 ~@3]/3",
  H: "[e4 g4 b4 d5!2 c5@3 ~ g4 e4@2 f4@2 d4 f#4@3 f#4 a4 c5!2 a4 ~ a4 f#4@2 d4@2 a4@13 ~@6]/3",
})).s("gm_distortion_guitar").gain(0.35).pan(0.7)

// other · distortion guitar · "Lead 1"
const distortion_guitar_2 = note(`<
  ~@6 A B C@3 D@4 E@2 F@2 ~ A B C@3 D@4 E@2 G@2 H I J K L@2 M K N O P@2 ~ A B C@3 D@4 E@2 Q@2 ~@13 K L@2 M K N O P@2 ~ A
  B C@3 D@4 E@2 Q@2 ~@8
>`.pickRestart({
  A: "d5 c#5 d5 c#5 d5 c#5 d5 c5", B: "d5@2 d5@3 ~ d5@7 ~ c5@2",
  C: "[c5@2 c5@2 d5@2 e5@2 a4@5 ~ a4@12 ~@4 d5@4 c5@2 d5@2 c5@2 d5@2 c5@2 d5@2 c5@2]/3",
  D: "[d5@2 d5@3 ~ d5@5 ~@3 c5@4 c5@2 d5@2 e5@2 a4@2 a4@3 ~ a4@4 d5@2 d5!2 ~ d5 d5@2 d5@2 d5@2 c#5@8 ~@10]/4",
  E: "[~@2 c5 d5@2 c5 d5@2 d5@2 c5@2 d5@2 c5@7 ~ a4@5 ~@5]/2", F: "[~@2 d5@3 ~ a4!2 d5@2 d5@2 d5@2 c#5@15 ~@3]/2",
  G: "~@2 d5@5 ~ a4!2 d5@2 d5@4", H: "~@2 d5@3 ~ a4!2 d5@2 d5@2 d5@2 e5@2", I: "c#5@3 ~@5", J: "~@6 c#4!2",
  K: "d4@3 ~ f#4@3 ~ a4@3 ~ b4@2 a4@2", L: "[c5@3 ~ b4@2 a4@5 ~ f#4@2 e4@5 ~ f#4@3 ~ a4@3 ~ f#4@2 e4@2]/2",
  M: "e4@5 ~@2 e4", N: "c5@2 b4@3 ~ b4@5 ~@3 b4@2", O: "b4!8", P: "[c5!6 a4@9 ~]/2",
  Q: "[~@2 d5@3 ~ a4!2 d5@2 d5@2 d5@2 c#5@8 ~@10]/2",
})).s("gm_distortion_guitar").gain(0.45)

// other · clavinet · "Lead 1 a"
const clavinet_2 = note(`<
  ~@6 A B C@3 D@4 E@2 F@2 ~ A B C@3 D@4 E@2 G@2 H I J K L@2 M K N O P@2 ~ A B C@3 D@4 E@2 Q@2 ~@13 K L@2 M K N O P@2 ~ A
  B C@3 D@4 E@2 Q@2 ~@8
>`.pickRestart({
  A: "d4 c#4 d4 c#4 d4 c#4 d4 c4", B: "d4@2 d4@3 ~ d4@7 ~ c4@2",
  C: "[c4@2 c4@2 d4@2 e4@2 a3@5 ~ a3@12 ~@4 d4@4 c4@2 d4@2 c4@2 d4@2 c4@2 d4@2 c4@2]/3",
  D: "[d4@2 d4@3 ~ d4@5 ~@3 c4@4 c4@2 d4@2 e4@2 a3@2 a3@3 ~ a3@4 d4@2 d4!2 ~ d4 d4@2 d4@2 d4@2 c#4@8 ~@10]/4",
  E: "[~@2 c4 d4@2 c4 d4@2 d4@2 c4@2 d4@2 c4@7 ~ a3@5 ~@5]/2", F: "[~@2 d4@3 ~ a3!2 d4@2 d4@2 d4@2 c#4@15 ~@3]/2",
  G: "~@2 d4@5 ~ a3!2 d4@2 d4@4", H: "~@2 d4@3 ~ a3!2 d4@2 d4@2 d4@2 e4@2", I: "c#4@3 ~@5", J: "~@6 c#3!2",
  K: "d3@3 ~ f#3@3 ~ a3@3 ~ b3@2 a3@2", L: "[c4@3 ~ b3@2 a3@5 ~ f#3@2 e3@5 ~ f#3@3 ~ a3@3 ~ f#3@2 e3@2]/2",
  M: "e3@5 ~@2 e3", N: "c4@2 b3@3 ~ b3@5 ~@3 b3@2", O: "b3!8", P: "[c4!6 a3@9 ~]/2",
  Q: "[~@2 d4@3 ~ a3!2 d4@2 d4@2 d4@2 c#4@8 ~@10]/2",
})).s("gm_clavinet").gain(0.45)

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

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

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

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

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A ~@8 B ~@11 C ~ B@2 D ~ A ~ C E C E C E C E C E C E C E C E C E C E C E C E C E C E C E C E C E C E C@2 ~ C E C E
  C E C E C E C E C E C E C E C E C E C E C E C E C ~
>`.pickRestart({
  A: "x", B: "x!4", C: "~@2 x ~@3 x!2", D: "~ x ~@2", E: "~@15 x",
})).gain(0.49)

// drums · high tom
const high_tom = s("ht").struct("<~@13 A ~ B ~@7 C ~@3 C ~@17 C ~@7 C ~@26 C@2 ~@14 A@2 ~ C ~@3>".pickRestart({
  A: "~@4 x!2 ~@10", B: "x!2 ~@14", C: "x",
})).gain(0.44)

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

// drums · ride
const ride = s("rd").struct("<~@16 A ~@3 A ~ A ~@13 A@10 ~@13 A@12 B ~ A@29 B>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.49)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@5 A B@7 A ~@2 A@3 ~ A B A ~ B@3 ~@3 B A@2 B@8 A@4 ~ B@6 ~@4 B A C B@4 A B C A@5 ~ B@3 A@4 B A@8 B A@3 B A@5 B@3 A ~
>`.pickRestart({
  A: "x!8", B: "x!4", C: "x!3 ~",
})).gain(0.49)

stack(
  bass, clavinet, rock_organ, distortion_guitar, distortion_guitar_2, clavinet_2, kick, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, ride, tambourine
)

More by The Beatles