Strudelify

Life in One Day

Howard Jones

KeyD♭ majorTempo112 bpm
0:00/0:00
// Life in One Day — Howard Jones
// 112 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 12 lead 2 sawtooth (copy of ch 9 lead 2 sawtooth)
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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 · drawbar organ
const drawbar_organ = note(`<
  ~@4 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@3 K L M@2 N@4 J O J K L M@2 P@2 Q@2 R@2 S@2 J O J K L M@2 T@4 U@4 V@4 J O J
  K L M@2 P@2 W@2 R@2 X@2 P@2 Q@2 R@2 Y@2 J O J K L M@2 Z@8 U@4 Z@8
>`.pickRestart({
  A: "[[f5,ab5,db6] ~ [f5,ab5,db6]!2 ~ [f5,ab5,db6] ~ [f5,ab5] f5 ~ ab5 ~ [f5,ab5,db6]@18 ~@2]/2", // Db Fm Db
  B: "[[db5,f5,ab5] ~ [ab5,db6] [f5,ab5] ~ [f5,ab5] ~ [db5,f5,ab5] [ab5,c6] ~ [ab5,c6] ~ [f5,bb5,db6]@16 [ab5,c6,eb6]@4]/2", // Db Db5 Fm Db Ab Bbm Ab
  C: "[[f5,ab5,db6] ~ [ab5,db6] [f5,ab5] ~ [db5,f5,ab5] ~ [db5,f5,ab5] [f5,ab5] ~ [ab5,c6] ~ [ab5,db6,f6]@20]/2", // Db Db5 Fm Db Fm Ab Db
  D: "[[db5,f5,ab5] ~ [ab5,db6] [f5,ab5] ~ [f5,ab5] ~ [db5,f5,ab5] [eb5,ab5,c6] ~ [eb5,ab5,c6] ~ [f5,bb5,db6]@20]/2", // Db Db5 Fm Db Ab Bbm
  E: "[db5,f5,ab5]@3 [eb5,gb5,bb5]@5, db6", // Db Ebm
  F: "[[f5,ab5] [f5,ab5,db6] ~ [f5,ab5] ~ [f5,ab5] [eb5,gb5]!2 ~ [db5,f5]!2 ~ [f5,ab5,db6]@20]/2", // Fm Db Fm Ebm Db
  G: "[[f5,ab5]@2 [ab5,db6] [f5,ab5] ~@2 [f5,ab5] ~ [ab5,c6] ~ [ab5,c6] ~ [f5,bb5,db6]@16 [eb5,ab5,c6]@4]/2", // Fm Db5 Fm Ab Bbm Ab
  H: "[[f5,ab5,bb5]@2 [ab5,db6] [f5,ab5] ~ [f5,ab5] ~ [f5,ab5] [ab5,c6] ~ [ab5,c6,eb6] ~ [ab5,db6,f6]@20]/2", // Bb7 Db5 Fm Ab Db
  I: "[[f5,ab5]@2 [ab5,db6] [f5,ab5,bb5] ~ [f5,ab5,bb5] ~ [f5,ab5] [eb5,ab5,c6] ~ [eb5,ab5,c6] ~ [f5,bb5,db6]@20]/2", // Fm Db5 Bb7 Fm Ab Bbm
  J: "[gb5,bb5,db6] ~@2 [gb5,bb5,db6] ~@2 [ab5,c6,eb6] ~@9", K: "[gb5,bb5,db6] [ab5,c6,eb6]",
  L: "[bb5,db6,f6] [c6,eb6,gb6]", M: "[[ab5,db6,f6]@3 [ab5,db6,gb6]@13]/2",
  N: "[f6@8 gb6@8 f6@8 gb6@7 ~, [ab5,db6]@31 ~]/4", O: "[ab5,db6,f6] ~@2 [gb5,bb5,db6] ~@2 [ab5,c6,eb6] ~@9",
  P: "[[db6,f6]@2 [db6,f6]!2 ~ [ab5,db6] [ab5,db6,f6] ~ [gb5,bb5,eb6] ~ [f5,ab5,db6] ~ [f5,ab5,db6]@20]/2", // Db Db5 Db Ebm Db
  Q: "[[db6,f6]@2 [f5,bb5] [bb5,db6,f6] ~ [bb5,db6,f6] ~ [db6,f6] [ab5,c6,eb6] ~ [ab5,c6,eb6] ~ [bb5,db6,f6]@16 [ab5,c6,eb6]@4]/2", // Db Bb5 Bbm Db Ab Bbm Ab
  R: "[[db6,f6]@2 [db6,f6]!2 ~ [ab5,db6] [ab5,db6,f6] ~ [ab5,c6,eb6] ~ [ab5,c6,eb6] ~ [ab5,db6,f6]@20]/2", // Db Db5 Db Ab Db
  S: "[[bb5,db6] ~ bb5 [bb5,db6,f6] ~ [bb5,db6,f6] ~ [bb5,db6,f6] [ab5,c6,eb6] ~@3 [f5,bb5,db6]@19 ~]/2", // Bbm Ab Bbm
  T: "[f6@16 gb6@16 f6@16 gb6@15 ~, [ab5,db6]@31 ~]/4", U: "[db6 eb6 db6 eb6, [f5,bb5]]/4",
  V: "[f6@4 gb6@4 f6@4 gb6@3 ~, [ab5,db6]@15 ~]/4", // Db5
  W: "[[db6,f6]@2 [f5,bb5] [bb5,db6,f6] ~ [bb5,db6,f6] ~ [db6,f6] [ab5,c6,eb6] ~ [ab5,c6,eb6] ~ [f5,bb5,db6]@16 [ab5,c6,eb6]@4]/2", // Db Bb5 Bbm Db Ab Bbm Ab
  X: "[[bb5,db6] ~ bb5 [bb5,db6,f6] ~ [bb5,db6,f6] ~ [bb5,db6,f6] [ab5,c6,eb6] ~ [f5,bb5,db6] ~ [f5,bb5,db6]@20]/2", // Bbm Ab Bbm
  Y: "[[bb5,db6] ~ bb5 [bb5,db6,f6] ~ [bb5,db6,f6] ~ [bb5,db6,f6] [ab5,c6,eb6] ~@3 [f5,bb5,db6]@20]/2", // Bbm Ab Bbm
  Z: "[f6 gb6 f6 gb6 f6 gb6 f6 gb6, [ab5,db6]]/8", // Db5
})).s("gm_drawbar_organ").gain(0.18)

