Strudelify

Nachts wenn alles schlaft

Howard Carpendale

KeyF majorTempo100 bpm
0:00/0:00
// Nachts wenn alles schlaft — Howard Carpendale
// 100 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@8 A@2 B@2 C@2 D@2 E@2 B@2 F@2 G@2 E@2 B@2 F@2 E@2 H@2 I@2 J@2 K L M N O P J Q K R S T I U J V K W I X Y@2 E@2 B@2
  F@2 G@2 E@2 B@2 F@2 E@2 H@2 I@2 J@2 K L M N O P J Q K R S T I U J V K W I Z M AA AB AC K@2 I Z M AD J AE AF K I Z M AG
  AH AI AF R I Z AJ ~
>`.pickRestart({
  A: "[f1@31 ~]/2", B: "g1/2", C: "[bb1@31 ~]/2", D: "[f1@29 ~@3]/2", E: "f1/2", F: "bb1/2", G: "[f1@15 ~]/2",
  H: "[c2@27 ~@5]/2", I: "f1@4 ~@2 f1 ~ f1@6 f2!2", J: "g1@4 ~@2 g1 ~ g1@6 g2!2", K: "bb1@4 ~@2 bb1 ~ bb1@6 bb2!2",
  L: "bb1@4 ~@2 bb1!3 bb1@5 bb2!2", M: "f1@4 ~@2 f1!2 f1@6 f2!2", N: "f1@4 ~@2 f1 ~ f1@4 f2!2 f1 f2",
  O: "f1@5 ~ f1!2 f1@6 f2!2", P: "f1@4 ~@2 f1 ~ f1@4 f2!2 f1@2", Q: "g1@5 ~ g1!3 g1@5 g2!2",
  R: "bb1@4 ~@2 bb1 ~ bb1@4 bb2!2 bb1 bb2", S: "f1@4 ~@2 f1 ~ f1 f1@5 f2!2", T: "f1@5 ~ f1 ~ f1!2 f2@3 f1 f2@2",
  U: "f1@4 ~@2 f1!3 f1@5 f2!2", V: "g1@4 ~@2 g1!3 g1@3 g2!2 g1 g2", W: "bb1@5 ~ bb1!4 bb2!2 bb1@2 bb2!2",
  X: "f1@5 ~ f1 ~ f1!2 f1@4 f2!2", Y: "[c2@5 ~ c2 ~ c2@6 ~ c2@3 ~@14]/2", Z: "f1@4 ~@2 f1 ~ f1!2 f2@4 f1 f2",
  AA: "f1@4 ~@2 f1 ~@7 f2!2, ~ f1", AB: "g1@4 ~@2 g1 ~ g1@5 ~ g2!2", AC: "g1@4 ~@2 g1 ~ g1 g1@3 g2!2 g1 g2",
  AD: "f1@6 ~ f1 f1@4 f2!2 ~ f2, ~@7 f1", AE: "g1@4 ~@2 g1 ~ g1@4 g2!2 ~ g2, ~@7 g1", AF: "bb1@5 ~ bb1 ~ bb1@6 bb2!2",
  AG: "f1@4 ~@3 f1 f1@4 f2!2 ~ f2, ~@7 f1", AH: "g1@4 ~@3 g1 g1@6 g2!2", AI: "g1@5 ~ g1 ~ g1@4 g2!2 g1 g2",
  AJ: "f1@15 ~",
})).s("gm_electric_bass_finger").gain(0.5)

// bass · synth bass 1 · "SYNTH BASS"
const bass_2 = note(`<
  ~@34 A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@2 D ~@19 A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4
  B@2 C@2 A@2 E ~
