Strudelify
Clair cover art

Clair

Clair

Gilbert O'Sullivan

KeyA♭ majorTempo109 bpm
0:00/0:00
// Clair — Gilbert O'Sullivan
// 109 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 80 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(109/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 · acoustic bass · "Bass Gtr"
const bass = note(`<
  ~@2 A B C D E F G H I J K L B M N I O K P Q B G R@2 S T U V W X B Y H I J Z R AA B AB R AC AD R AE AF AG AH AI AJ AK
  AL AM AN AO AP AQ AR AS AT AU AV AA AW AX R T AY AZ BA BB W BC BD@2 BE@3
>`.pickRestart({
  A: "f2@4 ~ f2 c2@4 f1 c2", B: "bb1@4 ~ bb1 f1@3 bb1 f1 bb1", C: "eb2@4 ~ eb2 bb1@3 eb2 bb1 b1",
  D: "c2@4 ~ c2 g2@3 c2 g2 c2", E: "f2@4 ~ f2 c2@3 f2 c2 f1", F: "bb1@3 ~@2 bb1 f1@3 bb1 f1 bb1",
  G: "eb2@4 ~ eb2 bb1@3 eb2@2 bb1", H: "c2@4 ~ c2 g1@3 c2 g1 c2", I: "f2@4 ~ f2 eb2@4 ~ eb2",
  J: "db2@4 ~ db2 bb1@4 ~ bb1", K: "g1@5 f1 eb1@3 eb2 bb1 eb1", L: "f1@4 ~ c2 f2@2 ~ f2 c2 f1",
  M: "eb2@4 ~ eb2 bb1@3 eb2 eb1 bb1", N: "c2@3 ~@2 c2 g1@3 c2 g1 c2", O: "db2@5 db2 bb1@4 ~ bb1",
  P: "ab1@5 eb2 ab2@2 ~ ab2 eb2 ab1", Q: "a1@4 ~ a1 a2@3 a1 a2 a1", R: "ab1@5 eb2 ab2@4 eb2 f2",
  S: "ab1@5 eb2 ab2@2 ab2@2 eb2 f2", T: "ab1@5 eb2 ab2 ~ ab2@2 eb2 f2", U: "bb1@5 f2 bb2@3 f2@3",
  V: "bb1@4 ~ bb1 f1 ~ f1 bb1@2 f1", W: "eb2@4 ~ eb2 bb1@3 eb2@3", X: "f1@4 ~ c2 f2@4 c2 f2",
  Y: "eb2@4 ~ eb2 bb1@2 eb1 eb2 bb1 eb1", Z: "g1@4 ~ g1 eb1@4 ~ eb1", AA: "a1@4 ~ a1 a2@3 a1@3",
  AB: "eb2@4 ~ eb2 bb1@3 eb2 bb1 eb2", AC: "ab1@5 eb2 ab2@3 ab1 eb2 f2", AD: "ab1@4 ~ eb2 ab2@3 eb2 f2 eb2",
  AE: "bb1@5 f2 bb2@4 f2 bb2", AF: "bb1@4 ~ bb1 f1@2 f1 bb1@2 f1", AG: "eb1@5 bb1 eb2@3 bb1@2 ~",
  AH: "gb2@4 ~ db2 gb1 ~ gb1@3 db2", AI: "b1@4 ~ b1 a1@4 ~ a1", AJ: "ab1@5 gb1 e1@4 b1 c2",
  AK: "db2@5 ab1 db1@4 ab1 db2", AL: "eb2@4 ~ eb2 eb2@5 eb2", AM: "db2@5 ab1 db2 ab1 db1@3 ab1",
  AN: "db2@5 ab1 db2 ~ db2@2 ~@2", AO: "f2@5 c2 f2 c2 f1@4", AP: "bb1@5 f1 bb1 ~ bb1@2 ~ bb1",
  AQ: "eb2@5 bb1 eb2@5 bb1", AR: "ab1@2 eb2 ab2 eb2 ab1 f1@2 c2 f2 c2 f1",
  AS: "bb1@3 [f2,bb2] f2 bb1 eb2@2 bb1@2 eb2 bb1", AT: "ab1@2 eb2 ab2 eb2 ab1 f2@2 c2 f1 c2 f1",
  AU: "bb1@2 f2 bb2 f2 bb1 eb2@2 eb2@2 bb1 eb2", AV: "ab1@5 eb2 ab2@4 ab1 ab2", AW: "bb1@5 f2 bb2 f2 bb1@3 bb1",
  AX: "eb2@4 ~ eb2 bb1@4 eb2 bb1", AY: "ab1@4 ~ ab1 ab2@4 eb2 f2", AZ: "ab1@4 ~ eb2 ab2@4 eb2 f2",
  BA: "bb1@5 f2 bb2@5 f1", BB: "bb1@5 f1 bb1@3 c2 db2 d2", BC: "d2@4 ~ d2 d2@6",
  BD: "[db2@8 ~@2 db2@2 ~ db2@13 c2@14 bb1@8]/2", BE: "[eb1@9 ~ ab1@58 ~@4]/3",
})).s("gm_acoustic_bass").gain(0.45)

