Strudelify

Dort tief im Bohmenwald

Mosch

KeyE♭ majorTempo172 bpm
0:00/0:00
// Dort tief im Bohmenwald — Mosch
// 172 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(172/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 · tuba
const bass = note(`<
  A@2 B C D E F D G F D G H I J K D E F D G F D G H L J M D N O D E F D P Q R ~ S T U V W B S X Y V Z AA AB Z B AC Z AA
  AB AD AE AF AG AH AI AJ@2 AK AL AM AN AL AM AN AO@2 AP AQ AR AS AT AU AV AW AX AS AT AU AY AZ BA AS AT AU AV AW AX AS
  AT AU BB BC
>`.pickRestart({
  A: "[~@11 bb2 ~@3 bb2@5 ~@3 eb2 ~@4 eb2@4]/2", B: "~@4 bb2 ~@11", C: "~@12 eb2 ~@3", D: "~@8 bb2 ~@7",
  E: "~@4 eb2 ~@11", F: "bb2 ~@11 f2 ~@3", G: "~@4 f2 ~@11", H: "bb2@4 c3@4 d3@3 ~ eb3 ~@3", I: "~@8 eb3 ~@3 g2 ~@3",
  J: "bb2 ~@3 eb2 ~@11", K: "ab2@11 ~ eb2 ~@3", L: "~@4 bb2 ~@3 eb3 ~@3 g2 ~@3", M: "~@12 f2 ~@3", N: "~@4 d2 ~@11",
  O: "bb1@4 c2@4 d2@3 ~ eb2 ~@3", P: "~@4 bb2@4 c3@4 d3@3 ~", Q: "eb3 ~@11 eb3 ~@3", R: "bb2 ~@3 g2 ~@3 eb2@2 ~@6",
  S: "f2 ~@11 bb2 ~@3", T: "~@8 d2 ~@7", U: "~@4 bb1@4 c2@4 d2@3 ~", V: "eb2 ~@11 bb2 ~@3", W: "~@8 eb2 ~@7",
  X: "~@2 bb2 c3", Y: "d3@3 ~ eb3 ~@3 bb2 ~@3 g2 ~@3", Z: "~@8 f2 ~@7", AA: "~@4 c3 ~@11", AB: "f2 ~@11 c3 ~@3",
  AC: "d3 ~@3 f3 ~@3 d3 ~@3 bb2 ~@3", AD: "~@4 f2 ~ g2 ~", AE: "a2 ~@3 bb2 ~@3 f2 ~@3 d2 ~@3", AF: "bb1 ~@15",
  AG: "~ bb1 ~@12 bb1 ~", AH: "~@6 bb1 ~@7 f2@2", AI: "~ g2@2 ab2 ~@3 f2 ~@3 d2 ~@3 bb1",
  AJ: "[~@11 ab2@11 ~ eb2 ~@8]/2", AK: "~@3 bb2 ~@11 eb2", AL: "~@11 bb2 ~@4", AM: "~@7 f2 ~@8", AN: "~@3 bb2 ~@11 f2",
  AO: "[~@11 bb2@4 c3@4 d3@3 ~ eb3 ~@7 eb2]/2", AP: "~@3 eb2 ~@3 g2 ~@3 bb2 ~@3 eb3", AQ: "~@7 g2 ~ f2 ~ eb2 ~@3 db2",
  AR: "~@3 c2 ~@3 ab1 ~@8", AS: "~@3 eb1 ~@11 ab1", AT: "~@3 c2 ~@3 eb2 ~@3 ab1 ~@4", AU: "~@7 bb1 ~@8",
  AV: "~@3 eb2 ~@11 ab1", AW: "~@7 c2 ~ db2 ~ eb2 ~@3 db2", AX: "~@3 bb1 ~@3 ab1 ~@8", AY: "~@3 eb1@3 ~ f1@4 g1@4 ab1",
  AZ: "~@3 eb2 ~@3 c2 ~@3 ab1 ~@4", BA: "~@7 ab1 ~@8", BB: "~@3 eb1@3 ~ f1@4 g1@4 ~",
  BC: "ab1 ~@3 eb2 ~@4 c2 ~@3 ab1 ~@2",
})).s("gm_tuba").gain(0.68)