// bass · synth bass 2
const bass = note(`<
  ~@22 A B@2 C D E F G F G F H I J C D K L M N O P Q R S T A B@2 C D K L G F G F U V U W G F G F I@3 C D K L M@2 X Y Q M
  X S Z AA AB AC Z AA AB AD A B@2 C D AE AF AG AH G F G F G F U V U W AG AH G F G F G F
>`.pickRestart({
  A: "gb1 ~@2 gb2 ~@2 ab2 ~@3 ab1 ~ ab2 ~ eb2 f2", B: "gb1 ~ gb1 eb2 gb2 ~ ab2 ~@3 ab1 ~ ab2 ~ eb2 f2", C: "gb1 ab1",
  D: "bb1 c2", E: "db2 ~@2 db2 ~@2 db2 ~@3 ab1 ~ bb1 ~ ab1 bb1", F: "db2@2 db2!2 ~ db2 ab1 ~ bb1!2 ab1 ~ bb1 ~ ab1 bb1",
  G: "~@2 db2 ~ db2 ~ ab1 ~@3 ab1 ~ bb1 ~ ab1 ~", H: "gb1 ~@2 gb2 ~@2 ab2 ~@7 ab1@2",
  I: "gb1 ~@2 gb2 ~@2 ab2 ~@3 ab1@2 ab2!2 ab1@2", J: "gb1 ~@2 gb2 ~@2 ab2 ~@3 ab1@2 ab2 ~ eb2 f2",
  K: "db2@6 db2 ~@3 ab1@2 bb1 ~ ab1 bb1", L: "db2@2 db2!2 ~ db2 ab1@2 bb1 ~ ab1 ~ bb1 ~ ab1 bb1", M: "db2 ~@13 ab1@2",
  N: "db2 ~@11 f1@2 ab1@2", O: "bb1 ~@13 ab1 ~", P: "bb1 ~@11 ab1@4", Q: "db2 ~@11 ab1@2 bb1@2", R: "db2 ~@11 ab1@4",
  S: "bb1 ~@13 ab1@2", T: "bb1 ~@15", U: "~@2 bb1 ~ bb1 ~ ab1 ~@3 f1 ~ ab1 ~ bb1 ~",
  V: "bb1@2 bb1!2 ~ bb1 ab1 ~ bb1!2 ab1 ~ bb1 ~ ab1 bb1", W: "bb1@2 bb1!2 ~ bb1 ab1 ~ bb1!2 ab1 ~ bb1 ~ c2 ~",
  X: "bb1 ~@11 f1@2 ab1@2", Y: "bb1 ~@11 ab1 ~@3", Z: "db2 ~@2 db2 ~@2 ab1 ~@5 ab1@2 bb1@2",
  AA: "db2 ~@2 db2 ~@2 ab1 ~@5 f1@2 ab1@2", AB: "bb1 ~@2 bb1 ~@2 bb1 ~@5 f1@2 ab1@2",
  AC: "bb1 ~@2 bb1 ~@2 bb1 ~@5 ab1@4", AD: "bb1 ~@2 bb1 ~@2 bb1 ~@7 bb1 ab1",
  AE: "db2 ~@2 db2@3 db2 ~@3 ab1 ~ bb1 ~ ab1 bb1", AF: "~@2 db2!3 ~@5 db2!3 ~@3",
  AG: "db1!2 ~@2 db2 ~ ab1 ~@3 ab1 ~ bb1 ~ ab1 ~", AH: "db2@2 db2!2 ~ db2 ab1@2 bb1!2 ab1 ~ bb1!2 ab1 ~",
})).s("gm_synth_bass_2").gain(0.64)

