Strudelify

Nothing Rhymed

Gilbert O'Sullivan

KeyE♭ majorTempo91 bpm
0:00/0:00
// Nothing Rhymed — Gilbert O'Sullivan
// 91 bpm, 6/8, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(91/3)

// 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 · piano · "MIDI"
const piano = note(`<
  A B C D@8 E@2 F@2 G H I J K@2 L@2 M@2 N O P Q R S@8 E@2 F@2 G H I J K@2 T U V W X Y Z@2 AA H I J K@2 AB AC@3 AD@6 AE
  AF@2 AA H I J K@2 T U V W X Y AG AH AI AJ AK AL AM@3
>`.pickRestart({
  A: "[g3,bb3,c4,eb4]!2, c2", B: "[g3,d4,f4]@3 ~@2 b2, b2@5 ~, ~ [g3,d4,f4]",
  C: "[g3,c4,eb4]@6 [g3,c4,eb4]@4 bb2 ~, bb2@5 ~", // Cm
  D: "[[ab2,eb3,ab3,c4]@12 bb3@12 ~@28 bb3@4 g3@4 [c4,eb4]@11 ~ g3@4 ~@4 g3@4 [g3,d4,f4]@11 ~ g3@3 ~ g3@4 b2@3 ~@9 g3@3 ~ g3@4 g3@4 bb2@4 ab3@7 ~ ab3@3 ~ ab3@3 ~ ab3@4 ab2@4 f3@6 ~@2 f3@4 f3@3 ~@17 f3 ~@3, ~@12 [eb2,g3]@28 bb4@4 g4@4 eb4@10 ~@14 [c4,eb4]@11 ~@13 f4@12 ~@4 bb2@15 ~@5 ab2@18 ~@6 bb2@18 ~@2 bb2@16, ~@6 eb4@10 g5@13 ~@67, ~@12 eb3@16 eb3@30 ~@2 c3@15 ~ c3@7 ~ b2@17 ~@7 g3@7 ~@57 f3@7 ~@13, ~@24 bb3@12 eb5@22 ~@38 d4@9 ~@3 [c4,eb4]@11 ~ [c4,eb4]@9 ~@3 [c4,eb4]@11 ~ [c4,eb4]@10 ~@2 [bb3,d4]@11 ~ [bb3,d4]@11 ~ [bb3,d4]@11 ~]/8", // Ab Cm G7 Eb Cm Bb
  E: "[[eb3,g3,bb3,eb4]@11 ~ ab3@7 ~ ab3@3 ~ ab3@7 ~ ab3@2 ~@2 [db2,ab3,db4,f4]@11 ~, ~@6 f2@11 ~@7, ~@12 [c4,f4]@11 ~ [c4,f4]@11 ~@13]/2", // Eb Db F5
  F: "[bb3@3 ~@8 [g3,eb4], eb2@47 ~, eb4@10 g4@13 ~, g3@4 g3@3 bb3@2 eb4 bb3@2, ~@3 bb3@3 eb4@2 g3@3 ~]/2", // Cm
  G: "[g3,c4]@11 ~ g3@4 ~@4 g3@4, c3@15 ~ c3@7 ~, ~@12 [c4,eb4]@11 ~", // C5 Cm
  H: "[g3,d4,f4]@11 ~ g3@3 ~ g3@4 b2@3 ~, b2@17 ~@7, ~ f4, ~@4 d4@3 ~", // G7
  I: "~@8 g3@3 ~ g3@4 g3@4 bb2@4, [c4,eb4]@11 ~ [c4,eb4]@9 ~@3, g3@7 ~@17, ~@4 bb2@15 ~@5", // Cm
  J: "ab3@7 ~ ab3@3 ~ ab3@3 ~ ab3@4 ab2@4, ab2@3 ~, [c4,eb4]@11 ~ [c4,eb4]@10 ~@2", // Cm
  K: "[f3@6 ~@2 f3@4 f3@3 ~@17 f3 ~@3 [eb3,g3,bb3,eb4]@11 ~, bb2@16 f3@7 ~@25, [bb3,d4]@11 ~ [bb3,d4]@11 ~ [bb3,d4]@11 ~@13, ~@5 bb2@4 ~@3]/2", // Eb Bb
  L: "[[ab3,c4,f4]@4 ab3@3 ~ c4@2 ~@2 f4@2 ~@10 ab3@4 ab3@4 [bb2,f3,d4]@4 g3@6 ~@2 g3@3 ~, f2@24 [ab2,eb4]@9 ~@3 [eb2,eb4]@11 ~, ~@8 eb4@4 ~@4 bb3@7 ~, ~@20 c4@13 ~@15]/2", // Fm Bb Ab5 Eb
  M: "[f3@8 f3@4 ~@24 [f3,ab3,db4]@11 ~, bb1@20 bb1@12 bb1@15 ~, [ab3,db4] [f3,ab3,db4] [f3,ab3,db4] ~]/2", // Db Db5 Db
  N: "eb2@8 ~@4 [g3,bb3,db4]@11 ~, [g3,bb3,db4] ~, ~@8 eb2@15 ~", O: "[eb3,ab3,c4]@6 [eb3,ab3,c4]@5 ~, ab2@23 ~",
  P: "[eb3,ab3,b3] [ab3,b3,eb4], ab2", Q: "[g3,bb3,eb4]@12 [g3,bb3,eb4]@11 ~, eb2@23 ~",
  R: "c3@8 c3@3 ~@5 f2@3 ~ eb2@2 ~@2, f2@7 ~@5, [eb3,f3,a3]@11 ~ [c3,eb3,f3,a3]@10 ~@2", // F7
  S: "[~@8 db4@4 ~@36 eb3@4 ~@4 g3@3 ~ [g3,c4,eb4]@11 ~ g3@4 ~@4 g3@4 [g3,d4,f4]@11 ~ g3@3 ~ g3@4 b2@3 ~@9 g3@3 ~ g3@4 g3@4 bb2@4 ab3@7 ~ ab3@3 ~ ab3@3 ~ ab3@4 ab2@4 f3@6 ~@2 f3@4 f3@3 ~@17 f3 ~@3, db2@11 ~ eb2@45 ~@55 bb2@15 ~@5 ab2@18 ~@6 bb2@18 ~@2 bb2@16, ~@4 ab3@7 ~ eb4@20 bb3@4 eb4@18 ~@42 f4@12 ~@84, ~@12 bb3@16 g3@12 bb3@12 bb3@7 ~@13 [c4,eb4]@11 ~@13 d4@9 ~@3 [c4,eb4]@11 ~ [c4,eb4]@9 ~@3 [c4,eb4]@11 ~ [c4,eb4]@10 ~@2 [bb3,d4]@11 ~ [bb3,d4]@11 ~ [bb3,d4]@11 ~, ~@24 eb3@20 g3@10 ~@6 c3@15 ~ c3@7 ~ b2@17 ~@7 g3@7 ~@57 f3@7 ~@13]/8", // Cm G7 Cm Bb
  T: "[f3,ab3,c4,eb4]!2, f2", U: "[f3,ab3,bb3,d4]@11 ~ [f3,ab3,bb3,d4]@11 ~, bb2@23 ~", V: "[f3,g3,b3,d4]!2, g2",
  W: "[g3,bb3,c4,eb4]@11 ~ [g3,bb3,c4,eb4]@10 ~@2, c2@11 ~", // Cm7
  X: "[f3,ab3,c4,eb4]@12 ~@8 ab2@3 ~, ab2@5 ~, ~@12 [f3,ab3,c4,eb4]@11 ~", // Fm7
  Y: "[f3,ab3,c4,eb4]@12 [f3,ab3,c4,eb4]@11 ~, bb2@23 ~", // Fm7
  Z: "[g3@4 ~@24 g3@4 ~@8 [g3,bb3,eb4]@4 g3 ~@3, eb2@8 eb2@4 eb2@3 ~, [bb3,eb4]!3 [bb3,eb4] ~@2, ~ g3@2 g3@2 g3@2 ~ [g3,bb3,eb4]@2 ~@2]/2", // Eb Eb5 Eb
  AA: "[g3,c4,eb4]@11 ~ g3@4 ~@4 g3@4, c3@15 ~ c3@7 ~, ~@12 [c4,eb4]@11 ~", // Cm
  AB: "ab3@7 ~ ab3@3 ~ ab3@7 ~ ab3@2 ~@2, f2@11 ~, [c4,f4]@11 ~ [c4,f4]@11 ~", // F5
  AC: "[[db2,ab3,db4,f4]@11 ~ bb3@12 ~@32 [g3,eb4]@4 f3@8 f3@4, ~@12 eb2@47 ~ [bb1,ab3,db4]@12, ~@6 eb4@10 g4@13 ~@7, ~@3 g3@4 g3@3 bb3@2 eb4 bb3@2 ~@3, ~@6 bb3@3 eb4@2 g3@3 ~@4]/3", // Db Cm Bbm7
  AD: "[~@24 [f3,ab3,db4]@11 ~ eb2@8 ~@4 [g3,bb3,db4]@11 ~ [eb3,ab3,c4]@12 [eb3,ab3,c4]@10 ~@2 [eb3,ab3,b3]@12 [ab3,b3,eb4]@12 [g3,bb3,eb4]@12 [g3,bb3,eb4]@11 ~ c3@8 c3@3 ~, [f3,ab3,db4]!2 ~ [g3,bb3,db4] ~@8, ~@8 bb1@12 bb1@15 ~@9 eb2@15 ~ ab2@23 ~ ab2@24 eb2@23 ~ [f2,eb3,f3,a3]@12]/6", // Db Gdim Ab Abm Eb Db Gdim F7
  AE: "~@4 f2@3 ~ eb2@2 ~@10 db4@4, [c3,eb3,f3,a3]@10 ~@2 db2@11 ~, ~@16 ab3@7 ~", // F7
  AF: "[~@36 eb3@4 ~@4 g3@3 ~, eb2@15 ~, eb4@10 bb3@2 eb4@9 ~@3, bb3@16 g3@12 bb3@12 bb3@7 ~, ~@6 eb3@10 g3@5 ~@3]/2",
  AG: "eb2@2 ~ [g3,bb3,eb4]@3, eb1, [g3,eb4] ~, ~ eb2@2", AH: "~ [d1,d2], [eb1,eb2,g3,bb3,eb4]",
  AI: "g3@2 g3 ~@2 c2, c2@5 ~, [c4,eb4] [g3,c4,eb4]", AJ: "g3@8 g3@4 [bb1,g3,c4,eb4]@11 ~, [c2,c4,f4] ~",
  AK: "[ab3,c4,eb4]@3 ~@2 ab1, ab1@5 ~, ~ [ab3,c4,eb4]", AL: "[bb1,ab3,c4] [bb1,eb3,ab3,c4], eb4",
  AM: "[[eb2,eb3,g3,bb3]@13 ~@5]/3", // Eb
})).s("gm_piano").gain(0.36).pan(0.2)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D@3 E F G H ~ I J K@2 L M N O P Q R S T U V W X Y Z AA@3 E F G H ~ I J K@2 L M N O P Q AB AC AD N AE AF AG@2 AH
  M N O P Q AB AI@6 AJ AK AL AM AN@2 AH M N O P Q AB AC AD N AE AF AO AP AQ AR AB AS AT@2 ~
