Strudelify
Penny Lane cover art

1

Penny Lane

The Beatles

KeyC minorTempo113 bpm
0:00/0:00
// Penny Lane — The Beatles
// 113 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 84 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(113/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.

// other · piccolo · "Flute"
const piccolo = note("<~@4 A@2 ~ B C ~@19 D@2 E ~@41 F@4 G H@3 ~@4>".pickRestart({
  A: "[[c4,eb4]@47 ~]/2", B: "~@19 [bb5,b5] c6 ~ d6 ~", C: "eb6@2 c6@2 d6@13 ~@7",
  D: "[~@4 gb5@3 ~ f5@3 ~ eb5@14 ~@22]/2", E: "~@3 b5@4 ~ d6@4 eb6@11 ~",
  F: "[~@18 e6@2 f6 [f6,gb6] g6@9 ~@3 f6@2 e6@3 ~ f6@2 ~@3 [f6,gb6] g6@10 ~@2 f6@2 e6 ~@3 d6@2 ~@4 c6@20 ~@6]/4", // Gbmaj7
  G: "~@22 e6 [f6,gb6]", H: "[g6@9 ~ f6@2 e6@3 ~ f6@4 ~ [f6,gb6] g6@9 ~@3 f6@2 e6@2 ~@2 g6@2 ~@4 c6@6 ~@20]/3",
})).s("gm_piccolo").gain(0.4).pan(0.4)

// other · trumpet
const trumpet = note(`<
  ~@4 A@3 ~@5 B@3 ~@4 C D@2 ~@9 E F G H I J K L M N ~@2 C O@2 ~@6 P@3 Q@2 ~@3 P@3 Q@2 ~@2 R@2 ~@6 S T ~ U@2 V ~@3
>`.pickRestart({
  A: "[c5@17 ~@7]/3", B: "[c5@23 ~]/3", C: "[d4,a4]@9 ~ [eb4,ab4]@2 ~@4 [eb4,g4]@2 ~@4 [bb3,f4]@2",
  D: "[[g3,eb4]@6 ~@4 [d4,g4]@3 ~@3 [eb4,g4]@2 ~@4 bb3@2 ab3@9 ~@15, ~@11 eb4@6 ~@7]/2", // Cm G5 Eb
  E: "~@12 g3 ~ a3 ~ b3@3 ~ b3 ~ c4 ~", F: "d4 ~ b3 ~ c4 ~ d4 ~ e4 ~ f4 ~ g4 ~ d4 e4 f4 ~ g4 ~ a4 ~ b4 ~",
  G: "c5 ~ e4 g4 c5 ~ e5@7 ~ c5 d5 e5 ~ c5 d5 e5 ~ d5 e5",
  H: "f5 ~ d5 e5 f5 ~ d5 ~ e5 ~ f5 ~ g5 ~@2 a5 ~ b5 g5 ~@2 a5 ~ b5", I: "c6 ~@4 c6@7 ~@2 c5 d5 e5 ~ f5 ~ g5 ~ a5 ~",
  J: "bb5@10 ~@4 eb6 ~ bb5 ~ g5 ~ eb5 ~ g5 ~", K: "eb5@3 ~@3 eb6@5 ~@3 eb6!3 ~ eb6 ~ eb6 ~ eb6 ~", L: "eb6@13 ~@11",
  M: "~@2 c6 ~ d6 ~ eb6 ~ c6 ~ d6@12 ~@2", N: "c5 ~ f5 ~ c5 ~ a5 ~ f5 ~ c6 ~ f6@7 ~@5",
  O: "[[g3,eb4]@6 ~@4 [d4,g4]@2 ~@4 [eb4,g4]@2 ~@4 bb3@2 ab3@9 ~@15, ~@11 eb4@6 ~@7]/2", P: "~@6 c5 ~@11 g4 ~@5",
  Q: "[~@6 g5@35 ~@7]/2", R: "[f5@5 ~ g5@5 ~ a5@5 ~ bb5@5 eb5@6 ~ f5@5 ~ g5@11 ~]/2",
  S: "~@3 a4 ~ c5 f5 g5 ~ a5 bb5 ~ c6 ~@2 c6 ~ b5 ~ c6@5",
  T: "~@3 c6 ~ d6 e6 f6 ~ c6 bb5 ~ a5 ~@2 a5 ~ ab5 a5 ~ ab5 a5 ~@2",
  U: "[~@22 c6@7 ~ d6@5 ~ e6 ~@2 f6 ~@2 c6 ~@2 bb5 ~@2]/2", V: "a5@17 ~@7",
})).s("gm_trumpet").gain(0.4).pan(0.4)

