Strudelify

Photograph

Ringo Starr

KeyG majorTempo126 bpm
0:00/0:00
// Photograph — Ringo Starr
// 126 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 · electric bass finger · "BASS"
const bass = note(`<
  ~ A B C D E@2 A F B G B H A@2 E@2 B@2 H@2 I@2 J@2 I@2 K L A@3 F B@3 G A@4 B G B@2 I@2 J@2 I@2 K M A E A@2 B@4 A E A@2
  B H B H@3 B N O ~
>`.pickRestart({
  A: "c2@13 ~ c2 ~", B: "g2@13 ~ g2 ~", C: "c2@13 ~ c2@2", D: "g2@5 d3 g3 d3", E: "c2", F: "c2@14 g1 ~",
  G: "g2@14 d2 ~", H: "g2", I: "e2@5 ~ e2 ~ e2@5 ~ e2 ~", J: "a1@5 ~ a1 ~ a1@5 ~ a1 ~", K: "a1@5 ~ a1@2 a1@6 a1@2",
  L: "g2@5 ~ g2@2 g2@6 g2@2", M: "g2@5 ~ g2 ~ g2@5 ~ g2@2", N: "g2@5 ~ g2 ~ g2@5 ~ g2 ~", O: "g2@7 ~",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · piano
const piano = note(`<
  ~ A B C B D@4 E@2 F@2 G@2 H@2 I@2 E@2 J@2 K@2 L@2 M N H@2 G@2 E@2 I@2 G@2 O@2 F@2 E@2 L@2 P@2 J@2 M Q R@4 I@4 H@2 D@2
  E@2 I@2 E@2 N S T ~
>`.pickRestart({
  A: "e4@6 d4@9 ~, [c3,c4,g4]@15 ~", B: "b3@6 a3@9 ~, [g2,g3,d4]@15 ~", C: "d4@5 ~ e4@9 ~, [c3,c4,g4]",
  D: "[~@6 g3@2 d4@4 g3@2 ~@8 g3 ~ c4@3 c4@2 a3 c4@2, ~ c3@30 ~, ~ g4@3, ~@8 c4@14 ~ a3@5 ~@4, ~@7 e4@5 ~@4]/2",
  E: "[~@14 d3@7 ~@7 a3@2 g3@2, g2, ~@3 d3 a3@7 b3@2 d3@3, ~ d4@3, ~@2 g3@5 ~]/2",
  F: "[d3 ~@13 d3@7 ~ d3@2 [g3,a3,d4]@2 ~@2 [g3,a3,d4]@2 ~@2, g2@31 ~, ~@6 [g3,a3,d4]@17 ~@3 d3@5 ~]/2", // Gsus2
  G: "[~@6 [c4,d4,g4] ~ d4@5 ~ e4@8 ~@4 d4@2 c4@2 g3@2, c3, ~@8 g4@23 ~, ~@8 c4@14 g3@7 ~@3]/2", // Csus2
  H: "[~@14 g3@7 ~@7 d4@2 c4@2, c3, ~@3 g3 d4@7 e4@2 g3@3, ~ g4@3, ~@2 c4@5 ~]/2",
  I: "[~@6 [g3,a3,d4] ~ a3@5 ~ b3@8 ~@4 a3@2 g3@2 d3@2, g2, ~@8 d4@23 ~, ~@8 g3@14 d3@7 ~@3]/2", // Gsus2
  J: "[~@6 [e4,f#4,b4] ~ [e4,f#4,b4]@5 ~ [e4,g#4,b4] ~ [e4,g#4,b4]@5 ~ [e4,f#4,b4] ~@7 [e4,f#4,b4] ~, e3, ~ b3@6 b3, ~@12 [e4,f#4,b4]@3 ~]/2", // Esus2 E Esus2
  K: "[~@14 e3@7 ~@7 b3@2 a3@2, a2, ~@3 e3 b3@7 c4@2 e3@3, ~ e4@3, ~@2 a3@5 ~]/2",
  L: "[b3 ~@13 b3@7 ~ b3@2 [e4,f#4,b4]@2 ~@2 [e4,f#4,b4]@2 ~@2, e3@31 ~, ~@6 [e4,f#4,b4]@17 ~@3 b3@5 ~]/2", // Esus2
  M: "[c4,e4,a4]@6 [b3,e4,a4]@9 ~, a2", N: "a3@5 ~ b3@9 ~, [g2,g3,d4]",
  O: "[~@6 [c4,d4,g4] ~ [c4,d4,g4]@5 ~ [c4,e4,g4] ~ [c4,e4,g4]@5 ~ [c4,d4,g4] ~@7 [c4,d4,g4] ~, c3, ~ g3@6 g3, ~@12 [c4,d4,g4]@3 ~]/2", // Csus2 C Csus2
  P: "[~@6 [a3,b3,e4] ~ [a3,b3,e4]@5 ~ [a3,c4,e4] ~ [a3,c4,e4]@5 ~ [a3,b3,e4] ~@7 [a3,b3,e4] ~, a2, ~ e3@6 e3, ~@12 [a3,b3,e4]@3 ~]/2", // Asus2 Am Asus2
  Q: "[b3,d4,g4]@6 [a3,d4,g4]@9 ~, g2", // G Dsus4
  R: "[g3 ~@13 g3@7 ~ g3@2 [c4,d4,g4]@2 ~@2 [c4,d4,g4]@2 ~@2, c3@31 ~, ~@6 [c4,d4,g4]@17 ~@3 g3@5 ~]/2", // Csus2
  S: "[g3,b3,d4]@5 ~ [g3,b3,d4] ~ [g3,b3,d4]@5 ~ g2 ~, g2@13 ~@3", T: "[g2,g3,b3,d4]",
})).s("gm_piano").gain(0.42)

// chords · electric guitar clean · "GUITAR"
const electric_guitar_clean = note(`<
  ~ A B C D E@2 F@2 G@2 H@2 I@2 J@2 K@2 L@2 M@2 N@2 O@2 P Q E@2 R@2 K@2 S@2 T@2 J@2 U@2 S@2 M@2 V@2 W@2 X Y I@2 J@2 Z@2
  AA@2 R@2 AB@2 H@2 AA@4 AC AD AE ~
>`.pickRestart({
  A: "d4 ~@5 g4@2, c3, ~@2 g4@7 ~ g3@6, ~@3 d4@3 ~@2", B: "~@3 a3 b3 a3 g3 d3, ~ g2@7, ~@3 d3@10 ~@3, ~@4 g3@7 ~@5",
  C: "~@6 d4@3 ~ e4@5 ~, c3@15 ~, e4@4 c4@11 ~, ~@2 g3@13 ~",
  D: "~@6 g3 ~, g2@7 ~, b3@4 g3@7 ~@5, ~ d3@3 ~ d3@2 ~, ~@6 b3@9 ~",
  E: "[c3 ~@4 g3 ~@8 c3@2, e4@6 d4@7 ~ e4@8 d4@9 ~, ~@2 g3@6 ~@10 g3@4 ~@4 g3@5 ~, ~@4 c3@6 ~@2 c3@7 ~ c3@6 ~@6]/2",
  F: "[~@14 g3 c4, c3@9 ~ c3@7 ~ c3@7 ~ c3@4 ~@2, ~@2 g3@9 ~ g3@7 ~ g3@7 ~@5, ~@4 c4@9 ~ d4@7 ~@11, ~@3 g4@8 g4@4 ~]/2",
  G: "[~@2 g3 a3 ~ a3 ~ d3 ~@6 a3 g3, ~@2 g2@12 ~@2 g2@13 ~@3, ~@3 d3@9 g3@6 d3@6 ~@2 d3@5 ~, ~@4 d4@7 b3@3 ~@2, ~@20 g3@9 ~@3]/2",
  H: "[g2 ~@12 g2 ~ a3, a3@3 b3@4 a3@4 b3@4 ~, ~@2 d3@9 ~ d3@7 ~ d3@7 ~ d3@4, ~@4 g2@5 ~ g2@7 ~ g2@7 ~@7]/2",
  I: "[c3 ~@12 c3 ~ d4, d4@3 e4@4 d4@4 e4@4 ~, ~@2 g3@9 ~ g3@7 ~ g3@7 ~ g3@4, ~@4 c3@5 ~ c3@7 ~ c3@7 ~@7]/2",
  J: "[~@20 d4@2 e4@4 d4@2 g3@2 d4 ~, ~@2 c3@11 ~ c3@18, ~@4 g3@13 ~ g3@9 ~@5, ~@3 d4@6 ~@7]/2",
  K: "[~@12 g3@2 ~@8 a3@4 b3@2 a3@2 g3 ~, b3@4 g3@5 ~@11 g3@7 ~@5, ~@2 g2@12 ~@2 g2@15 ~, ~@3 d3@6 ~ d3@6 ~@2 d3@6 ~@8, ~@3 a3@3 ~ a3@3 ~@6]/2",
  L: "[~@15 a3, ~@2 g2@7 ~ g2@7 ~ g2@7 ~ g2@4 ~@2, ~@4 d3@7 ~ d3@7 ~ d3@7 ~ d3@4, ~@3 b3@4 a3@4 b3@4 ~]/2",
  M: "[~@14 b4 ~, ~ e3@14 ~, ~@7 g#4@7 ~@2, ~@13 e4@2 ~]/2", N: "[~@14 e4 ~, ~ a2@14 ~, ~@7 c4@7 ~@2, ~@13 a3@2 ~]/2",
  O: "[~@3 f#4@2 ~@8 e4 f#4 ~, e3@15 ~, g#4@3 ~@2 b4@9 ~@2, ~ b3@14 ~, ~@2 e4@5 e5@7 ~@2]/2",
  P: "c4@4 ~@2 c4@9 ~, ~@4 e3@11 ~", Q: "~@6 g4@4 b4@2 g4@3 ~, g2@15 ~, ~@2 b3@13 ~",
  R: "[~@15 d4, ~@2 c3@7 ~ c3@7 ~ c3@7 ~ c3@4 ~@2, ~@4 g3@7 ~ g3@7 ~ g3@7 ~ g3@4, ~@3 e4@4 d4@4 e4@4 ~]/2",
  S: "[g2 ~@4 d3 ~@8 g2@2, b3@6 a3@7 ~ b3@8 a3@9 ~, ~@2 d3@6 ~@10 d3@4 ~@4 d3@5 ~, ~@4 g2@6 ~@2 g2@7 ~ g2@6 ~@6]/2",
  T: "[~@2 c4 d4 ~ d4 ~ g3 ~@6 d4 c4, ~@2 c3@12 ~@2 c3@13 ~@3, ~@3 g3@9 c4@6 g3@6 ~@2 g3@5 ~, ~@4 g4@7 e4@3 ~@2, ~@20 c4@9 ~@3]/2",
  U: "[~@14 b3@7 ~ d3 ~ g3@2 ~ g3@3 g3 ~, g2@9 ~ g2@17 ~@5, ~@2 d3@9 ~ d3@8 ~@12, ~@2 a3@5 ~@9]/2", V: "[~ a2@15]/2",
  W: "[~@3 f#4@6 ~@7, ~ e3@15, ~ b3@7]/2", X: "~@3 c4@4 ~, a2@15 ~, ~@2 e3@13 ~, ~@2 a3@5 ~",
  Y: "g4@4 ~@2 g4@9 ~, ~@4 b3@11 ~",
  Z: "[~@20 a3@2 b3@4 a3@2 d3@2 a3 ~, ~@2 g2@11 ~ g2@18, ~@4 d3@13 ~ d3@9 ~@5, ~@3 a3@6 ~@7]/2",
  AA: "[~@14 d3 g3, g2@9 ~ g2@7 ~ g2@7 ~ g2@4 ~@2, ~@2 d3@9 ~ d3@7 ~ d3@7 ~@5, ~@4 g3@9 ~ a3@7 ~@11, ~@3 d4@8 d4@4 ~]/2",
  AB: "[~@12 c4@2 ~@8 d4@4 e4@2 d4@2 c4 ~, e4@4 c4@5 ~@11 c4@7 ~@5, ~@2 c3@12 ~@2 c3@15 ~, ~@3 g3@6 ~ g3@6 ~@2 g3@6 ~@8, ~@3 d4@3 ~ d4@3 ~@6]/2",
  AC: "~@6 a3@3 ~ b3@5 ~, g2@15 ~, b3@4 g3@11 ~, ~@2 d3@13 ~", AD: "~@4 [g3,b3,d4] ~@7 [g3,b3,d4] ~@3",
  AE: "[g3,b3,d4]@13 ~@3", // G
})).s("gm_electric_guitar_clean").gain(0.19)

// chords · electric guitar clean · "GUITAR" · soft notes
const electric_guitar_clean_2 = note(`<
  ~ A ~@7 B ~@11 C@2 D@2 ~@2 E F ~@8 G ~@4 H ~@2 C@2 I@2 ~ J ~ K ~@22
>`.pickRestart({
  A: "~ c4@3", B: "~@8 g3 ~@7", C: "[~@4 e4@21 ~@7, ~@3 b3@27 ~@2]/2", D: "[~@4 a3@21 ~@7, ~@3 e3@27 ~@2]/2",
  E: "~@6 a3@9 ~, e4@3 ~@5, a3 ~@3, ~@2 a2@13 ~", F: "~@4 d4@11 ~", G: "~@8 c4 ~@7", H: "~@7 e3 ~@8",
  I: "[~@4 a3@21 ~@5 c4 ~, ~@4 c4@25 ~@3, ~@13 a3@3]/2", J: "~@2 g#4@13 ~",
  K: "~@6 d4@9 ~, b4@3 ~@5, d4 ~@3, ~@2 g2@13 ~",
})).s("gm_electric_guitar_clean").gain(0.13)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A@4 B C@7 D@3 E@5 F@3 G@2 H@4 I J@7 K@3 L@4 M@5 N O P Q@3 R S T@3 U@4 V W@7 X ~@2
>`.pickRestart({
  A: "[~@15 d4@6 ~ d4 ~@3 e4@3 ~ f4@8 ~@10 d3@8 [d3,d4]@2 ~ [e3,e4]@3 [f3,f4]@2, ~@15 d3@9 d4@2 ~@12 d4@14 ~@12, ~@25 d3@23 ~@16]/4", // D E F
  B: "~@2 [g3,g4]@3 ~ [a3,a4]@3 ~ b4@6, ~@10 b3@3 ~@3", // G A
  C: "[~@63 g2@8 ~ [d3,d4]@2 [e3,e4]@3 ~ [f3,f4]@7 ~ d3@6 d3@3 ~ d3@7 ~ [d3,d4]@2 [e3,e4]@3 ~ [f3,f4]@2, [c3,e4]@16 c3@15 b3@5 ~@20, ~@14 c4@16 c4@13 ~@9 g3@12 ~@48, ~@9 g4@7 ~@6 e4@5 e4@5 ~@11 d4@9 ~@4, ~@22 c5@10 ~@15 g4@11 c4@6 ~@48]/7", // D E F D E F C
  D: "[~@9 [b3,b4]@6 ~@31 g4@2, ~@2 [g3,g4]@13 e4@21 g3@12, ~@5 [a3,a4]@10 c3@27 e4@6, ~@22 c4@8 c4 c5@16 ~, ~@13 g4@6 c4@5]/3", // B G A
  E: "[c4@12 ~@14 e4@4 ~ g2@8 ~ [d3,d4]@2 [e3,e4]@4 [f3,f4]@7 ~@7 a3@4 ~@4 d4 d4@2 ~ [d3,d4]@2 [e3,e4]@2 ~ [f3,f4]@3, c3@32 ~@22 d3@10 d3@7 ~@9, g4@8 e4@5 ~@2 b3@5 ~@20, ~@12 c4@10 c4@9 ~@23 d4@14 ~@12]/5", // D E F D E F
  F: "[~ [g3,g4]@4 ~@4 [b3,b4]@6 ~@9 e4@6 ~@16 c4@2, ~@5 [a3,a4]@10 e3@15 [e3,e5]@17 ~, ~@15 g#4@13 ~@10 e4@10, ~@10 b3@5 ~@2 b3@7, ~@7 g#4]/3", // G B A E
  G: "[~@16 e3@2 [e3,e4] ~ [e3,e4]@2 d3@2 ~@2 c4@2 c4@4, a2@19 ~@7 c3@6, c4@12 c4@7 ~@3 d4 ~@9, ~ e3@3 ~@2 [d3,d4]@2, ~@8 a3@6 a3@5 ~@13]/2", // E D
  H: "[~@6 e4@4 ~@3 e4@2 ~@14 c4@2 ~ d4 ~@5 a3@3 [a3,e4]@5 b3 ~@7 g3@10, e3@16 e3@16 ~@3 e3@12 ~@17, e4@3 ~@2 b4@3 ~@3 e4@5 ~@16, ~@3 b3@7 e4@3 ~@2 e5@11 g#4@6 ~@32, ~@11 b3@4 ~@4 b3@12 [a2,c4]@16 [g2,b3]@17]/4", // A5 Am G
  I: "f4 ~@4 g4@3, e4 ~@3 g3@12, ~@3 c4@4 ~",
  J: "[~@42 b3@4 ~ g2@9 [d3,d4]@2 [e3,e4]@3 ~ [f3,f4]@8 [d3,d4]@18 [d3,d4]@2 [e3,e4]@3 ~ [f3,f4]@4 g4@3 ~@4 [b3,a4,b4]@6 ~, c5@15 ~@11 e4@4 g4@17 ~@54 a4@4 ~@7, ~@4 g3@12 ~@3 g3@19 c4@8 b3@10 ~@42 g3@14, ~@6 c4@7 c4@8 ~ c4@13 e4@12 ~@55 [a3,g4]@10, ~@10 e4@5 [c3,c5]@31 ~@66]/7", // D E F D E F B7 A7 …
  K: "[g4@5 ~@13 g3@6, [c3,e4]@15 [c3,c5]@16 [c3,c5]@17, c4@6 ~@4 g4@6 ~@4 g3@11 ~@17, ~@14 c4@8 c4@7 c4@10 ~@9, ~@13 g4@3 ~@8]/3", // C
  L: "[~@14 b3 ~ g2@7 ~@3 [e3,e4]@4 [f3,f4]@8 [d3,d4]@18 [d3,d4]@2 [e3,e4]@3 ~ [f3,f4]@2, [c3,g4]@15 b3@8 ~@41, ~@4 g3@12 ~@7 [d3,d4]@6 ~@35, ~@3 c4@5 ~@24, ~@5 e4@3 ~@24]/4", // E F D E F C5 D
  M: "[~@9 [b3,b4]@5 e4 ~@9 e4@4 ~@17 c4@2 ~@8 a3@5 ~@8 [d5,e5]@2 ~ c5 [c4,d4] c5 ~@2 [c4,c5,d5]@2 [c4,c5,d5]@2, ~@2 [g3,g4]@13 b4@26 g#4@6 c4@12 ~ c4@6 d5 b3@6 ~@7, ~@6 [a3,a4]@9 e3@14 ~ [e3,e5]@18 ~@4 e3@21 ~@7, ~@15 g#4@12 ~@11 e4@10 ~@14 a3@11 ~@7, ~@20 b3@13 b3@14 a2@23 [e4,d5,e5]@3 d4@6 ~]/5", // B Dsus2 Csus2 G A E E7
  N: "[b3,c5]@4 ~@8 e4 ~ [e4,f4]@2, c4 ~@3 [c4,c5]@12", O: "~@7 c4, e3, g#4@5 g#4@3, e4@3 [e4,b4]@5, ~@3 b3@13",
  P: "g2 ~@11 c4@4, a2, c4@3 ~, ~ e3@3, ~ [a3,e4]", // A5
  Q: "[~@5 d4@5 ~@13 c4, [g2,b3]@20 ~@9 g4@18 ~, ~@3 d3@16 ~@3 g3@14 ~@2 c4@8 ~@2, ~@3 g3@7 e4@11 e4@3, ~@31 c5@17]/3", // G
  R: "~@13 g4@2 ~, c3, g4@7 ~@3 e4@6, ~ g3@3", S: "~@11 c4@5, [c3,g4], c4@3 e4@5, ~ g3@3",
  T: "[~@5 d4@2 ~ [d3,d4]@2 [e3,e4]@3 ~ [f3,f4]@8 d4@15 ~ d4@2 [d3,d4]@2 [e3,e4]@3 [f3,f4]@3, [g2,b3]@8 ~@2 f3 ~@11 d3@18 ~@8]/3", // D E F D E F G
  U: "[~@9 [b3,b4]@5 e4 ~@30 e4@2 [c3,g4]@17, ~ [g3,g4]@14 c3@17 ~@4 c5@12 ~@16, ~@5 [a3,a4]@10 e4@30 ~@19, ~@28 g4@14 g4@5 ~@17, ~@38 c4@9 c4@9 ~@8]/4", // B C5 G A
  V: "~ g3@3, [c3,c5], c4 ~", // C
  W: "[[g2,b3]@8 d4@2 [e3,e4]@3 ~ [f3,f4]@7 ~ [d3,d4]@18 [d3,d4]@2 [e3,e4]@3 ~ [f3,f4]@4 ~@8 [b3,b4]@4 ~@6 d4@4 [d3,d4]@2 [e3,e4]@3 ~ [f3,f4]@8 [d3,d4]@18 [d3,d4]@2 ~ [e3,e4]@3 [f3,f4]@2, ~@8 d3 ~@41 [g3,g4]@12 d4@6 ~@44, ~@54 [a3,a4]@9 ~ d3@8 ~@40]/7", // G E F D E F B D …
  X: "~ [g3,g4] ~ [a3,a4] ~ [b3,b4] ~@2", // G A B
})).s("gm_string_ensemble_1").gain(0.46)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note(`<
  ~@2 A B ~ C@2 D@2 ~@4 E@2 F G ~@4 H ~@3 I@2 ~ J K@2 ~@6 L ~ M@2 ~@3 N@3 ~@5 O@3 P Q ~@4 R@2 S T ~@8 U ~
>`.pickRestart({
  A: "~@3 a3", B: "~@5 d4 d4@2 ~@8", C: "[~@5 g3@8 g3@3]/2", D: "[~@11 c4@14 ~@7, ~ g3@4 ~@3, ~@8 g4@7 ~@17]/2",
  E: "[~ g3@4 ~@3]/2", F: "~@5 g3@3", G: "~ g3@3", H: "~@12 g#4@2 e4 ~", I: "[~@15 e4@6 ~@11]/2", J: "~ d3@3",
  K: "[~@16 c3@15 ~, c3 ~, ~@7 c4@4 ~@5]/2", L: "~@6 c4@7 ~@3, ~ g3@3", M: "[~@12 e4@5 ~@15, ~@4 c4@7 ~@5]/2",
  N: "[~@14 g#4 e4@8 ~@5 e4@10 ~@10, ~@27 g#4@14 ~@7]/3",
  O: "[~@14 c4@6 d3 ~@15 g3@12, ~@20 c3@11 c3@16 ~, ~@13 c4@6 ~@5]/3", P: "c4", Q: "~@6 c4@5 ~@5",
  R: "[~@17 c3@14 ~, ~@5 g3@27]/2", S: "~@8 c4@3 c4@4 ~", T: "~ c4", U: "[c3,c4,e4]",
})).s("gm_string_ensemble_1").gain(0.26)

// other · timpani
const timpani = note(`<
  A B A B C D C E F G H I J D C D K I L I ~@10 C D M I H I N D O D P I L Q ~@8 J D R D L I L I R D R D L I L I R D L I
  ~@3
>`.pickRestart({
  A: "~@14 g2!2", B: "d2 ~@15", C: "~@12 g1@3 ~", D: "c2 ~@15", E: "c2 ~@7", F: "~@7 c2@8 ~", G: "g2 ~@3", H: "~@7 c2",
  I: "g2 ~@15", J: "~@7 g1", K: "~@12 d2@3 ~", L: "~@14 d2 ~", M: "~@6 c2 ~", N: "~@13 g1 ~@2", O: "~@12 g1 ~@3",
  P: "~@12 d2 ~@3", Q: "[f2,g2] ~@15", R: "~@14 g1 ~",
})).s("gm_timpani").gain(0.51)

// other · tremolo strings
const tremolo_strings = note(`<
  ~ A@2 B C@5 D@2 E F@2 G@3 H@2 I J@3 ~ K L ~ M N@5 O@3 P@5 Q@3 R@4 S@2 ~ T@2 ~@4 U@3 V@5 W@3 X@3 Y Z ~@2
>`.pickRestart({
  A: "[[d3,d5]@6 ~@2 [d3,d5]@2 [e3,e5]@3 ~ [f3,f5]@7 ~ [d3,d5]@10]/2", B: "~@8 [d3,d5]@2 ~ [e3,e5]@3 [f3,f5]@2",
  C: "[~@2 [g3,g5]@3 ~ [a3,a5]@2 ~@2 [b3,b5]@3 ~@11 e5@7 g5@12 e5@4 ~@17 g5@8 e5@4 c5 ~@3, ~@15 c3@31 ~ c3@28 ~@5, ~@47 c5@25 ~@8, ~@30 g3@9 ~]/5", // G A B
  D: "[g3@7 ~ [d3,d5]@2 [e3,e5]@4 [f3,f5]@7 ~ [d3,d5]@10, g5@5 ~@27]/2", E: "~@8 [d3,d5]@2 [e3,e5]@2 ~ [f3,f5]@3",
  F: "[~ [g3,g5]@3 ~ [a3,a5]@3 ~ [b3,b5]@3 ~@3 f5 ~ e5@11 g5@3 ~, ~@15 c3@13 ~@4]/2", // G A B
  G: "[c6@7 e5@8 ~@16 e5@13 ~@4, ~@15 c5@17 ~@16, ~@16 c3@23 ~@9]/3",
  H: "[~@7 d3 d5@2 [e3,e5]@3 ~ [f3,f5]@7 [d3,d5]@11]/2", I: "~@4 d5 [e3,e5] ~ [f3,f5], ~@8 d3 ~@7",
  J: "[~@2 [g3,g5]@3 [a3,a5]@3 ~@2 b5@3 ~@10 g#4@4 ~@5 g#5@7 e5@8 ~, ~@10 b3 ~@4 e3@31 ~@2, ~@19 e4@8 ~@21]/3", // G A
  K: "~@2 [e3,e5] ~ e5@2 [d3,d5] ~ [d3,d5] ~ [c3,c5] ~ [c3,c5]@2 c5 ~, ~@4 e3 ~@11", L: "[b2,b4]@5 ~@3, a4 ~@15",
  M: "~@7 d3@5 ~@4",
  N: "[a3 ~@9 b4@5 b2 ~@11 e5@4 g5@12 e5@4 c3@12 e5@4 g5@12 ~@5, g3@14 ~ c3@16 ~@49, ~@4 d4@10 ~@5 g3@12 ~@49, ~@6 g4@10 ~@8 c5@8 ~@15 c5@16 ~@17]/5",
  O: "[~@8 [d3,d5]@2 [e3,e5]@3 ~ [f3,f5]@8 [d3,d5]@17 [d3,d5]@3 [e3,e5]@3 [f3,f5]@3]/3", // D E F D E F
  P: "[~ [g3,g5]@4 [a3,a5]@4 [b3,b5]@5 ~@10 e4@6 ~@2 e5@14 ~ c6@14 ~@2 e5@13 ~@4, ~@15 c3@47 ~ c3@7 ~@10]/5", // G A B
  Q: "[~@7 [d3,d5]@2 ~ [e3,e5]@3 ~ [f3,f5]@8 [d3,d5]@12 ~@6 [d3,d5]@2 [e3,e5]@3 ~ [f3,f5]@2]/3", // D E F D E F
  R: "[~ [g3,g5]@3 ~ [a3,a5]@2 ~@2 [b3,b5] ~@18 g#5@4 b5@13 ~@2 a5@10 ~@7, ~@15 e3@26 ~@23]/4", // G A B
  S: "[~ e3 e5 [e3,e5] ~ [d3,d5] ~ d3@2 [c3,c5] ~ [c3,c5] ~ [c3,c5] ~ [b2,b4]@9 ~@8, ~@7 d5 ~@24]/2", // E D C B
  T: "[~@7 a4@8 b4@13 ~@4, a3@11 ~@4 g3@10 ~@7, ~ e4@3 ~@4]/2",
  U: "[~@8 [d3,d5]@2 [e3,e5]@3 ~ [f3,f5]@7 ~ [d3,d5]@17 ~ [d3,d5]@2 [e3,e5]@3 ~ [f3,f5]@2]/3", // D E F D E F
  V: "[~@2 [g3,g5]@3 [a3,a5]@3 ~ [b3,b5]@3 ~@12 c5@8 e5@15 ~ c6@32, ~@15 c3@58 ~@7]/5", // G A B
  W: "[~@8 d5@2 [e3,e5]@3 ~ [f3,f5]@7 ~ d3@16 ~@2 d3@2 [e3,e5]@3 ~ [f3,f5]@2, ~@8 d3 ~@12 d5@17 ~ d5@3 ~@6]/3", // E F E F
  X: "[~@2 [g3,g5]@3 ~ [a3,a5]@3 ~ a3@2 ~@3 c3@6 ~@3 d3@2 f3@3 ~ g3@7 d3@9 ~@2, ~@10 b5 ~@37]/3", // G A
  Y: "~@8 d5@2 [e3,e5]@3 ~ [f3,f5]@2, ~@8 d3 ~@7", Z: "~ [g3,g5] ~ [a3,a5] ~ [b3,b5]@2 ~",
})).s("gm_tremolo_strings").gain(0.46)

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

// drums · rim
const rim = s("rim").struct("<~ A@3 ~ A@7 ~ A@7 ~@9 A@7 ~ A@7 ~@9 A@7 ~ A@7 ~ A@3 ~@3>".pickRestart({
  A: "~ x ~ x",
})).gain(0.39)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@28 [~ x!2 ~ x!2 ~@2] ~@39 [~ x!2 ~ x!2 ~@2] ~@6>").gain(0.21)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!72 ~@2>").gain(0.26)

// drums · low tom
const low_tom = s("lt").struct("<~@12 A ~@7 A ~@15 A ~@15 A ~@19 B ~@2>".pickRestart({
  A: "~@5 x!2 ~", B: "~@5 x ~@2",
})).gain(0.3)

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

// drums · hihat · soft notes
// … 48 more lines

More by Ringo Starr