// other · rock organ
const rock_organ = note(`<
  ~@15 A B C D E F G H@3 ~@2 I@6 H J@2 ~@2 I@2 ~ K L M ~ N O P H J H ~@2 I@6 Q@4 I@4 H@3 ~@2 I@2 ~@9 R S T L U@2 V H J H
  ~@2 I@10 Q@4 I@8
>`.pickRestart({
  A: "[bb5,db6]@3 [ab5,db6] ~@2 [f5,ab5]@3 [eb5,gb5]@3 [db5,f5]@2 [eb5,gb5]@2, a5 ~@5 e5 ~@9", B: "[db5,f5]@3 ~@13",
  C: "[e6,f6] ~ ab6 ~ ab6@2 f6 bb6 ~ ab6 ~ [e6,ab6] ~ db6 bb5 [gb5,ab5], ~@11 eb6@2 ~@3", D: "db6 ~@7",
  E: "f6@3 eb6 ~@2 bb5@3 ab5 ~@2 [eb5,e5,bb5] db5 bb5@2, e6 ~@5 b5 ~@9", F: "ab5 ~@7",
  G: "[eb6,e6] ~ ab6 ~ ab6@2 f6 ab6 ~ f6 ~ [eb6,e6,f6] eb6 db6 bb5 ~, ~ f6@2 ~@13", // Emaj7
  H: "~@10 [c6,eb6] ab5 [db6,f6] [c6,eb6] ~@2", I: "db5 db6 db7 db6 db5 db6 db7 db6 db5 db6 db7 db6 db5 db6 db7 db6",
  J: "~@10 [c6,eb6]@2 [db6,f6] [c6,eb6] ~@2", // Cm Db Cm
  K: "[f6,ab6]@3 [eb6,ab6] ~@2 [bb5,db6]@3 [ab5,db6] ~@2 [eb5,e5] db5 eb5@2, e6 ~@5 [a5,eb6] ~@5 ab5@2 ~@2", // Fm Ab5 Bbm Db5 Emaj7 Adim
  L: "db5 ~@7", M: "f6@2 ab6 ~ [eb6,e6] db6 bb5 ab5 db6 ~ eb6 ~ db6@3 ~, e6 ~@15",
  N: "[f6,ab6]@3 [eb6,ab6] ~@2 [bb5,db6]@3 [ab5,db6] ~@2 [eb5,e5] ~ db5 ~, e6 ~@5 a5 ~@5 ab5@2 ~@2", O: "bb4 ~@15",
  P: "bb5@3 ab5 ~@2 [eb5,e5] eb5@2 ~ db5 ~ bb4@2 ab4@2, a5 ~@15", // Emaj7
  Q: "bb4 bb5 bb6 bb5 bb4 bb5 bb6 bb5 bb4 bb5 bb6 bb5 bb4 bb5 bb6 bb5",
  R: "[bb6,db7]@3 [ab6,db7] ~@2 [f6,ab6]@3 [eb6,gb6] ~@2 [db6,f6]@2 [eb6,gb6] ~, a6 ~@5 e6 ~@9", S: "[db6,f6]@3 ~@13",
  T: "f6@2 ab6 ~ e6 [db6,eb6] bb5 ab5 ab5@2 bb5 ~ [eb5,e5] db5 eb5@2, e6 ~@15", // Dbsus2 Emaj7
  U: "[bb6@2 ~ ab6 ~@2 f6@3 eb6 ~@2 db6 ~ eb6 db6@5 ~@12, a6 ~@5 e6 ~@25]/2",
  V: "ab5!2 db6 [a5,bb5] ~ ab5 f5 eb5 db6 ~ eb6 ~ [eb5,e5] [db5,eb5] eb5@2", // Bbmaj7 Emaj7 Dbsus2
})).s("gm_rock_organ").gain(0.48).pan(0.6)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@22 A@3 ~ B ~ C ~@8 D ~ C ~@8 A@3 ~ D ~ C ~@12 A@3 ~ D ~@5 A ~@3 E ~@7 F A@3 ~ D ~@2 F ~@6 G ~@3 G F ~@6 G
>`.pickRestart({
  A: "~@12 g2 ~@3", B: "~@2 c3 ~@2 b2 ~@5 c3!3 g2 ~", C: "~@13 b2!2 ~", D: "~@2 c3 ~@2 b2 ~@5 c3!3 b2 ~",
  E: "~@2 c3 ~@2 b2 ~@8 g2 ~", F: "~@11 b2!3 g2 ~", G: "~@11 b2!5",
})).s("gm_acoustic_guitar_nylon").gain(0.3)

// other · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note("<~@4 [bb3!16]!2 ~@2 [bb3!16]!3 ~@106>").s("gm_acoustic_guitar_nylon").gain(0.12)

// other · pan flute
const pan_flute = note(`<
  ~@4 A B C D E@2 F@2 ~@2 G ~ H ~ I ~ J@2 K@2 L M@2 ~@6 K@2 L M@2 ~@2 N@2 O P@3 Q@2 K@2 L M@2 ~@14 R@2 S T@2 ~@2 U V W X
  Y@2 Z@2 AA ~ AB@2 AC@2 AD@2 R@2 S T@2 ~@22