>`.pickRestart({
  A: "f2!16", B: "g2!16", C: "bb2!16", D: "c2!16", E: "f2@5 ~@11",
})).s("gm_synth_bass_1").gain(0.3)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@3 A@3 ~@5 B@3 ~@5 C@3 ~@5 D@3 ~@3 E F ~@2 G@3 ~@5 H@3 ~@5 I@3 ~ J@2 ~@4 C@3 ~@5 D@3 ~@3 E F ~@2 G@3 ~@5 H@3 ~@5 I@3
  ~@5 K@3 ~@5 L@2 ~@6 M@2 ~@2 N@2 ~
>`.pickRestart({
  A: "[~@16 c5@6 d5@17 ~@9, ~@5 [f4,bb4]@8 ~@3, ~@16 f5@23 ~@9]/3", // Bb5
  B: "[~@16 f5@21 ~@11, ~@15 [f4,bb4]@22 ~@11, ~@16 c5@13 ~@19]/3", // Bb5
  C: "[~@8 f5@11 ~@5, ~@15 [f4,bb4]@23 ~@10, ~@8 c5@5 ~@11]/3", // Bb5
  D: "[~@16 f5@19 ~@13, ~@15 [f4,bb4]@20 ~@13, ~@16 c5@11 ~@21]/3", E: "~@6 c5@9 ~, ~@2 c4@13 ~, ~@4 g4@11 ~",
  F: "[f4,a4]@9 ~@7", G: "[~@16 [bb4,f5]@19 ~@13, ~@5 f4@6 ~@5, ~@2 c5 ~@3]/3",
  H: "[~@8 f5@9 ~@7, ~@15 [f4,bb4]@19 ~@14, ~@16 c5@9 ~@23]/3", I: "[~@8 [bb4,c5,f5]@9 ~@7, ~@15 f4@19 ~@14]/3",
  J: "[~@16 [g4,c5]@14 ~ [c4,g4,c5], ~@15 c4@15 ~@2]/2", K: "[~@16 [c5,f5]@25 ~@7, ~@15 [f4,bb4]@26 ~@7]/3",
  L: "[~ f5, ~@15 [f4,bb4]@17, ~@4 c5@3 ~]/2", M: "[~@16 f5@15 ~, ~@15 [f4,bb4]@16 ~, ~@2 c5 ~]/2",
  N: "[~@12 [c5,f5]@3 ~ [c5,f5]@15 ~, ~@11 [f4,bb4]@3 ~ [f4,a4]@16 ~]/2", // F5 Bb5 F
})).s("gm_electric_guitar_clean").gain(0.4)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  A B C D E F G H I J K L M N I O P Q R L S T U I U V W X T Y U Z AA AB AC AD AE@2 AF@2 AG@3 AH AE@2 AI AJ AK AG@2 AH AL
  AM AN AF AG AO AP ~ P Q R L S T U AQ U V W X T Y U Z AA AB AC AD AE@2 AF@2 AG@3 AH AE@2 AI AJ AK AG@2 AH AE AM AN AF
  AG AO AC AH AR AE AS AF AG AT AU AH AE AR AF@2 AG@3 AH AV AE AF@2 AG@2 AW ~