// other · tubular bells · "Tublr Bell" · G
const tubular_bells = note("<~@32 [~@2 [g4,g5] ~ [g4,g5] ~ [g4,g5] ~ [g4,g5] ~ [g4,g5] ~ [g4,g5]@2 ~@10] ~@51>")
  .s("gm_tubular_bells").gain(0.6).pan(0.6)

// chords · brass section · "Brass"
const brass_section = note("<~@19 A B@2 ~@21 A C@2 ~@38>".pickRestart({
  A: "[d4,a4]@9 ~ [eb4,ab4]@2 ~@4 [eb4,g4]@2 ~@4 [bb3,f4]@2", // D5 Ab5 Eb Bb5
  B: "[[g3,eb4]@6 ~@4 [d4,g4]@3 ~@3 [eb4,g4]@2 ~@4 bb3@2 ab3@9 ~@15, ~@11 eb4@6 ~@7]/2", // Cm G5 Eb
  C: "[[g3,eb4]@6 ~@4 [d4,g4]@2 ~@4 [eb4,g4]@2 ~@4 bb3@2 ab3@9 ~@15, ~@11 eb4@6 ~@7]/2", // Cm G5 Eb
})).s("gm_brass_section").gain(0.36).pan(0.9)

// chords · vibraphone · "Vibes"
const vibraphone = note(`<
  ~@16 A@2 B C D E@3 F ~@15 A@2 B C D E@3 F ~@15 A@2 B C D E@3 F G H I J K@3 L ~@3
>`.pickRestart({
  A: "[~ f4, ~@23 [bb3,d4]@17 ~@8]/2", B: "~ bb4@23, [bb3,f4]@3 ~", C: "~ g4@22 ~, [bb3,eb4]@11 ~",
  D: "[bb3,eb4]@17 ~@7, g3", // Eb5
  E: "[[bb3,d4]@17 ~@7 bb4@23 ~ g4@24, f4@23 bb3@18 ~@6 bb3@19 ~@6, ~@12 f4@9 ~@3 eb4@10 ~@2]/3", // Bb
  F: "[b3,d4,g4]@6 [d4,g4] ~@5", G: "~ g4@23, [c4,e4]@17 ~@7", H: "~ c5@23, g4, c4@3 ~", I: "~ a4@22 ~, [c4,f4]@11 ~",
  J: "[c4,f4]@17 ~@7, a3", K: "[[c4,e4]@17 ~@7 c5@23 ~ a4@24, g4@23 c4@18 ~@6 c4@19 ~@6, ~@12 g4@9 ~@3 f4@10 ~@2]/3",
  L: "[f4,a4,c5]", // F
})).s("gm_vibraphone").gain(0.21).pan(0.3)

