Strudelify
Things Can Only Get Better cover art

Dream Into Action

Things Can Only Get Better

Howard Jones

KeyG majorTempo112 bpm
0:00/0:00
// Things Can Only Get Better — Howard Jones
// 112 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 98 bars on a 24-step grid, each part at one level. 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.

// bass · slap bass 1 · "SLAP BASS"
const bass = note(`<
  A@2 B@3 C D E F G H I J ~ K@2 L M N@2 O@3 P Q R S T U V W X Y Z AA AB AC AD AE AF AG L M N@2 O@3 AH AI AJ AK AL AM AN
  AO AF AG L M N@2 O@3 AH AP AJ AQ AR AM AS AT AH AI AJ AK AR AU AV AT AH AW AJ AK AR AX AV AT AH AW AJ AK AL AY AZ BA ~
>`.pickRestart({
  A: "[~ a2@3 ~@6 b2@3 c3@2 ~@7 c3@3 d3@2 ~@8 e3 ~ g2@2 ~ g2@3 g#2 ~@2 g#2@2, ~@17 d3 ~@6]/2",
  B: "[~ a2@3 ~ a3 ~@2 a3 ~ b2@3 c3@2 ~@7 c3@3 d3@2 ~@7 d3 e3 ~ f2@4 g2@5 a2@23 ~ a3@2]/3",
  C: "~@13 f2@3 ~ g2@3 ~@2 a2@2", D: "~ a2@3 ~ a2@2 ~ a2@2 b2@3 c3@2 ~@9",
  E: "~@10 d3 e3 ~ g2 ~@2 g2 ~@2 g#2 ~@2 g#2 ~", F: "~ a2@3 ~ a2 ~@2 a2 ~ b2@3 c3@2 ~@7 g3 ~",
  G: "~@10 d3 ~@2 g2 ~@2 g2@3 g#2 ~@2 g#2@2", H: "~ a2 ~@2 a2 b2 ~@2 b2@2 c3@3 d3@2 ~@9",
  I: "~@11 e3 ~ g2 ~@2 g2@3 g#2@2 ~ g#2@2, ~@5 d3 ~@6", J: "~ a2@2 ~ a2!2 ~@2 a2@2 b2@3 c3@2 ~@9",
  K: "[~ d3@19 ~@2 d3@3 c3@19 ~@2 c3@2]/2", L: "~ e3@20 ~ e3@2", M: "~ d3@3 d2@20",
  N: "[~ d3@20 ~ d3@3 c3@19 ~@2 c3@2]/2", O: "[~ e3@20 ~ e3@3 d3@3 d2@4 d2@3 ~@2 d2@24 f2@2 ~ f2@3 g2@2 ~ g2@2]/3",
  P: "~ a2 ~@2 a2 a3@2 ~ a2@2 b2@3 c3@3 ~@6 c3@2", Q: "~ d3@2 ~@7 d3@3 f2 ~@2 f2!2 ~@2 f2 ~ g2@2",
  R: "~ a2 ~@2 a2 a3@2 ~@3 b2@3 c3@3 ~@6 c3@2", S: "~ d3@3 ~@6 d3 ~@2 f2@4 g2@5 g#2@2",
  T: "~ a2 ~@2 a2 a3@2 ~@3 b2@3 c3@3 ~@6 c3 ~", U: "~@2 d3@2 ~@6 d3@3 f2 ~@3 f2 ~@2 f2@2 g2@2, ~ c3@2 ~@21",
  V: "~ a2 ~@2 a2 a3 ~@2 a3 ~ b2@3 c3@2 ~@7 c3@2", W: "~ d3@2 ~@7 d3@2 ~ f2@2 ~@2 g2@2 ~@3 g2@2",
  X: "~ a2 ~@2 a2@3 b2 ~@2 b2@2 ~@10 c3@2", Y: "~ d3@2 ~@7 d3 e3 ~ g2 ~@2 g2@2 ~@4 g#2@2",
  Z: "~ a2@2 ~@2 a2 ~@2 a2 ~ b2@3 c3@2 ~@7 c3@2", AA: "~@5 a3 ~@7 c3@2 ~@4 g2@3 g#2@2, ~@2 g3 ~@9",
  AB: "~ a2 ~@2 a2@2 ~@2 a2 ~ b2@3 ~@3 a3@2 ~@6", AC: "~@4 d3@2 ~@5 e3@2 g2 ~@2 g2@3 g#2@2 ~ g#2@2, ~@5 d3 ~@6",
  AD: "~ a2@3 ~ a2 ~@2 a2 ~ b2@2 ~ c3@2 ~@9", AE: "~@4 d3@2 ~@5 e3 ~ g2@2 ~ g2@3 ~@5, ~@5 d3 ~@6",
  AF: "~ d3@19 ~@2 d3@2", AG: "~ c3@19 ~@2 c3@2", AH: "~ a2@4 a3 ~@4 b2@3 c3@2 ~@7 c3@2",
  AI: "~ d3@2 ~@10 d3 f2@3 ~@2 f2@3 g2@2", AJ: "~ a2@2 ~ a2 a3@2 ~@3 b2@2 ~ c3@2 ~@5 c3 ~ c3@2",
  AK: "~ d3@2 ~@2 d3 ~@2 d3 ~ f2@5 ~ f2@3 g2@2 ~ g2@2", AL: "~ a2@2 ~ a2 a3 ~@2 a3 ~ b2@3 c3@2 ~@7 c3 ~",
  AM: "~@2 d3@3 ~@5 d3@2 ~ f2 ~@2 f2 g2@2 ~ g2@2 g#2@2, ~ c3@2 ~@21", AN: "~ a2 ~@2 a2 a3 ~@2 a3 ~ b2@3 c3@3 ~@6 c3 ~",
  AO: "~@2 d3@2 ~@6 d3 ~@2 f2@4 g2@4 ~ a2@2, ~ c3@2 ~@21", AP: "~ d3@3 ~@9 d3 f2@3 ~@2 f2@3 g2@2",
  AQ: "~ d3@3 ~ d3 ~@2 d3 ~ f2@5 ~ f2@3 g2@2 ~ g2@2", AR: "~ a2@2 ~@2 a3 ~@2 a3 ~ b2@3 c3@2 ~@7 c3 ~, ~@2 a2 ~@9",
  AS: "~ a2 ~@2 a2 a3@2 ~ a3@2 b2@3 c3@3 ~@6 c3 ~", AT: "~@2 d3@2 ~@6 d3 ~@2 f2@4 g2@4 ~ g#2@2, ~ c3@2 ~@21",
  AU: "~@2 d3@2 ~@6 d3@2 ~ f2 ~@2 f2 g2@2 ~ g2@2 g#2@2, ~ c3@2 ~@21", AV: "~ a2 ~@2 a2 a3 ~@2 a3@2 b2@3 c3@3 ~@6 c3 ~",
  AW: "~ d3@2 ~@11 f2@3 ~@2 f2@3 g2@2, ~@13 d3@2 ~@9",
  AX: "~@2 d3@2 ~@6 d3@2 ~ f2 ~@3 g2@2 ~ g2@2 g#2@2, ~ c3@2 ~@13 f2@2 ~@6",
  AY: "~@2 d3@3 ~@5 d3@3 f2 ~@3 g2@2 ~ g2@2 g#2@2, ~ c3@2 ~@13 f2@2 ~@6",
  AZ: "~ a2@2 ~ a2 a3 ~@2 a3@2 b2@3 c3@3 ~@6 c3 ~",
  BA: "~@2 d3@2 ~@6 d3 ~@2 g2@3 ~ e3@2 ~ g2@2 a2@2, ~ c3@2 ~@13 c3@2 ~@6",
})).s("gm_slap_bass_1").gain(0.45)

