Strudelify

Harlequin

Weather Report

KeyF minorTempo66 bpm
0:00/0:00
// Harlequin — Weather Report
// 66 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 74 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(66/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(`<
  ~ A B@3 C D E F@4 G H I C J K L@5 M@2 N O P Q R S@2 T@8 U@2 V@2 W@2 X@2 Y@7 Z@6 AA@4 AB@8 ~
>`.pickRestart({
  A: "~@15 e2, ~@29 f2@2 ~",
  B: "[d2 db2@14 ab1@2 db2 ~@3 db2@16 ~@2 db2@4 ab1 ~ db2 ~ db2@5 ~@3 db2@7 ~ db2@2 ab1@12 eb2@19]/3",
  C: "~ g2@12 c2@12 bb1@7", D: "~ ab1@10 ~@2 eb2@17 ~ eb2", E: "~ b2@12 c2@12 bb1@7",
  F: "[~@5 gb1@24 ~@4 gb2 ~ gb2 ~ gb2@4 ~@4 gb1@16 ~@2 c2@4 ~@2 e1 ~ e1@15 ~@3 e2@2 eb2@2 ~@2 gb2@2 g2 ~@3 g2@15 ~ d2@2 g1@7 ~@2, ~ gb2@29 ~ gb1@12 gb2@17 ~@68]/4",
  G: "~ b1@16 ab2@8 g2@7", H: "~ eb2@13 ~ bb2 eb2 db2@12 ~@2 db2", I: "~ ab1@12 eb2@18 ~",
  J: "~ e1@5 ~ e1@2 g1 ~@5 db2@3 ~@3 e2@2 d2 ~ g2@2 ~@4 db3", K: "~ d3@3 ~ d3 ~ g2@3 ~@5 d2@3 ~@5 g1@4 ~@2 g2@2 ~",
  L: "[~ b1@3 ~ b1@9 ~@3 gb2@3 ~ gb2@4 ~@2 gb2@2 b1@2 gb1@2 e1@3 ~ e1@9 ~ e1@4 e1 ~@7 [g3,b3]@2 ~ b3 c4@2 ~ a1@23 a2@2 ~@4 e2@3 ~@3 a1@10 ~@8 a2 ~@3 d2@2 b1@2 e1@3 f1@13 f1@2 e1@13 e1@2, ~@53 e1@13 g3@61 ~@33, ~@62 g3@2 ~ b3@61 ~@34]/5", // G
  M: "[~ eb2@12 ~@2 eb2@2 ab1@14 eb2@2 ab2@3 ~ ab2@5 ~ ab2@2 ~ bb2@2 ~ b2@8 d3@7]/2",
  N: "~@2 bb2@7 eb2@7 ~ a2@7 ~ e3@7", O: "~ gb1@14 gb2 ~ gb2@2 ~@2 gb2@6 gb1@4 ~",
  P: "~@5 ab1 ~ a1@4 eb2 ~ db2 ~ gb1@11 ~ gb1 ~ b1@3", Q: "~ e2@2 ~@2 e2@8 ~@2 g2@4 b2 ~ db3 ~ d3@7 ~ d2",
  R: "~@3 g2@2 b1@2 e2@2 d2@2 g1@11 ~ g1@3 ~ g1 ~ bb1@2 ~",
  S: "[~@2 b1@13 b1 ~ ab2@6 ab2 ~ g2@5 ~ g2@2 d2@12 ~ d2 db2 ~ c2@13 ~@2]/2",
  T: "[~ b1@3 ~ b1@10 b2 ~ b2@4 b1@9 ~ b1@2 e1@21 ~ e1@2 a1 ~ a1@2 d2@2 c2@2 f1@12 ~@2 f1 ~ c2@4 f2 ~ g2@4 c3 ~ f2 ~ f2@8 ab1@2 a1@2 d2@2 c2@2 ~@4 f1@2 a1 ~ a1 ~ c2@4 f1 ~ f1@9 ~ f1@8 a1@7 ~ c2@2 ~@4 f2@6 ~@2 ab1@2 ~@2 d2@2 ~@2 f1@2 g1@2 ~@2 a1@2 c2@4 f2@2 d2@2 g2@4 d3 ~ eb3@7 ~@3 g3 ~ g3 a3@3 ~@2 f3@6 c3@6 d3@2 ~@2 f2@6 ~@2 f3 ~@3 d3 ~@5 c3 ~ c2@2 ~@2 f2]/8",
  U: "[~@3 f2@2 f1@15 ~ f2 ~ f2@2 a1@2 d2@2 ~@2 e1@2 f1@2 ~@2 f1@10 ~@8 f2@2 ~@7]/2",
  V: "[~@2 e2@2 d2 db2@14 ab1@2 db2 ~@3 db2@16 ~@2 db2@4 ab1 ~ db2 ~ db2@5 ~@3 db2@5, ~ f2@2 ~@61]/2",
  W: "[~@5 c2 db2@3 e2@2 ~@12 [ab3,b3]@3 gb3 ab3@2 gb3@6 d2@2 ~ g2@9 ~@4 [f3,a3]@3 ~ [f3,a3]@9, ~@11 e1@22 ~@31, ~@11 gb3 ~ b3@5 ~@14]/2", // Abm F
  X: "[~@5 b1@16 ab2@8 g2@8 eb2@13 ~ bb2 eb2 db2@11]/2",
  Y: "[~@3 db2 ~ ab1@12 eb2@18 ~@2 g2@12 c2@12 bb1@8 ab1@13 eb2@17 ~@2 g2@12 c2@12 bb1@8 ab1@12 eb2@18 ~@2 g2@12 c2@12 bb1@8 ab1@12 eb2@15]/7",
  Z: "[~@5 g2@12 c2@12 bb1@8 ab1@12 eb2@19 ~ g2@12 c2@12 bb1@8 ab1@12 eb2@18 ~@2 g2@12 c2@12 bb1@8 ab1@12 eb2@15]/6",
  AA: "[~@5 g2@12 c2@12 bb1@8 ab1@13 eb2@18 ~ g2@12 c2@12 bb1@8 ab1@12 eb2@15]/4", AB: "[~@5 g2@12 c2@12 c2@227]/8",
})).s("gm_electric_bass_finger").gain(0.56)

// bass · electric bass finger · "FINGERDBAS" · soft notes
const bass_soft = note("<~@10 A B ~@4 C D E F G H ~@9 I ~@3 J K L M N O P ~@32>".pickRestart({
  A: "~@3 e2 ~@19 e1 ~@5 e2@2 ~", B: "~@19 e2@2 ~@11", C: "~@10 ab1@2 ~ b1 ~@5 db2 ~@6 ab2@2 ~ b2@2 ~",
  D: "~@13 g2 ~@5 d2 ~ d2 ~@5 d2 ~@3 g1", E: "~@15 b1@2 ~@15", F: "~@28 c4 ~@3", G: "~@23 e2@2 ~@4 a2@2 ~",
  H: "~@3 e2@2 ~@10 a2@7 ~@3 a1@2 ~@5", I: "~@15 c2", J: "~@15 f1@3 ~@14", K: "~@27 d2@2 c2@2 ~",
  L: "~@9 a1@2 ~@2 c2@2 ~@4 ab1@2 ~@11", M: "~@21 g3 ~@10", N: "~@5 c3 ~@23 d2 ~@2", O: "~@29 c2@2 ~",
  P: "~@25 f1@4 ~@3",
})).s("gm_electric_bass_finger").gain(0.32)

// chords · epiano1 · "E.PIANO"
const epiano1 = note(`<
  ~@2 A@2 B C B D E@2 F G H I B C F G J K L@3 M N O P@2 F G H Q R S T U V W X Y Z@2 AA@2 AB@6 AC@6 AD@4 AE@8 ~@6
