Strudelify
Fairground cover art

Life

Fairground

Simply Red

KeyF minorTempo122 bpm
0:00/0:00
// Fairground — Simply Red
// 122 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(122/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@10 A@2 B C@2 D E@2 D@2 F@2 G H A I@2 J@2 K L M N O P Q@2 R C S F D F T F D U V ~@10 A@2 B C@2 D E@2 D@2 P@2 W X L
  Y@2 Z J AA A H A AB A H AC AD A H A AB A H AE AF AG A H AH D F C F D J@2 H I@2 AI@2
>`.pickRestart({
  A: "db1 ~ ab1 bb1 db1 ~ ab1 bb1", B: "db1@2 ~@2 ab1@2 bb1 ~ db1@2 ~@2 db1@2 ~@2",
  C: "ab1@2 bb1 ~ db1@2 ~@2 ab1@2 bb1@2 db1@2 ~@2", D: "ab1@2 bb1@2 db1@2 ~@2 ab1@2 bb1 ~ db1@2 ~@2",
  E: "ab1@2 bb1 ~ db1@2 ~@2 ab1@2 bb1 ~ db1@2 ~@2", F: "ab1 bb1 db1 ~ ab1 bb1 db1 ~",
  G: "ab1@2 bb1 ~ db1@2 ~@2 db1@2 ~@2 ab1@2 bb1 ~", H: "db1@2 ~@2 ab1@2 bb1@2 db1@2 ~@2 ab1@2 bb1 ~",
  I: "db1@2 ~@2 ab1@2 bb1 ~ db1@2 ~@2 ab1@2 bb1 ~", J: "db1@2 ~@2 ab1@2 bb1 ~ db1@2 ~@2 ab1@2 bb1@2",
  K: "db1@2 ~@2 ab1@2 bb1 ~ db1@2 ~@2 ab1@2 ab1@2", L: "db1 ~ ab1!2 db1 ~ ab1!2",
  M: "db1@2 ~@2 ab1@2 ab1@2 db1@2 ~@2 ab1@2 bb1 ~", N: "db1@2 ~@2 db1@2 ~@2 ab1@2 ab1 ~ db1@2 ~@2",
  O: "ab1@2 ab1@2 db1@2 ~@2 ab1@2 ab1 ~ db1@2 ~@2", P: "ab1!2 db1 ~ ab1!2 db1 ~",
  Q: "ab1@2 ab1 ~ db1@2 ~@2 ab1@2 ab1 ~ db1@2 ~@2", R: "ab1!2 db1 ~ ab1 bb1 db1 ~", S: "~@2 gb1 ~ ab1 bb1 db1 ~",
  T: "ab1 bb1 gb1 ~ ab1 bb1 db1 ~", U: "ab1 bb1 ab1!3 ~@3", V: "~@2 ab1!3 ~@3",
  W: "ab1@2 bb1 ~ db1@2 ~@2 db1@2 ~@2 ab1@2 ab1 ~", X: "db1@2 ~@2 ab1@2 ab1@2 db1@2 ~@2 ab1@2 ab1 ~",
  Y: "db1@2 ~@2 ab1@2 ab1 ~ db1@2 ~@2 ab1@2 ab1 ~", Z: "db1 ~ ab1!2 db1 ~ ab1 bb1", AA: "db1 ~@3 gb1 ~ ab1 bb1",
  AB: "db1 ~ ab1 bb1 gb1 ~ ab1 bb1", AC: "db1@2 ~@2 ab1@2 bb1@2 ab1@2 ~ ab1@2 ~ bb1@2",
  AD: "db1@2 ~@2 ab1@3 ~ gb1@2 ~@2 ab1@2 bb1@2", AE: "db1 ~ ab1 bb1 ab1!3 ~", AF: "~@4 ab1!3 ~",
  AG: "~@4 db1 ~ ab1 bb1", AH: "db1@2 ~@2 db1@2 ~@2 ab1@2 bb1 ~ db1@2 ~@2",
  AI: "[db1@2 ~@2 ab1@2 bb1@2 db1@2 ~@2 ab1@2 bb1@9 ~@9]/2",
})).s("gm_fretless_bass").gain(0.32)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A@8 B@2 C@7 D@2 E@8 F@2 G@8 H@2 I@7 J@2 A@8 K@2 C@7 D@2 E@8 F@2 L@7 M@8 N@2 G@8 ~@6 O ~
>`.pickRestart({
  A: "[~@4 [f3,ab3,c4]@123 ~]/8", B: "[[gb3,bb3,db4]@31 ~]/2", C: "[f3,ab3,c4]/7", D: "[~@3 [gb3,bb3,db4]@5]/2",
  E: "[~@3 [f3,ab3,c4]@29]/8", F: "[~ [gb3,bb3,db4]@3]/2", G: "[~ [f3,ab3,c4]@15]/8", H: "[~@4 [gb3,bb3,db4]@27 ~]/2",
  I: "[~@4 [gb3,bb3,db4]@16 [f3,ab3,c4]@15 ~ [gb3,bb3,db4]@15 ~ [f3,c4]@15 ~ [gb3,bb3,db4]@16 [f3,ab3,c4]@16 [gb3,bb3,db4]@8 [ab3,c4,eb4]@4, ~@51 ab3@16 ~@45]/7", // Gb Fm Gb F5 Gb Fm Gb Ab
  J: "[~ [gb3,bb3,db4]@6 ~]/2", K: "[gb3,bb3,db4]/2",
  L: "[~@8 [gb3,bb3,db4]@15 ~ [f3,ab3,c4]@15 ~ [gb3,bb3,db4]@15 ~ [f3,ab3,c4]@15 ~ [gb3,bb3,db4]@16 [f3,ab3,c4]@14 ~@2 [gb3,bb3,db4]@7 ~]/7", // Gb Fm Gb Fm Gb Fm Gb
  M: "[[ab3,c4,eb4]@5 ~@3 [gb3,bb3,db4]@15 ~ [gb3,bb3,db4]@15 ~ [f3,ab3,c4]@15 ~ [gb3,bb3,db4]@16 [f3,ab3,c4]@15 ~ [gb3,bb3,db4]@15 ~ [f3,ab3,c4]@16 [gb3,bb3,db4]@7 ~]/8", // Ab Gb Fm Gb Fm Gb Fm Gb
  N: "[[ab3,c4,eb4]@7 ~ [gb3,bb3,db4]@24]/2", O: "[gb3,bb3,db4]@15 ~",
})).s("gm_synth_strings_1").gain(0.02).pan(0.4)