// chords · piano
const piano = note(`<
  A B C D E F G H I J K L M N G O P Q R S@3 T U V W X L Y N Z AA AB AC K L AD N G O P AE AF AG@2 AH AI U V W K L AJ AK
  AL AM AN AO K L AP AQ AL AM P AH AI AG@2 AR AS U V AT AU AV@2 AW AX AY AZ BA@2 ~
>`.pickRestart({
  A: "~@18 [c4,g4] ~@5", B: "[g3,c4,e4]@6 [g3,c4,e4]@5 ~ [g3,c4,e4]@5 ~ [g3,e4] ~@5, ~@9 c4 ~@2",
  C: "[a3,c4,f4]@3 [a3,c4,f4] ~@2 [b3,d4,g4]@3 [b3,d4] ~@2, ~@18 g4 ~@5", // F G Bm
  D: "[c4,e4,g4]@6 [c4,e4,g4]@5 ~ [c4,e4,g4]@6 [e4,g4,c5]@3 ~@3", // C
  E: "[eb4,g4,c5]@5 ~ [eb4,g4,c5]@2 ~@4 [eb4,g4,c5]@5 ~ [eb4,g4]@2 ~@4, ~@18 c5 ~@5", // Cm Eb
  F: "[eb4,g4,c5]@5 ~ [eb4,g4,c5]@2 ~@4 [eb4,g4,c5]@6 [eb4,g4,c5]@2 ~@4", // Cm
  G: "[eb4,g4]@2 ~ [eb4,g4]@2 ~ [eb4,g4]@2 ~ [eb4,g4]@2 c4, ~@4 c4@6 c4@5 ~ c4@5 ~@3", // Eb
  H: "[c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [b3,d4,g4] ~@2 [d4,g4] ~@2, ~@18 b3 ~@5", // Csus2 G G5
  I: "[c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2", // Csus2 G
  J: "[g3,c4,e4]@6 [g3,c4,e4]@5 ~ [a3,c4,e4]@5 ~ [c4,e4]@2 ~@4, ~@18 a3 ~@5", // C Am C
  K: "[a3,c4,f4]@3 [a3,c4,f4] ~@2 [b3,d4,g4]@3 [b3,d4,g4] ~@2", // F G
  L: "[c4,e4,g4]@6 [c4,e4,g4]@5 ~ [c4,e4,g4]@6 [c4,e4,g4]@3 ~@3", // C
  M: "[c4,eb4,g4]@5 ~ [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@5 ~ [c4,g4] ~@5, ~@9 eb4 ~@2", // Cm C5
  N: "[c4,eb4,g4]@5 ~ [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@6 [c4,eb4,g4]@2 ~@4", // Cm
  O: "[d4,g4]@2 ~ [d4,g4]@2 ~ [d4,g4]@2 ~ [d4,g4]@2 c4, ~@4 c4@6 c4@5 ~ c4@5 ~@3", // G5
  P: "[f4,a4]@2 ~ [a4,c5]@2 f4 [a4,f5]@2 ~@4, ~@4 c4@5 ~@15", Q: "[bb3,d4,f4]@17 ~@7", R: "[bb3,f4,bb4]@3 ~",
  S: "[[bb3,eb4,g4]@2 ~@4 [eb4,g4]@4 bb3@2 [eb4,g4]@4 ~@2 [eb4,g4]@4 ~@2 [eb4,g4]@2 ~@4 [eb4,g4]@4 ~@2 [eb4,g4]@4 ~@8 [d4,f4]@17 ~@7, ~@8 bb3@2 ~ bb3@2 ~@4 bb3@2 ~ bb3@2 ~ bb3@5 ~@8, ~@7 [eb4,g4] ~@4]/3", // Eb Dm Eb
  T: "[bb3,f4,bb4]@19 ~@5", U: "[bb3,eb4,g4]@3 ~@3 [eb4,g4]@4 ~@2 [eb4,g4]@4 bb3@2 [eb4,g4]@5 ~, ~@5 bb3@2 ~@5",
  V: "[b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@5", // G
  W: "[g3,c4,e4]@5 ~ [g3,c4,e4]@5 ~ [a3,c4,e4]@5 ~ [c4,e4]@2 ~@4, ~@18 a3 ~@5", // C Am C
  X: "[a3,c4,f4]@3 [a3,c4] ~@2 [b3,d4,g4]@3 [d4,g4] ~@2, ~@6 f4 ~@11 b3 ~@5", // F Am G G5
  Y: "[c4,eb4,g4]@5 ~ [c4,eb4,g4]@2 ~@4 [c4,eb4,g4]@5 ~ [eb4,g4]@2 ~@4, ~@18 c4 ~@5", // Cm Eb
  Z: "[c4,eb4,g4]@4 ~@2 [c4,eb4,g4]@4 ~@2 [c4,eb4,g4]@4 ~@2 [c4,eb4,g4]@5 ~", // Cm
  AA: "[g4,c5,d5] ~@5 [g4,c5,d5] ~@5 [g4,b4,d5] ~@5 [b4,d5]@6, ~@18 g4 ~@5", // Gsus4 G Bm
  AB: "[c5,d5] ~@5 [g4,c5,d5] ~@5 [g4,b4,d5] ~@5 [g4,b4,d5] ~@5, g4 ~@3", // Csus2 Gsus4 G
  AC: "[e4,g4,c5]@5 ~ [e4,g4,c5]@5 ~ [c4,e4,g4]@5 ~ [c4,e4]@2 ~@4, ~@18 g4 ~@5", // C
  AD: "[c4,eb4,g4]@5 ~ [eb4,g4]@2 ~@4 [c4,eb4,g4]@5 ~ [eb4,g4]@2 ~@4, ~@6 c4 ~@11 c4 ~@5", // Cm Eb Cm Eb
  AE: "[bb3,d4,f4]@5 ~ [bb3,f4]@2 ~@4 [bb3,f4]@2 ~@4 [bb3,f4]@2 ~@4, ~@6 d4 ~@5 d4 ~@5 d4 ~@5", // Bb Bb5
  AF: "[bb3,f4,bb4]@5 ~ [bb3,f4,bb4] ~@5 [bb3,f4]@2 ~@4 [bb3,f4]@2 ~@4, ~@12 bb4 ~@5 bb4 ~@5", // Bb5
  AG: "[[bb3,eb4,g4] ~@2 [eb4,g4]@2 bb3 [eb4,g4]@2 ~ [eb4,g4]@2 ~ [eb4,g4] ~@2 [eb4,g4]@2 ~ [eb4,g4]@2 ~@3 bb3, ~@8 bb3@2 ~ bb3@2 ~@4 bb3@2 ~ bb3@2 ~@2, ~@7 [eb4,g4]]/2", // Eb
  AH: "[bb3,d4,f4]@5 ~ [bb3,f4]@2 ~@4 [bb3,d4,f4] ~@5 [bb3,d4,f4] ~@5, ~@6 d4 ~@17", // Bb Bb5 Bb
  AI: "[bb3,f4,bb4]@5 ~ [bb3,f4]@2 ~@4 [bb3,f4]@2 ~@4 [bb3,f4]@2 ~@4, ~@6 bb4 ~@5 bb4 ~@5 bb4 ~@5", // Bb5
  AJ: "[c4,eb4,g4]@5 ~ [c5,g5] ~@5 [c5,g5] ~@5 [c5,g5] ~@5, ~@3 eb5 ~@2 eb5 ~@2 eb5 ~@2", // Cm C5
  AK: "[c5,eb5,g5]@5 ~ [c5,eb5,g5]@2 ~@4 [c5,eb5,g5] ~@5 [c5,eb5,g5]@2 ~@4", // Cm
  AL: "[c5,eb5,g5]@2 ~ [eb5,g5]@2 ~ [eb5,g5]@2 ~ [eb5,g5]@2 c5, ~@10 c5@5 ~ c5@5 ~@3", // Cm Eb
  AM: "[c5,d5,g5]@5 ~ [c5,d5,g5]@2 ~@4 [b4,d5,g5]@2 ~@4 [b4,d5,g5]@3 ~@3", // Csus2 G
  AN: "[d5,g5]@2 c5 [d5,g5]@2 c5 [d5,g5]@2 b4 [d5,g5]@2 b4", // G5
  AO: "[e4,g4,c5]@5 ~ [e4,g4,c5]@5 ~ [e4,g4,c5]@5 ~ [c4,e4]@2 ~@4, ~@18 g4 ~@5", // C
  AP: "[c4,eb4,g4]@5 ~ [c5,g5] ~@5 [c5,g5] ~@5 [eb5,g5]@2 ~@4, ~@6 eb5@2 ~@4 eb5@2 ~@4 c5 ~@5", // Cm C5 Eb
  AQ: "[c5,eb5,g5]@5 ~ [c5,eb5,g5]@2 ~@4 [c5,eb5]@2 ~@4 [c5,eb5,g5]@2 ~@4, ~@12 g5 ~@11", // Cm
  AR: "[bb3,d4,f4]@5 ~ [bb3,f4]@2 ~@4 [bb3,f4]@2 ~@4 [d4,f4] ~@5, ~@6 d4 ~@5 d4 ~@5 bb3@2 ~@4", // Bb Bb5 Dm
  AS: "[bb3,f4,bb4]@5 ~ [bb3,f4,bb4]@2 ~@4 [bb3,f4,bb4] ~@5 [bb3,f4,bb4] ~@5", // Bb5
  AT: "[c4,e4,g4]@5 ~ [c4,g4] ~@5 [c4,e4,g4] ~@5 [c4,e4,g4] ~@5, ~@3 e4 ~@8", // C C5 C
  AU: "[c4,g4,c5]@5 ~ [c4,g4]@2 ~@4 [c4,g4,c5] ~@5 [g4,c5] ~@5, ~@6 c5 ~@11 c4@2 ~@4", // C5
  AV: "[[c4,f4,a4] ~@2 [f4,a4]@2 ~ [f4,a4]@2 ~ [f4,a4]@2 ~ [f4,a4] ~@2 [f4,a4]@2 ~ [f4,a4]@2 ~@3 c4, ~@5 c4@2 ~ c4@2 ~ c4@2 ~@4 c4@2 ~ c4@2 ~@2, ~@7 [f4,a4]]/2", // F
  AW: "[c4,e4,g4]@5 ~ [c4,e4,g4] ~@5 [e4,g4] ~@5 [c4,g4]@2 ~@4, ~@12 c4@2 ~@4 e4 ~@5", // C Em C5
  AX: "[c4,g4,c5]@5 ~ [c4,g4,c5] ~@5 [c4,c5]@2 ~@4 [c4,c5] ~@5, ~@12 g4 ~@5 g4@2 ~@4", // C5 C
  AY: "[c4,f4,a4]@3 ~@3 [f4,a4]@4 ~@2 [f4,a4]@4 c4@2 [f4,a4]@5 ~, ~@5 c4@2 ~@5", // F
  AZ: "[a4,c5]@2 ~ [a4,c5]@2 f4 [a4,c5]@2 f4 [a4,c5]@2 f4, ~ f4 ~@4", BA: "[e4, c5@29 ~@19, g3@9 ~@7]/2",
})).s("gm_piano").gain(0.31).pan(0.6)

