Strudelify
On the Beach cover art

1988 · On the Beach

On the Beach

Chris Rea

KeyF minorTempo116 bpm
0:00/0:00
// On the Beach — Chris Rea
// 116 bpm, 4/4, key F minor. 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 120 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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 · synth bass 2 · "SYNBASS 2"
const bass = note(`<
  A@8 B@7 C D E D F D G D G D G D G H G D I J@2 K@2 L@3 M N@4 D G D G D G D G D G D O@3 K@2 L@3 M L@3 M L@3 M P@3 C Q@2
  R@2 S@3 T D G D E U@2 V W X M Y M Z@3 AA@4 AB@4 AC@4 AD@4 AE@3 ~@2
>`.pickRestart({
  A: "[~ f1@48 db2@48 f1@48 db2@47]/8", B: "[~ f1@48 db2@48 f1@48 db2@21 c2@2]/7", C: "~@7 c2@17",
  D: "~ f1@9 c2@3 f2@9 c2@2", E: "~ g1@7 ~@2 g1@3 c2@11", F: "~ g1@8 ~ g1@3 c2@8 ~ c2@2", G: "~ g1@8 ~ g1@3 c2@11",
  H: "~ f1@8 ~ c2@3 f2@9 c2@2", I: "~ g1@8 ~ g1@3 c2@7 ~@2 c2@2", J: "[~ bb1@24 c2@23]/2",
  K: "[~ db2@24 eb2@9 eb1@14]/2", L: "[~ f1@48 db2@23]/3", M: "~ c2@23", N: "[~ f1@48 db2@21 c2@5 ~@4 c2@17]/4",
  O: "[~ g1@8 ~ g1@3 c2@8 ~ c2@3 bb1@24 c2@23]/3", P: "[~ f1@48 db2@21 c2@2]/3",
  Q: "[~ e2@4 b2@4 db3@13 gb2@3 ab2@8 ~ eb2@3 ab1@8 eb2@3]/2",
  R: "[~ e2@4 db3@6 eb3@11 gb2@3 ab2@9 eb2@3 ab1@7 ~@2 ab1@2]/2",
  S: "[~ db2@21 gb2@3 ab2@9 eb2@3 ab1@7 ~@2 ab1@3 db2@4 db3@5 eb3@12 bb2@2]/3", T: "~ bb1@12 c2@11",
  U: "[~ f1@9 c2@3 f2@7 ~@2 f2@3 eb2@7 ~@2 eb2@3 ab1@8 ~ ab1@2]/2", V: "~ db2@8 ~ db2 ~@2 ab1@11",
  W: "~ g1@12 c2@7 ~@2 c2@2", X: "~ f1@9 c2@2 ~ f2@7 ~@2 f2@2", Y: "~ f1@7 ~@2 c2@3 f2@8 ~ f2@2",
  Z: "[~ bb1@24 c2@24 db2@23]/3", AA: "[~ eb2@9 eb1@15 f1@48 db2@23]/4", AB: "[~ c2@24 f1@48 db2@23]/4",
  AC: "[~ c2@15 c1@9 f1@48 db2@23]/4", AD: "[~ c2@21 g1@3 f1@48 db2@21 c2 ~]/4", AE: "[~@7 c2@12 c1@6 f1@38 ~@9]/3",
})).s("gm_synth_bass_2").gain(0.45)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B C D B A E F G H B@2 H C@2 ~ I J K L M N O P O Q R S T U V W X Y Z AA ~@8 AB AC AD AE AD AF AG AH AI AJ AK AL AM AN
  AO AP ~@24 AQ AR AS AT AU AV AW AX AY AZ AY BA BB BC BD BE ~@20