// other · trumpet
const trumpet = note("<~@28 A B C D E F G H F I ~@13 J@2 K L@2 ~ M@2 N ~@29 O@6 P@5 Q>".pickRestart({
  A: "c4 ~@3 c4 ~@7 c4 ~@3", B: "c4 ~@7 c4 ~@3 c4 ~@3", C: "~@4 c4 ~@3 c4 ~@7",
  D: "[bb3,eb4] ~@3 [bb3,eb4] ~@7 eb4 ~@3", E: "[bb3,eb4] ~@7 [bb3,eb4] ~@3 [bb3,eb4] ~@3",
  F: "~@4 [bb3,eb4] ~@3 [bb3,eb4] ~@7", G: "d4 ~@3 d4 ~@7 d4 ~@3", H: "d4 ~@7 d4 ~@3 d4 ~@3",
  I: "eb4 ~@3 eb4 ~@3 [bb3,eb4] ~@7", J: "[~@4 a4 ~ a4 ~ f5@18 ~@2 a4 ~ a4 ~]/2", K: "f5",
  L: "[~@4 d5 ~ f5 ~ bb5@16 ~@8]/2", M: "[~@4 a4 ~ a4 ~ f5@21 ~@3]/2", N: "f5 ~ f5 ~ bb5@12",
  O: "[~@7 eb5@24 eb5@24 eb5@24 eb5@17]/6", P: "[~@7 eb5@24 eb5@24 eb5@17 ~@3 eb5 ~@2 eb5 ~]/5", Q: "ab5@15 ~",
})).s("gm_trumpet").gain(0.53).pan(0.6)

// other · trombone
const trombone = note(`<
  A B C D@3 E@3 F@3 G@3 D@3 E@3 H@3 I@3 ~@6 J@2 K L@2 ~@6 M N@2 O P Q R S T U V Q R W@2 X Y Z AA ~ AB@3 AC@3 AD@6 ~@13
  AE@6 AF@3 AG@2 AH
>`.pickRestart({
  A: "~@11 [d4,bb4]@5", B: "~@3 d4 ~ f4 ~ [eb4,g4,bb4]@7 ~@2", C: "eb4 ~ g4 ~ [d4,f4,bb4] ~@7 bb3@4",
  D: "[eb4@2 f4 g4@2 eb4 bb3@3 ~@2 eb4]/3", E: "[g4@2 c5 bb4@2 ab4 d4@3 ~@2 bb3]/3",
  F: "[d4@7 ~ f4@4 bb4@24 ~@8 ab4@4]/3", G: "[g4@2 f4 g4@2 f4 eb4@3 ~@2 bb3]/3", H: "[d4@7 ~ f4@4 bb4@27 ~@5 ab4@4]/3",
  I: "[g4@2 f4 eb4@6 ~@3]/3", J: "[eb5@12 d5@19 ~]/2", K: "ab4@4 d5@7 ~ c5@4", L: "[c5@2 bb4 g4@3 ~@2]/2", M: "~ eb5@3",
  N: "[d5@5 bb4 c5@2]/2", O: "d5 eb5@3", P: "~@8 f4 ~ f4 ~ f4 ~@3", Q: "bb4@5 ~@3 f4 ~@3 d5@4",
  R: "~@4 bb4 [bb4,c5] ~ a4 ~@4 eb5 ~@3", S: "eb5@8 ~@4 bb4 [bb4,c5] ~ a4", T: "~@4 f5 ~@3 f5@8",
  U: "~@4 c5 [c5,d5] ~ bb4 ~@4 d5 ~@3", V: "d5@8 ~@4 f4 ~@3", W: "[eb5@8 ~@4 f5@7 ~ e5@2 f5 ~ f5@6 eb5@2]/2",
  X: "d5 c5 bb4@6", Y: "~@8 d4@2 ~ eb4@2 f4@2 ~", Z: "~@5 bb4@2 c5@2 d5@2 ~@5", AA: "~ d5 eb5 f5 ~@4",
  AB: "[~@7 bb3@4 eb4@8 f4@4 g4@8 eb4@4 bb3@12 ~]/3", AC: "[~@7 eb4@4 g4@8 c5@4 bb4@8 ab4@4 d4@12 ~]/3",
  AD: "[~@7 bb3@4 d4@7 ~ f4@4 bb4@27 ~@5 ab4@4 g4@8 f4@4 eb4@24 ~]/6",
  AE: "[~@3 c5 ~ c5 ~ c5@4 b4@4 c5@4 db5@8 c5@4 ab4@13 ~@3 g4@6 ab4@2 bb4@14 ~@2 ab4@6 bb4@2 c5@13 ~@4]/6",
  AF: "[~@3 c5 ~ c5 ~ c5@4 b4@4 c5@4 db5@8 c5@4 ab4@13 ~@4]/3", AG: "[~@3 ab4@4 bb4@8 db5@4 c5@8 bb4@4 ~]/2",
  AH: "ab4@7 ~",
})).s("gm_trombone").gain(0.64).pan(0.4)