// chords · clavinet · "PRG.CHANGE"
const clavinet = note(`<
  A B C D@2 E F G H I J K L M ~@9 N O P Q N R P S F G H I J T L M ~@9 N U P V N R W S ~@25 N X P V N Y P Z N X AA V N AB
  P AC ~
>`.pickRestart({
  A: "~ [c6,e6,g6]@2 ~ [d6,f#6] [c6,e6,g6] ~ a5 ~@8 [c6,e6,g6] ~@2 [d6,f#6] [c6,e6,g6] ~@3", // C D C D C
  B: "~ [f#5,a5,d6]@3 c6 [f#5,a5,d6] ~ d5 ~@12 c6@2 [c5,f5,a5] ~, ~@19 [c5,f5,a5]@2 ~@3", // D F
  C: "~ [c6,e6,g6] ~@2 f#6 [c6,e6,g6] ~ a5 ~@8 c6 ~@2 [a5,c6,e6,g6]!2 ~ [a5,c6,e6,g6] ~, ~@2 d6 ~@9", // C Am7
  D: "[~ [f#5,a5] ~@2 f#5 [f#5,d6] ~ d5 ~@5 [a4,c5,f5]@4 [b4,d5,g5]@3 ~@2 [c5,e5,a5]@23 ~ [e5,a5]@2, ~ d6@2 ~ [a5,c6]@2 ~@40 c5 ~]/2", // F#m D F G Am A5 Am
  E: "~@13 [e5,a5,c6]@4 [d5,g5,b5]@4 ~ [c5,e5,a5]@2", // Am G Am
  F: "~ [g5,a5,d6]@2 ~ [g5,a5,d6]!2 ~@2 [g5,a5,d6] ~@4 [g5,a5,d6] ~@10", // Gsus2
  G: "~@13 [c6,e6,g6,b6]!2 ~@4 [b5,d6,f#6,a6]!2 ~@3", // Cmaj7 Bm7
  H: "~ [g5,a5,d6]!2 ~ [g5,a5,d6]!2 ~@2 [g5,a5,d6] ~@4 [g5,a5,d6]!2 ~@9", // Gsus2
  I: "~@13 [c6,e6,g6,b6] [e6,g6,b6] ~@4 [b5,d6,f#6] [d6,f#6] ~@3, ~@14 c6@2 ~@3 a6@3 ~@2, ~@10 b5 ~", // Cmaj7 Em Bm D
  J: "~ [a5,d6]@3 g5 [g5,a5,c6,d6] ~@2 [g5,a5,d6] ~@2 [g5,a5] ~ [g5,a5,d6]!2 ~@9, ~ g5 ~@22", // D5 Gsus4 Gsus2
  K: "~ [g5,a5,d6]!2 ~@2 a5 ~ [g5,a5,d6] ~@5 [c6,e6,g6,b6] [e6,g6,b6] ~@4 [b5,d6,f#6,a6] [b5,d6,a6]@2 ~@2, ~@14 c6@2 ~@4 f#6 ~@3", // Gsus2 Cmaj7 Em Bm7
  L: "~ [a5,d6]@3 g5 [g5,a5,d6] ~@2 [g5,a5,d6] ~@4 [g5,a5,d6]!2 ~@9, ~ g5 ~@22", // D5 Gsus2
  M: "~@13 [c6,e6,g6,b6]@2 ~@4 [b5,d6,f#6,a6]@2 ~@3", // Cmaj7 Bm7
  N: "~ g6 a5 ~ [d6,f#6] [c6,e6,g6] ~@4 g6 ~@2 a5 ~@2 [c6,e6,g6] ~@2 [d6,f#6] [c6,e6,g6] ~@3, ~ [c6,e6]@2 ~@21", // D C D C
  O: "~ f#5!2 ~ [f#5,a5,d6] d5 ~@2 [f#5,a5,d6] ~ d5 ~@3 [a5,c6] ~ f5@2 ~ [f5,c6,f6]@3 f5 [c6,f6], ~ [a5,d6]@2 ~@16 a5 ~@2 a5@2", // D Am F5 D5
  P: "~ [c6,e6,g6] ~@2 [d6,f#6] [c6,e6,g6] ~@4 [c6,e6,g6] a4 ~@4 [c6,e6,g6] ~@3 [c6,e6,g6] ~ a5 ~", // C D C
  Q: "~ [f#5,a5,d6] ~@2 [f#5,d6] f#5 ~@2 [f#5,a5,d6] ~ d5@3 [a5,c6,f6] ~@3 [g5,b5,d6] ~@4 [e5,a5,c6] ~, ~@2 a5 ~@9", // D F G Am
  R: "~ f#5!2 ~ [f#5,a5,d6] d5 ~@2 [f#5,a5,d6] ~ d5 ~@3 [a5,c6] ~ f5@2 ~ [f5,c6,f6]@3 [f5,a5] [c6,f6], ~ [a5,d6]@2 ~@16 a5 ~@4", // D Am F5 F F5 D5
  S: "~ [f#5,a5,d6] ~@2 f#5!2 ~@2 [f#5,a5,d6] ~ d5@3 [f5,c6]@2 ~@2 [d5,g5,b5]@2 ~@3 [c5,e5,a5]@2, ~@4 [a5,d6]@2 ~@7 a5 ~@10", // D F5 G Am D5
  T: "~ [g5,a5,d6]!2 ~@2 a5 ~ [g5,a5] ~@5 [c6,e6,g6,b6] [c6,e6]@2 ~@3 [b5,d6,f#6,a6] [b5,d6]@2 ~@2, ~@7 d6@2 ~@5 [g6,b6] ~@5 [f#6,a6] ~@3", // Gsus2 Cmaj7 C Bm7 Bm G F#m
  U: "~ f#5!2 ~ f#5 d5 ~@2 [f#5,a5,d6] ~ d5 ~@3 [a5,c6] ~ f5@2 ~ [f5,c6,f6]@3 f5 [c6,f6], ~ [a5,d6]@2 ~ [a5,d6]@2 ~@13 a5 ~@2 a5@2", // D Am F5 D5
  V: "~ [f#5,a5,d6] ~@2 f#5!2 ~@2 [f#5,a5,d6] ~ d5@3 [a5,c6,f6] ~@3 [g5,b5,d6] ~@4 [e5,a5,c6] ~, ~@2 [a5,d6] ~@9", // D F G Am D5
  W: "~ [c6,e6,g6] ~@2 f#6 [c6,e6,g6] ~@4 [c6,e6,g6] a4 ~@4 [c6,e6,g6] ~@3 [c6,e6,g6] ~ a5 ~, ~@2 d6 ~@9", // C
  X: "~ f#5!2 ~ f#5 d5 ~@2 [f#5,a5,d6] ~ d5 ~@3 [a5,c6] ~ f5@2 ~ [c6,f6]@3 [f5,a5] [c6,f6], ~ [a5,d6]@2 ~ [a5,d6]@2 ~@13 f5@2 ~@3, ~@19 a5 ~@4", // D Am F5 F F5 D5
  Y: "~ f#5!2 ~ [f#5,a5] d5 ~@2 [f#5,a5,d6] ~ d5 ~@3 [a5,c6] ~ f5@2 ~ [f5,c6,f6]@3 [f5,a5] [c6,f6], ~ [a5,d6]@2 ~ d6@2 ~@13 a5 ~@4", // F#m D Am F5 F F5 D5
  Z: "~ [f#5,a5,d6] ~@2 [f#5,d6] f#5 ~@2 [f#5,a5,d6] ~ d5@3 [f5,c6]@2 ~@2 [d5,g5,b5]@2 ~@3 [c5,e5,a5]@2, ~@4 a5@2 ~@7 a5 ~@10", // D F5 G Am
  AA: "~ [e6,g6]@2 ~ f#6 [c6,e6,g6] ~@4 [c6,e6,g6] a4 ~@4 [c6,e6,g6] ~@3 [c6,e6,g6] ~ a5 ~, ~ c6 ~@2 d6@2 ~@18", // Em C
  AB: "~ f#5!2 ~ f#5 d5 ~@2 [f#5,a5,d6] ~ d5 ~@3 [a5,c6] ~ f5@2 ~ [f5,c6,f6]@3 [f5,a5] [c6,f6], ~ [a5,d6]@2 ~ [a5,d6]@2 ~@13 a5 ~@4", // D Am F5 F F5 D5
  AC: "~ [f#5,a5,d6] ~@2 f#5!2 ~@2 [f#5,a5,d6] ~ d5@3 [c5,g5] ~@3 [g5,a5]@2 ~@3 [e5,a5,b5]@2, ~@4 [a5,d6]@2 ~@7 f5@2 ~@2 d5 ~@6", // D C5 Gsus2 Esus4 D5
})).s("gm_clavinet").gain(0.37)