// chords · piano · "El Piano"
const piano = note(`<
  ~@2 A B C D A B C D E B F A B G D H B F I J B C K L M A M B N A B C D H B F I O B C K L M A M B N P Q R S T U L A B C
  V W V W I O B C K L M A M B X Y Z AA AB@3
>`.pickRestart({
  A: "[ab3,c4,eb4,f4] ~ [ab3,c4,eb4,f4] ~ [ab3,c4,eb4,f4] ~ [ab3,c4,eb4,f4] ~", // Fm7
  B: "[ab3,bb3,db4,f4] ~ [ab3,bb3,db4,f4] ~ [ab3,bb3,db4,f4] ~ [ab3,bb3,db4,f4] ~", // Bbm7
  C: "[g3,bb3,db4,eb4] ~ [g3,bb3,db4,eb4] ~ [g3,bb3,db4,eb4] ~ [g3,bb3,db4,eb4] ~", // Eb7
  D: "[g3,bb3,c4,eb4] ~ [g3,bb3,c4,eb4] ~ [g3,bb3,c4,eb4] ~ [g3,bb3,c4,eb4] ~", // Cm7
  E: "[ab3,c4,eb4,f4] ~ [ab3,c4,eb4,f4] ~ [ab3,c4,f4] ~ [ab3,c4,f4] ~", // Fm7 Fm
  F: "[g3,bb3,db4,f4] ~ [g3,bb3,db4,f4] ~ [g3,bb3,db4,eb4] ~ [g3,bb3,db4,eb4] ~", // Gm7b5 Eb7
  G: "[g3,bb3,db4,eb4] ~ [g3,bb3,db4,eb4] ~ [g3,bb3,db4,eb4] ~ [g3,bb3,eb4] ~", // Eb7 Eb
  H: "[ab3,c4,f4] ~ [ab3,c4,f4] ~ [ab3,c4,f4] ~ [ab3,c4,f4] ~", // Fm
  I: "[ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,db4,eb4] ~ [ab3,c4,eb4] ~", // Ab Absus4 Ab
  J: "[a3,c4,eb4] ~ [a3,c4,eb4,gb4] ~ [a3,c4,eb4,gb4] ~ [a3,c4,eb4,gb4] ~", // Adim
  K: "[g3,ab3,c4,eb4] ~ [g3,ab3,c4,eb4] ~ [g3,ab3,c4,eb4] ~ [g3,ab3,c4,eb4] ~", // Abmaj7
  L: "[ab3,c4,db4,f4] ~ [ab3,c4,db4,f4] ~ [ab3,c4,db4,f4] ~ [ab3,c4,db4,f4] ~", // Dbmaj7
  M: "[ab3,bb3,d4,f4] ~ [ab3,bb3,d4,f4] ~ [ab3,bb3,d4,f4] ~ [ab3,bb3,d4,f4] ~", // Bb7
  N: "[eb4,f4,ab4,c5] ~@3 [db4,eb4,g4,c5] ~@3", // Fm7 Cm
  O: "[a3,c4,eb4,gb4] ~ [a3,c4,eb4,gb4] ~ [a3,c4,eb4,gb4] ~ [a3,c4,eb4,gb4] ~", // Adim
  P: "[db4,e4,gb4,a4] ~ [db4,e4,gb4,a4] ~ [db4,e4,gb4,a4] ~ [db4,e4,gb4,a4] ~", // Gbm7
  Q: "[b3,d4,gb4,a4] ~ [b3,d4,gb4,a4] ~ [b3,d4,gb4,a4] ~ [b3,d4,gb4,a4] ~", // Bm7
  R: "[b3,d4,e4,ab4] ~ [b3,d4,e4,ab4] ~ [b3,d4,e4,ab4] ~ [b3,d4,e4,ab4] ~", // E7
  S: "[b3,db4,e4,ab4] ~ [b3,db4,e4,ab4] ~ [b3,db4,e4,ab4] ~ [b3,db4,e4,ab4] ~", // Dbm7
  T: "[a3,db4,eb4,gb4] ~ [a3,db4,eb4,gb4] ~ [a3,db4,eb4,gb4] ~ [a3,db4,eb4,gb4] ~", // Ebm7b5
  U: "[ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~", // Db
  V: "[g3,ab3,c4,eb4] ~ [g3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~", // Abmaj7 Fm7
  W: "[f3,ab3,bb3,db4] ~ [f3,ab3,bb3,db4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~", X: "[eb4,f4,ab4,c5] [db4,eb4,g4,c5]",
  Y: "[d4,f4,ab4,c5]", Z: "[db4,f4,ab4,c5]", AA: "~ [c4,eb4,ab4]@7 [bb3,db4,f4,ab4]@4",
  AB: "[[db4,eb4,f4,g4,c5]@9 ~ ab3@4 eb4@4 c5@4 ~ g5@44 ~@5]/3", // Cm
})).s("gm_piano").gain(0.35).pan(0.8)