// chords · piano · "A.PIANO 3"
const piano = note("<~@39 A B C D E B F G ~@30 H I J K J I L M N I J K J I L O ~@17>".pickRestart({
  A: "~@4 [bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~@3 [gb3,bb3,db4,f4] ~", // Bbm Gbmaj7
  B: "~ [gb3,bb3,db4,f4] ~@2 [f3,ab3,c4,eb4] ~@2 [f3,ab3,c4,eb4] ~@2 [f3,ab3,c4,eb4] ~@3 [f3,ab3,c4,eb4] ~", // Gbmaj7 Fm7
  C: "~ [f3,ab3,c4,eb4] ~@2 [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~@3 [gb3,bb3,db4] ~", // Fm7 Gbmaj7 Gb
  D: "~ [gb3,bb3,db4] ~@2 [f3,ab3,c4,eb4] ~@2 [f3,ab3,c4,eb4] ~@2 [f3,ab3,c4,eb4] ~@3 [f3,ab3,c4,eb4] ~", // Gb Fm7
  E: "~ [f3,ab3,c4,eb4] ~@2 [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~@3 [gb3,bb3,db4,f4] ~", // Fm7 Gbmaj7
  F: "~ [f3,ab3,c4,eb4] ~@2 [gb3,bb3,db4] ~@2 [gb3,bb3,db4] ~@2 [gb3,bb3,db4] ~@3 [ab3,c4,eb4] ~", // Fm7 Gb Ab
  G: "~ [ab3,c4,eb4] ~@2 [gb3,bb3,eb4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~@7", // Ab Ebm Gb
  H: "~@8 [bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~", // Bbm Gbmaj7
  I: "~@2 [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~@2 [f3,ab3,c4,eb4] ~@2 [f3,ab3,c4,eb4] ~@2 [f3,ab3,c4,eb4] ~", // Gbmaj7 Fm7
  J: "~@2 [f3,ab3,c4,eb4] ~@2 [f3,ab3,c4,eb4] ~@2 [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~", // Fm7 Gbmaj7
  K: "~@2 [gb3,bb3,db4] ~@2 [gb3,bb3,db4] ~@2 [f3,ab3,c4,eb4] ~@2 [f3,ab3,c4,eb4] ~@2 [f3,ab3,c4,eb4] ~", // Gb Fm7
  L: "~@2 [f3,ab3,c4,eb4] ~@2 [f3,ab3,c4,eb4] ~@2 [gb3,bb3,db4] ~@2 [gb3,bb3,db4] ~@2 [gb3,bb3,db4] ~", // Fm7 Gb
  M: "~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [gb3,bb3,eb4,f4]@2 ~ [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~", // Ab Ebm Gbmaj7
  N: "~@2 [gb3,bb3,db4] ~@2 [ab3,c4,eb4] ~@2 [bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~@2 [gb3,bb3,db4,f4] ~", // Gb Ab Bbm Gbmaj7
  O: "~@2 [ab3,c4,eb4] ~@2 [ab3,c4,eb4] ~@2 [gb3,bb3,eb4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~@3", // Ab Ebm Gb
})).s("gm_piano").gain(0.22)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note(`<
  ~@6 A B C D E F G H I J K L M N O I P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH@6 ~@2 AI E AJ AK AL AM AN B AF AO E
  F G H I J K L M N AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BA BD ~@2 AZ BA BB BC BA BD ~@2 BE BF BG BH AF BI BJ BK BL
  AK BM BN BO BP BQ ~
>`.pickRestart({
  A: "eb4@2 eb5@2 eb4@2 eb5 ~ eb4@2 eb5 ~ f5@2 f4@2", B: "f5 eb5 eb4 eb5 bb4 bb3 bb4 bb3",
  C: "ab4@2 ab3@2 ab4@2 f4@2 f3@2 f4@2 eb4@2 eb3 ~", D: "eb4@2 eb5@2 eb4@2 eb5@2 eb4@3 ~ eb4@3 ~",
  E: "f4 f3 [f4,f5] ab4 [ab3,f5] ab4 [bb4,f5] bb3", F: "bb4 f4 f3 f4 eb4 eb3 eb4 eb5",
  G: "f4 f3 f4 bb3 [ab4,f5] ab3 ab4 bb4", H: "[bb3,f5] f4 [f3,f5] f4 [eb4,f5] eb3 eb4 f4",
  I: "f3 f4 ab4 ab3 ab4 bb4 bb3 bb4", J: "f4 f3 f4 f3 eb4 eb3 eb4 eb3",
  K: "[eb4,f5] f4 [f3,f5] f4 [ab4,f5] ab3 ab4 bb4", L: "bb3 bb4 f5 f4 eb5 eb4 ab5 ab4", M: "ab5 f5 f4 f5 c5 c4 c5 f4",
  N: "f3 f4 eb4 eb3 eb4 ~ f5 f4", O: "f5 eb5 [eb4,f5] eb5 [bb4,f5] bb3 bb4 f4",
  P: "eb5 eb4 eb5 eb4 eb5 eb4 [eb5,f5] f5", Q: "f4 f5 bb4 bb3 bb4 ab4 ab3 ab4", R: "f4 f3 f4 eb4 eb3 eb4 c4 c3",
  S: "ab4 ab3 bb4 bb3 f5 f4 f5 eb5", T: "[eb4,f5] eb5 [f5,ab5] ab4 ab5 bb5 bb4 bb5", U: "f5 f4 f5 eb5 eb4 eb5 bb4 bb3",
  V: "f5 eb5 ab5 ab4 ab5 bb5 bb4 bb5", W: "f5@2 f4@2 f5@2 eb5@2 eb5@2 eb4@2 [eb5,f5]@2 f5 ~",
  X: "f4 f5 eb5 eb4 eb5 bb4 bb3 bb4", Y: "ab4 ab3 ab4 ab3 bb4 bb3 bb4 bb3", Z: "f5 f4 f5 f4 [bb3,f5] eb5 [eb4,f5] eb5",
  AA: "[bb4,f5] bb3 bb4 ab4 ab3 ab4 bb4 bb3", AB: "bb4 eb5!2 eb4 f5 f4 ab5 ab4", AC: "bb5 bb4 bb5 bb4 f5 eb5 eb4 eb5",
  AD: "bb4 bb3 bb4 ab4 ab3 ab4 eb4 eb3", AE: "eb4 f4 eb5 eb4 eb5 bb4 bb3 bb4", AF: "ab4 ab3 ab4 f4 f3 f4 eb4 eb3",
  AG: "eb4 ~@7", AH: "[~@4 eb5@8 eb4@6 ~@2 ab5@8 ab4@8 c5@8 c4@6 ~@2 eb5@8 eb4@6 ~@2 ab5@8 ab4@7 ~@13]/6",
  AI: "~@2 f4 f3 f4 eb4 eb3 eb4", AJ: "bb4 bb3 ab4 ab3 bb4 bb3 bb4 bb3", AK: "bb4 bb3 bb4 ab4 ab3 ab4 f4 f3",
  AL: "f4 eb4 eb3 eb4 f4 f3 f4 ab4", AM: "ab3 ab4 bb4 bb3 ab4 ab3 bb4 eb5", AN: "eb4 eb5 eb4 eb5 eb4 eb5 f5 f4",
  AO: "eb4 eb5 eb4 eb5 eb4 ~ eb4 ~", AP: "f5 eb5 [eb4,f5] eb5 [bb4,f5] bb3 bb4 ab4", AQ: "ab3 ab4 f4 f3 f4 f3 eb4 eb3",
  AR: "eb4 eb3 f5 f4 f5 eb5 [eb4,f5] eb5", AS: "[bb4,f5] bb3 bb4 ab4 ab3 ab4 eb4 eb3",
  AT: "ab4 ab3 ab4 bb4 bb3 bb4 eb5 eb4", AU: "eb5 eb4 eb5 eb4 eb5 eb4 eb5 eb4",
  AV: "[eb5,f5] eb4 [f5,ab5] ab4 ab5 bb5 bb4 bb5", AW: "c6 c5 c6 f5 f4 f5 eb5 bb4", AX: "bb3 bb4 ab4 ab3 ab4 f4 f3 f4",
  AY: "eb4 eb3 eb4 ~@5", AZ: "~ eb5", BA: "eb4@3 ~ ab5@4", BB: "ab4 c5", BC: "c4@3 ~ eb5@4", BD: "ab4@7 ~@9",
  BE: "~@4 f4 f3 f4 eb4", BF: "eb3 eb4 f4 f3 [f4,f5] ab4 [ab3,f5] ab4", BG: "[bb4,f5] bb3 bb4 bb3 f5 f4 f5 f4",
  BH: "eb5 eb4 eb5 eb4 eb5 bb4 bb3 bb4", BI: "eb4 f4 f3 f4 ab4 ab3 bb4 bb3", BJ: "c5 c4 c5 c4 [c5,f5] ab4 [ab3,f5] ab4",
  BK: "[f4,f5] f3 f4 eb4 eb3 eb4 f4 eb4", BL: "f4 eb4 f4 f3 f4 f3 ab4 ab3", BM: "f4 eb4 eb3 eb4 ab3 ab2 ab3 ab2",
  BN: "bb3 bb2 bb3 bb2 c4 c3 c4 c3", BO: "f4 f3 f4 eb4 eb3 eb4 ab4 ab3", BP: "ab4 bb4 bb3 bb4 f4 f3 f4 f3",
  BQ: "eb5 eb4 eb5 ~@5",
})).s("gm_lead_1_square").gain(0.26).pan(0.6)