// bass · piano · "Piano Bass"
const bass = note(`<
  A B C D@2 E F G H I J D@2 K L M N O P Q R O P Q S B T D@2 K L M U B T D@2 K L M V W X Y Z AA AB AC S B T AD AE AF L M
  AG B T D@2 AH L M AI W X Y Z AA AB AC AJ AK AL AM AN AO AP AQ AR AS@2 ~
>`.pickRestart({
  A: "~@18 g2 ~@5", B: "c3@5 ~ b2@5 ~ a2@5 ~ g2@5 ~", C: "f2@5 ~ d2@4 ~@2 g2@6 g2@4 ~@2",
  D: "[c3@5 ~ b2@5 ~ a2@6 ~@6 c2@20 ~@4, ~@9 g2@13 ~@2]/2", E: "a1@7 ~", F: "ab1@7 ~", G: "g1@5 g1@5 ~@2",
  H: "g1@9 ~ g1@12 ~@2", I: "~@6 b2@5 ~ a2@5 ~ g2@5 ~", J: "f2@6 d2@4 ~@2 g2@5 ~ g2@4 ~@2", K: "a2@7 ~", L: "ab2@7 ~",
  M: "~@10 g1@7 ~@7, g2@11 ~", N: "f2@5 ~ c2@4 ~@2 [f1,f3]@3 ~@9", O: "bb1", P: "d2", Q: "eb2", R: "eb1",
  S: "g1@5 ~ g1@4 ~@2 g1@2 ~@10", T: "f2@3 d2@2 ~ g2@3 g2@2 ~", U: "g2@5 ~ d2@5 ~ g1@3 ~@3 g1@3 ~@3",
  V: "f2@5 ~ c2@5 ~ f3@3 ~@9, ~@12 f1 ~@11", W: "bb1@9 ~ bb1@10 ~@2 bb1@2", X: "d2@9 ~ d2@10 ~@2 d2@2",
  Y: "eb2@9 ~ eb2@5 g1@2 ~ ab1@3 bb1@2 ~", Z: "eb1@6 ~@4 eb2@4 ~@2 g2@2 ab2@3 ~ bb2@2", AA: "bb1@9 ~ bb1@11 ~ bb1@2",
  AB: "d2@9 ~ d2@11 ~ d2@2", AC: "eb2@8 ~@2 eb2@2 ~@4 bb2@2 eb3@3 bb2@2 ~", AD: "c3@5 ~ b2@5 ~ a2@6 g2@6",
  AE: "c2@23 ~", AF: "a1@23 ~", AG: "g2@5 ~ d2@4 ~@2 g1@3 ~@3 g1@3 ~@3", AH: "a2@3 ~ a1@4",
  AI: "f2@5 ~ c2@4 ~@2 f3@3 ~@9, ~@12 f1 ~@11", AJ: "[g1,g2]@5 ~ d2@4 ~@2 g1@2 ~@10", AK: "c2@9 ~ c2@10 ~@2 c2@2",
  AL: "e2@9 ~ e2@10 ~@2 e2@2", AM: "f2@9 ~ f2@5 a1@2 ~ bb1@3 c2@2 ~", AN: "f1@6 ~@4 f2@4 ~@2 a2@2 bb2@3 ~ c3@2",
  AO: "c2@9 ~ c2@11 ~ c2@2", AP: "e2@9 ~ e2@11 ~ e2@2", AQ: "f2@8 ~@2 f2@2 ~@4 c3@2 f3@3 c3@2 ~", AR: "f1", AS: "c2/2",
})).s("gm_piano").gain(0.32).pan(0.6)