>`.pickRestart({
  A: "~@10 c4 ~@2 eb4 ~@2 c4 ~@2 f4@2 ~ f4@2", B: "~@10 c4 ~@2 eb4@2 ~ c4 ~@2 f4 ~@2 f4@2",
  C: "~@10 c4 ~@2 eb4 ~@2 c4 ~@2 f4 ~@2 f4 ~", D: "~@10 c4@2 ~ eb4 ~@2 c4 ~@2 f4 ~@2 f4@2",
  E: "~@10 c4@2 ~ eb4 ~@2 c4 ~@2 f4@2 ~ f4 ~", F: "~@10 c4 ~@2 eb4@2 ~ c4 ~@2 f4 ~@2 f4 ~",
  G: "~@10 c4 ~@2 eb4 ~@2 c4 ~@2 f4@2 ~ f4 ~", H: "~@10 c4@2 ~ eb4 ~@2 c4 ~@2 f4@2 ~ f4@2",
  I: "~ f4 ~@5 [ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@7", // Ab
  J: "~ [g4,bb4,db5] ~@8 [bb4,db5] ~@5 [g4,bb4,c5] ~@5 [g4,bb4,c5] ~", // Gdim Bbm C7
  K: "~@7 [ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@7", L: "~ [ab4,bb4,db5] ~@11 [bb4,c5] ~@5 [g4,bb4,c5] ~@2 g4 ~",
  M: "~ f4 ~@2 f4 ~@2 [ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@7", // Ab
  N: "~ [bb4,db5] ~@8 [g4,bb4,db5] ~@2 g4 ~@2 g4 ~@2 [g4,bb4,c5] ~@2 g4 ~", // Bbm Gdim C7
  O: "~ f4 ~@5 [ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@5 f4 ~", // Ab
  P: "~ [bb4,db5,f5] ~@8 [bb4,db5,f5] ~@5 bb4 ~@2 [bb4,db5,eb5] ~@4", // Bbm Eb7
  Q: "~ [g4,bb4,db5] ~@8 [bb4,db5] ~@5 g4 ~@2 [g4,bb4,c5] ~@4", // Gdim Bbm C7
  R: "~ [f4,c5] ~@5 [ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@5 [f4,ab4] ~", // F5 Ab Fm
  S: "~ [f4,bb4,c5] ~@5 f4 ~@2 [f4,bb4,db5] ~@5 [g4,bb4,c5] ~@5 [g4,c5] ~", // Fsus4 Bbm C7 C5
  T: "~ [f4,ab4,c5] ~@2 f4 ~@2 [f4,ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@5 f4 ~", // Fm Fm7 Ab
  U: "~ [f4,bb4,db5] ~@5 [f4,bb4,db5] ~@5 f4 ~@2 [g4,bb4,c5] ~@5 [g4,bb4,c5] ~", // Bbm C7
  V: "~ f4 ~@2 f4 ~@2 [ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@5 f4 ~", // Ab
  W: "~ [f4,bb4,db5] ~@8 [f4,bb4,db5] ~@5 f4 ~@2 [g4,bb4,c5] ~@4", // Bbm C7
  X: "~ f4 ~@5 [f4,ab4,db5] ~@5 f4 ~@2 [f4,ab4,db5] ~@5 [f4,ab4,db5] ~", Y: "~@7 [g4,bb4,eb5] ~@8 [g4,bb4,eb5] ~@7",
  Z: "~@7 [ab4,c5,f5] ~@8 [ab4,c5,f5] ~@7", AA: "~@7 [bb4,eb5]@2 ~@7 [bb4,eb5] ~@7",
  AB: "~ [f4,ab4,c5,eb5] ~@5 [ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@5 [f4,bb4,db5] ~", // Fm7 Ab Bbm
  AC: "~@7 [f4,bb4,db5] ~@8 [e4,bb4,c5] ~@5 [e4,bb4,c5] ~", // Bbm C7
  AD: "~@4 f4 ~@2 [ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@5 [bb4,db5] ~", // Ab Bbm
  AE: "~@4 f4 ~@2 [bb4,db5] ~@5 [bb4,c5] ~@5 [bb4,eb5] ~@4", AF: "~@4 f4 ~@5 [bb4,c5] ~@5 e4 ~@5 [bb4,c5] ~",
  AG: "~@4 f4 ~@2 [ab4,c5,eb5] ~@8 [ab4,c5,eb5] ~@5 [bb4,d5] ~", AH: "~@4 [bb4,f5] ~@5 [bb4,eb5] ~@5 [bb4,db5] ~@7",
  AI: "~ f4 ~@5 [ab4,c5,eb5] ~@5 f4@2 ~ [ab4,c5,eb5] ~@5 [bb4,db5] ~", // Ab Bbm
  AJ: "~@4 [f4,bb4,eb5] ~@5 [bb4,db5] ~@5 e4 ~@2 [bb4,c5] ~@4", AK: "~ f4 ~@5 [ab4,c5,eb5] ~@5 f4 ~@8 [bb4,db5] ~",
  AL: "~@4 f4 ~@5 [bb4,c5] ~@8 [e4,bb4,c5] ~@4", AM: "~ [ab4,db5] ~@8 [ab4,db5] ~@5 f4 ~@2 [ab4,db5] ~@4",
  AN: "~ [bb4,eb5] ~@5 g4 ~@2 [bb4,eb5] ~@5 g4 ~@2 [bb4,eb5] ~@4", AO: "~ [c5,f5] ~@8 [c5,f5] ~@8 [c5,f5] ~@4",
  AP: "~ [bb4,eb5] ~@8 [bb4,eb5] ~@5 [eb4,bb4] ~@7", // Eb5
  AQ: "~ f4 ~@5 [ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@5 [bb4,db5] ~", // Ab Bbm
  AR: "~@4 f4 ~@5 [bb4,c5] ~@5 e4 ~@2 [bb4,eb5] ~@4", // Bbsus2 Eb5
  AS: "~ f4 ~@2 f4 ~@2 [ab4,c5,eb5] ~@2 f4 ~@2 f4 ~@2 [ab4,c5,eb5] ~@5 [bb4,db5] ~", // Ab Bbm
  AT: "~@4 [bb4,eb5] ~@5 [bb4,db5] ~@5 [e4,bb4,c5] ~@5 [e4,bb4,c5] ~", // Eb5 Bbm C7
  AU: "~@4 f4 ~@2 [ab4,c5,eb5] ~@8 [ab4,c5,eb5] ~@5 f4 ~", // Ab
  AV: "~ [bb4,db5] ~@5 [eb4,bb4,db5] ~@5 [ab4,c5] ~@5 [ab4,c5] ~@4", AW: "~@4 [g4,c5] ~@2 [g4,c5] ~@8 [g4,c5] ~@5 f4 ~",
  AX: "~ f4 ~@2 [bb4,db5] ~@5 [bb4,c5] ~@5 e4 ~@2 [bb4,db5] ~@4", // Bbm Bbsus2 Bbm
  AY: "~ f4 ~@5 [ab4,c5,eb5] ~@5 f4 ~@2 [ab4,c5,eb5] ~@5 [bb4,d5] ~", // Ab Bb
  AZ: "~@4 f4 ~@2 [bb4,d5] ~@8 [bb4,d5] ~@5 [bb4,d5]@2", BA: "~@4 f4 ~@2 [bb4,f5] ~@8 [bb4,d5] ~@5 [f4,bb4,d5] ~",
  BB: "~@4 f4 ~@2 [ab4,db5] ~@8 [ab4,db5] ~@5 [f4,ab4,db5] ~", // Db5 Db
  BC: "~@4 g4 ~@2 [bb4,eb5] ~@5 g4 ~@2 [bb4,eb5] ~@5 [bb4,eb5] ~", // Eb5
  BD: "~@4 ab4 ~@2 [c5,f5] ~@5 ab4 ~@2 [c5,f5] ~@5 [ab4,c5,f5] ~", // F5 Fm
  BE: "~@4 [bb4,eb5] ~@5 [bb4,eb5] ~@5 [bb4,eb5] ~@2 [bb4,eb5]@2 ~@3", // Eb5
})).s("gm_electric_guitar_muted").gain(0.36)

// chords · electric guitar jazz · "MUTED GTR"
const electric_guitar_jazz = note(`<
  ~@36 A@3 B C@3 ~@17 D@3 E F@3 G H@3 I J@3 ~@25 K@3 L M@3 L N@3 O P@3 Q ~@4