>`.pickRestart({
  A: "[c4,f4,a4]!4 ~ [c4,f4,a4]!2 ~@2 [f4,a4] ~@2 [c4,f4,a4] ~@3", // F
  B: "[c4,f4,a4]!4 ~ [c4,f4,a4]!2 ~@2 [c4,a4] ~@2 [f4,a4]@2 ~@2, ~@9 f4@2 ~ c4 ~@3", // F
  C: "[d4,g4,bb4]!4 ~ [d4,g4,bb4] [g4,bb4] ~@2 [d4,g4,bb4] ~@2 [g4,bb4]@2 bb4 ~, ~@6 d4@2 ~@4 d4 ~@3", // Gm
  D: "[d4,g4,bb4]!4 ~ [d4,g4,bb4] [d4,g4,bb4]@2 ~ [d4,g4,bb4] ~@2 [d4,g4,bb4] ~ [d4,g4,bb4]!2", // Gm
  E: "[d4,f4,bb4]!4 ~ [d4,f4,bb4] [d4,f4,bb4]@2 ~ [d4,f4,bb4] ~ bb4 [d4,f4,bb4]@3 ~", // Bb
  F: "[d4,f4,bb4]!4 ~ [d4,f4,bb4] [d4,f4] ~@2 [d4,f4,bb4] ~ [d4,f4,bb4]!2 ~ [d4,f4,bb4]!2, ~@3 bb4 ~@4", // Bb Dm Bb
  G: "[c4,f4,a4]!4 ~ [c4,f4,a4] [f4,a4] ~@2 [c4,f4,a4] ~ [c4,f4,a4]!2 ~ [c4,f4,a4]!2, ~@3 c4 ~@4", // F
  H: "[c4,f4,a4]!4 ~ [c4,f4,a4]!2 ~@2 [c4,f4,a4] [c4,f4,a4]@2 ~ [c4,f4,a4]!2 ~", // F
  I: "[c4,f4,a4]!4 ~ [c4,f4,a4] [c4,f4,a4]@2 ~ [c4,f4,a4] ~ [c4,f4,a4]!2 ~ [c4,f4,a4]!2", // F
  J: "[c4,f4,a4]!4 ~ [c4,f4,a4] [c4,f4,a4]@2 ~ [c4,f4,a4] ~ [c4,f4,a4] [c4,f4,a4]@2 ~@2", // F
  K: "[d4,g4,bb4]!4 ~ [d4,g4,bb4] [d4,g4] ~@2 [d4,g4,bb4] ~ [d4,g4,bb4] [d4,g4,bb4]@2 bb4 ~, ~@3 bb4 ~@4", // Gm G5 Gm
  L: "[d4,g4,bb4]!4 ~ [d4,g4,bb4] [d4,g4,bb4]@2 ~ [d4,g4,bb4] ~ [d4,g4,bb4] [d4,g4,bb4]@2 ~@2", // Gm
  M: "[d4,f4,bb4]!4 ~ [d4,f4,bb4] [d4,f4,bb4]@2 ~ [d4,f4,bb4] ~ [d4,f4,bb4] [d4,f4,bb4]@3 ~", // Bb
  N: "[d4,f4,bb4]!4 ~ [d4,f4,bb4] [d4,f4,bb4]@2 ~ [d4,f4,bb4] ~ [d4,f4,bb4]!2 ~ [d4,f4,bb4]!2", // Bb
  O: "[c4,f4,a4]!4 ~ [c4,f4,a4] [c4,a4]@2 ~ [c4,f4,a4] ~ [c4,f4,a4] [c4,a4] ~ [c4,f4,a4]!2, ~@6 f4 ~@5 f4@2 ~@2", // F
  P: "[c4,f4,a4]!4 ~ [c4,f4,a4] [c4,f4,a4]@2 ~ [c4,a4]@2 [c4,f4,a4]!2 ~ [c4,f4,a4]!2, ~@9 f4 ~@6", // F
  Q: "[c4,f4,a4]!4 ~ [c4,f4,a4]!2 ~@2 [c4,f4,a4] ~ [c4,f4,a4] [c4,f4,a4]@2 [f4,a4] [c4,f4,a4]", // F
  R: "[d4,g4,bb4]!4 ~ [d4,g4,bb4]!2 ~@2 [d4,g4,bb4] ~ [d4,g4,bb4]!2 ~@3", // Gm
  S: "[d4,f4,bb4]!4 ~ [d4,f4,bb4] [d4,f4,bb4]@2 ~ [d4,f4,bb4] ~ [d4,f4,bb4] [d4,f4,bb4]@2 [d4,f4,bb4]!2", // Bb
  T: "[d4,f4,bb4]!4 ~ [d4,f4,bb4]!2 ~@2 [d4,f4,bb4] ~ [d4,f4,bb4]!2 ~ [d4,f4,bb4]!2", // Bb
  U: "[c4,f4,a4]!4 ~ [c4,f4,a4]!2 ~@2 [c4,f4,a4] ~ [c4,f4,a4]!2 ~ [c4,f4,a4]!2", // F
  V: "[c4,f4,a4]!4 ~ [c4,f4,a4]!2 ~@2 [c4,f4,a4] ~ [c4,f4,a4]!2 ~ [c4,f4,a4] ~", // F
  W: "[d4,g4,bb4]!4 ~ [d4,g4,bb4]!2 ~@2 [d4,g4,bb4] ~ [d4,g4,bb4]!2 ~ [d4,g4,bb4]!2", // Gm
  X: "[d4,g4,bb4]!4 ~ [d4,g4,bb4]!2 ~@2 [d4,g4,bb4] ~ [d4,g4,bb4]!2 ~ [d4,g4,bb4] ~", // Gm
  Y: "[d4,f4,bb4]!4 ~ [d4,f4,bb4]!2 ~@2 [d4,f4,bb4] ~ [d4,f4,bb4]!2 ~ [d4,f4,bb4] ~", // Bb
  Z: "[c4,f4,a4]!4 ~ [c4,f4,a4] [c4,f4,a4]@2 ~ [c4,f4,a4] ~ [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a4] ~", // F
  AA: "[c4,e4,g4]!4 ~ [c4,e4,g4] [c4,e4]@2 ~ [c4,e4,g4] ~ [c4,e4,g4]!2 ~ [c4,e4,g4]!2, ~@6 g4 ~@9", // C
  AB: "[c4,e4,g4]!4 ~ [e4,g4] [c4,e4,g4] ~@2 [c4,e4,g4] ~ [c4,e4,g4]!2 ~@3", AC: "[c4,f4,a4]!5 [f4,a4] [c4,f4,a4]!10",
  AD: "[c4,f4,a4]!2 [f4,a4] [c4,f4,a4]!13", AE: "[d4,g4,bb4]!16", AF: "[d4,f4,bb4]!16", AG: "[c4,f4,a4]!16",
  AH: "[c4,f4,bb4]!4 [c4,f4,a4]!12", AI: "[d4,f4,bb4]!14 [d4,bb4] [d4,f4,bb4]", AJ: "[d4,f4,bb4]!5 f4 [d4,f4,bb4]!10",
  AK: "[c4,f4,a4] [f4,a4] [c4,f4,a4]!14", AL: "[d4,g4,bb4]!3 [d4,g4] [d4,g4,bb4]!12",
  AM: "[d4,g4,bb4]!5 [g4,bb4]!2 [d4,g4,bb4]!9", AN: "[d4,f4,bb4]!14 [f4,bb4] [d4,f4,bb4]",
  AO: "[c4,f4,a4]!6 [f4,a4] [c4,f4,a4]!9", AP: "[c4,e4,g4]!16",
  AQ: "[c4,f4,a4]!4 ~ [c4,f4,a4] [f4,a4]@2 ~ [c4,f4,a4] ~ [c4,f4,a4]!2 ~ [c4,f4,a4]!2, ~@6 c4 ~@9", // F
  AR: "[d4,g4,bb4]!8 [g4,bb4] [d4,g4,bb4]!7", AS: "[d4,f4,ab4,bb4] [d4,f4,bb4]!15",
  AT: "[c4,f4,a4]!8 [f4,a4] [c4,f4,a4] [f4,a4] [c4,f4,a4]!5", AU: "[c4,f4,a4]!3 [c4,f4]!2 [c4,f4,a4]!11, ~@3 a4@2 ~@11",
  AV: "[d4,g4,bb4]!3 [g4,bb4] [d4,g4,bb4]!12", AW: "[c4,f4,a4]@7 ~@9",
})).s("gm_pizzicato_strings").gain(0.25).pan(0.3)

// other · pad new age · "FANTASIA"
const pad_new_age = note(`<
  ~@26 A B@2 ~@3 C@2 ~@9 D E ~@2 F@2 ~@2 G E ~@2 H@2 ~ I@2 ~@10 A B@2 ~@3 C@2 ~@9 D E ~@2 F@2 ~@2 G E ~@2 H@2 ~@2 D J
  ~@2 K@2 ~@2 D L ~@2 M@2 ~@2 D J ~@2 N@4 ~
