Strudelify
Get Down cover art

A Friend Of Mine

Get Down

Gilbert O'Sullivan

KeyD♭ majorTempo124 bpm
0:00/0:00
// Get Down — Gilbert O'Sullivan
// 124 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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.

// chords · piano
const piano = note(`<
  A B@3 C@2 D@7 E F@7 G@2 H I J@2 K L M N@7 O@2 E F@7 G@2 H I J@2 K L M N@7 O@2 E P E Q R@2 S T B@3 U@8 V
>`.pickRestart({
  A: "~@7 [f3,ab3,db4]", // Db
  B: "[~@2 [f3,ab3,db4] ~ [gb3,bb3] ~ gb3 ~ [f3,ab3,db4]@3 ~ [gb3,bb3,db4] ~ [f3,ab3,db4]@4 f3 ~ [gb3,bb3] ~ gb3 ~ [f3,ab3,db4]@2 ~@2 [gb3,bb3,db4] ~ [f3,ab3,db4]@4 f3 ~ [bb3,db4]@2 gb3 ~ [f3,ab3,db4]@2 ~@2 [gb3,bb3,db4] ~ [f3,ab3,db4]@2, ~@4 db4@2 ~@14 db4@2 ~@14 gb3 ~@11]/3", // Db Gb Db Gb Db Gb Db Gb …
  C: "[~@2 f3 ~ [gb3,bb3,db4]@2 ~@2 [f3,ab3,db4]@3 ~ [gb3,bb3,db4] ~ [ab3,db4]@4 f3 ~ [gb3,bb3,db4]@2 ~@2 [f3,ab3,db4]@3 ~ [gb3,bb3,db4] ~ ab2@2, ~@7 f3 ~@8]/2", // Gb Db Gb Db5 Gb Db Gb
  D: "[~@2 ab2 ~ ab2@2 ~@2 ab2@3 ~ ab2 ~ [f3,ab3,db4]@4 f3 ~ [gb3,bb3] ~ gb3 ~ [f3,ab3,db4]@2 ~@2 [gb3,bb3,db4] ~ [ab3,db4]@4 f3 ~ [bb3,db4]@2 gb3 ~ [f3,ab3,db4]@3 ~ [gb3,bb3,db4] ~ [bb3,db4]@6 ~@2 [f3,db4]@6 ab3 ~ [gb3,bb3]@4 [eb3,bb3] ~ [eb3,ab3] ~ eb3 ~ [gb3,bb3,db4]@2 eb3 ~@3 eb3 ~ eb3 ~ eb3 ~ [ab3,db4]@2 f3 ~ ab3@2 eb3@2 ab3 ~ [db3,gb3]@3 ~ db3@2 gb3 ~@3 ab3@2 eb3@2 ab3 ~ [f3,ab3,db4]@2, ~@20 db4@2 ~@8 f3@2 ~@4 gb3 ~@9 gb3@4 ~@4 ab3@4 ~@4 eb3@2 ~@4 c4@2 ~@2 eb3 ~@5 [ab3,c4]@4 ~@2 f3 ~@3 c4@4 ~@2 bb3@4 ~@6 c4@4 ~@4, ~@88 eb3 ~@15 eb3 ~@7]/7", // Db Gb Db Gb Db5 Bbm Db Gb …
  E: "~@2 [f3,ab3,db4] ~ [ab3,db4]@2 f3 ~ [db2,ab3,db4]@2 eb2@2 gb2 ~ [ab1,ab2]@2, ~@4 f3 ~@3 f3 ~ f3 ~@5", // Db Db5 Ab
  F: "[~@2 [ab1,ab2] ~ ab2@2 ab1 ~ [ab1,ab2]@3 ~ [ab1,ab2]@2 [f3,ab3,db4]@4 f3 ~ [gb3,bb3] ~ gb3 ~ [f3,ab3,db4]@2 ~@2 [gb3,bb3,db4] ~ [ab3,db4]@4 f3 ~ [bb3,db4]@2 gb3 ~ [f3,ab3,db4]@3 ~ [gb3,bb3,db4] ~ [bb3,db4]@6 ~@2 [f3,db4]@6 ab3 ~ [gb3,bb3]@4 [eb3,bb3] ~ [eb3,ab3] ~ eb3 ~ [gb3,bb3,db4]@2 eb3 ~@3 eb3 ~ eb3 ~ eb3 ~ [ab3,db4]@2 f3 ~ ab3@2 eb3@2 ab3 ~ [db3,gb3]@3 ~ db3@2 gb3 ~@3 ab3@2 eb3@2 ab3 ~ [f3,ab3,db4]@2, ~@4 ab1 ~@15 db4@2 ~@8 f3@2 ~@4 gb3 ~@9 gb3@4 ~@4 ab3@4 ~@4 eb3@2 ~@4 c4@2 ~@2 eb3 ~@5 [ab3,c4]@4 ~@2 f3 ~@3 c4@4 ~@2 bb3@4 ~@6 c4@4 ~@4, ~@88 eb3 ~@15 eb3 ~@7]/7", // Ab Db Gb Db Gb Db5 Bbm Db …
  G: "[~@2 [f3,ab3,db4] ~ [gb3,bb3] ~ gb3 ~ [f3,ab3,db4]@3 ~ [gb3,bb3,db4] ~ [f3,ab3,db4]@4 f3 ~ [gb3,bb3] ~ gb3 ~ [f3,ab3,db4]@2 ~@2 [gb3,bb3,db4] ~ [ab3,c4,eb4]@2, ~@2 db4 ~@7 db4 ~@5]/2", // Db Gb Db Gb Db Gb Db Gb …
  H: "[f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~", // Fm7
  I: "[f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4] ~ [f3,eb4]@2 [f3,ab3,c4] ~, ~@12 ab3 ~@3", // Fm7 Fm F7 Fm
  J: "[bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4,ab4] ~ [bb3,db4,f4,ab4] ~ [bb3,db4,f4,ab4] ~ [bb3,db4,f4,ab4] ~ [bb3,db4,f4] ~", // Bbm Bbm7 Bbm
  K: "[bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~", // Eb7
  L: "[bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [bb3,db4,eb4,g4] ~ [gb3,bb3,eb4] ~, ~@7 [eb2,eb3]", // Eb7 Ebm Eb
  M: "[gb3,bb3,eb4] ~ [eb2,eb3,f3,bb3,eb4] ~ [eb2,eb3,f3,bb3,eb4] ~ [eb2,gb3,bb3,eb4] ~ [eb2,eb3,gb3,bb3,eb4] ~ [eb2,eb3,g3,bb3,eb4] ~ [eb2,eb3,eb4] ~ [ab1,ab2,c3,eb3,ab3] ~", // Ebm Ebsus2 Ebm Eb Ab
  N: "[[ab1,c3,eb3,ab3] ~ [ab1,ab2,eb3] ~ [ab1,eb3] ~ [ab2,bb3]@2 [eb3,bb3] ~ [ab2,eb3] ~ ab1@2 [f3,ab3,db4]@4 f3 ~ [gb3,bb3] ~ gb3 ~ [f3,ab3,db4]@2 ~@2 [gb3,bb3,db4] ~ [ab3,db4]@4 f3 ~ [bb3,db4]@2 gb3 ~ [f3,ab3,db4]@3 ~ [gb3,bb3,db4] ~ [bb3,db4]@6 ~@2 [f3,db4]@6 ab3 ~ [gb3,bb3]@4 [eb3,bb3] ~ [eb3,ab3] ~ eb3 ~ [gb3,bb3,db4]@2 eb3 ~@3 eb3 ~ eb3 ~ eb3 ~ [ab3,db4]@2 f3 ~ ab3@2 eb3@2 ab3 ~ [db3,gb3]@3 ~ db3@2 gb3 ~@3 ab3@2 eb3@2 ab3 ~ [f3,ab3,c4]@2, ~@2 a3@2 ~@2 [ab1,eb3] ~ ab1@2 b3@2 ~@8 db4@2 ~@8 f3@2 ~@4 gb3 ~@9 gb3@4 ~@4 ab3@4 ~@4 eb3@2 ~@4 c4@2 ~@2 eb3 ~@5 [ab3,c4]@4 ~@2 f3 ~@3 c4@4 ~@2 bb3@4 ~@6 c4@4 ~@4, ~@88 eb3 ~@15 eb3 ~@7]/7", // Ab Ab5 Absus2 Eb5 Ab5 Db Gb Db …
  O: "[~@2 [f3,ab3,c4] ~ [f3,c4] ~ f3 ~ [f3,bb3,db4]@3 ~ [f3,bb3,db4] ~ [db3,gb3,bb3]@4 db3 ~ [db3,bb3] ~ db3 ~ [eb3,ab3,c4]@2 ~@2 [eb3,ab3,c4] ~ [f3,ab3,db4]@2, ~@2 ab3 ~@7 gb3 ~@5]/2", // Fm F5 Bbm Gb Ab Db
  P: "~@2 [ab1,ab2] ~ ab2@2 ab1 ~ [ab1,ab2]@3 ~ [ab1,ab2]@2 [f3,ab3,db4]@2, ~@4 ab1 ~@11", // Ab Db
  Q: "~@2 [ab1,ab2] ~ ab2@2 ab1 ~ [ab1,ab2]@3 ~ [ab1,ab2]@2 [db3,e3]@2, ~@4 ab1 ~@9 a2 ~", // Ab Dbm
  R: "[~@2 a2 ~ [d3,gb3]@2 a2 ~ [db3,e3]@2 a2 ~@3 [gb3,a3]@4 d3 ~ [d3,g3] ~ d3@2 [a3,c4]@2 d3 ~@3 [b2,eb3,gb3]@2, ~@4 a2 ~@3 a2 ~@5 d3@2 ~@4 b3@2 ~@2 gb3 ~@7]/2", // D Dbm Gbm G5 Am B
  S: "~@2 b2 ~ [b2,e3] ~ b2@2 [eb3,gb3]@2 b2 ~@3 [e3,ab3,b3,e4]@2, ~@2 ab3 ~@5", // E5 Ebm E
  T: "~@2 [e3,ab3,b3,e4] ~ [ab3,b3,e4]@2 e3@2 [ab3,b3,e4] ~ [ab3,b3,e4]@2 e3 ~ [f3,ab3,db4]@2, ~@4 e3 ~@5 e3 ~@5", // E Db
  U: "[~@2 f3 ~ [gb3,bb3,db4]@2 ~@2 [f3,ab3,db4]@3 ~ [gb3,bb3,db4] ~ [ab3,db4]@4 [f3,ab3,db4] ~ [gb3,bb3] ~ gb3 ~ [f3,ab3,db4]@3 ~ [gb3,bb3,db4] ~ [f3,ab3,db4]@4 f3 ~ [gb3,bb3] ~ gb3 ~ [f3,ab3,db4]@2 ~@2 [gb3,bb3,db4] ~ [f3,ab3,db4]@4 f3 ~ [bb3,db4]@2 gb3 ~ [f3,ab3,db4]@2 ~@2 [gb3,bb3,db4] ~ [f3,ab3,db4]@2, ~@14 f3@2 ~@4 db4@2 ~@14 db4@2 ~@14 gb3 ~@11]/4", // Gb Db Gb Db5 Db Gb Db Gb …
  V: "~@2 f3 ~ [gb3,bb3,db4]@2 ~@2 [f3,ab3,db4]@3 ~@5", // Gb Db
})).s("gm_piano").gain(0.27)