// other · cello · "PRG.CHANGE" · Fsus2 Dsus2 Cmaj7 Fsus2
const cello = note("<~@64 [~@15 c7 b6 a6 [f6,g6] [d6,e6] [b5,c6] a5 [f5,g5] e5] ~@33>").s("gm_cello").gain(0.29)

// other · lead 8 bass lead · "PRG.CHANGE"
const lead_8_bass_lead = note("<~@65 A@2 B C D@2 B C ~@25>".pickRestart({
  A: "[~@7 d4@3 ~@3 c4@3 ~ g3 ~@2 g3 ~@2 c3@2 ~@12 c3@3 ~ c3 ~@6]/2", B: "~@16 g3 ~@3 a2@3 d4",
  C: "~@2 [d4,e4] ~@2 c4 ~@2 d4 ~@2 g3@5 a3 ~@7", // Dsus2
  D: "[~ g4@2 ~@4 d4@3 ~@3 c4@3 ~ g3 ~@2 g3 ~@2 c3@2 ~@12 c3@3 ~ c3 ~@6]/2",
})).s("gm_lead_8_bass_lead").gain(0.28)

// chords · tenor sax · "PRG.CHANGE"
const tenor_sax = note("<A B C D@2 E ~@49 F@8 ~@10 G@4 H@2 I@8 ~@9 J ~>".pickRestart({
  A: "~ [a2,a3]@2 ~@7 [b2,b3]@3 [c3,c4]@2 ~@7 [c3,c4]@2", // A B C
  B: "~ [d3,d4]@2 ~@7 d3 e3@2 [g2,g3] ~@2 [g2,g3]@3 [g#2,g#3] ~@2 [g#2,g#3]@2, ~@5 d4 ~@6, ~@11 e4 ~@12", // D G G#
  C: "~ [a2,a3]@2 ~@7 [b2,b3]@3 c4@2 ~@7 [c3,c4]@2, ~@13 c3 ~@10", // A B C
  D: "[~ d4@2 ~@7 d3 [e3,e4] ~ [f2,a3,c4]@4 [g2,g3,b3]@4 ~ [a2,e3,c4]@23 ~ [c4,e4,a4] ~, ~ d3 ~@8 d4@2 ~@36]/2", // E F G Am
  E: "~@13 [f2,a3,c4]@2 ~@3 [g2,b3] ~@3 [a2,e3,c4]@2, ~@9 g3 ~@2", // F G Am
  F: "[~@13 [f2,c5]@2 ~@2 [g2,b4]@2 ~@3 [d3,d4,g4]@170, ~@13 [f4,a4] ~@3 [d4,g4] ~@174]/8", // F5 G G5 F G5
  G: "[~ g3@2 ~@10 [c3,c4]@2 ~@4 [g2,g3]@2 ~@2 d2@2 ~@12 e4 [g2,g3] ~@4 [g2,g3]@3 g#3 a3@2 ~@4 [e3,e4] ~@2 [e3,e4] ~@4 g3@2 ~@11 [e3,e4] ~@2 [c3,c4] ~@5 [g2,g3]@4 ~ a3@2 ~@6, ~ g4@60 g4@35, ~@7 d4@51 ~@38, ~@7 d3@15 [g2,g3]@2 ~@13 e3@2 ~@7 g#2 a2 ~@40 a2 ~@7, ~@23 d3@35 [d3,d4]@13 [d3,d4]@9 [d3,d4]@16]/4", // C G E C G D
  H: "[~ g3@2 ~@10 [c3,c4]@2 ~@4 [g2,g3]@2 ~@2 d2@2 ~@12 e3 [g2,g3] ~@4 [g2,g3]@3 [g#2,g#3] [a2,a3], ~ g4@47, ~@7 d4@41, ~@7 d3@15 [g2,g3]@2 ~@13 e4@2 ~@9, ~@23 d3@25]/2", // C G G# A G
  I: "[~@5 [e3,e4] ~@2 [e3,e4] ~@4 g3@2 ~@11 [e3,e4] ~@2 [c3,c4] ~@5 [g2,g3]@5 [a2,a3] ~@151, ~@10 [d3,d4]@13 [d3,d4]@9 d4@160, ~@13 g4@179]/8", // E C G A D
  J: "~@13 [c4,f4]@2 ~@2 a3@2 ~@3 [b3,e4,a4]@2, ~@13 g3 ~@10", // F5 Esus4
})).s("gm_tenor_sax").gain(0.2)