>`.pickRestart({
  A: "bb5@7 ~ a5@7 ~", B: "[g5@4 d5@3 ~ e5@4 f5@9 ~@11]/2", C: "[~@6 g4 c5@4 ~@5, ~@5 c4@9 ~@2]/2",
  D: "bb5@3 ~ a5@3 ~ g5@3 ~ f5@3 ~", E: "g5@7 ~@9", F: "[bb5@3 ~ a5@4 g5@4 f5@9 ~@11]/2", G: "bb5@3 ~ a5@4 g5@4 f5@3 ~",
  H: "[bb5@3 ~ a5@3 ~ g5@3 ~ f5@10 ~@10]/2", I: "[~@15 [c4,c5]@2 ~@15]/2", J: "g5@3 ~@5",
  K: "[bb5@3 ~ a5@3 ~ g5@3 ~ f5@11 ~@9]/2", L: "g5@9 ~@7", M: "[bb5@3 ~ a5@3 ~ g5@4 f5@11 ~@9]/2",
  N: "[bb5@4 a5@3 ~ g5@3 ~ f5@38 ~@14]/4",
})).s("gm_pad_new_age").gain(0.4)

// bass · piano · "A.PIANO"
const bass_3 = note(`<
  A@2 B@2 C@2 D@4 E@2 C@2 F ~ A@2 E@2 G@2 H@4 I@2 C@2 J@2 K@2 L@2 I@2 G@2 H@2 A@2 M@2 G@2 H@2 A@2 N@2 G@2 A@2 O@2 A@2
  E@2 G@2 H@4 I@2 C@2 J@2 K@2 L@2 I@2 G@2 H@2 A@2 M@2 G@2 H@2 A@2 N@2 G@2 A@2 D@2 I@2 P@2 J@2 H@2 E@2 G@2 H@2 D@2 N@2
  G@2 Q@2 R@2