>`.pickRestart({
  A: "[~ [b3,e4,ab4]@62 ~]/2", B: "~ [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19",
  C: "~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@7", D: "~ [ab3,b3,e4]@12 [bb3,d4,f4]@11 ~ [c4,e4,g4]@7",
  E: "[~ [b3,e4,ab4]@52 ~@11]/2", F: "~ [e3,db4,d4,gb4]@31", G: "~ [g3,a3,c4,d4,f4]@31",
  H: "~ [a3,b3,db4,e4,ab4]@15 ~ [bb3,eb4,f4,ab4]@8 [a3,b3,db4,e4,ab4]@6 ~", // Amaj7 Bbsus4 Amaj7
  I: "~ [db4,eb4,f4,gb4,ab4]@16 [ab3,db4,eb4,f4]@15", J: "~ [db4,d4,a4,e5]@15 ~ [b3,e4,gb4,ab4,b4]@15",
  K: "~ [a3,b3,d4,gb4]@16 [c4,g5]@15, ~ [e3,g3]@31", // Bm7 C5 Em
  L: "[~ [a2,a3,b3,d4]@64 [ab3,c4,eb4,f4]@16 [g3,e4,g4,bb4]@15, ~@65 g4@12 ~@19]/3", // Bm7 Fm7 Edim
  M: "~ [db4,e4,a4]@15 ~ [gb3,ab3,c4,e4]@15", N: "~ [gb3,ab3,b3,eb4]@15 ~ [a3,b3,d4,gb4,a4]@8 [a3,b3,d4,e4,ab4]@7",
  O: "~ [bb3,db4,f4,ab4]@8 [bb3,db4,eb4,g4]@8 [g3,a3,c4,e4,g4]@8 [a3,c4,d4,gb4]@6 ~", // Bbm7 Eb7 Am7 D7
  P: "[~ [gb2,gb3,b3,db4,e4,gb4,ab4]@63]/2", Q: "~ [g3,b3,c4,e4]@16 [g3,bb3,c4,e4,a4]@15",
  R: "~ [b3,d4,e4,gb4,a4]@30 ~", S: "~ c4@22 ~@4 e4@5, ~ [ab3,ab4]@31, ~ e4@26 ~@5, ~@23 [c4,g4]@9",
  T: "~ [c4,eb4,g4,bb4]@31", U: "~ [eb4,g4,bb4,d5]@31", V: "~ [f3,c4,d4,eb4,a4]@30 ~", W: "~ [f3,g3,bb3,c4,eb4]@30 ~",
  X: "~@9 f4@21 ~@2, ~ [bb3,d4,eb4]@30 ~", Y: "~ [g3,bb3,c4,d4,f4]@31",
  Z: "[~@13 [g4,bb4,c5,eb5,f5]@41 ~@10, ~ [g3,bb3,c4,eb4,f4]@53 ~@10]/2", AA: "[~@5 [b3,e4,ab4]@59]/2",
  AB: "[~@5 [e3,db4,d4,gb4]@32 [g3,a3,c4,d4,f4]@32 [a3,b3,db4,e4,ab4]@15 ~ [bb3,eb4,f4,ab4]@8 [a3,b3,db4,e4,ab4]@6 ~@2 [db4,eb4,f4,gb4,ab4]@15 ~ [ab3,db4,eb4,f4]@15 ~ [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@3]/6", // Dmaj7 Dm7 Amaj7 Bbsus4 Amaj7 Db Eb Db …
  AC: "[~@5 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@8 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@8 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@3]/6", // Eb Db E Bb C Eb Db E …
  AD: "[~@5 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@8 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@3]/4", // Eb Db E Bb C Eb Db E …
  AE: "[~@5 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@8 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@8 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [g3,d4,g4,a4,c5,e5]@64 ~@3]/8", // Eb Db E Bb C Eb Db E …
})).s("gm_epiano1").gain(0.75)

// chords · piano · "PIANO/CHOR"
const piano = note(`<
  A@2 B@2 C D E F G@2 ~@4 H D ~@4 I J K L M N O P ~ Q@2 R S T@3 U V W X@2 ~ Y@3 ~@3 Z@8 AA@8 AB@4 ~@6