>`.pickRestart({
  A: "[~ c5@5 ~ eb5 ~@2 c4 ~@2 eb4@2 ~ [c4,eb5] ~@2 f4 ~@2 eb5@6 c5@3 ~@3 c4 ~@2 c5@3 eb5@3 [f4,c5]@3 ~@12 c4 ~@2 eb4@2 ~ c4 ~@2 f4 ~@2 f4 ~, ~@22 f4 ~@8 f4@5 ~ eb4@2 ~ c4 ~@5 f4@15 ~@11]/3", // Cm F5
  B: "~@10 c4 ~@2 eb4@2 ~ c4 ~@2 f4@2 ~ f4@2",
  C: "[~ c5@6 eb5 ~@2 c4 ~@2 eb4@2 ~ [c4,eb5] ~@2 f4@2 ~ eb5@6 c5@3 ~@3 c4 ~@2 c5@3 eb5@3 c5@3 ~@12 c4 ~@2 eb4 ~@2 c4 ~@2 f4 ~@2 f4 ~, ~@22 f4@2 ~@7 f4@5 ~ eb4 ~@2 c4 ~@2 f4 ~@2 f4@14 ~@12]/3", // Cm
  D: "[~@4 c4 ~@2 eb5 ~@2 c4 ~@2 eb4 ~@2 [c4,eb5] ~@2 f4 ~@2 eb5@6 c5@3 ~@3 c4 ~@2 c5@3 eb5@3 [f4,c5]@3 ~@12 c4 ~@2 eb4@2 ~ c4 ~@2 f4@2 ~ f4@2, ~ c5@5 ~@16 f4 ~@8 f4@5 ~ eb4 ~@2 c4 ~@5 f4@15 ~@11]/3", // Cm F5
  E: "~@10 c4@2 ~ eb4@2 ~ c4 ~@2 f4@2 ~ f4@2",
  F: "[~ c5@6 eb5 ~@2 c4 ~@2 eb4 ~@2 [c4,eb5] ~@2 f4@2 ~ eb5@6 c5@3 ~@3 c4 ~@2 c5@3 eb5@3 c5@3 ~@12 c4 ~@2 eb4@2 ~ c4 ~@2 f4@2 ~ f4@2, ~@22 f4@2 ~@7 f4@5 ~ eb4@2 ~ c4 ~@2 f4 ~@2 f4@14 ~@12]/3", // Cm
  G: "~@10 c4 ~@2 eb4 ~@2 c4 ~@2 f4@2 ~ f4 ~",
  H: "[~ c5@5 ~ eb5 ~@2 c4 ~@2 eb4 ~@2 [c4,eb5] ~@2 f4@2 ~ eb5@6 c5@3 ~@3 c4 ~@2 c5@3 eb5@3 [f4,c5]@3 ~@12 c4@2 ~ eb4@2 ~ c4 ~@2 f4@2 ~ f4@2, ~@22 f4 ~@8 f4@5 ~ eb4@2 ~ c4 ~@5 f4@15 ~@11]/3", // Cm F5
  I: "~@10 c4@2 ~ eb4@2 ~ c4 ~@2 f4 ~@2 f4@2",
  J: "[~ c5@6 eb5 ~@2 c4@2 ~ eb4@2 ~ [c4,eb5] ~@2 f4@2 ~ eb5@6 c5@3 ~@3 c4 ~@2 c5@3 eb5@3 c5@3 ~@12 c4 ~@2 eb4 ~@2 c4 ~@2 f4 ~@2 f4 ~, ~@22 f4 ~@8 f4@5 ~ eb4@2 ~ c4 ~@2 f4 ~@2 f4@14 ~@12]/3", // Cm
  K: "[~ c5@5 ~ eb5 ~@2 c4 ~@2 eb4 ~@2 [c4,eb5] ~@2 f4 ~@2 eb5@6 c5@3 ~@3 c4 ~@2 c5@3 eb5@3 c5@3 ~@12 c4 ~@2 eb4@2 ~ c4 ~@2 f4 ~@2 f4@2, ~@22 f4 ~@8 f4@5 ~ eb4 ~@2 c4 ~@2 f4 ~@2 f4@15 ~@11]/3", // Cm
  L: "~@10 c4 ~@2 eb4 ~@2 c4 ~@2 f4 ~@2 f4 ~",
  M: "[~ c5@6 eb5 ~@2 c4 ~@2 eb4 ~@2 [c4,eb5] ~@2 f4@2 ~ eb5@6 c5@3 ~@3 c4 ~@2 c5@3 eb5@3 [f4,c5]@3 ~@12 c4 ~@2 eb4 ~@2 c4 ~@2 f4@2 ~ f4@2, ~@22 f4 ~@8 f4@5 ~ eb4 ~@2 c4 ~@5 f4@14 ~@12]/3", // Cm F5
  N: "[~ c5@5 ~ eb5 ~@2 c4 ~@2 eb4 ~@2 [c4,eb5] ~@2 f4 ~@2 eb5@6 c5@3 ~@3 c4 ~@2 c5@3 eb5@3 [f4,c5]@3 ~@12 c4 ~@2 eb4 ~@2 c4 ~@2 f4@2 ~ f4 ~, ~@22 f4 ~@8 f4@5 ~ eb4 ~@2 c4 ~@5 f4@15 ~@11]/3", // Cm F5
  O: "~@10 c4 ~@2 eb4 ~@2 c4 ~@2 f4@2 ~ f4@2",
  P: "[~ c5@6 eb5 ~@2 c4 ~@2 eb4@2 ~ [c4,eb5] ~@2 f4 ~@2 eb5@6 c5@3 ~@3 c4 ~@2 c5@3 eb5@3 c5@3 ~@12 c4 ~@2 eb4 ~@2 c4 ~@2 [c4,f4] ~@4, ~@22 f4 ~@8 f4@5 ~ eb4 ~@2 c4 ~@2 f4 ~@2 f4@14 ~@12]/3", // Cm F5
  Q: "~ [g3,c4] ~@8 [g3,c4] ~@8 [g3,c4] ~@4", // C5
})).s("gm_electric_guitar_jazz").gain(0.36)

// chords · string ensemble 1 · "CHOIR/STR."
const string_ensemble_1 = note("<~@76 A@4 B@5 ~@35>".pickRestart({
  A: "[~@5 e3@7 ~ eb3@11 ~@13 eb3@11, ~@10 [ab3,eb4]@18 ~@33 b3@14 ~@21, ~@25 gb3@24 [e3,ab3]@22 ~@2 gb3@23, ~@26 db4@36 ~@11 bb3@21 ~@2]/4", // Ab5 E
  B: "[~@12 db4@13 ~@11 bb3@12 ~@24 db4@12 g3@12 ab3@18 ~@6, ~ ab3@37 ~@10 ab3@37 ~@35, ~ e3@23 ~ eb4@47 ~@12 c4@31 ~@5, ~@26 eb3@21 ~ f3@34 ~@2 e3@10 ~@2 f3@15 ~@9]/5",
})).s("gm_string_ensemble_1").gain(0.15)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A@2 B@2 C@2 D@2 E@2 F@2 G@3 H I@2 J@2 K@2 L@2 M@2 N@4 O@2 P Q R S T@2 U@2 T@2 V W X@2 Y@2 Z@2 AA@2 AB@2 AC@2 AD AE AF
  AG AH@2 AI AJ AK@2 AL@2 AM@4 AN@3 AO AP@2 ~ AQ AR AS AT AU AV@2 AW@2 AX AY AZ@2 BA@2 BB@2 BC BD BE BF BG@2 AI BH BI@2
  AI BJ BK@2 BL@4 BM BN BO@4
>`.pickRestart({
  A: "[~ f2@21 ~@2, ~ [bb3,eb4,g4]@47, ~ c3@43 ~@4]/2", B: "[~ [c4,f4]@47, ~ [db3,ab3]@43 ~@4]/2",
  C: "[~ [f2,f3,g4]@43 ~@4, ~ [bb3,eb4]@47, ~ c3@45 ~@2]/2", D: "[~ [c4,f4]@47, ~ [db3,ab3]@45 ~@2, ~ f3@43 ~@4]/2",
  E: "[~ f2@22 ~, ~ [c3,bb3,eb4]@47, ~ ab3@43 ~@4]/2", F: "[~ [c4,f4]@47, ~ [db3,f3]@44 ~@3]/2",
  G: "[~@2 f2@41 ~@7 c4@20 [bb3,eb4] [c3,g3], ~ [f3,eb4]@48 ~@23, ~ bb3@45 ~@26, ~ c3@42 ~@6 [db3,ab3,f4]@21 ~@2, ~ g4@34 ~]/3", // Eb5 C5 F7 Db
  H: "~@8 eb4@11 db4@5, ~ c3@5, ~@7 bb3@17, ~@8 g3@15 ~",
  I: "[~ [f3,ab3,c4]@4 ~@2 [f3,c4]@4 ~@2 f3 ~@2 [f3,ab3,c4]@5 ~@7 db4@5 ~ [bb3,eb4]@9 [ab3,db4]@3 bb3@2, ~ f2@6 ab3@6 ~@9 [f3,bb3]@10 ~@2 e3@13 ~]/2", // Fm F5 Fm Eb5 Db5 Bb5
  J: "[~ [f3,ab3]@4 ~@2 [f3,c4]@4 ~@5 [f3,ab3,c4]@5 ~@7 db4@5 ~ [bb3,eb4]@9 [ab3,db4]@3 bb3@2, ~ c4@2 ~@4 ab3@6 ~@9 [f3,bb3]@11 ~ e3@13 ~]/2", // Fm F5 Fm Eb5 Db5 Bb5
  K: "[~ [f3,ab3]@4 ~@2 [f3,c4]@5 ~@4 [f3,ab3,c4]@5 ~ f3@5 ~ [f3,db4]@5 ~ [bb3,eb4]@9 [ab3,db4]@3 bb3@2, ~ c4@2 ~@4 ab3@8 ~@7 bb3@10 ~@2 e3@12 ~@2]/2", // Fm F5 Fm Db Eb5 Db5
  L: "[~ [f3,ab3,c4]@4 ~@2 [f3,c4]@4 ~@2 f3 ~@2 [f3,ab3,c4]@5 ~ [f3,bb3]@6 [f3,db4]@5 ~ [bb3,eb4]@9 [ab3,db4]@3 bb3@2, ~@7 ab3@6 ~@15 bb3@3 ~@3 e3@12 ~@2]/2", // Fm F5 Fm Bb5 Db Eb5 Db5
  M: "[~ [f3,ab3,c4]@4 ~@2 [f3,ab3,c4]@7 ~@2 [f3,ab3,c4]@4 ~@2 f3@5 ~ [f3,db4]@5 ~ [bb3,eb4]@9 [ab3,db4]@3 bb3@2, ~@11 bb3@4 ~@2 e3@6 ~]/2", // Fm Db Eb5 Db5
  N: "[~ [f3,ab3]@4 ~@2 [f3,ab3]@7 ~@2 [f3,ab3,c4]@5 ~ [f3,bb3]@5 ~ [f3,db4]@5 ~ [bb3,eb4]@6 [ab3,db4] ~ eb4 db4@4 bb3 ~ [f3,c4]@4 ~@2 ab3@7 ~@2 [ab3,c4]@5 ~@4 bb3@3 db4@3 bb3@2 ~ [bb3,eb4]@9 [ab3,db4]@3 bb3@2, ~ c4@2 ~@4 c4@5 ~@16 bb3@3 ~@3 e3@12 ~@9 f3@3 ~@6 f3@3 ~@3 f3@11 ~ e3@13 ~, ~@41 bb3@2 ab3@10 ~@2 c4@5 ~@36]/4", // Fm Bb5 Db Eb5 Db5 F5 Ab Eb5 …
  O: "[~ [f3,ab3,c4]@4 ~@2 [f3,c4]@4 ~@5 [f3,ab3,c4]@5 ~@7 db4@5 ~ [bb3,eb4]@9 [ab3,db4]@5, ~@7 ab3@6 ~@9 [f3,bb3]@10 ~@2 e3@12 ~@2]/2", // Fm F5 Fm Eb5 Db5 Bb5
  P: "~@4 ab3 ~@5 db4@11 ~@3, ~ [bb2,f4]@23, ~@7 c4@15 ~@2", // Bb5
  Q: "~@8 eb4 ~ d4@14, ~ [c3,g4]@23, ~ bb3@4 ~, ~@7 d4@2 ~@15", R: "~@5 c5@5 ~@2, ~ [db3,c4]@23, ~ [ab3,f4]@5",
  S: "~ [eb4,f4]@23, ~ [eb3,bb3]@18 ~@5", T: "[~ [bb3,eb4,g4]@47, ~ [f2,c3]@43 ~@4]/2",
  U: "[~ db3@24 c3@23, ~ [c4,f4]@47, ~ ab3@40 ~@7]/2", V: "~ [db3,ab3,f4]@19 ~@2 [c3,g3,bb3,eb4] ~, ~ c4@21 ~@2",
  W: "~@19 db4@5, ~ c3@5, ~@7 [g3,bb3,eb4]@17", // Eb
  X: "[~ [f3,ab3,c4]@4 ~@2 [f3,ab3,c4]@4 ~@5 [ab3,c4]@5 ~ ab3@6 bb3@3 db4@2 ~ bb3@9 [ab3,db4]@3 bb3@2, ~@16 f3@3 ~@3 f3@10 ~@2 e3@13 ~, ~@17 eb4@4 ~@3]/2", // Fm Ab Db5
  Y: "[~ [f3,ab3]@4 ~@2 [f3,ab3,c4]@4 ~@5 [f3,ab3,c4]@4 ~@2 bb3@6 ~@3 bb3 ~@2 [bb3,eb4]@9 [ab3,db4]@3 bb3 ~, ~ c4@2 ~@19 f3@10 ~@2 e3@13 ~, ~@14 g3@3 ~@7]/2", // Fm Eb5 Db5
  Z: "[~ [f3,ab3,c4]@4 ~@2 [f3,ab3,c4]@4 ~@5 [f3,ab3,c4]@4 ~@2 f3@5 ~ [f3,db4]@5 ~ [bb3,eb4]@9 [ab3,db4]@4 ~, ~@22 bb3@9 ~@3 e3@13 ~]/2", // Fm Db Eb5 Db5
  AA: "[~ [f3,ab3,c4]@4 ~@2 [f3,c4]@4 ~@5 [f3,ab3,c4]@5 ~ d4@5 ~ f4@4 ~@2 [bb3,eb4]@9 [ab3,db4]@3 bb3@2, ~@7 ab3@6 ~@9 [f3,bb3]@11 ~ e3@12 ~@2]/2", // Fm F5 Fm Eb5 Db5 Bb5
  AB: "[~ [f3,ab3]@4 ~@2 [f3,c4]@4 ~@5 [f3,ab3,c4]@5 ~ f3@6 ~@4 f3@2 bb3@9 [ab3,db4]@3 bb3 ~, ~ c4@2 ~@4 ab3@6 ~@9 bb3@10 ~@2 e3@12 ~@2, ~@28 db4@6 eb4@7 ~@7]/2", // Fm F5 Fm Db5
  AC: "[~ ab3@4 ~@2 [ab3,c4]@5 ~@4 [f3,ab3,c4]@5 ~@7 db4@5 ~ [bb3,eb4]@9 [ab3,db4]@4 ~, ~ c4@2 ~@45, ~ f3 ~@5 f3@3 ~@12 [f3,bb3]@11 ~ e3@12 ~@2]/2", // Ab Fm Eb5 Db5 Bb5
  AD: "~ [ab3,c4,db4,f4]@8 ~@7 ab4@6 ~@2, ~ bb2@23, ~@5 [ab3,c4,db4,f4]@7", // Dbmaj7
  AE: "~@7 d4 eb4 ~ d4@14, ~ [c3,g4]@23, ~@4 bb3@17 ~@3", AF: "~@10 c5@13 ~, ~ [db3,ab3,c4,f4]@23",
  AG: "~ [f4,bb4]@23, ~ [eb3,bb3]@19 ~@4", AH: "[~ [g3,ab3,c5]@45 ~@2, ~ eb4@47]/2", AI: "~ [db3,ab3,c4,f4]@23",
  AJ: "~ [c3,g3]@23, ~ [bb3,eb4]@20 ~@3", AK: "[~ g3@27 ~@15 f4@5, ~ [ab3,c4,c5]@47, ~ f4@25 ~@2 [f3,eb4,bb4]@20]/2",
  AL: "[~ [ab3,c4,f4]@24 ~@15 db4@8, ~ db3@23 ~ [c3,g3,bb3,eb4]@23]/2", // Fm Cm7
  AM: "[~@40 ab4@9 ~@15 c4@9 ~@15 db4@8, ~ [g3,c4]@33 eb4@15 c4@12 ~@12 bb3@16 ~@7, ~@7 ab3@42 [db3,ab3,f4]@24 [c3,eb4]@23, ~@10 c5@39 ~@47, ~@16 f4@33 ~@9 db4@14 ~@9 g3@15]/4", // C5 Db Cm
  AN: "[~@34 g4@15 [db3,ab3,c4,f4]@21 [c3,g3,bb3,eb4] ~, ~ f3@15 eb4@6 ab4@6 bb4@21 ~@23, ~@4 c4@45 ~@23, ~@7 f4@42 ~@23, ~@10 c5@39 ~@23]/3", // Dbmaj7 Cm7
  AO: "~@7 [g3,bb3,eb4]@14 ~ ab4@2, ~@2 c3@9 ~", // Eb
  AP: "[~ bb4@2 ~ b4 bb4@2 ~ eb4@3 ~ eb5@7 ~@2 db5@2 b4@2 bb4@16 ~@2 ab4 ~ bb4 ab4 eb4, ~@7 ab4@2 ~@39]/2",
  AQ: "~@14 eb4 ~ gb4 eb4 ~ e4 ab4 ~ b4 ~", AR: "~ eb5@3 ~@6 db5 eb5@2 db5@3 ~@8",
  AS: "~@4 ab4 b4 ~ bb4 ab4 ~ eb4 ~@2 gb4@2 ~ bb4 ab4 ~ gb4 eb4 ~@3",
  AT: "~@10 db4 f4 ~ ab4 c5 ~@2 bb4@2 ab4 f4 ~ db4@2", AU: "~ c4@8 ab4 ~ g4@2 eb4 ~@2 db4@3 c4@2 ~ bb3@2",
  AV: "[~@10 f3@4 ~@2 [ab3,c4]@6 ~@9 f3@2 ~ bb3@9 [ab3,db4]@3 bb3@2, ~ [f2,ab3]@15 ~@9 bb3@6 ~@3 e3@13 ~, ~ c4@12 ~@3 f3@3 ~@3 f3@6 db4@5 ~ eb4@7 ~@7]/2", // Ab Db5 Fm
  AW: "[~ [f3,ab3,c4]@4 ~@2 [f3,c4]@4 ~@2 f3 ~@2 [ab3,c4]@6 e3 ~@8 f3 ~@2 [bb3,eb4]@9 ~@3 bb3@2, ~@7 ab3@6 ~@3 f3@3 ~@3 f3@6 db4@5 ~@10 [ab3,db4]@5, ~@25 bb3@6 ~@3 e3@13 ~]/2", // Fm F5 Ab Eb5 Db5
  AX: "~ [f3,c4]@3 ~@3 [f3,ab3,c4]@7 ~@2 [f3,ab3,c4]@8, ~ ab3@5 ~@18", // F5 Fm
  AY: "~ f4@6 eb4@5 ~ gb3@6 eb4@4 ~, ~ [gb3,bb3]@11 ~ [bb3,c4]@10 ~, ~@13 f4@5 ~@6", // Gb Bbsus2
  AZ: "[~ [f3,ab3,c4]@4 ~@2 [ab3,c4]@6 ~@3 [ab3,c4]@6 ~@6 d4@2 ~@4 [e3,bb3]@9 [ab3,db4]@3 bb3@2, ~@7 f3@4 ~@5 f3@4 ~@2 [f3,bb3]@12 eb4@8 ~@6]/2", // Fm Ab Edim Db5 Bb5
  BA: "[~ ab3@5 ~ [f3,c4]@4 ~@5 [f3,ab3,c4]@5 ~@13 f4@14, ~ c4@2 ~@45, ~ f3 ~@5 ab3@6 ~@9 [f3,bb3,d4]@26]/2", // F5 Fm Bb
  BB: "[~ ab3@4 ~@2 ab3@6 ~@3 [f3,ab3,c4]@5 ~ [bb3,d4]@12 [bb3,d4,f4]@13 ~, ~ c4@2 ~@4 c4@4 ~@37, ~@7 f3 ~@14 f3@25 ~]/2", // Fm Bb
  BC: "~@2 db4, ~ bb2@23, ~ f4@5, ~@7 ab3@17, ~@5 c4@7", BD: "~@7 d4 eb4 ~ d4@14, ~ [c3,g4]@22 ~, ~ bb3@4 ~",
  BE: "~@5 ab3@7, ~ [db3,c4,f4]@23", BF: "~@5 g4@7, ~ [eb3,g3,eb4,f4]@23",
  BG: "[~@5 eb5, ~ [g3,ab3,c4,f4]@47, ~@5 c5@19, ~@8 ab4@9 ab4@7, ~@7 g5@5]/2", BH: "~ [c3,g3,eb4]@23, ~ bb3@19 ~@4",
  BI: "[~@23 c4, ~ f3@15 g4@12 c4@6 ab3@6 f4@8, ~@4 ab3@21 f3@23, ~@2 c4@9 eb4@13, ~@7 eb4@3 ab4@38]/2",
  BJ: "~@2 db4, ~ c3@23, ~ [bb3,eb4]@16 ~@7, ~@5 g3@7", // Eb5
  BK: "[~@5 f5, ~ f3@21 c5@12 [ab4,eb5,g5]@14, ~ ab3@7, ~@5 [eb4,f4]@19, ~ c4@2]/2", // Abmaj7 Ebsus2
  BL: "[~@10 c5@3 ~@21 [bb3,bb4]@9 ab4@5 ~@40 eb4@8, ~ c4@48 g3@30 ab4@3 g4@14, ~ [db3,ab3,f4]@24 c3@24 ~@3 c4@44, ~@13 bb4@11 ~@10 eb4@14 ~ f4@6 ab3@41, ~@8 c5@21 eb4@3 f4@16]/4", // Bb Db
  BM: "~ [db3,ab3,c4,f4]@20 ~ [c3,g3,bb3,c4,eb4] ~", BN: "~@7 [g3,bb3,eb4]@17, ~ c3@5",
  BO: "[~@31 g4@48 ~@17, ~ f2@18 eb4@48 ~@29, ~@5 c3@19 bb4@48 ~@24, ~@5 f3@25 ~@18, ~@7 bb3@24 ~@17]/4",
})).s("gm_epiano2").gain(0.53)