// other · epiano2 · "Rhodes"
const epiano2 = note(`<
  A B@4 C D B E@3 F G H I B E@3 F G B J ~@5 K@3 B E@3 F L M N O P B E@3 F G B J ~@5 K@3 B E@3 F L M N O P Q R S T U V
  B@11 W
>`.pickRestart({
  A: "~@7 db4, ~@14 db3 ~", B: "[db2,db3] ~ [db2,db3]@2 db4@2 db3 ~ db2@2 [db3,db4] ~@3 db4@2, ~@8 db3 ~@5 db3 ~",
  C: "[db2,db3] ~ [db2,db3]@2 db4@2 db3 ~ db2@2 [db3,db4] ~@3 ab3@2, ~@8 db3 ~@5 ab2 ~", // Db
  D: "[ab1,ab2] ~ ab1 ~ ab2@2 ab1 ~ [ab1,ab2] ~ ab1@2 ~@2 db4@2, ~@4 ab1 ~@5 ab2 ~@3 db3 ~", // Ab
  E: "[[db2,db3] ~ [db2,db3]@2 db4@2 db3 ~ db2@2 [db3,db4] ~@3 [gb4,bb4,db5]@6 ~@2 [f4,ab4,db5]@6 ~@2 [db4,eb4,gb4,bb4]@14 ~@2 ab3@2, ~@8 db3 ~@37 ab2 ~]/3", // Db Gb Db Ebm7
  F: "ab2 ab1 [ab2,ab3] ~ ab1 [ab2,ab3] ~ gb3, ab1 ~@7 ab2 ~@5 gb2 ~", // Ab
  G: "gb2 gb1 gb3 ~ [ab1,ab2] [ab2,ab3] ~ db4, ~@4 gb2 ~@9 db3 ~", // Ab
  H: "[db2,db3] ~ [db2,db3]@2 db4@2 db3 ~ db2@2 [db3,db4] ~@3 [ab1,ab2]@2, ~@8 db3 ~@7", // Db Ab
  I: "~ [a1,a2] ~ [bb1,bb2] ~ [b1,b2] ~ db4, ~@14 db3 ~", // A Bb B
  J: "[db2,db3] ~ [db2,db3]@2 db4@2 db3 ~ db2@2 [db3,db4] ~@5, ~@8 db3 ~@7", // Db
  K: "[~@7 [eb2,eb3]@2 [f2,f3]@2 [gb2,gb3]@2 [g2,g3]@2 [ab2,ab3]@2 [a2,a3]@2 [bb2,bb3]@2 [b2,b3]@2 db4, ~@46 db3 ~]/3", // Eb F Gb G Ab A Bb B
  L: "gb2 gb1 gb3 ~ [ab1,ab2] [ab2,ab3] ~ [f2,f3], ~@4 gb2 ~@11", // Ab F
  M: "~@2 [gb2,gb3]@2 [ab2,ab3]@2 [bb2,bb3]@3 ~ [c3,c4]@2 [db3,db4]@2 [eb3,eb4]@2", // Gb Ab Bb C Db Eb
  N: "~@2 [f3,f4]@2 [gb3,gb4]@2 [ab3,ab4]@3 ~@5 db4@2, ~@14 db3 ~", // F Gb Ab
  O: "[db2,db3] ~ [db2,db3]@2 db4@2 db3 ~ db2@2 [db3,db4] ~@3 [ab3,ab4]@2, ~@8 db3 ~@7", // Db Ab
  P: "~@2 [a3,a4]@2 ~@2 [bb3,bb4]@3 ~ [b3,b4]@2 ~@2 db4@2, ~@14 db3 ~", // A Bb B
  Q: "[db2,db3] ~ [db2,db3]@2 db4@2 db3 ~ db2@2 [db3,db4] ~@3 ab2@2, ~@8 db3 ~@5 ab1 ~", // Db
  R: "ab1 ~ ab1@2 ab2@2 ab1 ~ ab2@2 ab1 ~@3 a2@2, ~@8 ab1 ~@5 a1 ~",
  S: "~@2 a2 ~ [a3,d4]@2 [a1,a2] ~ [a3,db4]@2 a1@2 ~@2 [d3,a3]@2, a1@4 ~@6 a2 ~@5", // D5 A D5
  T: "[d2,d3] ~ d3 ~ d3@2 [d2,d3] ~ [d3,a3]@2 [d2,d3] ~@3 [gb3,b3] ~, ~ a3@2 ~@5, ~@4 c4 ~@3 c4 ~@7", // D D5 D B5
  U: "[b1,b2] ~ b2@2 gb3@2 b2 ~ b3@2 [b1,b2]@2 ~@2 [b3,e4]@2, ~ b1@3 ~@4, ~@4 b3 ~@3 gb3 ~@7", // B E5
  V: "e2@2 [ab2,ab3]@3 ~ [a2,a3]@2 [bb2,bb3]@2 [b2,b3]@2 ~@2 db4@2, e3 ~@13 db3 ~", // Ab A Bb B
  W: "[db2,db3] ~ [db2,db3]@2 db4@2 db3 ~ db2@2 ~@6, ~@8 db3 ~@7", // Db
})).s("gm_epiano2").gain(0.27)