>`.pickRestart({
  A: "[~@5 [a3,d4,g4]@8 [a3,d4,g4]@8 [a3,d4,g4]@8 [a3,d4,g4]@8 [a3,d4,g4]@8 [a3,d4,g4]@8 [a3,d4,g4]@8 [a3,d4,g4]@3]/2", // Dsus4
  B: "~ [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@7", C: "~ [eb5,eb6]@10 ~@2 [ab5,ab6]@18 ~",
  D: "~ [e5,e6]@11 ~ [f5,f6]@11 ~ [g5,g6]@7", E: "~ [eb5,eb6]@12 [ab5,ab6]@19",
  F: "~ [e5,e6]@12 ~@12 [g5,g6]@7, ~@13 [f5,f6]@19", // E G F
  G: "[~ [b3,e4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@9 ~@6, ~ [ab5,ab6]@57 ~@6]/2", // E5 E Ab
  H: "~ eb5@10 ~@2 [ab5,ab6]@18 ~", I: "~@19 gb4 b4 ~ gb4 db4 b3 a3 gb3 e3 b3 a3 gb3 ~",
  J: "~ gb3 a3 b3 g3 ~ a3 ~@11 gb3 ~ g3 a3 b3 db4 d4 e4 gb4 g4 a4 b4 db5 d5, e3 ~@15",
  K: "[eb5,e5] f5@2 c5 ab4 eb4 ~@12 a4 bb4 g4 a4 bb4 c5 db5 eb5 f5 g5 c6 eb6 ~ eb6", // Emaj7
  L: "db6 c6 ~@3 gb5 ~@13 e5 c5 b4 bb4 a4 ab4 ~@7", M: "~@11 e4 db4 eb4 e4 gb4 ab4 a4 b4 db5 eb5 e5 gb5 ~ a5 ~@7",
  N: "~@3 f5 db5 ab4 f4 e4 eb4 d4 db4 c4 b3 ~@4 g4 e4 gb4 g4 a4 b4 c5 d5 e5 gb5 g5 a5 g5 gb5 d5",
  O: "~ e5 b4 ab4 e4 ~@14 e4 ab4 b4 e5 ab5 b5 e6 ab6 b6 ~@4", P: "~@19 gb4 ab4 ~ gb4 e4 ~ gb4 ~ ab4 b4 ~ db5 e5",
  Q: "[~@22 e5@3 a4@3 c5@3 e5@2 db5@12 ~@19, ~@19 a4@5 ~@40]/2", R: "~@19 e4 gb4 g4 ab4 a4 bb4 c5 d5 e5 gb5 g5 a5 b5",
  S: "[c6,d6] eb6 e6@5 ~@21 e6 db6@3, ~@27 gb6@2 ~@3", // Csus2
  T: "[~ ab5 g5 gb5 f5 e5 eb5 d5 db5 c5 c6 ab5 e5 c5 b4 bb4 ~@2 ab4 ~@12 g4@2 a4@2 ~ c5@14 ~@5 f4 ~@4 [g4,bb4]@3 [a4,c5]@2 ~@10 [a3,f4]@5 ~ [bb3,f4]@5 ~ c4@4 ~@5, ~@30 e4@2 ~@26 [f4,a4]@6 ~@2 [bb4,d5]@13 ~@17]/3", // Gm Am Dm Bb5 F Bb
  U: "~@11 c4 f4 ab4 a4 bb4 b4 ~ c5 f5 f4 f5 f4 f5!2 ~ [f4,f5] c5 ~ f4 a4 bb4", // F
  V: "c5 ~ ab4 a4 f4 eb4 ~ ab4 ~@2 f4@5 ~@17", W: "~@17 a4@4 ~ bb4@2 ~@6 c5 ~",
  X: "[~ ab4 a4@2 ~ [f4,c5]@11 ~@15 a4@3 ~ c5@7 ~@22, ~ c5@2 ~@61]/2", // F5
  Y: "[~ [a3,d4,g4] ~@3 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@8 [b3,e4,ab4]@7 ~@28]/3", // Dsus4 E
  Z: "[~@5 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@8 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@8 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@7 ~ [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@3]/8", // Eb Db E Bb C Eb Db E …
  AA: "[~@5 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@7 ~ [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@7 ~ [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@8 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [c4,e4,g4]@3]/8", // Eb Db E Bb C Eb Db E …
  AB: "[~@5 [bb3,eb4,g4]@12 [ab3,db4,f4,ab4]@19 ~ [ab3,b3,e4]@11 ~ [bb3,d4,f4]@11 ~ [g3,d4,a4,c5,e5]@53 ~@14]/4", // Eb Db E Bb Am7
})).s("gm_piano").gain(0.72)

// chords · piano · "PIANO/CHOR" · soft notes
const piano_soft = note("<~@8 A ~@12 B C D E F G ~@6 H ~@2 I J ~@36>".pickRestart({
  A: "~ ab4@8 ~@23", B: "~@19 g3 ~@12", C: "~@4 f4 ~@27", D: "~@2 bb5 ab5 g5 ~ f5 e5 eb5 ~@16 g4 gb4 f4 e4 eb4 d4 db4",
  E: "c4 ~@9 db4 ~@12 ab5 ~@8", F: "~@13 bb3 ~@18", G: "[a4,b4] ~@31", H: "~@17 a4 ~@14", I: "~@23 f4 ~ f4 ~@6",
  J: "~@8 a4 ~@23",
})).s("gm_piano").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C D E D F G H I J K C D H I J K H I J K H I J K H I J K H I J K J K H I J K L M N O P Q R ~ S T U V W X Y Z AA
  AB AC AD AE AF AG AH ~@8
>`.pickRestart({
  A: "~ x ~@15 x ~@3 x ~@10", B: "~ x ~@17 x ~@7 x ~@4", C: "~ x ~@11 x ~@18", D: "~ x ~@11 x ~@11 x ~@5 x",
  E: "~ x ~@11 x ~@15 x ~@2", F: "~ x ~@13 x ~@5 x ~@10", G: "~@5 x ~@9 x ~@11 x ~@4", H: "~ x ~@13 x ~@11 x ~@4",
  I: "~ x ~@11 x ~@17 x", J: "~ x ~@9 x ~@20", K: "~@15 x ~@11 x ~@4", L: "~@6 x ~@14 x ~@3 x ~@6",
  M: "~@5 x ~@17 x ~@7 x", N: "~@5 x ~@13 x ~@11 x", O: "~@5 x ~@11 x ~@14", P: "~@3 x ~ x ~@9 x ~@16",
  Q: "~@19 x ~@11 x", R: "~@5 x ~@9 x ~@7 x ~@7 x", S: "~@5 x ~@3 x ~@5 x ~@5 x ~@5 x ~@4", T: "~@7 x ~@7 x ~@16",
  U: "~@5 x ~@11 x ~@5 x ~@5 x ~@2", V: "~@5 x ~@5 x ~@6 x!2 ~@7 x ~@2 x ~", W: "~@6 x!2 ~@5 x ~ x ~ x ~@3 x ~@10",
  X: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@6", Y: "~@6 x ~@4 x ~@7 x ~@7 x ~@4",
  Z: "~@3 x!2 ~@2 x ~@5 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~ x ~", AA: "x ~ x ~ x ~@6 x ~@20", AB: "~@9 x ~@22",
  AC: "~@11 x ~@7 x ~@7 x ~@4", AD: "~@7 x ~@5 x ~@5 x ~@3 x ~@3 x ~@3 x",
  AE: "~@3 x ~@2 x ~@6 x ~@5 x ~ x ~@5 x ~ x ~@2", AF: "~ x ~@9 x ~ x ~@5 x ~ x ~@3 x ~ x ~ x ~@2",
  AG: "~@3 x ~ x ~@5 x ~ x ~@5 x ~ x ~@5 x ~ x ~@2", AH: "~@6 x ~@4 x ~ x ~@5 x ~ x ~@5 x ~@2 x ~",
})).gain(0.53)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A ~ B ~ C B D E F G H D B ~ F G H D F G H D F G H D F G H D F G H D H D F G H D I ~ J K L M N O P Q ~@4 B R ~@2 B
  S ~ T ~ N ~@8