>`.pickRestart({
  A: "[g3,c4,eb4]@23 ~", B: "b3@5 [g3,b3], d4", C: "[c4,eb4]@5 [c4,eb4]",
  D: "[ab3@4 ab3@2 [g3,bb3]@24 c4@2 g3 [c4,eb4] ~@2]/3", E: "~ [g3,c4] eb4 [b3,d4] ~@2", F: "~@2 b3 [c4,eb4] ~@2",
  G: "~@3 [eb3,ab3] ~@2", H: "~@3 [f3,bb3,d4] ~@2", I: "[g3,eb4] ~@2 [ab3,c4] ~@2", J: "~@6 db4@2 ~ db4 [ab3,eb4]@2",
  K: "[g3,bb3]/2", L: "c4@2 g3 [c4,eb4] ~@4 [g3,c4]@2 eb4@2", M: "[b3,d4] ~@4 b3", N: "[c4,eb4] ~@5",
  O: "[eb3,ab3] ~@5", P: "[f3,bb3,d4] ~@5", Q: "~@3 [g3,eb4] ~@2",
  R: "[c4,f4]@4 ab3 ~ [ab3,c4,f4] ~ [ab3,c4,f4]@3 ~ c4@4 eb4@4 c4@4, f2@7 ~, ab3@2 ~@10 ab3@11 ~, ~@4 f4 ~@3", // F5 Fm
  S: "[ab3,eb4]@2 ~@2 [ab3,c4,eb4]@2 ~@2 [bb2,f3]@3 ~ g3@2 ~@2 g3@4 bb3@4, ab2@4 ~@4 bb3@9 ~@7, ~@8 d4@4 [eb2,eb4]@11 ~", // Ab5 Ab Bb5 Eb
  T: "[f3,ab3,db4]@3 ~ [ab3,db4] ~ [ab3,db4] ~ [f3,ab3,db4]@3 ~ [f3,ab3,db4]@3 ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4]@4, bb2@23 ~, ~@2 f3 ~@9", // Db Db5 Db
  U: "~@4 [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4]@3 ~ [f3,ab3,db4]@3 ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4]@4, bb2@23 ~", // Db
  V: "[g3,bb3]@3 ~ [g3,bb3,db4] ~ [g3,bb3,db4] ~ [g3,bb3,db4]@3 ~ [g3,bb3,db4]@3 ~ [g3,bb3,db4] ~ [g3,bb3,db4] ~ [g3,bb3,db4]@4, eb2@11 ~", // Gm Gdim
  W: "[eb3,ab3,c4]@2 ~ [ab3,c4] eb3@2 ~@3 [ab3,c4] eb3@2", X: "b3@2 ~ [ab3,b3] eb3@2 ~@3 [ab3,b3] eb3@2",
  Y: "[g3,bb3] ~@5", Z: "[a3,c4]@2 ~@7 [a3,c4] eb3@2",
  AA: "[[f3,ab3,b3]@4 ~@8 [eb3,g3,bb3]@40 ~@4 eb3@3 ~ [c4,eb4]@4 g3@2 [c4,eb4]@2 ~@4, ~@20 g3 ~@3]/3", // Fdim Eb Cm
  AB: "[ab3,c4] ~@5", AC: "[d4,f4] ~@5", AD: "[b3,g4] ~@5", AE: "ab4 ~ c4 ~@3", AF: "ab3 ~@5",
  AG: "[g3@6 ~@26 g3@9 ~@7, bb3@12 eb4@12 eb4@17 ~@7, ~@8 g3@11 ~ g3@11 ~@17, ~@16 bb3@19 ~@13]/2",
  AH: "[c4,eb4]@2 g3 [c4,eb4] ~@4 [g3,c4]@2 eb4@2, g3 ~@7", // Cm C5
  AI: "[db4@4 ~@2 db4@2 [ab3,eb4]@4 [g3,bb3]@48 [f3,ab3,db4]@3 ~ [ab3,db4] ~ [ab3,db4] ~ [f3,ab3,db4]@3 ~ [f3,ab3,db4]@3 ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4]@4 ~@4 [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4]@3 ~ [f3,ab3,db4]@3 ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4]@4 [g3,bb3]@3 ~ [g3,bb3,db4] ~ [g3,bb3,db4] ~ [g3,bb3,db4]@3 ~ [g3,bb3,db4]@3 ~ [g3,bb3,db4] ~ [g3,bb3,db4] ~ [g3,bb3,db4]@4 [eb3,ab3,c4]@4 ~@2 [ab3,c4]@2 eb3@4, ~@60 bb2@23 ~ bb2@23 ~ eb2@22 ~@14, ~@32 f3 ~@39]/6", // Ab5 Gm Db Db5 Db Gm Gdim Ab
  AJ: "~@3 [ab3,c4] eb3@2 b3@2 ~ [ab3,b3] eb3@2", AK: "~@3 [ab3,b3] eb3@2 [g3,bb3]@2 ~@4", AL: "~@3 [a3,c4] ~@2",
  AM: "~@3 [a3,c4] eb3@2 [f3,ab3,b3]@2 ~@4", AN: "[[eb3,g3,bb3]@40 ~@4 eb3@3 ~]/2",
  AO: "[g3,bb3]@2 ~ [bb3,eb4] g3@2 ~@3 [bb3,eb4] g3@2", AP: "~@3 [bb3,eb4] g3@2 [f3,d4]@2 ~@4", AQ: "[g3,c4,eb4] ~@5",
  AR: "~@3 bb3 ~@2", AS: "eb3 ~@5", AT: "[~ [g3,bb3]@46 ~]/2",
})).s("gm_acoustic_guitar_steel").gain(0.24).pan(0.8)

// other · flute
const flute = note(`<
  A B C D@2 ~@13 E F ~@6 G H I ~@16 E F ~@7 J K ~@12 L M@3 ~@6 E F ~@7 N@2 O@2 P@2 Q@2 ~