// other · clarinet
const clarinet = note(`<
  ~@2 A B@3 C@3 D@3 E@3 B@3 C@3 F@3 G@3 ~@17 H I@2 J ~@16 K@3 L@3 M@6 ~@13 N@6 O@3 P@2 Q
>`.pickRestart({
  A: "~@3 bb3", B: "[eb4@2 f4 g4@2 eb4 bb3@3 ~@2 eb4]/3", C: "[g4@2 c5 bb4@2 ab4 d4@3 ~@2 bb3]/3",
  D: "[d4@7 ~ f4@4 bb4@24 ~@8 ab4@4]/3", E: "[g4@2 f4 g4@2 f4 eb4@3 ~@2 bb3]/3", F: "[d4@7 ~ f4@4 bb4@27 ~@5 ab4@4]/3",
  G: "[g4@2 f4 eb4@6 ~@3]/3", H: "~ [eb4,c5]@3", I: "[[d4,bb4]@19 ~ [bb3,ab4]@4 [c4,bb4]@8]/2",
  J: "[d4,ab4] [eb4,g4]@3", K: "[~@7 bb4@4 eb5@8 f5@4 g5@8 eb5@4 bb4@12 ~]/3",
  L: "[~@7 eb5@4 g5@8 c6@4 bb5@8 ab5@4 d5@12 ~]/3", M: "[~@7 bb4@4 d5@7 ~ f5@4 bb5@27 ~@5 ab5@4 g5@8 f5@4 eb5@24 ~]/6",
  N: "[~@3 c4 ~ c4 ~ c4@4 b3@4 c4@4 db4@8 c4@4 ab3@13 ~@3 g3@6 ab3@2 bb3@14 ~@2 ab3@6 bb3@2 c4@13 ~@4]/6",
  O: "[~@3 c4 ~ c4 ~ c4@4 b3@4 c4@4 db4@8 c4@4 ab3@13 ~@4]/3", P: "[~@3 ab3@4 bb3@8 db4@4 c4@8 bb3@4 ~]/2",
  Q: "ab3@7 ~",
})).s("gm_clarinet").gain(0.17).pan(0.6)