// drums · kick
const kick = s("bd").struct("<~@16 A B@16 A B A B@7 C B@13 A B A B@15 D B@7 E B@13 A E@2 B@15 D F ~@3>".pickRestart({
  A: "~ x ~@8 x ~@2 x ~@10", B: "~ x ~@8 x ~@2 x ~@8 x ~", C: "~@4 x ~@2 x ~@16", D: "~@4 x ~@2 x ~@14 x ~",
  E: "~ x ~@5 x ~@5 x ~@5 x ~@4", F: "~ x ~@22",
})).gain(0.47)

// drums · snare
const snare = s("sd").struct("<~@16 A@27 ~ A@31 B A@7 C A@14 D E A@15 B ~@4>".pickRestart({
  A: "~@7 x ~@11 x ~@4", B: "~@19 x ~@4", C: "~@16 x ~@2 x ~@2 x ~", D: "~@7 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  E: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@7",
})).gain(0.53)

// drums · low tom
const low_tom = s("lt").struct("<~@75 [~@2 x] ~@23 [~@11 x] ~@15 [~@2 x] ~@4>").gain(0.53)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A B A B A@3 B A@3 B A@3 B A@3 B A@3 B A@2 B ~ A@3 B A@3 B A@3 B A@3 B A@3 B A@2 B A@4 B A@2 B ~@9 A@3 B A@3 B A@3
  B A@2 C ~ A@3 B A@2 B A@4 B A@2 B ~@5
>`.pickRestart({
  A: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", B: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@4",
  C: "~ x ~@2 x ~@19",
})).gain(0.37)

// drums · mid tom
const mid_tom = s("mt").struct("<~@99 [~@19 x ~@4] ~@20>").gain(0.47)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@15 A ~ B ~ B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@2 B ~@4 B ~@15 B ~@3 B ~@3 B ~@3 C
  ~@3 B ~@2 B ~@4 B ~@8
>`.pickRestart({
// … 40 more lines

More by Chris Rea