// chords · rock organ · "Hammond"
const rock_organ = note("<~@8 A@3 ~@5 A@3 ~@13 A@3 ~@7 A@3 ~@13 A@3 ~@24>".pickRestart({
  A: "[~@14 [bb5,db6,gb6]@7 ~ [ab5,db6,f6]@7 ~ [gb5,bb5,eb6]@10 ~@8]/3", // Gb Db Ebm
})).s("gm_rock_organ").gain(0.18).pan(0)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  A B C@3 D E F G@3 H@2 D E F G@3 H@2 B I@2 ~@6 A F G@3 J@4 D E F G@3 H@2 B I@2 ~@6 A F G@3 J@4 D E D K L@2 M N B C@3 B
  C@3 B C@2 O
>`.pickRestart({
  A: "~@7 [db3,ab3]", B: "~@2 db3@2 bb3@2 db3 ~ [db3,ab3]@2 db3 ~ [db3,bb3]@2 [db3,ab3]@2, ~@2 ab3 ~@13",
  C: "~@2 [db3,ab3]@2 bb3@2 db3 ~ [db3,ab3]@2 db3 ~ [db3,bb3]@2 [db3,ab3]@2", // Db5 Gb Db5
  D: "~@2 db3@2 bb3@2 db3 ~ [db3,ab3]@2 db3 ~ [db3,bb3] ~ [ab2,eb3]@2, ~@2 ab3 ~@13", // Db5 Gb Ab5
  E: "~@2 ab2@2 eb3@2 ab2 ~ [ab2,eb3]@2 ab2@2 eb3 ~ [db3,ab3]@2", // Ab5 Db5
  F: "~@2 db3@2 bb3@2 db3 ~ [db3,ab3]@2 db3 ~ [db3,bb3] ~ [db3,ab3]@2, ~@2 ab3 ~@13", // Db5 Gb Db5
  G: "[~@2 [db3,ab3]@2 bb3@2 db3 ~ [db3,ab3]@2 db3 ~ [db3,bb3] ~ [db3,gb3]@6 db3 ~ [db3,f3]@7 ~ [bb2,eb3]@14 ~@2 [ab2,eb3]@2]/3", // Db5 Gb Gb5 Db Eb5 Ab5
  H: "[~@2 ab2 ~ [ab2,f3]@2 ab2 ~ [ab2,eb3]@2 ab2@2 f3 ~ db3@4 gb2@2 db3@2 gb2 ~ ab2@2 eb3@2 ab2 ~ [db3,ab3]@2, ~@7 gb2 ~@8]/2", // Db Ab5 Db5
  I: "[~@2 [db3,ab3]@2 bb3@2 db3 ~ [db3,ab3]@2 db3 ~ [db3,bb3]@2 f3@18]/2", // Db5 Gb
  J: "[~@2 ab2 ~ [ab2,f3]@2 ab2 ~ [ab2,eb3]@2 ab2@2 f3 ~ db3@4 gb2@2 db3@2 gb2 ~ ab2@2 eb3@2 ab2 ~ c3@3 ~ c3 ~@3 [f3,bb3]@4 f3 ~@3 [db3,gb3]@4 db3@2 gb3 ~ [eb3,ab3]@3 ~ [eb3,ab3] ~@3 [db3,ab3]@2, ~@7 gb2 ~@7 f3@3 ~@14]/4", // Db Ab5 Bb5 Gb5 Ab5 Db5
  K: "~@2 ab2@2 eb3@2 ab2 ~ [ab2,eb3]@2 ab2@2 eb3 ~ [a2,e3]@2", // Ab5 A5
  L: "[~@2 [a2,e3] ~ [a2,e3]@2 a2@2 [a2,e3] ~ e3@2 a2 ~ [d3,a3]@4 d3 ~ [d3,a3]@2 d3 ~ d3 ~ [d3,a3]@2 d3 ~ [b2,gb3]@2, ~@10 a2 ~@21]/2", // A5 D5 B5
  M: "~@2 [b2,gb3] ~ [b2,gb3]@2 b2@2 gb3 ~ [b2,gb3]@2 b2 ~ [e3,b3]@2", // B5 E5
  N: "~@2 e3 ~ [e3,b3]@2 e3 ~ e3 ~ [e3,b3]@2 e3 ~ [db3,ab3]@2", O: "~@2 [db3,ab3]@2 bb3@2 db3 ~ [db3,ab3]@2 db3 ~@5",
})).s("gm_electric_guitar_clean").gain(0.55).pan(0)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B C@3 D E B F G H I@2 J K B F G H I@2 B L@2 ~@6 M@2 F G H N@2 O P J K B F G H I@2 B L@2 ~@6 M@2 F G H N@2 O P J K J
  Q R S T U B@11 V
>`.pickRestart({
  A: "~@7 db2", B: "~@2 db2 ~ db3@2 ~@2 db2@2 db3@2 db2 ~ db2@2", C: "~@2 db2@2 db3@2 ~@2 db2 ~ db3@2 db2 ~ db2@2",
  D: "~@2 db2@2 db3@2 ~@2 db2 ~ db3@2 db2 ~ ab1@2", E: "~@2 ab1@2 ab1@2 ~@2 ab1 ~ ab1@2 ab1 ~ db2@2",
  F: "~@2 db2@2 db3@2 ~@2 db2 ~ db3@2 db2 ~ gb2@2", G: "~@2 gb2 ~ gb3@2 ~@2 f2@2 f2 ~ f2 ~ eb2@2",
  H: "~@2 eb2@2 eb3@2 ~@2 eb2@2 eb3@2 eb2 ~ ab2@2",
  I: "[~@2 ab2 ~ ab3@2 ~@2 ab2 ~ ab3@2 ab2@2 gb2@4 gb2 ~ gb2@3 ~ ab2 ~ ab2 ~ ab2 ~ db2@2]/2",
  J: "~@2 db2 ~ db3@2 ~@2 db2@2 db3@2 db2 ~ ab1@2", K: "~@2 ab1@2 ab2@2 ~@2 ab1 ~ ab2@2 ab1 ~ db2@2",
  L: "[~@2 db2 ~ db3@2 ~@2 db2@2 db3@2 db2 ~ f2@12 ~@6]/2",
  M: "[ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ db2@4 db2 ~ db3@2 ~@2 db2@2 db3@2 db2 ~ db2@2]/2",
  N: "[~@2 ab2 ~ ab3@2 ~@2 ab2 ~ ab3@2 ab2@2 gb2@4 gb2 ~ gb2@3 ~ ab2 ~ ab2 ~ ab2 ~ f2@2]/2",
  O: "~@2 f2 ~ f2@2 ~@2 bb2@2 bb3@2 bb2 ~ gb2@2", P: "~@2 gb2@2 gb2@2 ~@2 ab2 ~ ab2@2 ab2 ~ db2@2",
  Q: "~@2 ab1@2 ab2@2 ~@2 ab1 ~ ab2@2 ab1 ~ a2@2", R: "~@2 a2 ~ a3@2 ~@2 a2@2 a3@2 a2 ~ d2@2",
  S: "~@2 d2@2 d3@2 ~@2 d2 ~ d3@2 d2 ~ b1@2", T: "~@2 b1 ~ b2@2 ~@2 b1@2 b2@2 b1 ~ e2@2",
  U: "~@2 e2@2 e3@2 ~@2 e2 ~ e3@2 e2 ~ db2@2", V: "~@2 db2 ~ db3@2 ~@2 db2@2 db3@2 ~@4",
})).s("gm_electric_bass_finger").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!29 [x!8] [x!4]!25 [x!8] [x!4]!27 [x!3 ~]>").gain(0.57)