// chords · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  ~ A@8 B@4 C@7 D@5 E@5 F G@7 H@2 I J K L@2 M@3 N O@2 P@2 Q R@4 S@2 T@7 U@2 V@4 W@7
>`.pickRestart({
  A: "[~@40 eb4@6 ~@18 ab4@6 ~@18 f4@6 ~@18 eb4@6 ~@18 eb4@6 ~@18 ab4@6 ~@18 g4@6 ~ g3, ~@22 f3@24 ~ f3@23 ~@49 f3@23 ~ [f3,ab3]@23 ~ g3@23 ~@2, ~@23 [ab3,c4]@23 ~@2 [ab3,bb3]@23 [g3,bb3]@23 ~ [g3,bb3,c4]@23 ~@2 [ab3,c4]@22 ~@2 [bb3,db4]@22 ~@2 bb3@22 ~@2, ~@24 eb4@14 ~@11 db4@21 ~@2 eb4@22 ~@2 eb4@14 ~@59 eb4@22 ~, ~@17 g4@6 ~@6 c5@6 ~@6 c5@6 ~@6 g4@6 ~@6 c5@6 ~@6 c5@6 ~@6 bb4@6 ~]/8", // Fm Ab Absus2 Gm C7 Ab Bbm
  B: "[[bb3,c4,eb4]@11 ~@7 eb4@5 ~ [bb3,db4]@11 ~ [db4,f4]@5 ~ [bb3,eb4]@6, ~@23 f3@23 ~ [f3,ab3]@23 ~@26, ~@24 [ab3,c4]@22 ~@25 [g3,bb3]@11 ~ g3@13]/4", // Cm7 Bbm Db Eb5 Fm Ab Gm
  C: "[~@16 eb4@6 ~@18 ab4@6 ~@26 [c4,eb4]@20 ~@4 c4@6 ~@6 eb4@10 ~@2 [bb3,db4]@22 ~@2 [db4,f4]@12 [g3,bb3,db4,eb4]@10 ~ [ab3,c4], ~ f3@21 f3@24 ~@18 f4@16 ~@22 f4@6 ~@60, ~@2 ab3@20 ~ ab3@23 ~ [g3,bb3]@23 ~ [g3,bb3]@21 ~@3 f3@23 f3@24 ~@26, ~@4 c4@18 ~@2 [bb3,db4]@22 ~@3 eb4@22 ~@25 ab3@22 ~ ab3@23 ~ [g3,bb3]@13 ~@12, ~@3 eb4@2 c5@6 ~@6 c5@6 ~@6 c5@11 ~@13 c4@6 ~@25]/7", // Cm Bbm Db Eb7 Ab Gm Bbm Gm
  D: "[[eb4,ab4]@10 ~@8 [c4,ab4]@4 ~@2 [a3,c4,eb4]@22 ~@2 [bb3,db4,f4]@22 ~@2 [bb3,eb4]@23 ~@23 eb4@2, ~@10 ab3@4 ~@2 ab3@4 ~@2 gb3@24 ~ ab3@23 ~ g3@23 ~ ab3@15 ~@2 ab3@8, ~@12 [db4,ab4]@6 ~@77 c4@17 ~@2 c4@6, ~@48 [eb4,g4]@9 ~ g4@2]/5", // Ab5 Fm Adim Bbm Eb5 Db5 Eb
  E: "[[c4,db4,f4]@8 ab3 [c4,db4,f4]@2 ~@6 f4@6 ~ [eb4,f4]@8 ab3 [c4,eb4,f4]@2 ~ [bb3,d4,f4]@11 ~ [bb3,db4,f4]@11 ~, ~@22 ab3@24 ~ [ab3,c4]@17 ~@6 ab3@24 ~ ab3@23 ~@2, ~@14 bb3@9 ~@37, ~@30 c4@16 ~@25 c4@23 ~@26, ~@16 d4@7 ~@37]/5", // Dbmaj7 Ebsus2 F7 Bb Bbm Ab
  F: "[eb4,f4,ab4,c5]!2 [db4,eb4,g4,c5]@2", // Fm7 Cm
  G: "[~@16 eb4@6 ~@18 ab4@6 ~@18 f4@6 ~@18 eb4@6 ~@2 c4@6 ~@6 eb4@10 ~@3 db4@21 ~@2 [db4,f4]@10 ~@2 [db4,eb4]@10 ~ [ab3,c4], f3@11 f3@6 c5@6 ~@6 c5@6 ~@6 g4@6 ~@4 f4@8 ~@25, ~@2 ab3@20 ~ ab3@23 ~ g3@23 ~ [g3,bb3]@23 ~ [f3,ab3]@23 f3@24 ~@26, ~@2 c4@9 ~ bb3@11 ~ [bb3,eb4]@11 ~ eb4@7 ~@17 bb3@11 ~@13, ~@6 f4@16 ~@3 db4@21 ~@26 c4@22 ~@12 c4@12 ~ ab3@23 ~ [g3,bb3]@11 ~ [g3,bb3]@11 ~@2]/7", // Db Dbsus2 Ab Gm Fm Eb5 Gm
  H: "[[eb4,ab4]@5 ~ db4@3 c4@2 ~ [c4,eb4]@8 gb3@4, ~@5 ab3@4 ~@2 gb3@9 ~@4, ~@12 ab4@10 ~ a3@17 ~@8]/2", // Ab5 Cm
  I: "~@3 ab3@4 ~@4 db4, f4@9 ~ f4@2, bb3@8 ab3@3 ~, ~@2 db4@7 bb3@2 ~", J: "~ bb3@10 ~, [g3,eb4]@11 ~",
  K: "~@3 eb4@5 ab3 [c4,eb4,g4]@2 ab3, ab3@2 ~, ~ c4@7 ~@4, ~ g4@3 ~@2", // Cm
  L: "[[c4,db4,f4]@11 ~ [bb3,c4,f4]@11 ~, ~@23 ab3@23 ~@2]/2", // Dbmaj7 Bbsus2
  M: "[~ f4@15 ab3@2 [c4,eb4,f4]@4 ~@2 [bb3,c4,d4,f4]@22 ~@20 f4@4 ~@2, [ab3,c4,eb4]@16 ~@6 ab3@24 ~ ab3@11 ~@2 ab3@10 ~@2, ~@24 f4@8 db4@3 ~, ~@24 [bb3,db4]@7 bb3@4 ~]/3", // F7 Bb Ab Bbm
  N: "[eb4,f4,ab4,c5]@5 ~ [eb4,f4,ab4,c5]@4 ~@2 [eb4,g4,c5]@12, ~@5 db4@7", // Fm7 Cm
  O: "[~@3 db4@5 ~ a3@2 ~@3 d4@6 ~ [a3,b3,d4]@3, gb3@8 gb3@2 ~ gb3@9 gb3@4, ~ a3@7 ~@4 a3@8 ~@4, ~@2 e4@6 ~ [db4,e4]@3 ~ b3@7 ~@4]/2", // Bm7 Dbm
  P: "[~@4 d4@6 ~@2 [b3,db4,e4]@8 ~ [b3,db4,e4]@2 ab3, e3@5 e3 ~@6, ~ ab3@9 ~ ab3@9 ab3@2 ~@2, ~ b3@4 ~@7, ~@3 gb4@7 ~@14]/2", // Dbm7
  Q: "~@4 gb4@4 gb3 [a3,db4,eb4,gb4]@2 gb3, gb3@2 ~, ~ a3@7 ~@4, ~ db4@3 ~@2, ~@3 eb4@5 ~@4", // Ebm7b5
  R: "[[ab3,db4,f4]@11 ~ [c4,db4,f4]@11 ~@9 eb4@3 ~@9 ab4@3 ~, ~@23 [f3,ab3]@23 ~ [f3,ab3]@23 ~ [f3,ab3]@24 ~, ~@24 c4@11 ~ [bb3,db4]@11 ~, ~@49 eb4@13 ~@34, ~@29 g4@6 ~@6 c5@6 ~]/4", // Db Dbmaj7 Fm Bbm
  S: "[~@16 f4@6 ~@2 [eb4,g4]@10 ~@2 [c4,eb4]@10 ~ f3, [g3,bb3]@23 [ab3,c4]@11 ~ [f3,ab3]@11 ~@2, ~ eb4@21 ~@26, ~@5 c5@6 ~@13]/2", // Eb Cm Gm Ab Fm
  T: "[~ db4@10 ~ eb4@10 ~@2 [eb4,g4]@10 ~@2 [c4,eb4]@10 ~@2 [bb3,db4]@10 ~@8 f4@4 ~@2 ab4@10 ab3@2 [db4,ab4]@4 ab3@2 [c4,eb4,ab4]@4 ~@2 [a3,c4,eb4]@22 ~@2 [bb3,db4]@22 ~@2 [bb3,eb4]@22 ~ c4, [ab3,bb3]@11 [g3,bb3]@11 ab3@12 f3@12 ~ [f3,ab3]@12 bb3@11 ~@49 ab3@23 ~ g3@23 ab3@2, ~@23 c4@11 ~ ab3@11 ~@12 g3@12 ~ [ab3,c4]@11 ~@12 gb3@24 f3@24 ~@26, ~@30 eb4@5 ~@49, ~@32 c5@3 ~@49]/7", // Eb Cm Bbm Db5 Ab Adim Bbm Eb5 …
  U: "[eb4@8 ~@6 g4@8 ~@3 db4@23, g4@12 eb4@10 ~ f4@25, ~@4 ab3@7 ab3@13, ~@5 c4@6 ~ c4@12]/2",
  V: "[~@3 [ab3,f4]@8 ~@13 [bb3,c4,d4,f4]@11 ~ [bb3,db4,f4]@5 ~@3 f4@4, bb3@22 ~ [ab3,c4]@15 ab3@6 ~@2 ab3@24 ~ ab3@11 ab3@14, ~ c4@10 ~@9 c4@2 eb4@2 ~@18 bb3@6, ~@2 d4@9 ~ [eb4,f4]@8 ~ f4@2 ~@20 db4@5]/4", // Db Bb Bbm Ab Ebsus2
  W: "[[eb4,f4,ab4,c5]@10 ~@2 [eb4,g4]@12 ~@47 ab4@2 ~@8 c5@5 ~@3 [db4,f4,ab4]@14 ~@4 g4@58 ~@3, ~@10 db4@14 d4@14 ~@2 d4@6 ~@2 db4@15 ~ db4@7 ~@3 c4@12 ~ bb3@16 ~@2 [ab3,c4]@60 ~@3, ~@12 c5@16 ab4@16 ~@2 ab4@4 ~@2 ab4@17 ~@9 ab4@8 ~@82, ~@26 f4@16 ~@2 f4@4 ~@2 f4@17 ~@2 f4@4 ~@3 eb4@10 ~@20 eb4@58 ~@4, ~@30 c5@16 ~@8 c5@19 ~@95]/7", // Fm7 Eb Db Ab
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0.2)

// other · harmonica
const harmonica = note("<~@49 A B@2 C@2 D E ~@18 F G H I@3>".pickRestart({
  A: "a4@9 ~@2 gb4", B: "[a4@2 db5 db5@2 db5@3 b4 a4@2 ab4@9 ~@4]/2",
  C: "[ab4@2 b4 b4@2 b4@3 a4 ab4@2 gb4@7 gb4@3 ab4@2 a4]/2", D: "ab4@3 f4@2 gb4 ab4@3 f4@2 gb4",
  E: "ab4@2 bb4 c5@2 bb4@3 ab4@4", F: "ab4@5 f4 ab4@2 bb4 c5@3", G: "ab4@10 f4@2 ~ ab4@4 bb4@2 c5@5",
  H: "~@2 ab4@12 f4@2 ab4@5 ~ bb4@2", I: "[c5@6 ~ bb4@3 eb4@59 ~@3]/3",
})).s("gm_harmonica").gain(0.49).pan(0.3)

// other · whistle
const whistle = note("<~@2 A@3 B ~@74>".pickRestart({
  A: "[~@16 c7@2 bb6@2 ~@2 ab6@5 ~ f6@2 db6@3 ~ bb5@6 c6@2 db6@4 eb6@8 ~@16 c6@2]/3",
  B: "eb6@3 ~ f6@2 g6@3 ~ g6@10 ~@4",
})).s("gm_whistle").gain(0.4).pan(0.7)

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

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!71 [~@3 x] ~@6>").gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@10 A ~@17 B ~@6 A ~@10 A ~@6 B ~@24>".pickRestart({
  A: "~@11 x", B: "~@10 x!2",
})).gain(0.3)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@10 A ~@17 B ~@6 A ~@10 C ~@6 D ~@24>".pickRestart({
  A: "~@5 x", B: "~@5 x!5 ~@2", C: "~@9 x!2 ~", D: "~@7 x!3 ~@2",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@12 A ~ A ~@4 A ~@5 A ~ A ~@2 A ~ A ~ A ~ A ~@2 A ~@2 A ~ A@3 ~ A ~ A ~ A ~@2 A ~ A ~ A@4 ~ A ~ A ~ A@6 ~ B ~ C ~@2
>`.pickRestart({
  A: "~@11 x", B: "~@19 x ~@4", C: "~@5 x ~@6",
})).gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~ A ~@10 B ~@17 C ~@17 D ~@6 E ~@24>".pickRestart({
  A: "~@8 x!2 ~@2", B: "~@2 x", C: "~ x ~ x ~@8", D: "~@7 x!2 ~@3", E: "~@5 x!2 ~@5",
})).gain(0.35)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@2 A B C D E F@2 B G@3 H B@2 F I J B@2 I H D K H G K L B@3 M G@2 N B O B G O B@3 M B O B G H B H J G L G B J N B G
  B@5 O B J B@4 H A P ~@4