// other · piano · "A.PIANO 2"
const piano_2 = note(`<
  ~@6 A B C D E@2 F@3 G@2 H I J@3 K@2 L M@2 N@2 O@2 P Q R@2 S T U ~@10 V W@2 X@3 Y Z AA AB E@2 F@3 G@2 H I J@3 K@2 L M@2
  N@2 ~@23 Q W@2 X@3 AC AD AA ~
>`.pickRestart({
  A: "bb3@5 ~ c4@5 ~ c4@2 f3@2", B: "c4@5 ~ db4@3 ~ db4@3 eb4@2 ~", C: "db4@3 ~", D: "~@6 bb3 db4",
  E: "[c4@3 ab3@3 f3@3 ab3@3 f3@3 ~]/2", F: "[~@4 bb3 db4 c4@3 ab3@3 f3@3 eb3@3 ab3@3 f3@3]/3",
  G: "[~@12 bb3@6 c4@5 ~ c4@2 f3@2 c4@4]/2", H: "~@2 db4@3 ~ db4@3 eb4@3 db4@3 c4", I: "bb3 ~",
  J: "[~@4 bb3 db4 c4@3 ab3@3 f3@3 ab3@3 f3@3 ~@3]/3", K: "[~@2 bb3 db4 c4@3 ab3@3 f3@3 eb3@3]/2", L: "ab3@3 f3@3 ~@2",
  M: "[~@8 bb3@6 c4@5 ~ c4@2 f3@2 c4@5 ~ db4@2]/2", N: "[~@2 db4@3 eb4@3 db4@3 c4 bb3@8 ~@12]/2",
  O: "[~@2 bb3 db4 c4@3 ab3@3 f3@3 ab3@3]/2", P: "f3@3 ~@5", Q: "bb3 db4 c4@3 ab3@3",
  R: "[f3@3 eb3@3 ab3@3 f3@3 ~@4]/2", S: "~@4 bb3@6 c4@5 ~", T: "c4@2 f3@2 c4@5 ~ db4@3 ~ db4@2",
  U: "~ eb4@3 db4@3 c4 bb3@8", V: "~@2 c4@3 ab3@3", W: "[f3@3 ab3@3 f3@3 ~@5 bb3 db4]/2",
  X: "[c4 ab3 f3 eb3 ab3 f3 ~@2]/3", Y: "bb3@6 c4@5 ~ c4@2 f3@2", Z: "c4@5 ~ db4@3 ~ db4@3 eb4@3",
  AA: "db4@3 c4 bb3@8 ~@4", AB: "~@10 bb3@2 ~ db4@2 ~", AC: "[bb4,bb5]@5 ~ c4@5 ~ c4@2 f3@2",
  AD: "c5@5 ~ db5@3 ~ db4@3 eb4@3",
})).s("gm_piano").gain(0.55).pan(0.4)