>`.pickRestart({
  A: "~@15 x ~@16", B: "~@23 x ~@8", C: "~@23 x ~@3 x ~@4", D: "~@19 x ~@11 x", E: "~ x ~@17 x ~@11 x",
  F: "~@23 x ~@7 x", G: "~@7 x ~@3 x ~@15 x ~@4", H: "~@17 x ~@13 x", I: "~@19 x ~@12", J: "~@27 x ~@4",
  K: "~@3 x ~@7 x ~@3 x ~@15 x", L: "~@21 x ~@10", M: "~@3 x ~@19 x ~@8", N: "~@3 x ~@28", O: "~@3 x ~@5 x ~@22",
  P: "~@31 x", Q: "~@3 x ~@7 x ~@20", R: "~@4 x!2 ~@10", S: "~ x ~@30", T: "~@3 x ~@2 x ~@25",
})).gain(0.31)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B C D E F G H I J K@2 L D E J K@2 L J K@2 L J K@2 L J K@2 L J K@2 L K L J K@2 M N O P Q@2 R S T U V W X Y Z AA AB
  AC AD AE AF AG AH AI AJ ~@8
>`.pickRestart({
  A: "~@29 x!2 ~", B: "x ~@8 x ~@15 x ~@6", C: "~@3 x ~@19 x ~@8", D: "~@9 x ~@3 x ~@15 x ~@2",
  E: "~@13 x ~@5 x ~@7 x ~@4", F: "~@9 x ~@3 x ~@18", G: "~@7 x ~@24", H: "~@9 x ~@15 x ~@6",
  I: "~@7 x ~@11 x ~@9 x ~@2", J: "~@9 x ~@13 x ~@8", K: "~@7 x ~@17 x ~@6", L: "~@7 x ~@11 x ~@7 x ~@4",
  M: "~@7 x ~@9 x ~@3 x ~ x!2 ~@7", N: "~ x!2 ~ x ~@8 x ~@15 x ~@2", O: "~@7 x ~@19 x ~@4", P: "~@13 x ~@13 x ~@4",
  Q: "~@11 x ~@17 x ~@2", R: "~@11 x ~@11 x ~@7 x", S: "~@11 x ~@6 x ~@6 x ~@6",
  T: "~ x ~@2 x ~@6 x ~@5 x ~@5 x ~@2 x!4 ~@2", U: "~@5 x ~@5 x ~@6 x ~@4 x ~@5 x ~@2",
  V: "~ x ~@3 x ~@3 x ~@3 x ~@4 x!4 ~ x!2 ~ x ~@5", W: "~@17 x ~@5 x ~@5 x ~@2", X: "~ x ~@11 x ~@9 x ~@8",
  Y: "~ x ~@9 x ~@20", Z: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@2", AA: "~ x ~@11 x ~@15 x ~@2", AB: "~@5 x ~@18 x ~@7",
  AC: "~@13 x ~@5 x ~@5 x ~@5 x", AD: "~@5 x ~@4 x ~@21", AE: "~@13 x ~@15 x ~@2", AF: "~@3 x ~@5 x ~@5 x ~@5 x ~@10",
  AG: "~@5 x ~@4 x ~@2 x ~@7 x ~@7 x ~@2", AH: "~@6 x ~@6 x ~@7 x ~@5 x ~@4",
  AI: "~ x ~@3 x ~@3 x ~@3 x ~@4 x ~@2 x ~@3 x ~@3 x ~@2", AJ: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@4 x ~",
})).gain(0.53)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@5 A ~ B ~@3 C ~@3 A ~ C ~@3 C ~@3 C ~@3 C ~@3 C ~@5 C ~ D E ~@2 F ~@5 G ~@22
>`.pickRestart({
  A: "~@7 x ~@24", B: "~@11 x ~@20", C: "~@27 x ~@4", D: "~@18 x!3 ~ x ~@8 x", E: "x", F: "~@31 x", G: "~@11 x ~@4",
})).gain(0.23)

// drums · low tom
const low_tom = s("lt").struct("<~@5 A B C ~@7 A ~@19 C ~@14 D ~ E F G H I J K L ~@2 M ~@11>".pickRestart({
  A: "~@29 x ~@2", B: "~@7 x", C: "~@31 x", D: "~@3 x!2 ~@27", E: "~@2 x!3 ~@27", F: "~ x ~@6", G: "~@27 x ~@4",
  H: "~@4 x ~@8 x ~@2", I: "x!2 ~@6", J: "~@15 x ~@15 x", K: "~@5 x ~@21 x ~ x ~@2", L: "~@8 x ~@7 x ~@10 x!3 ~@2",
  M: "~ x ~@30",
})).gain(0.76)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@39 [~@27 x ~@4] ~@15 [~ x ~@5 x ~@2 x ~@5] ~@3 [~@15 x] ~@14>").gain(0.31)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B C D E F G H I J F K C D I J F K I J F K I J F K I J F K I J F K F K I J F K L M F N F@2 O F P Q R F R F R F R
  F R F P F R S ~@8
>`.pickRestart({
  A: "~@9 x ~@5 x ~ x ~@13 x", B: "~ x ~@5 x ~@17 x ~@3 x ~@2", C: "~@5 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  D: "~ x ~@3 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@2", E: "~ x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  F: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", G: "~ x ~@3 x ~@3 x ~ x ~@13 x ~@6",
  H: "~ x ~@3 x ~@3 x ~@11 x ~ x ~ x ~@6", I: "~ x ~@3 x ~@3 x ~@3 x ~@11 x ~@6",
  J: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x ~@5 x ~@2", K: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@7 x ~@5 x",
  L: "~@13 x ~ x ~ x ~ x ~ x ~ x ~@8", M: "~@3 x ~ x ~@5 x ~@3 x ~ x ~@3 x ~ x ~@5 x ~ x",
  N: "~ x ~@4 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~ x ~@3 x", O: "~ x ~ x ~@5 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  P: "~ x ~@7 x ~@3 x ~@4 x ~@2 x ~@3 x ~@3 x ~@2", Q: "~ x ~@3 x ~@3 x ~@3 x ~@4 x ~@2 x ~@3 x ~@3 x ~@2",
  R: "~ x ~@7 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", S: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@4 x ~",
})).gain(0.31)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A@2 B C ~ D E ~ F G H I ~ J ~ D H I ~ J H I ~ J H I ~ J H I ~ J H I ~ J ~ J H I ~ J K L ~@30
>`.pickRestart({
  A: "~ x ~@7 x ~@7 x ~@7 x ~@6", B: "~@11 x ~ x ~@5 x ~ x ~@3 x ~@3 x ~@2",
  C: "~@3 x ~@7 x ~ x ~@3 x ~ x ~ x ~@5 x ~@4", D: "~@17 x ~@14", E: "~@9 x ~@22",
  F: "~@3 x ~@9 x ~@3 x ~ x ~@3 x ~@3 x ~@3 x", G: "~@3 x ~@3 x ~@3 x ~ x ~@3 x ~@9 x ~ x ~ x",
  H: "~@17 x ~@3 x ~@7 x ~@2", I: "~@27 x ~@4", J: "~@21 x ~@7 x ~@2", K: "~@25 x ~@3 x ~@2", L: "~ x ~@5 x ~@17 x ~@6",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@6 A B ~@33 B ~@7 C D E F G B H G I J K L B ~@12>".pickRestart({
  A: "~@26 x ~@2 x ~@2", B: "~@29 x ~@2", C: "~@15 x ~@5 x ~@10", D: "~ x!2 ~@29", E: "~@30 x!2", F: "x!2 ~@25 x ~@3 x",
  G: "~@3 x ~@28", H: "~@3 x ~@27 x", I: "~@12 x ~@8 x ~@8 x ~", J: "~@3 x ~@17 x ~ x ~@8",
  K: "~@3 x ~@3 x ~@4 x ~ x!2 ~@3 x ~ x ~@9 x", L: "x!2 ~@30",
})).gain(0.76)
// … 73 more lines

More by Weather Report