// bass · acoustic bass · "Acous Bass"
const bass_2 = note(`<
  A B C D E F G H I J K D E F G L M N O@2 P Q R S T U K D E F G V W X Y D Z AA AB AC AD N O@2 P Q R AE AF U K D E F G V
  W AG Y D E AH AI AJ AD N O@2 P Q R AE AK AL AM@2 AN AO AP AQ AR AS@2 ~
>`.pickRestart({
  A: "~@8 g3 ~@3", B: "~@6 b3@5 ~ a3@5 ~ g3@5 ~", C: "~@6 d3@5 ~@7 g3@3 ~@3", D: "c3@6 b2@5 ~ a2@5 ~@7", E: "c2@5 ~",
  F: "a2@7 ~", G: "ab2@19 ~@5", H: "g2 ~@4 g2@4 g2@2 ~", I: "g2 ~@4 g2@3 ~ g2@2 ~", J: "c3@5 ~ b2@5 ~ a2@5 ~ g2@6",
  K: "~@6 d2@5 ~@7 g2@3 ~@3", L: "g3@3 ~@3 g3@5 ~ g3@6 g3@5 ~", M: "f3 ~@2 f3@3 f2@3 ~@3",
  N: "ab1@9 ~ bb1@5 ~ bb1@2 bb1@3 ~ bb1 ~", O: "[db2@10 d2@6 bb1@2 c2@3 ~ eb2@11 ~ eb2@2 ~@3 g1@2 ~ ab1@3 bb1@2 ~]/2",
  P: "eb1@10 e1@4 ~@2 g1@2 ab1@3 ~ a1@2", Q: "bb1@9 ~ b1@3 ~@3 bb1@2 d2@4 bb1@2", R: "d2@9 ~ d2@2 ~@4 eb2@5 ~ d2@2",
  S: "eb2@9 ~ eb2@2 ~@4 a2@2 eb3@3 bb2 ~@2", T: "d2@6 b1@5 ~ g1@3 ~@9", U: "c3@6 b2@5 ~ a2@5 ~ g2@6",
  V: "gb3@5 g3@4 g3 ~@2", W: "gb3@9 ~ g3@3 ~@6 d3 ~ g2@2 ~, ~@9 g3 ~@2", X: "b2@5 ~ b2@5 ~ a2@5 ~ g2@6",
  Y: "f2@4 ~@2 d2@5 ~ g2@5 ~ g2@3 ~@3", Z: "c3@2 ~@4 c3@2 ~@4 c3@5 ~ c3@6", AA: "a2@2 ~@4 a2@2 ~@4 a2@3 ~@3 a2@6",
  AB: "ab2@2 ~@4 ab2@2 ~@4 ab2@5 ~ ab2@6", AC: "g2 ~@2 g2 ~@2 g2 ~@2 g2@3", AD: "e3@3 ~ d3@2 c3@3 ~ a2@2 f2@3 ~@9",
  AE: "eb2@9 ~ eb2@2 ~@4 a2@2 eb3@3 bb2@2 ~", AF: "d2@6 b1@5 ~ g1@2 ~@10", AG: "b2@5 ~ b2@5 ~ a2@5 ~ g2@5 ~",
  AH: "a1@2 ~@4 a1@5 ~ a1@2 ~@4 a1@5 ~", AI: "ab1@2 ~@4 ab1@5 ~ ab1@2 ~@4 ab1@5 ~", AJ: "g1@3 ~@3 g1@4 ~@2 g1@6 g1@5 ~",
  AK: "d2@3 b1@3 g1 ~@5", AL: "bb1@9 ~ c2@5 ~ c2@2 c2@3 ~ c2 ~",
  AM: "[eb2@10 e2@6 c2@2 d2@3 ~ f2@11 ~ f1@2 ~@3 a1@2 ~ bb1@3 c2@2 ~]/2", AN: "f1@10 gb1@4 ~@2 a1@2 bb1@3 ~ b1@2",
  AO: "c2@9 ~ db2@3 ~@3 c2@2 e2@3 ~ c2@2", AP: "e2@9 ~ e1@2 ~@4 f2@5 ~ f1@2", AQ: "e2@6 f2@5 ~ f2@5 ~ a2@6",
  AR: "c3@6 f2@6 b2 c3@2 c3@2 ~ f2@6", AS: "c2/2",
})).s("gm_acoustic_bass").gain(0.41)