>`.pickRestart({
  A: "[f1@29 ~@3]/2", B: "[g1@27 ~@5]/2", C: "[bb1@7 ~]/2", D: "[f1@15 ~]/2", E: "[g1@7 ~]/2", F: "f1@5 ~@3",
  G: "[bb1@29 ~@3]/2", H: "[f1@7 ~]/2", I: "[g1@29 ~@3]/2", J: "[f1@27 ~@5]/2", K: "[~@16 c1@13 ~@3, c2@29 ~@3]/2",
  L: "[f1@11 ~@5]/2", M: "[g1@3 ~]/2", N: "[g1@31 ~]/2", O: "[c2@15 c1@15 ~@2]/2", P: "[bb1@15 ~]/2", Q: "[f1@7 f2]/2",
  R: "[f1@19 ~@13]/2",
})).s("gm_piano").gain(0.5)

// other · pizzicato strings · "PIZZICATO"
const pizzicato_strings_2 = note(`<
  ~@60 A B C D C E@2 C F@2 C@3 G C@2 H I J C J@4 C K C J L M J@2 C J C@3 J K C J N J@3 C@4 J@2 C J C@2 K C O C@2 J P C@2
  J Q R ~
>`.pickRestart({
  A: "f4 ~@8 c4 d4 f4@2 f4 d4 ~", B: "~@6 d4 ~@2 c4 d4 f4 ~ f4 d4 c4", C: "~@9 c4 d4 f4 ~ f4 d4 c4",
  D: "~@9 c4 d4 f4 ~ d4 c4 ~", E: "[~@9 c4 d4 f4 ~ f4 d4 c4@2 ~@8 c4 d4 f4 ~ f4 d4 ~]/2",
  F: "[~@9 c4 d4 f4 ~@2 d4 c4@2 ~@8 c4 d4 f4 ~ f4 d4 f4]/2", G: "~@9 [c4,f4] d4 f4 ~ f4 d4 c4",
  H: "d4 c4 ~@7 c4 d4 f4 ~ [f4,g4] d4 c4", I: "~@9 c4 ~ c5 ~ c5 c4 ~", J: "~@9 c4 d4 f4 ~ f4 d4 ~",
  K: "~@9 c4 d4 f4 ~ f4 d4 f4", L: "f4 ~ [d4,f4] ~@6 c4 d4 f4 ~ f4 d4 c4", M: "d4 ~@8 c4 d4 f4 ~ f4 d4 ~",
  N: "f4!2 d4 ~ f4 c4 d4 f4 ~ f4 d4 c4 ~@2 c4 d4", O: "~@5 c4 d4 f4 ~ f4 d4 ~ f4!2 d4 ~",
  P: "~@5 c4 d4 ~@3 c4 d4 f4!2 d4 ~", Q: "f4!2 d4 ~ f4 ~@4 c4 d4 f4 ~ f4 d4 c4", R: "f4 ~@15",
})).s("gm_pizzicato_strings").gain(0.35).pan(0.6)

// chords · synth strings 1 · "SYN STRING"
const synth_strings_1 = note(`<
  A@2 B@8 C@8 D@8 E@4 F@4 G@2 H@4 I@4 J@8 K@8 G@2 L@8 M@4 N@4 O@2 P@4 Q@4 R@2 S@2 T@4 U@4 V@2 W@2 X@4 Y@4 Z@2 AA@2 AB@4
  AC@4 O@2 AD ~