>`.pickRestart({
  A: "f5 ~ f5 f5@3 f5 ~ eb5@2 db5 ~ db5@4", B: "~@15 bb4", C: "f5@2 f5 f5@3 f5 ~ eb5@2 db5 ~ eb5@3 db5",
  D: "bb4 ~@5 f5@2", E: "[f5@2 f5 f5@3 f5@2 eb5 ~ ab5 ~ f5@6 ~@14]/2",
  F: "[f5 ~ f5 f5@3 f5 ~ eb5@2 db5 ~ eb5@3 bb4@3 ~@10 bb4@2 ab4@2]/2", G: "f5 f5@2 f5 f5@2 f5 eb5@3 db5 ~ eb5@2 db5@2",
  H: "f5 f5@2 f5 f5@2 f5 eb5@3 eb5 ~ f5@2 ~@2", I: "f5 ~ f5 f5@2 ~ f5 ~ eb5@2 ab5 ~ f5@4",
  J: "[f5 f5@2 f5 f5@2 f5 eb5@3 db5 ~ eb5@2 db5 bb4@5 ~@12, ~@12 d5 ~@19]/2", K: "f5@3 eb5 ~@2 eb5 ~@9",
  L: "f5@3 eb5@2 ~ eb5 ~@9", M: "[f5@4 eb5 ~ eb5 ~ gb5@3 f5 ~@2 ab5@10 ~@8, ~@8 f5 ~@23]/2",
  N: "[f5@2 f5 f5@2 f5 f5@2 eb5@2 db5 ~ db5@7 ~@13]/2", O: "f5 ~ f5 f5@2 f5 f5@2 eb5 ~ db5 ~ f5@3 ~",
  P: "[~@12 f5@6 f5!3 ~ f5!2 eb5 ~ ab5 ~ f5@6 ~@10 f5@4]/3", Q: "[~@2 f5 f5@2 f5@2 f5 eb5@4 db5@7 ~@13]/2",
  R: "f6@3 eb6 ~@2 eb6 ~@9", S: "f6@3 eb6@2 ~ eb6 ~@9", T: "[f6@4 eb6 ~ eb6 ~ gb6@3 f6 ~@2 ab6@10 ~@8, ~@8 f6 ~@23]/2",
  U: "f6 ~ f6 f6@3 f6 ~ eb6@2 db6 ~ db6@4", V: "~@15 bb5", W: "f6@2 f6 f6@3 f6 ~ eb6@2 db6 ~ eb6@3 db6",
  X: "bb5 ~@5 f6@2", Y: "[f6@2 f6 f6@3 f6 ~ eb6 ~ ab6 ~ f6@6 ~@14]/2",
  Z: "[f6 ~ f6 f6@3 f6 ~ eb6@2 db6 ~ eb6@3 bb5@3 ~@14]/2", AA: "f6!2 ~ f6!2 ~ f6 eb6@2 ~ eb6 ~ f6@3 ~",
  AB: "[f6!2 ~ f6!2 ~ f6 eb6@3 db6 ~ eb6@2 db6@4 ~@14]/2", AC: "[f6@2 f6 ~ f6 ~ f6 ~ eb6 ~ eb6 ~ f6@6 ~@14]/2",
  AD: "[f6@2 f6!2 ~ f6 ~ f6 eb6@2 db6 ~ eb6@2 db6 bb5@4 ~@13]/2",
})).s("gm_pan_flute").gain(0.38)

// other · lead 8 bass lead
const lead_8_bass_lead = note("<~@56 A@2 B@2 C@2 D@2 A@2 E@4 ~@28 A@2 B@2 A@2 B@2 C@2 D@2 A@2 ~@5>".pickRestart({
  A: "[~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ab4@17]/2",
  B: "[~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ab5@17]/2",
  C: "[~ f4 bb4 f5 eb5 f4 db5 f4 c5 f4 bb4 f4 c5 db5 bb4 f4@17]/2",
  D: "[~ f4 bb4 f5 eb5 f4 db5 f4 c5 f4 bb4 f4 c5 db5 bb4 f5@17]/2",
  E: "[~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ab5@49]/4",
})).s("gm_lead_8_bass_lead").gain(0.26).pan(0.6)

// other · lead 8 bass lead · soft notes
const lead_8_bass_lead_soft = note("<~@112 A@2 B@2 ~>".pickRestart({
  A: "[~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ab5@17]/2",
  B: "[~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ab4@17]/2",
})).s("gm_lead_8_bass_lead").gain(0.11).pan(0.6)

// other · ocarina
const ocarina = note(`<
  ~@5 A B@2 C@2 D@2 E@2 C@2 B@2 C@2 D@2 ~@3 F G E@2 ~@7 F G E@2 C@2 B@2 C@2 D@2 ~@3 F G H@6 I@4 J@4 ~@3 K L M@2 ~@19 K L
  M@2 ~@20