>`.pickRestart({
  A: "~@12 g4@11 ~", B: "d5@4 eb5 f5", C: "eb5@15 ~ c5@4 g4@4", D: "[eb4@11 ~ eb4 ~ f4@2 g4@32]/2",
  E: "ab3@12 eb4@3 ~ d4@4 c4@4", F: "bb3", G: "~@4 eb4@4 ab4@4 bb4@4 c5@4 ab4@3 ~", H: "gb4", I: "g4@11 ~",
  J: "f4 eb4 f4 eb4 f4 eb4", K: "f4@4 eb4@4 f4@4 eb4@4 f4@3 ~ eb4@2 ~@2", L: "~@4 eb4 ab4",
  M: "[bb4@4 c5@4 ab4@3 ~ gb4@24 g4@22 ~@14]/3", N: "[[bb4,eb5,g5]@40 [bb4,eb5]@4 [eb5,g5]@3 ~]/2", O: "[eb5,g5,c6]/2",
  P: "[[eb5,ab5,c6]@19 ~ [eb5,ab5]@4 [ab4,eb5]@12 [ab4,c5]@12, ~@5 c5@4 ~@3]/2", Q: "[[g4,bb4]@15 ~]/2",
})).s("gm_flute").gain(0.19)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@15 A@4 B@2 C D E@2 F@2 G H I J@8 K@2 L@2 M N O P Q R S@2 T U V W ~ X Y Z AA AB AC AD AE AF@2 AG@8 AH@2 M N O P Q R
  S@2 T U V W AI ~ AI AJ AK@2 AL@2 ~
>`.pickRestart({
  A: "[[c3,c4,eb4] [b2,d4,f4] [bb2,eb4] [ab2,ab3], g3@3 ~, ~ c4]/4", // Cm Bdim Eb5 Ab
  B: "[bb3@2 ab3 [eb2,g3,bb3,eb4], [bb2,f3,d4]@3 ~]/2", C: "[f3,c4,f4,ab4]",
  D: "[ab2,ab3,eb4]@2 [bb2,f3,bb3,d4] [eb2,g3,eb4]@3", E: "[bb2,db4,f4,ab4]/2",
  F: "[~@12 eb2@12 [ab2,eb4,c5]@19 eb5 f5 [gb5,ab5] bb5 [b5,db6], g4@43 ~@5, [db4,bb4] ~]/2", G: "eb6 b5",
  H: "bb5@4 g5 eb5", I: "c5",
  J: "[[db4,f4,ab4]@12 [eb2,bb3,eb4,g4]@45 ~@3 c4@20 g4@4 [b1,d4,f4]@24 c4@12 ~@12 [ab2,ab4]@24 ~@24 bb4@12, db2@7 ~@53 g3@48 eb4@48 ~@36, ~@60 [c2,eb4]@23 ~@25 [bb2,g4]@24 ~@24 [bb2,ab3,d4]@36, ~@10 c5@3 ~@3]/8", // Db Eb Bdim Ab Cm Eb Bb7
  K: "[[eb3,bb3,g4] [f3,c4]@2 [db3,db4], ~ [f4,ab4]@3]/2", L: "[[eb3,eb4,g4,bb4]@13 ~@3]/2", M: "~ g5",
  N: "d6@4 eb6 f6", O: "g6@5 eb6", P: "c6@4 ab5 g5", Q: "f5", R: "[d5,bb5]@2 [c5,ab5] [bb4,g5]@3",
  S: "[[f3,eb4,c5]@24 [bb3,f4,d5]@20 eb5 [f5,g5] ab5 [bb5,c6], ab4@11 ~]/2", T: "d6@4 g6 f6", U: "eb6@4 c6 d6",
  V: "eb6@4 c6 ab5", W: "[bb3,ab4,c5,eb5]", X: "~@20 f5 [g5,ab5] bb5 [c6,d6]", Y: "eb6@4 d6 c6", Z: "d6 f6@3 g6 f6",
  AA: "eb6@4 c6 bb5", AB: "ab5@4 g5 f5", AC: "bb5@3 f6 d6 bb5",
  AD: "d5@3 [eb5,c6] [d5,bb5] [c5,ab5] [bb4,g5]@3 ab5 bb5@2", AE: "c6 bb5 ab5 [c5,g5] [bb4,f5] [ab4,eb5]",
  AF: "[[g4,c5]@2 [f4,bb4]@2 [eb4,ab4]@2 eb4 f4 g4@15 ~, ~@6 bb4@17 ~]/2", // C5 Bb5 Ab5
  AG: "[~@12 [bb2,db4,f4,ab4]@48 ~@12 eb2@12 ~@4 eb5@4 ab5@4 bb5@4 c6@3 eb5 f5 [gb5,ab5] bb5 [b5,db6] eb6@12 b5@12 bb5@16 g5@4 eb5@4 c5@24 [db4,f4,ab4]@12, ~@60 [db4,g4,bb4]@24 c5@20 ~@4 [gb4,b4]@24 bb4@24 ~@24 db2@7 ~@5]/8", // Bbm7 Gbsus2 Bsus2 Db Gdim B5
  AH: "[[eb2,bb3,eb4,g4]@15 ~]/2", AI: "eb6@4 f6 g6", AJ: "~ eb6", AK: "[c6@4 ab5 ~@4 ab4@3, ~@5 eb5@4 ~@3, ~ c5]/2",
  AL: "[[bb3,g4,eb5]@43 ~@5, eb3@47 ~]/2", // Eb
})).s("gm_string_ensemble_1").gain(0.35)