// chords · french horn
const french_horn = note(`<
  A B C D@3 E@3 F@3 G@3 D@3 E@3 F@3 H@3 I@3 J@3 K@2 L M@2 N O@3 P@2 Q R@2 S T U V W@2 X Y@2 Z AA@2 AB AC AD AE ~ AF@3
  AG@3 AH@3 AI@3 ~ AJ@6 AK@3 AL@3 AJ@6 AK@3 AM@2 AN
>`.pickRestart({
  A: "~@11 [f3,bb3]@5", B: "~@3 d3 ~ f3 ~ [g3,bb3]@5 ~@4", C: "eb3 ~ g3 ~ bb3@2 ~@6 g3@4, ~@4 f3 ~@11",
  D: "[c4@2 b3 bb3@2 g3 g3@3 ~@2 g3]/3", E: "[bb3@7 ~ eb4@4 d4@8 bb3@4 ab3@12 ~@8 f3@4]/3",
  F: "[ab3@2 bb3 d4@6 ~@2 c4]/3", G: "[bb3@8 ab3@4 bb3@8 ab3@4 g3@13 ~@7 eb3@4]/3",
  H: "[bb3@2 ab3 g3@6 ~@2 [eb3,g3]]/3", I: "[[d3,f3]@8 [c3,eb3]@4 [bb2,d3]@8 [ab3,c4]@3 ~ [ab3,c4]@24]/3",
  J: "[[g3,bb3]@8 [f3,ab3]@4 [eb3,g3]@8 [g3,bb3]@3 ~ [g3,bb3]@12 ~@12]/3", K: "[c4@3 bb3@5]/2", L: "f3@4 bb3@8 ab3@3 ~",
  M: "[ab3@8 g3@4 eb3@13 ~@7]/2", N: "[eb3,g3] [d3,f3]@2 [c3,eb3]",
  O: "[[bb2,d3]@8 [ab3,c4]@3 ~ [ab3,c4]@24 [g3,bb3]@8 [f3,ab3]@4]/3", P: "[[eb3,g3]@8 [g3,bb3]@3 ~ [g3,bb3]@12 ~@8]/2",
  Q: "~ c4@3", R: "[bb3@5 ab3 bb3@2]/2", S: "ab3 g3@3", T: "~@3 bb2", U: "d3 f3 bb3@2", V: "c4@2 d4@2 eb4@7 ~ c4@4",
  W: "[eb4 d4 c4 bb3 a3 g3 f3@6 eb4@2 c4@2]/2", X: "a3@2 bb3@4 a3 g3", Y: "[f3@9 ~@3 bb3@8 a3@2 g3@2 f3@8]/2",
  Z: "eb3 d3 c3@2 f3@2 a3@2", AA: "[c4@6 d4@2 eb4@2 e4@2 f4@7 ~ e4@2 f4@2 f4@6 [eb4,g4]@2]/2",
  AB: "[d4,f4] [c4,eb4] [bb3,d4]@6", AC: "~@8 [bb3,d4]@2 ~ [c4,eb4]@2 [d4,f4]@2 ~",
  AD: "~ [bb3,f4] ~@3 [d4,bb4]@2 [eb4,c5]@2 [f4,d5]@2 ~@3 [bb3,f4] ~", // Bb5 Gm Cm Dm Bb5
  AE: "~ [bb4,d5] [c5,eb5] [d5,f5] ~@4, ~@6 bb3 ~@9", AF: "[~@7 eb3@4 c4@8 b3@4 bb3@8 g3@4 g3@12 ~]/3",
  AG: "[~@7 g3@4 bb3@7 ~ eb4@4 d4@8 bb3@4 ab3@12 ~]/3", AH: "[~@7 f3@4 ab3@8 bb3@4 d4@24 ~]/3",
  AI: "[~@7 c4@4 bb3@8 ab3@4 g3@24 ~]/3",
  AJ: "[~@3 [c4,eb4] ~ [c4,eb4] ~ [c4,eb4]@4 [b3,d4]@4 [c4,eb4]@4 [db4,f4]@8 [c4,eb4]@4 ab3@13 ~@3 [g3,bb3]@5 ~ [ab3,c4] ~ bb3@14 ~@2 [ab3,c4]@5 ~ [bb3,db4] ~ [c4,eb4]@13 ~@4, ~@31 c4 ~@23 db4@12 ~@29]/6", // Cm Bm Cm Db Cm Gm Ab Bbm …
  AK: "[~@3 [c4,eb4] ~ [c4,eb4] ~ [c4,eb4]@4 [b3,d4]@4 [c4,eb4]@4 [db4,f4]@8 [c4,eb4]@4 ab3@12 ~@5, ~@31 c4 ~@16]/3", // Cm Bm Cm Db Cm
  AL: "[~@3 [ab3,c4]@4 [g3,db4]@8 f4@4 [c4,eb4]@8 [bb3,db4]@4 [ab3,c4]@12 ~@5, ~@15 db4 ~@32]/3", // Ab Gdim Cm Bbm Ab
  AM: "[~@3 [ab3,c4]@4 [g3,db4]@8 f4@4 [c4,eb4]@8 [bb3,db4]@5, ~@15 db4 ~@16]/2", AN: "[ab3,c4]@13 ~@3",
})).s("gm_french_horn").gain(0.44).pan(0.6)