>`.pickRestart({
  A: "~@7 ab2", B: "[bb2@7 c3]/2", C: "[db3@15 ab2]/2", D: "bb2/2", E: "db3/2", F: "gb2 ab2", G: "bb2 c3", H: "db3/6",
  I: "bb2/4", J: "db3/4", K: "gb1 ab1", L: "bb1 c2", M: "db2/2",
})).s("gm_ocarina").gain(0.12)

// other · lead 8 bass lead
const lead_8_bass_lead_2 = note(`<
  ~@29 A@2 B@4 ~@20 C@2 D@2 E@2 F@2 C@2 B@4 ~@28 C@2 D@2 C@2 D@2 E@2 F@2 C@2 G ~@5
>`.pickRestart({
  A: "[~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ab4@16 ~]/2",
  B: "[~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ab5@49]/4",
  C: "[~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ab4@17]/2",
  D: "[~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ab5@17]/2",
  E: "[~ f4 bb4 f5 eb5 f4 db5 f4 c5 f4 bb4 f4 c5 db5 bb4 f4@17]/2",
  F: "[~ f4 bb4 f5 eb5 f4 db5 f4 c5 f4 bb4 f4 c5 db5 bb4 f5@17]/2", G: "~@2 db5 ab5 gb5 ~ f5 ~ eb5 ~ db5 ~ eb5 ~@3",
})).s("gm_lead_8_bass_lead").gain(0.26).pan(0.4)

// other · lead 8 bass lead · soft notes
const lead_8_bass_lead_soft_2 = note("<~@111 A@2 B@2 C ~>".pickRestart({
  A: "[~ ab4 ~@3 ab4 ~ ab4 ~ ab4 ~ ab4 ~ f5 db5 ab5@17]/2",
  B: "[~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ab4@17]/2",
  C: "~ ab4 db5 ab5 gb5 ab4 f5 ab4 eb5 ab4 db5 ab4 eb5 f5 db5 ~",
})).s("gm_lead_8_bass_lead").gain(0.09).pan(0.4)

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

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

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

// drums · hihat
const hihat = s("hh").struct("<~@2 [x!16]!115>").gain(0.4)

// drums · bongos
const bongos = s("bongo:4").struct("<A@2 B A@19 ~@5 A@6 ~@5 A@10 ~@5 A@14 ~@5 A@2 ~@8 A@8 ~@5 A@22>".pickRestart({
  A: "~@2 x ~ x ~@5 x!2 ~@4", B: "~@2 x ~ x ~@6 x ~@4",
})).gain(1.05)

// drums · congas
const congas = s("conga:18").struct("<A@22 ~@5 A@6 ~@5 A@10 ~@5 A@14 ~@5 A@2 ~@8 A@8 ~@5 A@22>".pickRestart({
  A: "~@6 x!2 ~@8",
})).gain(1.54)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  ~@22 A@3 B@4 C B C B A@3 B@2 D E ~@8 A@3 B@4 C B C B C B C B C B C B A@3 B@20 A@3 B@4 C B C B C B C B C B C B C B C B
  C B C B
>`.pickRestart({
// … 26 more lines

More by Howard Jones