// drums · rim
const rim = s("rim").struct(`<
  ~@2 A B C@2 D E@2 F G E H I J K@2 J@3 K L M E@2 N@2 E@3 N O P J@2 Q@2 J@2 ~@9 R Q S T E G@2 E@2 F G E H I J K@2 J@3 K
  L M E@2 N@2 E@2 ~@17 U N O P J@2 Q@2 S T E G@2 E V ~
>`.pickRestart({
  A: "~@5 x ~ x!3 ~ x ~ x!3", B: "x!2 ~ x!5 ~ x ~ x!5", C: "~ x ~ x!3 ~ x ~ x ~ x!5", D: "~ x ~ x ~ x ~ x ~@4 x!2 ~ x",
  E: "~@5 x ~ x ~@5 x ~ x", F: "~@5 x ~ x!2 ~@7", G: "~@5 x ~ x ~@4 x!2 ~ x", H: "~ x ~@3 x ~ x ~@4 x!2 ~@2",
  I: "x ~ x ~@6 x ~ x ~@4", J: "~ x ~ x ~@5 x ~ x ~@4", K: "~ x ~ x ~@4 x!2 ~ x ~@4", L: "~ x ~ x ~@5 x ~ x ~ x ~@2",
  M: "~ x ~ x ~@4 x!2 ~@2 x ~ x ~", N: "~@4 x!2 ~ x ~@5 x ~ x", O: "~@5 x ~ x ~ x ~@3 x ~ x",
  P: "~@4 x!2 ~@2 x ~ x ~@5", Q: "x!2 ~ x ~@5 x ~ x ~@4", R: "~@9 x ~ x ~@4", S: "~ x ~ x ~ x ~@3 x ~ x ~@4",
  T: "x!2 ~@2 x ~ x ~@6 x ~ x", U: "~@13 x ~ x", V: "~@5 x ~ x ~@5 x ~@2",
})).gain(0.14)