// drums · rim
const rim = s("rim").struct("<[~ x!3] ~@84>").gain(0.34)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!22 ~@8 [~ x ~ x]!18 ~@8 [~ x ~ x]!27 [~ x ~@2]>").gain(0.34)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B A B A B A B C B A B C B A B C B A B C B ~@8 A B C B A B A B C B A B C B A B C B ~@8 A B C B A B A B C B C B C B
  C B C B C B C B C B C B C B
>`.pickRestart({
  A: "~ x ~@5 x", B: "~@5 x ~@2", C: "~ x ~@6",
})).gain(0.23)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@6 A ~ A B ~@2 A@3 ~ A B ~@2 A@3 ~@7 A ~ A B ~@4 A@3 ~ A B ~@2 A@3 ~@7 A ~ A B ~@2 A ~ A@20 ~
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@3 x",
})).gain(0.28)

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!8]!22 ~@8 [x!8]!18 ~@8 [x!8]!27 [x!6 ~@2]>").gain(0.23)

// drums · shaker
const shaker = s("sh").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B
  A B A B A B A B A B A B A C
>`.pickRestart({
  A: "x!3 ~ x!9 ~ x ~", B: "x!3 ~ x!12", C: "x!3 ~ x!7 ~@5",
})).gain(0.28)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~@3 x ~@9 x ~ x", B: "~@3 x ~@12",
})).gain(0.11)

stack(
  piano, epiano2, rock_organ, electric_guitar_clean, bass, kick, rim, clap, hihat, hihat_soft, open_hat, tambourine,
  shaker, shaker_soft
)

More by Gilbert O'Sullivan