// other · flute
const flute = note(`<
  ~@4 A B ~ C D ~ E F ~ G H ~ A B ~ C D ~ E F ~ I J ~ K L ~ M N ~ O P Q R ~ S@2 ~ T U ~ V W ~@18 X Y Z ~ AA@2 AB AC ~ AD
  AE ~@3 AF AG AH AI AJ AK@3 AL AM ~@2 AF AG AH AI AJ AN@3 AO AP
>`.pickRestart({
  A: "~@4 bb4 ~@3 [eb5,g5] ~@5 [g4,bb4] ~", B: "[g4,bb4] ~ [g4,bb4] ~ [g4,bb4] ~@3 [eb5,g5] ~@7", C: "~@15 ab5",
  D: "d6@2 c6@2 bb5@2 ab5@2 f5 ~@7", E: "~@4 d5@2 f5 ~ bb5 ~@5 bb4@2, ~@3 bb4@2 ~@11", F: "d5@2 f5 ~ bb5 ~@11",
  G: "~@8 g5 ~ bb5 ~ bb5 ~@3", H: "bb5 ~@3 eb6 ~@11", I: "g5 ~ bb5 ~ bb5 ~ bb5 ~ eb6 ~@3 g5 ~ bb5 ~",
  J: "bb5 ~ bb5 ~ eb6 ~@11", K: "~@4 c6@3 bb5", L: "ab5 g5 f5 ~@5", M: "~@4 g5 ~ ab5 ~ bb5@4 g5@4",
  N: "eb6@4 bb5@4 g5@3 ~@5", O: "bb5@2 c6@2 bb5 ~ c6@2 bb5 ~@3 bb5 ~@3", P: "c6 ~@3 bb5@2 ~@10",
  Q: "~@4 eb5 ~ g5 ~ bb5 ~ g6 ~ g6 ~ eb6 ~", R: "eb6 ~ c6 ~ c6 ~ bb5 ~ bb5 ~@7",
  S: "[~@12 c6@6 bb5@2 ab5@2 g5@2 f5@3 ~@5]/2", T: "~@8 g5 ~ ab5 ~ bb5@4", U: "g5@4 eb6@4 bb5@4 g5@3 ~",
  V: "~@4 bb5@2 c6@2 bb5@2 f5@2 d5 ~@3", W: "bb5@2 c6@2 bb5@2 f5@2 d5 ~@7", X: "~@15 bb4",
  Y: "~@3 [eb5,g5] ~@5 [g4,bb4] ~ [g4,bb4] ~ [g4,bb4] ~ [g4,bb4]", Z: "~@3 [eb5,g5] ~@12",
  AA: "[~@10 ab5 d6@2 c6@2 bb5@2 ab5@2 f5 ~@12]/2", AB: "~@7 bb4", AC: "~ f5 ~ bb5 ~@7 d5@2 f5 ~ bb5, d5 ~@4 bb4 ~@2",
  AD: "~@11 g5 ~ bb5 ~ bb5", AE: "~ bb5 ~ eb6 ~@3 g5 ~ bb5 ~ bb5 ~ bb5 ~ eb6",
  AF: "~@3 c6@2 db6 ~ eb6 ~ f6 ~ eb6 f6 [eb6,f6] eb6 [eb6,f6]", AG: "f6 [eb6,f6] eb6 [eb6,f6] ~@7 bb5@2 c6 ~ db6",
  AH: "~ f6 ~ eb6 f6 [eb6,f6] eb6 [eb6,f6] f6 [eb6,f6] eb6 [eb6,f6] ~@4", // Ebsus2
  AI: "~@3 c6 ~ db6 ~ eb6 ~ f6 ~ eb6 f6 [eb6,f6] eb6 [eb6,f6]", AJ: "f6 [eb6,f6] eb6 [eb6,f6] ~@12",
  AK: "[~@15 eb5@2 ab5 ~ ab5@2 c6 ~ c6@2 eb6 ~ eb6@2 c6 ~ c6@2 ab5 ~ ab5 ~ eb5 ~ f5 ~@5 eb5 f5 eb5]/3",
  AL: "~@3 eb5 f5 [eb5,f5] eb5 [eb5,f5] f5 [eb5,f5] eb5 [eb5,f5] f5 [eb5,f5] eb5 ab5", // Ebsus2
  AM: "~@3 ab4 ~ c5 ~ eb5 ~ ab5 ~ c6 ~@4",
  AN: "[~@15 eb5@2 ab5 ~ ab5@2 c6 ~ c6@2 eb6 ~ eb6@2 c6 ~ c6@2 ab5 ~ ab5@2 eb5 ~ f5 ~@5 eb5 f5 eb5]/3",
  AO: "~@3 eb5 f5 [eb5,f5] eb5 [eb5,f5] f5 [eb5,f5] eb5 [eb5,f5] f5 eb5 [eb5,f5] ~", // Ebsus2
  AP: "ab5 ~@3 c5 ~ eb5 ~@2 ab5 ~ c6 ~ eb6 ~@2",
})).s("gm_flute").gain(0.22).pan(0.8)