// drums · kick
const kick = s("bd").struct("<~@6 A@3 B A@29 C A@6 D E ~@6 A@3 B A@19 F A@14 G H I A@14 ~>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "~ x!3", D: "x ~ x!3 ~@3", E: "~@2 x!3 ~@3", F: "x ~ x!2", G: "x ~ x ~ x!3 ~",
  H: "~@4 x!3 ~", I: "~@2 x!2",
})).gain(0.26)

// drums · snare
const snare = s("sd").struct("<~@6 [x!4]!3 [x!3 ~] ~@44 [x!4]!3 [x!3 ~] ~@52>").gain(0.23)

// drums · clap
const clap = s("cp").struct(`<
  ~@10 A@2 B C@9 D A@9 E C@5 F G H@6 I ~@11 A@2 B C@9 D A@5 J K L@14 M ~ N A@2 E C@5 A@6 ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x!2 ~ x ~", C: "~ x!2 ~@2 x!2 ~", D: "~ x!2 ~ x ~@2 x", E: "x ~ x ~@2 x!2 ~",
  F: "~ x!2 ~@5", G: "~@5 x!2 ~", H: "~ x ~@3 x!2 ~", I: "~ x ~@6", J: "x ~@2 x!2 ~@3", K: "~@7 x", L: "x ~@2 x ~@3 x",
  M: "x ~@2 x ~@4", N: "~@4 x ~@2 x",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@6 A@3 B C A D E@6 F E@2 G H@6 I H@2 J K@6 L ~@6 M N O K@2 A@6 B C A D E@6 F E@2 G H@6 P ~@14 Q R S H@2 J K@2 T K@2
  A@6 ~
>`.pickRestart({
  A: "~@4 x!2 ~ x", B: "~@4 x!4", C: "x ~@3 x!2 ~ x", D: "~@4 x!2 ~@2", E: "~@2 x!2 ~ x ~@2", F: "~@2 x!2 ~ x!2 ~",
  G: "~@2 x!2 ~@4", H: "x!2 ~ x ~@4", I: "x!2 ~ x!2 ~@3", J: "x!2 ~@4 x!2", K: "~ x ~@4 x!2", L: "x!2 ~@6",
  M: "~@2 x!3 ~ x!2", N: "x ~ x!3 ~ x!2", O: "x ~ x ~@3 x!2", P: "x!4 ~@4", Q: "~@4 x!3 ~", R: "x!3 ~ x!3 ~",
  S: "x!3 ~ x ~@3", T: "~ x!2 ~@3 x!2",
})).gain(0.2)

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

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@6 A@3 B C D E F@6 G F@2 H D@6 I D@2 J F@5 K L M@6 N O P Q@2 A@6 B C D E F@6 G F@2 H D@5 R S T@14 U V W D@2 J F@2 X
  F@2 D@6 ~