// bass · acoustic bass · "Acous Bass" · soft notes
const bass_soft = note("<A@2 B C ~@3 D E ~ F C ~@8 G ~@5 F C ~@4 H ~ I C ~@14 F C ~@4 H ~ I C ~@24>".pickRestart({
  A: "[~@18 c4@3 c4@7 ~@20]/2", B: "f3@4 ~@8 g3@5 ~@5 b2@2", C: "~@9 g2@2 ~", D: "~@22 d2 ~", E: "~@16 d2 ~@5 d2@2",
  F: "f2@4 ~@8 g2@5 ~@5 b2@2", G: "~@15 bb0 ~@8", H: "~@8 d3 ~@3", I: "~@11 b2",
})).s("gm_acoustic_bass").gain(0.27)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@80 [~@11 x] ~@3>").gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@23 A ~@23 A ~@23 B ~@3>".pickRestart({
  A: "~@11 x", B: "~@5 x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@5 A@2 B@2 ~@4 A@2 B ~@13 A@2 B ~@5 A@2 B ~@13 A@2 ~@5 A@3 ~@21>".pickRestart({
  A: "~ x ~@2", B: "~ x ~ x",
})).gain(0.25)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@23 B ~@23 B ~@23 A ~@3>".pickRestart({
// … 26 more lines

More by The Beatles