// other · french horn
const french_horn_2 = note(`<
  ~@16 A B C@2 D ~ E F ~@15 G@3 H@3 I@3 J K L M N O P K L Q@2 R ~@5 S@6 T@3 ~@17 U@4 ~ V@3 W@2
>`.pickRestart({
  A: "~ bb3 eb4@2", B: "d4 c4 bb3@2 g3@2 eb3@2", C: "[bb2@4 eb3@4 g3@4 ab3@7 ~ bb3@2 c4@2 f3@7 ~]/2",
  D: "g3 ab3 d3@3 ~@3", E: "~@2 f3 g3 ab3@3 f3", F: "ab3@2 bb3@2 d4@7 ~@5",
  G: "[bb4@7 ~ bb4 ~ bb4 ~ bb4@6 ~@2 bb4 ~ bb4 ~ bb4@11 ~@13]/3",
  H: "[eb5@7 ~ eb5 ~ eb5 ~ eb5@6 ~@2 eb5 ~ eb5 ~ eb5@11 ~ eb3@12]/3", I: "[d3@3 f3 g3 bb3 d4@12 bb3@6]/3",
  J: "~@12 d4 ~@3", K: "f4@5 ~@3 d4 ~@3 bb4@4", L: "~@12 a4 ~@3", M: "a4 ~", N: "~@4 a4 ~@3 a4@8", O: "~@12 f4 ~@3",
  P: "f4@8 ~@4 d4 ~@3", Q: "[a4@8 ~@4 a4@8 g4@2 a4 ~ a4@6 g4@2]/2", R: "f4 eb4 d4@6",
  S: "[~@15 bb3@4 eb4@8 d4@2 c4@2 bb3@4 g3@4 eb3@4 bb2@4 eb3@4 g3@4 ab3@7 ~ bb3@2 c4@2 f3@7 ~ g3@2 ab3@2 d3@6 ~@11]/6",
  T: "[~@15 f3@2 g3@2 ab3@6 f3@2 ab3@2 bb3@2 d4@7 ~@10]/3",
  U: "[~@3 eb4@4 ~@2 f4 ~ eb4@11 ~@5 eb4@4 db4@4 bb3@4 ab3@4 g3@4 ab3@5 ~ bb3 ~ c4 ~ db4 ~ eb4@3 ~@2]/4",
  V: "[~@15 [eb4,ab4]@7 ~ g4@2 [bb3,f4]@2 [ab3,eb4]@11 ~@10, ~@22 c4@3 ~@23]/3", W: "[~@3 g3@12 ab3@14 ~@3]/2",
})).s("gm_french_horn").gain(0.33).pan(0.4)

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