>`.pickRestart({
  A: "[a3,c4,f4]/2", B: "[g4@31 ~ bb4@31 ~ [a3,c4]@63 ~, [bb3,d4]@63 ~ a4@17 ~@47, ~ f4@3]/8",
  C: "[g4@32 bb4@31 ~ [a3,c4]@63 ~, [bb3,d4]@63 ~ a4@16 ~@48, ~ f4@3]/8", // Am Bb
  D: "[g4@31 ~ bb4@31 ~ [a3,c4]@63 ~, [bb3,d4]@63 ~ a4@16 ~@48, ~ f4@3]/8", E: "[g4 [f4,bb4], [bb3,d4]@63 ~]/4",
  F: "[[f4,a4]@16 ~@8 c5@7 ~, c4@63 ~, a3@22 ~@10 [e4,g4]@31 ~]/4", G: "[c4,f4,a4]/2",
  H: "[g4@32 [f4,bb4]@31 ~, [bb3,d4]@63 ~]/4", I: "[[c4,f4,a4], a3@29 ~@35]/4",
  J: "[g4@8 ~@8 a4@12 bb4 a4@3, [d4,bb4]@63 ~ c4@63 ~, ~ f4@3, ~@32 a3@9 ~@23]/8", // Gm
  K: "[g4@16 bb3@15 ~ [a3,a4]@16 [e4,g4]@9 ~@7, [d4,bb4]@63 ~ c4@50 ~@14, ~@32 f4@63 ~@33]/8", // A Em Gm
  L: "[g4@31 ~ bb4@31 ~ [c4,a4]@64, [bb3,d4]@31 ~@33, ~ f4@3]/8", M: "[[bb3,g4]@32 [f4,bb4]@31 ~, d4@63 ~]/4",
  N: "[[f4,a4]@16 [e4,g4]@15 ~, c4@31 ~]/4", O: "[[c4,f4,a4]@31 ~]/2",
  P: "[bb3@16 ~@16 f4@31 ~, d4@31 ~, g4 ~, ~@16 bb4@47 ~]/4", Q: "[a4@12 bb4 a4@3, [c4,f4]]/4",
  R: "[~ bb3@31, [d4,g4]]/2", S: "[[d4,f4,bb4]@31 ~]/2", T: "[a4@12 bb4 a4@3, [c4,f4]@63 ~]/4",
  U: "[g4@32 [bb3,f4]@31 ~, [d4,bb4]@63 ~]/4", V: "[[c4,f4,a4]@31 ~, a3@15 ~@17]/2", W: "[[f4,a4], c4@15 ~]/2",
  X: "[[d4,g4]@32 [d4,f4]@31 ~, bb4@63 ~]/4", Y: "[[f4,a4], c4@31 ~]/4", Z: "[[d4,g4,bb4]@31 ~]/2",
  AA: "[bb3,d4,f4,bb4]/2", AB: "[c4,f4,a4]/4", AC: "[bb3 ~ f4@2, d4@31 ~, g4 ~, ~@16 bb4@47 ~]/4", AD: "[a3,c4,f4]",
})).s("gm_synth_strings_1").gain(0.3)

// drums · kick
const kick = s("bd").struct("<[x!4]!58 [x ~@3 x ~@3 x ~@3 x ~@2 x] [~@2 x!2] [x!4]!66 x ~>").gain(0.5)

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

// drums · low tom
const low_tom = s("lt").struct("<~@58 [~@14 x!2] ~@42 [~@15 x] ~@15 [~@15 x] ~@10>").gain(0.45)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@58 A ~@42 B ~@7 B ~@7 B ~@10>".pickRestart({
  A: "~@13 x ~@2", B: "~@7 x",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@58 [~@8 x!5 ~@3] ~@42 [~@9 x!2 ~ x ~@3] ~@15 [~@3 x] ~@10>").gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@34 A ~@7 A ~@7 A ~@7 B ~@19 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~>".pickRestart({
  A: "x", B: "~@15 x",
})).gain(0.3)

stack(
  bass, bass_2, electric_guitar_clean, pizzicato_strings, pad_new_age, bass_3, pizzicato_strings_2, synth_strings_1,
  kick, snare, low_tom, hihat, mid_tom, high_tom, crash
)

More by Howard Carpendale