// chords · string ensemble 1 · "PRG.CHANGE"
const string_ensemble_1 = note("<~@14 A B@2 C@6 ~@8 D E F ~ D E D G A B@2 H@6 ~@8 I B@2 J@6 ~@33>".pickRestart({
  A: "~ [d4,f#4,a4]@23", B: "[~ c4@24 b4@23, ~ [e4,g4]@47]/2",
  C: "[~ f#4@9 g4@6 f#4@33 c4@24 b4@24 [d4,a4]@42 ~@5, ~ a4@48 e4@48 ~@47, ~ d4@47 ~ g4@90 ~@5]/6", // D5
  D: "~ [g4,d5]@7 ~@16", E: "~@19 [f#4,a4]@5", F: "~ d5@7 ~@16, ~ g4@5 ~@18", G: "~@13 a4@7 ~@4",
  H: "[~ f#4@9 g4@6 f#4@33 c4@24 b4@24 [d4,a4]@47, ~ a4@48 e4@48 ~@47, ~ d4@47 ~ g4@95]/6", // D5
  I: "~ [f#4,a4]@23, ~ d4 ~@22", J: "[~ f#4@9 g4@6 f#4@33 c4@24 b4@24 a4@47, ~ a4@48 e4@48 ~@47, ~ d4@47 ~ g4@95]/6",
})).s("gm_string_ensemble_1").gain(0.12)