// drums · snare
const snare = s("sd").struct(`<
  A B C ~ D E F D E F D E F G H I D E F D E F D E F G H ~ D E F D E F D E F J K F D E F D E F D E L M N F D E O M N F D
  E P Q R ~ S A T U V T U V T U V W ~ A T U V T U V T U V T X Y Z AA AB AC U AD AE AA AB AC AF
>`.pickRestart({
  A: "~@11 x ~@3 x", B: "x!4 ~@3 x ~@4 x!4", C: "~ x ~@2", D: "x!2 ~ x", E: "x ~ x!2", F: "~ x!2 ~",
  G: "x ~ x ~@2 x!2 ~", H: "x!2 ~@2", I: "x!8 ~@8", J: "x!3 ~", K: "~@4 x!6 ~@6", L: "x ~@2 x", M: "x!6 ~@2 x ~@3 x!4",
  N: "x!2 ~@6 x ~@3 x ~@3", O: "~ x!3", P: "x", Q: "~ x ~@12 x ~", R: "~@3 x ~@4", S: "~@9 x!7", T: "~@7 x ~@3 x ~@4",
  U: "~@3 x ~@3 x ~@7 x", V: "~@3 x ~@7 x ~@3 x", W: "~@5 x ~ x ~@3 x ~@3 x", X: "~@3 x ~@3 x ~@3 x ~@4", Y: "~@7 x!9",
  Z: "x!3 ~@4 x!9", AA: "~@3 x ~@3 x ~@4 x!4", AB: "x!3 ~@8 x ~@3 x", AC: "~@4 x!7 ~@5", AD: "~@3 x ~@4 x!8",
  AE: "x!4 ~@3 x!9", AF: "~@4 x ~@4 x ~@3 x ~@2",
})).gain(0.28)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A ~@12 B ~@22 C ~@10 D E ~@4 D E ~@7 F G ~@24 H ~ I J ~@2 K ~ I J A
>`.pickRestart({
  A: "x", B: "~@8 x!4 ~@4", C: "~@10 x!6", D: "~@6 x!2 ~@8", E: "~@2 x!2 ~@12", F: "~@3 x!6 ~@7", G: "x!8 ~@8",
  H: "~@3 x!4 ~@9", I: "~@3 x!5 ~@8", J: "~@11 x!5", K: "~@4 x!3 ~@9",
})).gain(0.17)

// drums · low tom
const low_tom = s("lt").struct("<~@90 A B ~ A B ~ A B ~ A ~>".pickRestart({
  A: "~@3 x ~@12", B: "~@11 x ~@4",
})).gain(0.28)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@89 A B ~ A B ~ A B ~ A ~ C>".pickRestart({
  A: "~@7 x ~@8", B: "~@15 x", C: "x",
})).gain(0.33)

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

// drums · ride
const ride = s("rd").struct(`<
  A B C ~@11 C D ~@10 C ~@10 E C ~@9 F E C G ~ C G E C G ~ C D ~@4 B ~@23 B H A B H A B H A B I J
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@7 x ~@8", C: "~ x ~@2", D: "x", E: "~ x", F: "x ~@2 x", G: "~@3 x", H: "~@3 x ~@11 x",
  I: "~@3 x ~@12", J: "x ~@12 x ~@2",
})).gain(0.28)
// … 5 more lines

More by Mosch