Strudelify

Goodbye My Love Goodbye

Demis Roussos

KeyG majorTempo90 bpm
0:00/0:00
// Goodbye My Love Goodbye — Demis Roussos
// 90 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: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 89 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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(`<
  ~@6 A B C D E F G H I J K L M N D O P Q R S T U V W X Y R S T U V Z AA AB C D E F G H I J K L M N D O P Q R S T U V W
  X Y R S T U V Z AA AC AD@3 AE AF AG@3 AD@3 AE AF AH AI@3
>`.pickRestart({
  A: "~@2 g1@22 d2@7 ~", B: "g2@3 d3", C: "g2@24 g1@7 ~", D: "c2@22 ~@2 c2@7 ~", E: "b1", F: "e2@24 e2@7 ~", G: "a1",
  H: "d2", I: "g1@24 ~@4 d2@3 ~", J: "g2@12 d2@3 ~", K: "g1@3 g2", L: "c2@23 ~ c2@7 ~", M: "b1@11 ~ b1@2 d2@2",
  N: "e2@23 ~ e2@8", O: "d2@11 ~ d2@4", P: "g1@9 ~ e2@2 d2@2 b1@2", Q: "g1@5 ~@11", R: "d2@11 ~ d3@12 a2@7 ~",
  S: "d2@5 ~ a2@6 d2@4", T: "g1@11 ~ g2@3 ~ g2@8 d2@7 ~", U: "g1@12 g2@3 ~ g2@8 g1@4 g2@4",
  V: "d2@11 ~ d2@3 ~ d2@8 a1@4 d2@4", W: "c2@12 c3@12 g2@7 ~", X: "g1@3 g2@3 d2!2", Y: "g1 ~@3",
  Z: "c2@4 ~@2 c2@2 d2@3 ~ d2@3 ~", AA: "g1@6 g2@3 d2 e2@2 d2@2 b1@2", AB: "g1", AC: "g1@9 ~@7",
  AD: "[~@16 d#2@11 ~ d#3@12 a#2@7 ~ d#2@10 ~@2 a#2@12 d#2@8 g#1@11 ~ g#2@3 ~]/3", AE: "g#2@8 d#2@7 ~ g#1@12 g#2@3 ~",
  AF: "g#2@8 g#1@4 g#2@4 d#2@11 ~ d#2@3 ~",
  AG: "[d#2@8 a#1@4 d#2@4 c#2@12 c#3@12 g#2@7 ~ g#1@12 g#2@12 d#2@4 d#2@4 g#1@8 ~@8]/3",
  AH: "d#2@8 a#1@4 ~ d#2@4 c#2@10 ~@5",
  AI: "[c#2@5 d#2@8 ~@2 d#2@8 ~@2 g#1@13 g#2@6 d#2@2 f2@4 ~ d#2@5 c2@5 g#1@22 ~@13]/3",
})).s("gm_fretless_bass").gain(0.48)

// other · french horn · "FR.HORN"
const french_horn = note("<~@72 A@8 ~ B@2 C@6>".pickRestart({
  A: "[~@17 c#5@60 ~@3 c5@32 d#5@30 ~ d#5@32 c#5@31 ~@2 c5@34 ~@14]/8", B: "[~@16 d#5@34 ~@2 g#5@3 ~ g#5@3 ~ g5@3 ~]/2",
  C: "[g5@4 f5@3 ~ f5@2 g5@2 f5@2 d#5@2 f5@4 d#5@25 ~@3 d#5@33 c#5@40 c5@57 ~@14]/6",
})).s("gm_french_horn").gain(0.2)

// chords · pad warm · "WARM PAD"
const pad_warm = note("<~@16 A@2 B@6 C@5 D@3 C@5 E@3 ~@8 A@2 B@6 C@5 D@3 F@5 E@3 G@8 H@6 I@3>".pickRestart({
  A: "[[b3,d4]@31 [c4,e4]@31 ~@2, g4@31 ~]/2", // Bm C
  B: "[[b3,d4,f#4]@29 ~@3 [e4,g4]@30 ~ [c4,e4,g4]@31 ~ a4@32 [b3,g4]@43 ~@22, ~@31 b3@30 ~@34 d4@75 ~@22, ~@95 f#4@30 ~@67]/6", // Bm Em C Em
  C: "[[d4,f#4,a4]@63 ~ b3@62 ~ [d4,f#4,a4]@32 ~, ~@63 [d4,g4]@62 ~@35]/5", D: "[[c4,e4,g4]@31 [b3,d4,g4]@43 ~@22]/3",
  E: "[[c4,e4,g4]@16 [d4,f#4,a4]@15 [b3,d4,g4]@43 ~@22]/3", F: "[[d4,f#4,a4]@63 [b3,d4,g4]@62 ~@2 [d4,f#4,a4]@32 ~]/5",
  G: "[~@16 [d#4,g4,a#4]@63 [c4,d#4,g#4]@62 ~@2 [d#4,g4,a#4]@32 ~ [c#4,f4,g#4]@31 [c4,d#4,g#4]@43 ~@6]/8", // D# G# D# C# G#
  H: "[~@16 [d#4,g4,a#4]@63 [c4,d#4,g#4]@62 ~@2 [d#4,g4,a#4]@33 ~ [c#4,f4,g#4]@15]/6", // D# G# D# C#
  I: "[~@5 [d#4,g4,a#4]@19 ~ [d#4,g#4]@56 ~@15, ~@3 c4@7 ~@2]/3", // D# G#5
})).s("gm_pad_warm").gain(0.16)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@16 A@2 B C@5 D@6 E@2 D@6 E@2 ~@8 F@2 G@3 H I@2 D@6 E@2 J@6 E@2 K@4 L@2 M@2 ~ N O P Q@5
>`.pickRestart({
  A: "[g5@22 ~ b5@4 g5@4 e5@30 ~@3]/2", B: "d5", C: "[b4@30 ~ c5@32 d5@16 f#5@16 g5@38 ~@27]/5",
  D: "[d6@31 f#6@33 d6@31 g6@17 d6@31 a6@15 ~ g6@17 c7@16]/6", E: "[b6@37 ~@27]/2",
  F: "[~@20 c6@3 ~ b5@4 ~@5 e5@23 ~ f#5@3 ~ g5@3, ~@15 b6@4 c7@4 b6@5 g6@4 e6@24 f#6@4 g6@4, ~@16 b5@5 ~@8 g5@5 ~@30]/2",
  G: "[~ b5@14 ~ f#5@15 ~ e5@22 ~@3 b4@6 ~ c5@24 ~ g5@7, b6@15 f#6@16 e6@22 ~@3 b5@7 c6@24 ~ g6@8]/3",
  H: "~ f#5@23 ~ a5@7, f#6@3 a6", I: "[~ g5@36 ~@27, g6@9 ~@7]/2",
  J: "[~@16 f#6@32 d6@32 g6@32 d6@31 a6@15 ~ g6@17 c7@16]/6", K: "[~@16 d#6@31 g6@33 d#6@31 g#6@17]/4",
  L: "[d#6@31 a#6@15 ~ g#6@17]/2", M: "[c#7@16 c7@37 ~@11]/2", N: "g6", O: "d#6", P: "g#6",
  Q: "[d#6@31 a#6@16 ~ g#6@21 c#7@20 c7@55 ~@16]/5",
})).s("gm_string_ensemble_2").gain(0.16)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~ A B C D E F@2 G H I J K L M N O H I J P L M Q R S T U ~@2 V W R S T U ~@2 V W O H I J K L M N O H I J P L M Q R S T
  U ~@2 V W R X T U ~@2 V Y@2 Z AA AB@2 ~ AC AD AE Z AA AB@2 ~@2 AF@2