>`.pickRestart({
  A: "x", B: "x ~@10 x ~ x!3", C: "x ~ x!3 ~ x ~ x ~@2 x!2 ~ x ~", D: "x ~@2 x!2 ~ x ~ x ~@2 x!2 ~ x ~",
  E: "x ~@2 x!2 ~ x ~ x ~@2 x!2 ~@2 x", F: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~@2 x", G: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~ x!2",
  H: "x ~ x ~ x ~@2 x!2 ~@2 x!2 ~ x ~", I: "x ~@2 x!2 ~ x ~ x ~ x!3 ~ x ~", J: "x ~@2 x!2 ~@2 x!2 ~ x ~ x ~@2 x",
  K: "x ~ x ~ x ~@2 x ~@2 x ~ x ~@2 x", L: "~ x!3 ~@3 x!2 ~ x ~ x ~@2 x", M: "x ~ x ~@4 x!2 ~ x ~ x ~@2 x",
  N: "x ~ x ~@8 x!5", O: "x ~@10 x!2 ~ x ~", P: "x!2 ~@4 x ~@9", Q: "~ x ~@2", R: "x ~@2 x!2 ~ x ~ x ~@2 x ~@2 x ~",
  S: "x ~@2 x ~ x!3 ~@3 x!2 ~ x ~", T: "x ~@2 x!2 ~ x ~@4 x!2 ~ x ~", U: "x ~@2 x!2 ~ x ~@8 x", V: "x!5 ~@10 x",
  W: "x ~ x ~ x!2 ~@2 x ~ x!3 ~ x ~", X: "x ~ x ~ x ~ x!3 ~ x ~ x ~@2 x",
})).gain(0.23)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@2 A B@6 ~ B@3 C@9 D E@9 A@14 ~@2 A@3 B@10 C@9 D E@21 ~@2 E@3 A@6 B@6 ~
>`.pickRestart({
  A: "~@9 x ~ x ~@4", B: "~@5 x ~ x ~@8", C: "~ x ~ x ~@12", D: "~ x ~ x ~@9 x ~ x", E: "~@13 x ~ x",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@39 [~ x ~@2] ~@37 [~ x] ~@7 [~ x] ~@24>").gain(0.23)

// drums · bongos
const bongos = s("bongo:18").struct(`<
  ~@6 A@3 ~ A@2 ~ B@9 ~ C@9 ~ D@6 ~@10 D@2 A@9 ~ B@9 ~ C@6 ~@18 C@2 ~ D@5 A@6 ~
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@3 x ~@4", D: "~ x ~@6",
})).gain(0.45)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@6 A@3 B A@2 C D@9 C E@9 C F@5 G ~@9 F@3 A@9 C D@9 C E@6 ~@17 H E@2 C F@5 A@6 ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~@2", B: "~ x ~ x ~@4", C: "~ x ~ x ~ x ~ x", D: "~ x ~ x ~@3 x", E: "~ x ~@3 x ~ x",
// … 63 more lines

More by Simply Red