// bass · fretless bass
const bass = note(`<
  A B C D@3 E@4 F G H I@2 J K L M N O P Q R S T U V W X Y@3 E@4 F G H I@2 J K L M N O Z AA AB AC AD AE AF AG J K L M N O
  X AH@2 AI@2 AJ AK AL AM@2 AN AO@2 J K L M N O Z AA AB AC AD AE AP AQ AR AS AT AU AV@3
>`.pickRestart({
  A: "c2@14 ~@2 d2 ~@3 c2 ~@3", B: "b1@14 ~@2 b1 ~@3 g1@2 ~@2", C: "bb1@14 ~@2 c2 ~@3 bb1 ~@3",
  D: "[ab1@10 ~@2 eb2@43 ~@5 c2@12]/3",
  E: "[~@4 d2 ~@3 c2@2 ~@2 b1@20 ~@4 bb1@15 ~ c2 ~@3 bb1 ~@3 ab1@19 ~ ab1 ~@3 bb1@12]/4",
  F: "~@4 bb2 ~@3 f2 ~@3 bb1@7 ~ d2@2 ~@2", G: "eb2@7 ~ g2@2 ~@2 f2@12", H: "~@4 ab2 ~@3 f2 ~@3 db2@7 ~ f2 ~@3",
  I: "[eb2@11 ~ eb3@4]/2", J: "c2@14 ~@2 d2 ~@3 c2@2 ~@2", K: "b1@5 ~", L: "bb1@15 ~ c2 ~@3 bb1 ~@3",
  M: "ab1@19 ~ ab1 ~@3", N: "bb1@14 ~@2 bb2 ~@3 f2 ~@3", O: "bb1@7 ~ d2@2 ~@2 eb2@7 ~ g2@2 ~@2", P: "f2@19 ~ f1@3 ~",
  Q: "ab1@6 ~@2 bb1@3 ~ eb2@9 ~@3", R: "bb1@20 ~@2 f2 ~", S: "bb2 ~ f2 ~ bb1@6 ~@2 bb1@7 ~ f2@3 ~",
  T: "eb2@11 ~ eb3@4 bb2@3 ~ eb2@3 ~", U: "ab2@11 ~ ab2@7 ~ eb2@2 ~@2", V: "ab2@14 ~@2 g2 ~@3 f2 ~@3",
  W: "eb2@19 ~ c2@2 ~@2", X: "f2@14 ~@2 ab2 ~@3 f2 ~@3", Y: "[db2@7 ~ f2@2 ~@2 eb2@37 ~@11 c2@12]/3",
  Z: "f2@7 ~ f2 ~ c2 ~", AA: "bb1@15 ~ bb1@2 ~@2 ab1@2 ~@2", AB: "g1@15 ~ g2 ~ d2 ~ g1@3 ~",
  AC: "c2@11 ~ bb2 ~ c3 ~ bb2 ~ c3 ~ bb2@2 ~@2", AD: "ab2@15 ~ ab1@2 ~@2 c2@2 ~@2",
  AE: "bb1@12 bb2 ~ c3 ~ bb2 ~ c3 ~ bb2@2 ~@2", AF: "eb2@19 ~ bb1@4", AG: "eb2@7 ~",
  AH: "[db2@7 ~ f2 ~@3 eb2@24 ~@12]/2",
  AI: "[eb4 bb3 ~ g3 eb3 bb2 ~ g2 eb2 bb1 ~ g1 bb1@20 ~@2 f2 ~ bb2 ~ f2 ~ bb1@6 ~@2]/2", AJ: "bb1@7 ~ f2@3 ~ eb2@11 ~",
  AK: "eb3@4 bb2@3 ~ eb2@3 ~ ab2@11 ~", AL: "ab2@7 ~ eb2@2 ~@2 ab2@12",
  AM: "[~@4 g2 ~@3 f2 ~@3 eb2@19 ~ c2@2 ~@2 f2@12]/2", AN: "~@4 ab2 ~@3 f2 ~@3 db2@7 ~ f2@2 ~@2", AO: "[eb2@37 ~@11]/2",
  AP: "eb2@14 ~@2 eb2@3 ~ bb1@3 ~", AQ: "eb2@5 ~ d2@5 ~", AR: "c2@14 ~@2 c2 ~@3 g1@2 ~@2", AS: "c2@11 ~ bb1@11 ~",
  AT: "ab1@23 ~", AU: "bb1@11 ~ bb1@11 ~", AV: "[eb2@49 ~@23]/3",
})).s("gm_fretless_bass").gain(0.43)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  A@3 ~@3 B C B ~ B C D ~@2 D A D ~ D A ~ B D A D ~ D A ~ B ~@2 B C B ~ B C D ~@2 D A D ~ D A D A D ~ D ~@3 D A D ~ D A
  ~ B ~@2 B C B ~ B C D ~@2 D A D ~ D A D A D ~@12