>`.pickRestart({
  A: "~@27 [b4,d5]@5", // Bm
  B: "[c5,e5]@5 [d5,f5]@2 [e5,g5]@2 ~ [d5,f5]@2 [c5,e5]@2 ~ [c5,e5]@2 [d5,f5]@2 ~ e5@2 [b4,d5]@2 [b4,d5]@3 [c5,e5]@2 [b4,d5]@3, ~@19 c5@3 ~@10", // C Dm Em Dm C Dm Bm C …
  C: "[a4,c5]@2 [a4,c5]@3 [b4,d5]@3 [a4,c5]@2 [g4,b4]@3 [b4,d5]@19", // Am Bm Am G Bm
  D: "~@13 [d4,b4]@5 [e4,c5]@5 [f4,d5]@2 ~ [g4,e5]@2 [f4,d5]@2 [e4,c5]@2", // G C Dm C Dm C
  E: "~ [e4,c5]@2 [f4,d5]@3 [e4,c5]@2 [d4,b4]@2 ~ [d4,b4]@2 [e4,c5]@3 [d4,b4]@2 [c4,a4]@2 ~@3 [d4,b4]@3 [c4,a4]@3 [b3,g4]@3, ~@21 [c4,a4]@4 ~@7", // C Dm C G C G F G …
  F: "[d3 ~@14 d3, [b2,g4], g2 g2, b3!4 b3!4, ~ d3@2 d3@2 d3@2 d3@2 d3@2 d3@2 d3@2 ~]/2", // Em
  G: "~@7 d3, g2, b3!4, ~ d3@2 d3@2 d3@2 ~", H: "~@7 c4, c3, c4@2 c4@2 c4@3 ~, ~ e3@2 e3@2 e3@3, ~@3 g3",
  I: "~@4 b3@2 ~ d3, b2, b3!2 ~ b3, ~ d3@2 d3@2 ~@3", J: "e3 ~ b3@2 ~@3 e3, g3, b3 ~ b3!2, ~ e3@2 ~@2 e3@2 ~",
  K: "~@7 c3, a2, e3!2, a3 a3@2 a3, ~ c3@2 c3@2 c3@2 ~", L: "f#3 ~@6 f#3, d3, a3 a3@2 a3, ~ f#3@2 ~ c4@4, ~@5 f#3@2 ~",
  M: "~@7 [g2,d3], g2@7 ~, b3!4, ~ d3@2 d3@2 d3@2 ~", N: "d3 ~@15 b4 ~@3 c5 ~@3 b4 ~@7, g2, b3 b3@3, ~ d3@2 [d3,d4]@5",
  O: "~@7 d3, ~ d3@2 d3@2 d3@2 ~, ~ b3!3", P: "~@7 c3, g2, e3!2, c4 c4@2 c4, ~ c3@2 c3@2 c3@2 ~",
  Q: "[g2,b3]@3 ~, d3 ~@31", R: "~@8 a4@3 ~ b4@3 ~ c5@2 d5@2 c5@2 b4@2 c5@2 d5@2 c5@2 b4@2", S: "~ a4@15 ~@16",
  T: "~@8 b4@3 ~ c5@2 ~@2 d5@2 e5@2 d5@2 c5@2 d5@2 e5@2 d5@2 c5@2", U: "b4@23 ~@9",
  V: "~@6 g4@5 a4@2 ~@3 b4@3 ~ c5 ~@3 b4@2 c5@2 b4@2 a4@2", W: "b4@15 ~@17", X: "a4@15 ~@17",
  Y: "[b4@12 ~@2 d#4@4 c5@4 ~@4 c#5@2 c#5!2 ~ c#5 ~ c#5!2 ~ c#5!3 ~ c#5!2 c#5@6 ~@8 a#4@3 ~ c5@3 ~, ~@11 a#4@13 ~@8]/2",
  Z: "c#5@2 d#5@2 c#5@2 c5@2 c#5@2 d#5@2 c#5@2 c5@2 a#4@15 ~", AA: "~@24 c5@3 ~ c#5@2 ~@2",
  AB: "[d#5@2 f5@2 d#5@2 c#5@2 d#5@2 f5@2 d#5@2 c#5@2 c5@23 ~@25]/2", AC: "~@22 g#4@5 a#4@2 ~@3",
  AD: "c5@3 ~ c#5 ~@3 c5@2 c#5@2 c5@2 a#4@2 c5@15 ~", AE: "~@24 a#4@3 ~ c5@3 ~",
  AF: "[~@10 [d#5,f#5]@2 [f5,g#5]@2 [d#5,f#5]@3 [c#5,f5]@2 [c#5,f5]@2 [d#5,f#5]@2 ~ f5@2 [c5,d#5]@2 ~ [c5,d#5]@22 ~@13, ~@23 c#5@3 ~@38]/2", // D#m Fm D#m C# D#m Cm
})).s("gm_acoustic_guitar_nylon").gain(0.16).pan(0.4)

// chords · acoustic guitar nylon · "NYLON GTR" · soft notes
const acoustic_guitar_nylon_2 = note("<~@8 A ~ B C ~ D ~ E@2 ~ B C ~ D ~@20 B C ~ D ~ E@2 ~ B C ~ D ~@35>".pickRestart({
  A: "d3@3 ~@29", B: "~@5 d3@2 ~", C: "~@3 e3@2 e2@3", D: "~@3 f#3@2 ~@3",
  E: "[~@17 b4 ~@3 c5 ~@3 b4 ~@2 g4!2 ~ g4@2 ~@31, ~@19 b4@4 c5@10 ~@31, ~@27 b4@6 ~@31]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.11).pan(0.4)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@4 B@2 C@3 D E F G H I@3 D E F J H K@2 L M N@2 O P N Q O@2 N@2 O R N Q S D E F G H I@3 D E F J H K@2 O@2 N@2 O P N Q
  O@2 N@2 O R N T U@8 V@6 W@3
>`.pickRestart({
  A: "[~@32 g4@93 ~@3, ~@30 [g2,b2]@97 ~, ~@15 d3@47 ~@2, ~@31 [g3,b3]@96 ~]/4", // G
  B: "[~@3 g4@59 ~@2, g2@31 ~, ~ [b2,d3]@62 ~, ~ [g3,b3]@30 ~]/2", // Bm G
  C: "[~@92 g3@3 ~, g2@16 g2@12 g3@4 g2@12 g4@8 g3@4 g4@4 g3@8 g3@12 g2@15 ~, g4@12 g4@12 g4@16 d3@32 d3@12 g3@4 g4@7 ~, ~@4 g3@16 g3@4 g3@2 b3@38 g4@22 d3@9 ~, ~@8 d3@14 d3@14 g3@12 g2@16 g2@12 b3@12 g3@2 b3@5 ~]/3",
  D: "~@7 e3, c4@5 e3 c4@2, c3@3 e4@5, ~ e3@3 c3@4, ~ g3@3",
  E: "~@7 d4, b2@31 ~, b3@20 f#3@11 ~, f#3@8 f#3@8 d3@15 ~, ~@4 d3@8 d4@12 b3@7 ~",
  F: "~ e2@2 ~@4 g3, e3@5 g3 b3@2, b3 e4, g3@6 g3@3 b3@2 e3@5, ~@7 e2@9",
  G: "~@7 e3, a2!2, c4@3 c4@5, a3 a3@2 a3, ~ e3@4 e3@2 ~", H: "d3@2 ~@3 f#3@3, a3, f#3@3 d4@5, ~ d3@3, ~@3 f#3 d2@4",
  I: "[~@92 g3@3 ~, g2@36 g3@12 d3@20 g3@12 g2@15 ~, g3@16 g3@12 g3@4 d3@12 g4@10 g2@6 g3@4 g2@12 b3@12 g3@2 b3@5 ~, ~@12 g4@28 g2@12 g3@6 b3@14 d3@12 g3@4 g4@7 ~, ~@12 b3@12 b3@8 b3@24 g4@8 g4@22 d3@9 ~]/3",
  J: "~@7 e3, c3, c4@3 c4@5, g3@2 g3@3 e3 g3@2, ~ e3@3 g2@4",
  K: "[~@6 b3 g3 [d3,g3,b3,g4]@6 ~@2, g2@37 ~@27, g3@4 g3@3 ~@9, ~@6 g4@9 ~@17, ~@3 b3@3 ~@10]/2", // G
  L: "[d3,a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2 [a3,d4,f#4]!3, a2, ~@8 d3 ~@15 d3@8", // D
  M: "[d3,a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2 [a3,d4,f#4]!3, a2 ~@7 d3@16 d3@8", // D
  N: "[d3,g3,b3,g4]@2 [g3,b3,g4] [g3,b3,g4]@2 [g3,b3,g4]!3, g2, ~ d3@2 d3", // G
  O: "[d3,a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2 [a3,d4,f#4]!3, a2, ~ d3@2 d3", // D
  P: "[c3,g3,c4,e4]@2 [g3,c4,e4] [g3,c4,e4]@2 [g3,c4,e4]!3, g2, ~ c3@2 c3", Q: "[g2,d3,b3,g4]@3 ~, g3@5 ~@3",
  R: "[c3,g3,c4,e4]@8 [g3,c4,e4]@4 [g3,c4,e4]@3 ~ [d3,a3,d4,f#4]@8 [a3,d4,f#4]@4 [a3,d4,f#4]@3 ~, g2@15 ~ a2@15 ~, ~@8 c3@7 ~@9 d3@7 ~", // C D
  S: "~@28 g3@3 ~, g4@22 d3@9 ~, g2@12 b3@12 g3@2 b3@5 ~, ~@4 g3@12 g2@15 ~, ~@8 d3@12 g3@4 g4@7 ~",
  T: "[g2,d3,g3,b3,g4]@11 ~@21", // G
  U: "[~@4 [d#3,a#3,d#4,g4]@2 [a#3,d#4,g4] [a#3,d#4,g4]@2 [a#3,d#4,g4]!3 [d#3,a#3,d#4,g4]@2 [a#3,d#4,g4] [a#3,d#4,g4]@2 [a#3,d#4,g4]!3 [d#3,g#3,c4,g#4]@2 [g#3,c4,g#4] [g#3,c4,g#4]@2 [g#3,c4,g#4]!3 [d#3,g#3,c4,g#4]@2 [g#3,c4,g#4] [g#3,c4,g#4]@2 [g#3,c4,g#4]!3 [d#3,a#3,d#4,g4]@2 [a#3,d#4,g4] [a#3,d#4,g4]@2 [a#3,d#4,g4]!3 [c#3,g#3,c#4,f4]@2 [g#3,c#4,f4] [g#3,c#4,f4]@2 [g#3,c#4,f4]!3 [d#3,g#3,c4,g#4]@2 [g#3,c4,g#4] [g#3,c4,g#4]@2 [g#3,c4,g#4]!3 [g#2,d#3,g#3,c4,g#4]@4, ~ a#2@2 a#2@2 g#2@2 g#2@2 a#2@2 g#2@2 g#2@2 ~, ~@3 d#3@2 d#3 ~ d#3@2 d#3 ~ d#3@2 d#3 ~ d#3@2 d#3 ~ d#3@2 d#3 ~ c#3@2 c#3 ~ d#3@2 d#3 ~@2]/8", // D# G# D# C# G#
  V: "[~@16 [d#3,a#3,d#4,g4]@8 [a#3,d#4,g4]@4 [a#3,d#4,g4]@8 [a#3,d#4,g4]@4 [a#3,d#4,g4]@4 [a#3,d#4,g4]@4 [d#3,a#3,d#4,g4]@8 [a#3,d#4,g4]@4 [a#3,d#4,g4]@8 [a#3,d#4,g4]@4 [a#3,d#4,g4]@4 [a#3,d#4,g4]@4 [d#3,g#3,c4,g#4]@8 [g#3,c4,g#4]@4 [g#3,c4,g#4]@8 [g#3,c4,g#4]@4 [g#3,c4,g#4]@4 [g#3,c4,g#4]@4 [d#3,g#3,c4,g#4]@8 [g#3,c4,g#4]@4 [g#3,c4,g#4]@8 [g#3,c4,g#4]@4 [g#3,c4,g#4]@4 [g#3,c4,g#4]@4 [d#3,a#3,d#4,g4]@8 [a#3,d#4,g4]@4 [a#3,d#4,g4]@8 [a#3,d#4,g4]@4 [a#3,d#4,g4]@4 ~ a#3@4 [g#2,c#3,g#3,c#4,f4]@15, ~@16 a#2@32 a#2@32 g#2@32 g#2@32 a#2@33 ~@15, ~@24 d#3@16 d#3@8 ~@8 d#3@16 d#3@8 ~@8 d#3@16 d#3@8 ~@8 d#3@16 d#3@8 ~@8 d#3@16 d#3@9 ~@15, ~@172 [d#4,g4]@5 ~@15]/6", // D# G# D# C# D#
  W: "[~@5 [a#2,d#3,a#3,d#4,g4]@20 ~ g#4@7 ~ [g#3,c4,g#4]@4 [g#3,c4,g#4]@8 ~ g#3@4 [g#3,c4,g#4]@4 ~ g#3@4 ~ [g#3,c4,g#4]@21 ~@14, ~@25 g#2@35 [g#2,d#3]@22 ~@14, ~@25 [d#3,g#3,c4]@8 d#3@17 ~ d#3@9 ~@36, ~@46 [c4,g#4]@5 ~@4 [c4,g#4]@5 ~@36]/3", // D# G# G#5 G# Fm
})).s("gm_acoustic_guitar_steel").gain(0.29).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@24 A@3 B A@2 C D A@3 B A@2 C D ~@16 A@3 B A@2 C D A@3 B A@2 C D E A@2 F A@3 G E A@2 F A H I J ~
>`.pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "x ~@3 x!2 ~@2", D: "x", E: "~ x", F: "x ~@3 x ~@2 x", G: "x!2 ~@2 x ~@3",
  H: "x ~@16 x ~@14", I: "~@5 x ~@19 x ~@6", J: "~@10 x ~@3 x ~@14 x ~@2",
})).gain(0.52)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@24 A B@3 A B@2 ~ A B@3 A B@2 ~@17 A B@3 A B@2 ~ A B@3 A B@2 ~ C D E@2 C D E ~ C D E@2 C B F ~@2
>`.pickRestart({
  A: "~@3 x ~ x ~@2", B: "~ x ~@6", C: "~@7 x", D: "~ x ~@3 x ~@2", E: "~@5 x ~@2", F: "~@15 x",
})).gain(0.29)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@30 A ~@7 A B ~@22 A ~@7 A ~ C ~@5 D E ~@7 F ~>".pickRestart({
  A: "~@7 x ~ x ~ x ~@4", B: "~@10 x!4 ~@2", C: "~@7 x ~@24", D: "~@15 x", E: "~ x ~ x ~@12",
  F: "~@8 x ~@3 x ~@4 x ~@14",
})).gain(0.23)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@24 A B@2 C B@2 D ~ A B@2 C B@2 D E ~@16 A B@2 C B@2 D ~ A B@2 C B@2 D ~ F B@3 G B@2 H I B@3 G J K L ~
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", D: "x!6 ~@2", E: "~ x!3", F: "~@2 x ~@2 x!3",
  G: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", H: "x!2 ~@6", I: "~@5 x!3", J: "x ~@3 x ~@3 x ~@4 x ~@18", K: "~@25 x ~@4 x ~",
  L: "~ x ~ x ~ x ~ x ~@8",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@23 A ~@7 A ~@23 A ~@7 A ~@8 B ~@7 C ~@8>".pickRestart({
  A: "~@7 x", B: "~@12 x!2 ~ x ~@16", C: "~@3 x ~@4",
})).gain(0.29)

// drums · open hat
const open_hat = s("oh").struct("<~@39 [~@7 x] ~@32 x ~@16>").gain(0.23)

// drums · mid tom
const mid_tom = s("mt").struct("<~@72 [~@8 x!2 ~ x ~@20] ~@16>").gain(0.29)

// drums · crash
const crash = s("cr").struct("<~@24 A ~@6 A@2 ~@6 A ~@16 A ~@6 A@2 ~@6 A B ~@6 B@2 ~@4 C D E ~>".pickRestart({
  A: "x", B: "~ x", C: "~@17 x ~@14", D: "~@5 x ~@26", E: "~@29 x ~@2",
})).gain(0.29)

stack(
  bass, french_horn, pad_warm, string_ensemble_2, acoustic_guitar_nylon, acoustic_guitar_nylon_2, acoustic_guitar_steel,
  kick, kick_soft, snare, snare_soft, hihat, low_tom, open_hat, mid_tom, crash
)

More by Demis Roussos