// other · clavinet · "PRG.CHANGE"
const clavinet_2 = note("<~@65 A@2 B C D@2 B C ~@25>".pickRestart({
  A: "[~ g5@3 ~@3 d5@3 ~@3 c5@3 ~ g4 ~@2 g4 ~@2 c4@2 ~@12 c4@3 ~ c4 ~@6]/2", B: "~@16 g4 ~@3 a3@3 d5",
  C: "~@2 [d5,e5] ~@2 c5 ~@2 d5 ~@2 g4@5 a4 ~@7", // Dsus2
  D: "[~ g5@2 ~@4 d5@3 ~@3 c5@3 ~ g4 ~@2 g4 ~@2 c4@2 ~@12 c4@3 ~ c4 ~@6]/2",
})).s("gm_clavinet").gain(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@5 A B@9 C B C B C B C D B@17 C B C B C B C D B@9 C B C B C B C D B@32 ~>".pickRestart({
  A: "~@19 x ~@4", B: "~@7 x ~@11 x ~@4", C: "~@7 x ~@11 x ~@2 x ~", D: "~@5 x ~ x ~@8 x ~@2 x ~@4",
})).gain(0.74)

// drums · clap
const clap = s("cp").struct("<~@23 [~@7 x ~@11 x ~@4]!8 ~@17 [~@7 x ~@11 x ~@4]!8 ~@9 [~@7 x ~@11 x ~@4]!32 ~>")
  .gain(0.44)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@22 A ~@7 B ~@16 A ~@7 B ~@8 A ~@23 B ~@7 B ~>".pickRestart({
  A: "~@22 x!2", B: "~@13 x ~@8 x ~",
})).gain(0.59)

// drums · high tom
const high_tom = s("ht").struct("<~@22 A ~@7 B ~@16 A ~@7 B ~@8 A ~@23 B ~@7 C ~>".pickRestart({
  A: "~@13 x!2 ~@2 x ~ x!2 ~ x!2", B: "~@17 x ~@6", C: "~@3 x",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@8 B ~@8 B ~@6 C ~@8 B ~@8 B ~@6 C B ~@8 B ~@7 B ~@7 B ~@6 C B ~@6 D ~
>`.pickRestart({
  A: "~@19 x ~@4", B: "~ x ~@22", C: "~@13 x ~@3 x ~@4 x ~", D: "~@13 x ~@4 x ~@3 x ~",
})).gain(0.59)

stack(
  bass, clavinet, cello, lead_8_bass_lead, tenor_sax, string_ensemble_1, clavinet_2, kick, snare, clap, hihat, mid_tom,
  high_tom, crash
)

More by Howard Jones