>`.pickRestart({
  A: "x!4", B: "x ~ x!2 ~ x!2 ~ x!2 ~ x", C: "x ~ x!2 ~@2 x ~@2 x ~@2", D: "x ~@2 x ~@2 x ~ x!2 ~ x",
  E: "x ~@2 x ~ x!2 ~ x!2 ~@2", F: "x ~ x!2 ~ x!2 ~@2 x ~ x", G: "x ~ x!2 ~ x!2 ~ x!2 ~@2",
  H: "x ~ x!2 ~ x!2 ~@2 x ~@2", I: "x ~@2 x ~ x!2 ~ x!2 ~ x", J: "x ~ x!2 ~@2 x ~ x!2 ~ x",
  K: "x ~ x!2 ~@2 x ~ x!2 ~@2", L: "x ~@2 x ~@2 x ~ x!2 ~@2", M: "x ~@2 x ~ x!2 ~@2 x ~ x",
  N: "x ~@2 x ~@2 x ~@2 x ~ x", O: "x ~ x!2 ~@2 x ~@2 x ~ x", P: "x!2 ~@2",
})).gain(0.25)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@2 A ~ B C D E@2 ~ F@3 G ~@2 E H I ~@2 H G C J G F J K ~@3 L F@2 M ~ N ~ F N ~@3 L ~ N ~ F G ~ G I F K F ~ I M ~ F
  ~@5 N ~ I ~@4 G B O ~@4
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x", B: "~@5 x ~@2 x ~@2 x", C: "~@2 x ~@2 x ~@6", D: "~@2 x ~@8 x", E: "~@2 x", F: "~@11 x",
  G: "~@8 x ~@2 x", H: "~ x ~@4", I: "~@5 x ~@6", J: "~@5 x ~@5 x", K: "~@2 x ~@2 x ~@5 x", L: "~ x ~@2 x ~",
  M: "~@2 x ~@2 x ~@2 x ~@3", N: "~@5 x ~@2 x ~@3", O: "~@10 x ~@2 x ~@3 x ~ x ~@3 x",
})).gain(0.15)

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

stack(
  bass, piano, acoustic_guitar_nylon, harmonica, whistle, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom,
  crash, tambourine, tambourine_soft, cabasa
)

More by Gilbert O'Sullivan