>`.pickRestart({
  A: "~@4 x!2", B: "~ x ~", C: "~ x!2 ~@3", D: "~@5 x",
})).gain(0.24)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@53 [~ x ~@4] ~ [~@13 x ~ x ~ x ~@6] ~@30 [~ x ~@4] ~@9>").gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@18 B ~@51 C ~@9 B ~@3 B ~ B ~@5>".pickRestart({
  A: "~ x ~", B: "~@5 x", C: "~@10 x!2",
})).gain(0.6)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@18 B ~@61 B ~@3 B ~ C ~@5>".pickRestart({
  A: "~ x ~@4", B: "~@3 x", C: "~@8 x!2 ~@2",
})).gain(0.42)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@18 B ~@51 C ~@9 D ~@3 B ~@7>".pickRestart({
  A: "x", B: "~@2 x", C: "~@8 x!2 ~@2", D: "~@7 x!2 ~@3",
})).gain(0.42)

// drums · crash
const crash = s("cr").struct("<~@56 A ~@8 B ~@9 A ~@8 C A ~ A ~ A ~ A ~@4>".pickRestart({
  A: "x", B: "~ x", C: "~ x ~",
})).gain(0.48)

// drums · ride
const ride = s("rd").struct(`<
  A ~@2 B C ~@7 B A ~@8 D ~@7 D ~@8 B A ~@12 E C A F G H I J K I C ~@8 B A ~@10 A ~ E L D M N O C A ~@2
>`.pickRestart({
  A: "x", B: "~ x", C: "x!2", D: "x ~ x!2 ~@2", E: "x ~@2 x!3", F: "~ x!3 ~ x", G: "x!2 ~ x ~ x", H: "x ~@2 x ~ x",
  I: "x!6", J: "x!4 ~ x", K: "x ~ x!2 ~ x", L: "~@2 x!4", M: "~ x ~ x!3", N: "x!3 ~@3", O: "~@4 x!2",
})).gain(0.42)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@56 [~@2 x] [~ x!2] [~ x!2 ~ x ~] ~ [~@2 x] [~ x ~@2 x ~] ~@34>").gain(0.24)

// … 4 more lines

More by Gilbert O'Sullivan