Strudelify

Foxie Foxtrot

Haak

KeyF majorTempo101 bpm
0:00/0:00
// Foxie Foxtrot — Haak
// 101 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 65 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(101/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.

// chords · piano
const piano = note(`<
  ~@3 A B C D E F G@2 H I J K L M N O P Q R S T U V W H I J K L M N O P Q R S T U V X Y Z AA AB AC AD AE AF AG AH AI AJ
  AK AL AM AN AM AN AO AP AQ AR
>`.pickRestart({
  A: "[f3,a3] ~@2 [a3,c4] ~@2 [f3,a3] ~@2 [a3,c4] ~@2 [f3,a3] ~@2 [a3,c4] ~ f3 c2@2 f3 f2@2 f3, f2@3 ~@3 c2@3 ~@3 f2@5 a3@2 ~ [a3,c4]@4", // F Am F Am F Am
  B: "[f3,g3,b3] ~@2 [f3,b3,d4] ~@2 [f3,b3] ~@2 [f3,b3,d4] ~@2 g2@3 [f2,a3]@3 [e2,g3]@3 [d2,f3]@2 ~, g2@5 ~ d2@5 [f3,b3]@3 ~@10", // G7 Bdim Fdim Bdim F Em Dm Fdim
  C: "[c2,e3]@3 c4@2 ~ g2 ~ [g3,c4] g2 ~ e3 [c2,bb3,c4]@4 ~@2 g2 ~ g3 [c2,e3]@3, ~@3 g3 ~ e3@2 ~@10 [bb3,c4]@4 ~@3", // C C5 C7 C Bbsus2
  D: "[f2,f3]@3 [a3,c4]@4 ~@2 f2 ~@2 [f2,a3,c4] ~@2 [eb2,g3]@3 [d2,f3]@3 eb3@2 ~, ~@8 f3@3 ~@10 c2 ~@2", // F Am F Eb Dm
  E: "[bb2,d3]@3 [bb3,d4]@3 ~@2 f3@3 ~ [bb2,d4,f4]@5 ~ f2 ~@2 [bb2,f3]@3, ~@6 f2@4 ~@7 f3@3 [bb3,d4]@2 ~@2", // Bb Bb5 Bb
  F: "f3@3 ~@3 c3@2 ~ f2@2 ~ gb2 ~@2 gb2@2 gb3 [d2,d4]@2 ~ [gb2,a3,c4]@2 ~, f2@5 ~@19, ~@3 [a3,c4]@5 f3@2 ~ gb3@2 ~ [a3,d4]@2 ~@2 a3 ~@5", // D Gbdim Am D5
  G: "[[g3,b3]@2 ~ [b3,d4]@5 ~ g2@3 [g3,d4,g4]@3 g2@2 [g3,d4]@3 ~ g2@3 ~@6 c3 ~@2 c3@2 c4 c2 ~ [c2,c4,e4]@4 [d2,f4]@2 ~ [e2,c4,g4]@2 ~, g2@3 ~@5 g3@3 ~@6 f4@5 ~@2 e4@13 ~@5 [c4,d4] ~@5, ~@10 g3@5 ~ g3 ~@7, ~@8 [c2,c4]@3 ~@5]/2", // G Bm G5 C Dm C Csus2 C
  H: "f2@3 [a3,c4] ~@2 c2@2 ~ [f3,a3,c4] ~@2 f2@3 [a3,c4] f3 ~@2 [a3,c4] ~ [f2,f3] ~@2, f3 ~@5 f3 ~@5 f3 ~@5 f2@2 ~@4", // Am F Am F
  I: "g2@3 [b3,d4] ~@2 d2@3 [b3,d4] g3@2 g2@2 ~ [f2,a3]@2 ~ e2@2 ~ [d2,f3] ~@2, g3 ~@5 g3 ~@11 g3 ~@5", // Bm F Dm
  J: "[c2,e3]@3 [g3,c4] e3 ~@2 [g3,c4] ~ g2 ~@2 c2@3 [g3,c4] e3 ~ g2 [bb3,c4] ~ e2@2 ~, f3 ~@5 g2@2 ~@4 e3 ~@11", // C C5 Bbsus2
  K: "f2@3 [a3,c4] ~@2 c2@3 [a3,c4] f3 ~ f2 [a3,c4] ~ f2@3 [a3,c4] ~@2 [c2,f3] ~@2, f3 ~@5 f3 ~@8 f3 ~@8", // Am F5
  L: "f2@3 [a3,c4] ~@2 c2@3 [a3,c4] f3 ~@2 [a3,c4] ~ f3 ~@2 c2@3 [f2,a3,c4] ~@2, f3 ~@5 f3 ~@5 f2@3 ~@3 f3 ~@5", // Am F
  M: "g2@3 [b3,d4] ~@2 d2@3 [b3,d4] f3@2 g2@2 ~ [f2,a3]@3 [e2,g3]@2 ~ f3@2 ~, f3 ~@5 f3 ~@14 d2 ~@2", // Bm F Em
  N: "[c2,e3]@3 c4 e3 ~ g2 [g3,c4] ~ g2 ~@2 c2@3 c4 g3 ~ g2 e3 ~ e2@2 ~, ~@3 g3@2 ~@7 e3 ~@2 bb3@2 ~@7", // C C5
  O: "f2@3 [a3,c4] f3 ~@2 [a3,c4] ~@2 eb3@2 ~ [a3,c4] ~@2 eb3 ~ [a3,c4]@3 [f2,eb3] ~@2, f3 ~@5 c2@2 ~ f2@4 ~@2 f2@2 ~@7", // Am F7
  P: "bb2@3 [f3,bb3,d4]@3 ~ [f3,bb3,d4] ~ bb2@3 [f3,b3,d4]@3 bb2 f3 ~@2 f3 ~@2 f3@2, ~@16 [b3,d4]@5 bb2@2 ~", // Bb Bdim Bm
  Q: "~ [f3,c4]@2 c3@2 ~ [f3,a3,c4]@3 f2@2 ~ [d3,gb3,a3,d4]@4 gb3 ~ d3 gb3@2 ~ f3@2, f2@2 ~@19 d3@2 ~, ~ a3 ~@14 [a3,d4]@6 ~@2", // F5 F D D5
  R: "g2 [b3,d4] ~ d3 f3 ~ [f3,b3,d4]@3 d3 ~@2 [g2,b3,d4,g4]@3 g3 [d4,f4]@3 g3@2 b2@2 ~, ~@8 g3 ~@3", // Bm Bdim G Dm
  S: "[c3,c4,e4]@13 ~@2 [c3,c4,e4]@3 [d3,c4,f4]@2 ~ [e3,c4,e4,g4] ~@2, g3@3 ~@15 d4 ~@5", // C Dm7 C
  T: "[f3,a3] ~@2 [a3,c4] ~@2 [f3,a3] ~@2 [a3,c4] ~@2 [f3,a3] ~@2 c4 f3 ~ c3 c4@2 ~ f3 ~, f2@2 ~@4 c3@3 ~@3 f2@3 a3@3 ~ a3 ~ f2@2 ~", // F Am F Am F
  U: "[g2,f3,g3,b3] ~@2 [f3,b3,d4] ~@2 [f3,b3] ~@2 [b3,d4] [g2,f3]@2 ~@3 [f2,a3]@2 ~ g3@2 ~ f3@2 ~, ~@6 d3@3 ~ b3@4 ~@4 e2 ~@2 d2 ~@2", // G7 Bdim Fdim Bm G7 F
  V: "[c2,e3]@3 [g3,c4] e3@2 g2 [g3,c4] ~ g2 e3 ~ [c2,e3,bb3,c4]@3 ~ [bb3,c4]@3 g3 ~ e2@3, ~@15 c3@2 ~@7, ~@16 e3 ~@4 e3 ~@2", // C C5 C7 Bbsus2
  W: "f2@2 ~ [a3,c4]@3 ~ [f3,a3] ~ c3 f3 ~ [f2,f3,a3,c4]@4 [c3,c4] ~@2 [c4,f4] ~ [f3,a3] ~@2, f3@5 ~@2 d4@2 ~@7 f4@2 ~@6", // Am F C F5 F
  X: "f2@3 [f3,a3,c4]@3 f2 [f3,a3,d4]@2 f2 ~@2 [db2,ab3,b3,db4]@3 ~ [ab3,b3,db4]@5 [db2,db3] ~@2, ~@5 db3 ~@2", // F Dm Db7 Db
  Y: "[db4,gb4,bb4] ~@20 [db4,gb4,bb4] ~@2", Z: "[c4,eb4,ab4] ~@20 [c4,eb4,ab4] ~@2",
  AA: "[db4,f4,ab4] ~@20 [db4,f4,ab4] ~@2", AB: "[bb3,db4,gb4] ~@23",
  AC: "gb2@3 [bb3,db4] ~@2 db2@3 [bb3,db4] gb3 ~@2 [bb3,db4] ~ gb3 ~@2 db2@3 [gb2,bb3,db4] ~@2, gb3 ~@5 gb3 ~@5 gb2@3 ~@3 gb3 ~@5", // Bbm Gb
  AD: "ab2@3 [c4,eb4] ~@2 eb2@3 [c4,eb4] gb3@2 ab2@2 ~ [gb2,bb3]@3 [f2,ab3]@2 ~ gb3@2 ~, gb3 ~@5 gb3 ~@14 eb2 ~@2", // Cm Gb Fm
  AE: "[db2,f3]@3 db4 f3 ~ ab2 [ab3,db4] ~ ab2 ~@2 db2@3 db4 ab3 ~ ab2 f3 ~ f2@2 ~, ~@3 ab3@2 ~@7 f3 ~@2 b3@2 ~@7", // Db Db5
  AF: "gb2@3 [bb3,db4] gb3 ~@2 [bb3,db4] ~@2 e3@2 ~ [bb3,db4] ~@2 e3 ~ [bb3,db4]@3 [gb2,e3] ~@2, gb3 ~@5 db2@2 ~ gb2@4 ~@2 gb2@2 ~@7", // Bbm Gb7
  AG: "b2@3 [gb3,b3,eb4]@3 ~ [gb3,b3,eb4] ~ b2@3 [gb3,c4,eb4]@3 b2 gb3 ~@2 gb3 ~@2 gb3@2, ~@16 [c4,eb4]@5 b2@2 ~", // B Cdim Cm
  AH: "~ [gb3,db4]@2 db3@2 ~ [gb3,bb3,db4]@3 gb2@2 ~ [eb3,g3,bb3,eb4]@4 g3 ~ eb3 g3@2 ~ gb3@2, gb2@2 ~@19 eb3@2 ~, ~ bb3 ~@14 [bb3,eb4]@6 ~@2", // Gb5 Gb Eb Eb5
  AI: "ab2 [c4,eb4] ~ eb3 gb3 ~ [gb3,c4,eb4]@3 eb3 ~@2 [ab2,c4,eb4,ab4]@3 ab3 [eb4,gb4]@3 ab3@2 c3@2 ~, ~@8 ab3 ~@3", // Cm Cdim Ab Ebm
  AJ: "[db3,db4,f4]@13 ~@2 [db3,db4,f4]@3 [eb3,db4,gb4]@2 ~ [f3,db4,f4,ab4] ~@2, ab3@3 ~@15 eb4 ~@5", // Db Ebm7 Db
  AK: "[gb3,bb3] ~@2 [bb3,db4] ~@2 [gb3,bb3] ~@2 [bb3,db4] ~@2 [gb3,bb3] ~@2 db4 gb3 ~ db3 db4@2 ~ gb3 ~, gb2@2 ~@4 db3@3 ~@3 gb2@3 bb3@3 ~ bb3 ~ gb2@2 ~", // Gb Bbm Gb Bbm Gb
  AL: "[ab2,gb3,ab3,c4] ~@2 [gb3,c4,eb4] ~@2 [gb3,c4] ~@2 [c4,eb4] [ab2,gb3]@2 ~@3 [gb2,bb3]@2 ~ ab3@2 ~ gb3@2 ~, ~@6 eb3@3 ~ c4@4 ~@4 f2 ~@2 eb2 ~@2", // Ab7 Cdim Gbdim Cm Ab7 Gb
  AM: "[db2,f3]@3 [ab3,db4] f3@2 ab2 [ab3,db4] ~ ab2 f3 ~ [db2,f3,b3,db4]@3 ~ [b3,db4]@3 ab3 ~ f2@3, ~@15 db3@2 ~@7, ~@16 f3 ~@4 f3 ~@2", // Db Db5 Db7 Bsus2
  AN: "gb2@2 ~ [bb3,db4]@3 ~ [gb3,bb3] ~ db3 gb3 ~ [gb2,gb3,bb3,db4]@4 [db3,db4] ~@2 [db4,gb4] ~ [gb3,bb3] ~@2, gb3@5 ~@2 eb4@2 ~@7 gb4@2 ~@6", // Bbm Gb Db Gb5 Gb
  AO: "db3@3 [ab3,db4,f4] ~@2 ab2 ~ [ab3,db4,f4] ab2 ~@2 [db3,db5,db6] ~@4 [db5,db6] db3 ~@2 ab3@2 ~, ~@21 ab2 ~@2", // Db
  AP: "db3@3 [ab3,db4,f4] ~@4 [ab3,db4,f4] ab2 ~@2 [ab3,b3,db4,f4]@3 db3 ~ [ab3,b3,db4,f4] db3 ~ ab3 db3 ~ bb3, ~@12 db3 ~@11", // Db Db7
  AQ: "gb2@2 [bb3,db4,gb4] gb3 ~@2 [bb3,db4,gb4]@3 gb3@2 ~ [b2,b3,eb4,gb4]@5 eb4@3 b3 b2@2 ~, ~@17 gb4@6 ~, ~@17 b3@2 ~@5", // Gb B
  AR: "[gb3,bb3,db4,gb4] ~@2 [db3,db4] c3 [db3,db4] [d3,d4]@3 [db3,db4] ~@5 [db4,b4,db5] ~@2 [gb3,gb4,bb4,db5,gb5] ~@5, ~@2 c4 ~@9", // Gb Db D Db Db7 Gb
})).s("gm_piano").gain(0.56).pan(0.8)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@3 A B C D E F G H I B J K L B J D M N O P I Q R S I B J K L B J D M N O P I Q R T ~@4 U V W X Y Z AA AB AC AD AE AF
  AE AF AG AH AI AJ
>`.pickRestart({
  A: "~@3 [a3,c4,f4] ~@5 [a3,c4,f4] ~@5 [a3,c4,f4] ~@4 [a3,c4,f4] [a3,c4,f4]@2 ~", // F
  B: "~@3 [b3,d4,g4] ~@5 [b3,d4,g4] ~@4 [b3,d4,g4]!2 ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2", // G
  C: "~@3 [c4,e4,g4] ~@5 [c4,e4,g4] ~@5 [bb3,e4,g4] ~@4 [bb3,e4,g4] [bb3,e4,g4]@2 ~", // C Edim
  D: "~@3 [a3,c4,f4] ~@5 [a3,c4,f4] ~@4 [a3,c4,eb4,f4]!2 ~@2 [a3,c4,eb4,f4] ~@2 [a3,c4,eb4,f4] ~@2", // F F7
  E: "~@3 [bb3,d4,f4] ~@5 [bb3,d4,f4] ~@5 [bb3,d4,f4] ~@4 [bb3,d4,f4]!2 ~@2", // Bb
  F: "~@3 [a3,c4,f4] ~@5 [a3,c4,f4] ~@5 [a3,c4,d4,gb4] ~@5 [a3,c4,d4,gb4] ~@2", // F D7
  G: "~@3 [g3,b3,d4,f4] ~@5 [g3,b3,d4,f4] ~@5 [g3,b3,d4,f4] ~@4 [g3,b3,d4,f4]!2 ~@2", // G7
  H: "~@3 [g3,a3,c4,e4] ~@5 [g3,a3,c4,e4] ~@4 [g3,bb3,c4,e4]!2 ~@2 [g3,bb3,c4,e4] ~@2 [g3,bb3,c4,e4] ~@2", // Am7 C7
  I: "~@3 [a3,c4,f4] ~@5 [a3,c4,f4] ~@5 [a3,c4,f4] ~@4 [a3,c4,f4]!2 ~@2", // F
  J: "~@3 [bb3,e4,g4] ~@5 [bb3,e4,g4] ~@5 [bb3,e4,g4] ~@4 [bb3,e4,g4]!2 ~@2", // Edim
  K: "~@3 [a3,c4,f4] ~@5 [a3,c4,f4] ~@4 [a3,c4,f4]!2 ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2", // F
  L: "~@3 [a3,c4,f4] ~@5 [a3,c4,f4] ~@5 [a3,c4,f4] ~@5 [a3,c4,f4] ~@2", // F
  M: "~@3 [bb3,d4,f4] ~@5 [bb3,d4,f4] ~@5 [b3,d4,f4] ~@5 [b3,d4,f4] ~@2", // Bb Bdim
  N: "~@3 [a3,c4,f4] ~@4 [a3,c4,f4]!2 ~@5 [a3,c4,gb4] ~@5 [a3,c4,gb4] ~@2", // F Gbdim
  O: "~@3 [b3,d4,g4] ~@5 [b3,d4,g4] ~@5 [b3,d4,f4] ~@4 [b3,d4,f4]!2 ~@2", // G Bdim
  P: "~@3 [c4,e4,g4] ~@5 [c4,e4,g4] ~@5 [bb3,e4,g4] ~@2 [bb3,e4,g4] ~@2 [bb3,e4,g4] ~@2", // C Edim
  Q: "~@3 [b3,d4,g4] ~@5 [b3,d4,g4] ~@5 [b3,d4,g4] ~@4 [b3,d4,f4,g4]!2 ~@2", // G G7
  R: "~@3 [c4,e4,g4] ~@5 [c4,e4,g4] ~@5 [bb3,e4,g4] ~@5 [bb3,e4,g4] ~@2", // C Edim
  S: "~@3 [a3,c4,f4] ~@5 [a3,c4,f4] ~@4 [a3,c4,f4] [a3,c4,f4]@2 ~ [a3,c4,f4] ~@2 [a3,c4,f4] ~@2", // F
  T: "~@3 [a3,c4,f4] ~@5 [a3,c4,f4] ~@4 [db4,e4,f4,ab4] [db4,f4,ab4]@2 ~ [db4,f4,ab4]@2 ~ [db4,f4,ab4]@2 ~", // F Db
  U: "~@3 [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@2", // Gb
  V: "~@3 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@4 [c4,eb4,ab4]!2 ~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~@2", // Ab
  W: "~@3 [b3,f4,ab4] ~@5 [b3,f4,ab4] ~@5 [b3,f4,ab4] ~@4 [b3,f4,ab4]!2 ~@2", // Fdim
  X: "~@3 [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@4 [bb3,db4,e4,gb4]!2 ~@2 [bb3,db4,e4,gb4] ~@2 [bb3,db4,e4,gb4] ~@2", // Gb Gb7
  Y: "~@3 [b3,eb4,gb4] ~@5 [b3,eb4,gb4] ~@5 [c4,eb4,gb4] ~@5 [c4,eb4,gb4] ~@2", // B Cdim
  Z: "~@3 [bb3,db4,gb4] ~@4 [bb3,db4,gb4]!2 ~@5 [bb3,db4,g4] ~@5 [bb3,db4,g4] ~@2", // Gb Gdim
  AA: "~@3 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@5 [c4,eb4,gb4] ~@4 [c4,eb4,gb4]!2 ~@2", // Ab Cdim
  AB: "~@3 [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@5 [b3,f4,ab4] ~@2 [b3,f4,ab4] ~@2 [b3,f4,ab4] ~@2", // Db Fdim
  AC: "~@3 [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@4 [bb3,db4,gb4]!2 ~@2", // Gb
  AD: "~@3 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@4 [c4,eb4,gb4,ab4]!2 ~@2", // Ab Ab7
  AE: "~@3 [db4,f4,ab4] ~@5 [db4,f4,ab4] ~@5 [b3,f4,ab4] ~@5 [b3,f4,ab4] ~@2", // Db Fdim
  AF: "~@3 [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@4 [bb3,db4,gb4] [bb3,db4,gb4]@2 ~ [bb3,db4,gb4] ~@2 [bb3,db4,gb4] ~@2", // Gb
  AG: "~@3 [ab3,b3,db4,f4] ~@5 [ab3,b3,db4,f4] ~@5 [ab3,b3,db4,f4] ~@4 [ab3,b3,db4,f4]!2 ~@2", // Db7
  AH: "~@3 [ab3,b3,db4,f4] ~@5 [ab3,b3,db4,f4] ~@5 [ab3,b3,db4,f4] ~@5 [ab3,b3,db4,f4] ~@2", // Db7
  AI: "~@3 [bb3,db4,gb4] ~@5 [bb3,db4,gb4] ~@5 [b3,eb4,gb4] ~@4 [b3,eb4,gb4]!2 ~@2", // Gb B
  AJ: "[bb3,db4,gb4] ~@14 [b3,db4,f4]@2 ~ [bb3,db4,gb4] ~@5", // Gb Db7 Gb
})).s("gm_acoustic_guitar_nylon").gain(0.56).pan(0.2)

// bass · fretless bass
const bass = note(`<
  ~@3 A B C D E F G H I J K L I M N O P Q R S T U C V I J K L I M N O P Q R S T U C W X Y Z AA AB AC AD AE AF AG AH AI
  AJ AK AL AM AL AM AN AO AP AQ
>`.pickRestart({
  A: "f2@3 ~@3 c2@2 ~@4 f2@2 ~@4 c2@2 ~@4", B: "g2@2 ~@4 d2@2 ~@4 g2@2 ~ f2@2 ~ e2 ~@2 d2 ~@2",
  C: "c2@3 ~@3 g1@3 ~@3 c2@2 ~@4 g1@3 ~@3", D: "f2@2 ~@4 c2@3 ~@3 f2@2 ~ eb2 ~@2 d2@2 ~ c2 ~@2",
  E: "bb1@2 ~@4 f1@2 ~@4 bb1@2 ~@4 f1@3 ~@3", F: "f2@3 ~@3 c2@3 ~@3 d2@3 ~@3 a1@4 ~@2",
  G: "g1@4 ~@2 d2@3 ~@3 g2@3 ~@3 d2@4 ~@2", H: "c2@2 ~@4 g1@3 ~@3 c2 ~@2 c2@2 ~ d2@2 ~ e2@2 ~",
  I: "f2 ~ c2 ~ f2 ~ c2 ~", J: "g2@3 ~@3 d2@3 ~@3 g2@2 ~ f2@2 ~ e2@2 ~ d2@2 ~", K: "c2 ~ g1 ~ c2 ~ g1 ~",
  L: "f2@2 ~@4 c2@3 ~@3 f2@2 ~ e2@2 ~ d2@2 ~ c2@2 ~", M: "g2@3 ~@3 d2@3 ~@2 g2 ~@2 g2 f2@2 ~ e2@2 ~ d2 ~@2",
  N: "c2@3 ~@3 g1@3 ~@3 c2@4 ~@2 g1@4 ~@2", O: "f2@3 ~@3 c2@4 ~ f2 ~@2 f2 eb2@2 ~ d2@2 ~ c2@2 ~",
  P: "bb1@3 ~@3 f1@3 ~@3 b1@4 ~@2 f1@3 ~@3", Q: "c2@3 ~@3 c2@3 ~@3 d2@4 ~@2 a1@3 ~@3",
  R: "g1@4 ~@2 d2@4 ~@2 g2@4 ~@2 g1@5 ~", S: "c2@3 ~@3 g1@4 ~@2 c2@2 ~@10", T: "f2@2 ~@4 c2@3 ~@3 f2@3 ~@3 c2@3 ~@3",
  U: "g2@3 ~@3 d2@3 ~@3 g2!2 ~ f2@2 ~ e2@2 ~ d2@2 ~", V: "f2@3 ~@3 c2@3 ~@3 f2@2 ~ c2@2 ~ d2@2 ~ e2@2 ~",
  W: "f2@3 ~@3 c2@4 ~@2 db2 ~@2 db2@2 ~ eb2 ~@2 f2@2 ~", X: "gb2@3 ~@18 gb2@2 ~", Y: "ab2@3 ~@18 ab2@2 ~",
  Z: "db2@3 ~@18 db2@2 ~", AA: "gb2@3 ~@9 db2 ~@2 db2@2 ~ eb2@2 ~ f2@2 ~",
  AB: "gb1@2 ~ ab1@2 ~ bb1@2 ~ db2@2 ~ gb2@2 ~ gb1@2 ~ ab1@3 bb1@2 ~",
  AC: "ab1@2 ~ bb1@2 ~ c2@2 ~ eb2@2 ~ ab2@3 g2@2 ~ gb2@3 eb2@2 ~",
  AD: "db2@2 ~ eb2@2 ~ f2@2 ~ ab2@2 ~ db3@3 db2@3 eb2@2 ~ f2@2 ~",
  AE: "gb2@3 db2@2 ~ bb1@3 db2@3 gb1@2 ~ gb1@3 ab1@2 ~ bb1@2 ~", AF: "b1@3 ~@3 gb1@3 ~@3 c2@4 ~@2 gb1@3 ~@3",
  AG: "db2@3 ~@3 db2@3 ~@3 eb2@4 ~@2 bb1@3 ~@3", AH: "ab1@4 ~@2 eb2@4 ~@2 ab2@4 ~@2 ab1@5 ~",
  AI: "db2@3 ~@3 ab1@4 ~@2 db2@2 ~@10", AJ: "gb2@2 ~@4 db2@3 ~@3 gb2@3 ~@3 db2@3 ~@3",
  AK: "ab2@3 ~@3 eb2@3 ~@3 ab2!2 ~ gb2@2 ~ f2@2 ~ eb2@2 ~", AL: "db2@3 ~@3 ab1@3 ~@3 db2@2 ~@4 ab1@3 ~@3",
  AM: "gb2@3 ~@3 db2@3 ~@3 gb2@2 ~ db2@2 ~ eb2@2 ~ f2@2 ~", AN: "db2@2 ~@4 ab1@2 ~@4 db2@3 ~@3 ab1@2 ~@4",
  AO: "db2@2 ~@4 ab1@2 ~@4 db2@2 ~@4 ab1@3 ~@3", AP: "gb2 ~ db2 ~ b1 ~ ab1 ~",
  AQ: "gb2 ~@2 db2 c2 db2 d2@3 db2 ~@5 db2 ~@2 gb2 ~@5",
})).s("gm_fretless_bass").gain(0.56)

// other · trombone
const trombone = note("<A B@2 ~@16 C D E F ~@3 G H@2 I J K L M N C D E F ~@12 O P Q R ~@10>".pickRestart({
  A: "~@21 c3@2 d3", B: "[f3 ~ f3@2 ~ f3 ~@2 f3 ~@2 f3 ~@2 f3 e3@2 f3 d3@2 c3 ~@2 c3@13 f3 ~@5 f2@5 ~]/2", C: "bb2 b2",
  D: "c3@11 ~ d3@11 ~", E: "g3@23 ~", F: "c3@13 ~@11", G: "~@17 c3@3 d3 c3@2 ~",
  H: "[f3@3 ~@3 g3@3 ~@3 a3@4 ~@8 b3@15 ~@6 b3@3, ~@21 c4@5 ~@22]/2", I: "bb3@13 ~@2 g3@3 e3@2 ~ c3@2 ~",
  J: "f3@17 ~@4 c3 ~@2", K: "f3@11 ~ a3@6 ~@3 c4@3", L: "b3@17 ~@4 b3@3", M: "bb3@14 ~ g3@3 e3 ~@2 c3@2 ~", N: "f3@3 ~",
  O: "b2 c3", P: "db3@11 ~ eb3@11 ~", Q: "ab3@23 ~", R: "db3@13 ~@11",
})).s("gm_trombone").gain(0.72).pan(0.4)

// chords · alto sax
const alto_sax = note(`<
  A B@2 ~@4 C D ~@10 E F G H I J K L@2 M N O P Q R S E F G H I J K T U V W X ~@4 Y Z AA AB AC AD AE AF AE AF AG AH AI AJ
>`.pickRestart({
  A: "~@21 [c3,c4]@2 [d3,d4]", // C D
  B: "[[f3,f4] ~ [f3,f4]@2 ~ [f3,f4]@2 ~ [f3,f4]@2 ~ [f3,f4]@2 ~ [f3,f4] [e3,e4]@2 ~ [d3,d4]@2 [c3,c4]@2 ~ [c3,c4]@3 [b2,b3] [c3,c4]@2 [db3,db4] [d3,d4]@2 [e3,e4]@4 f4@2 ~@10, ~@17 [f3,f4]@2 ~@17 f3 ~@11]/2", // F E D C B C Db D …
  C: "[f3,bb3,d5]@6 [bb3,d4,f5]@6 [d4,f4,bb5]@11 ~", // Bb
  D: "[c4,f4,a5]@6 [b3,e4,ab5]@3 [bb3,eb4,g5]@3 [d4,gb5]@11 ~, ~@4 a3@3 ~", E: "[f3,bb3,d4] [f3,b3,d4]",
  F: "[a3,c4,f4]@11 ~ [a3,c4,gb4]@11 ~", G: "[g3,b3,f4]@23 ~", H: "[g3,c4,e4]@13 ~@11", I: "[c4,f4,a4]@23 ~",
  J: "[d4,g4,b4]@23 ~", K: "[c4,e4,bb4]", L: "[~@12 c6@25 ~@2 a5 ~@2 a5@2 c6 a5@2 ~, [f4,a4]@19 ~@29]/2",
  M: "b5@2 ~ b5 ~@2 b5 ~ a5@2 ~ f5@4 ~@8 f5", N: "e5@2 ~ g5@2 ~ e5 ~ c5@2 ~ c5@2 ~ c5 ~@3 c5 ~ d5 c5@2 ~",
  O: "f5@2 ~ f5 ~@2 f5@2 g5@2 ~@2 a5@2 ~@10", P: "c5 ~@2 c5@2 ~ f5 ~ g5@2 ~@2 a5 ~@2 a5 ~@2 bb5@2 ~ a5@2 ~",
  Q: "g5@2 ~ a5@2 ~ g5 ~ f5@2 ~ d5@8 ~@4 d5", R: "c5@2 ~ c5@2 ~ e5@2 ~ g5 ~ bb5@2 ~ bb5@3 ~ g5@2 ~ e5@2 ~",
  S: "f5@11 ~@13", T: "[c4,f4,a4]@11 ~ [db4,f4,ab4]@11 ~", U: "[gb4,bb4,db5] ~@20 [gb4,bb4,db5] ~@2",
  V: "[eb4,ab4,c5]@2 ~@19 [eb4,ab4,c5] ~@2", W: "[f4,ab4,db5]@2 ~@19 [f4,ab4,db5] ~@2",
  X: "[gb4,bb4,db5] ~@5 [f4,ab4,db5] ~@5", Y: "[gb3,b3,eb4] [gb3,c4,eb4]", Z: "[bb3,db4,gb4]@11 ~ [bb3,db4,g4]@11 ~",
  AA: "[ab3,c4,gb4]@23 ~", AB: "[ab3,db4,f4]@13 ~@11", AC: "[db4,gb4,bb4]@23 ~", AD: "[eb4,ab4,c5]@23 ~",
  AE: "[db4,f4,b4]", AF: "[gb4,bb4]@19 ~@5", AG: "[ab3,b3,db4]@11 ~ [b3,db4,f4]@5 ~ [db4,f4,ab4]@5 ~",
  AH: "[f4,ab4,b4]@5 ~ [f4,ab4,b4]@5 ~ [db4,f4,bb4]@5 ~ [b3,f4,ab4]@5 ~", AI: "[bb3,db4] b3, gb4, ~@6 eb4@5 ~",
  AJ: "[bb3,db4,gb4] ~@2 db4 ~ db4 d4@3 db4 ~@5 [b3,db4,f4] ~@2 [bb3,db4,gb4]@2 ~@4, ~@2 c4 ~@9", // Gb Db7 Gb
})).s("gm_alto_sax").gain(0.48).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B C@3 D A@3 B A@3 B A@3 B A B A@3 E
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x ~@6 x", D: "x ~@4 x!3", E: "x ~@4 x!2 ~",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B A C A D A E A F A G A H A B A D A E A F A G A F A G A H A B A D A E A F A G I@3 J A H A B A D A E A F A G A K
  A L A M
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@3 x ~@5 x ~@4 x ~@3 x ~@2 x ~ x", C: "~@3 x ~@5 x ~@5 x ~@4 x ~@3",
  D: "~@3 x ~@5 x ~@4 x!2 ~@4 x!2 ~@2", E: "~ x ~ x!2 ~@3", F: "~@3 x ~@5 x ~@5 x ~@4 x ~@2 x",
  G: "~@3 x ~@5 x ~@5 x ~@4 x!2 ~ x", H: "~@3 x ~@5 x ~@4 x!2 ~@2 x ~@2 x ~@2", I: "x ~@6 x",
  J: "x ~@11 x ~@2 x!4 ~ x!2 ~@2", K: "~@3 x ~@5 x ~@4 x!10", L: "~@3 x ~@5 x ~@5 x ~@5 x ~ x",
  M: "x ~@2 x!4 ~@2 x ~@5 x ~@2 x ~@5",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@3 A@7 B A@7 B A@3 B A@11 B A@3 B A@4 ~@4 A@3 B A@3 B A@6 ~@4>".pickRestart({
  A: "x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x", B: "x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@10 A ~@11 A ~@15 A ~@4 A ~@2 B ~@7 A ~@9 C>".pickRestart({
  A: "x", B: "~ x", C: "x ~@4 x!2 ~",
})).gain(0.64)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  ~@43
  [x ~@2 x!4 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@2 x ~@2]
  [x!4 ~ x!2 ~ x!2 ~ x!5 ~ x!2 ~ x!2 ~ x]
  [x ~ x!5 ~ x!5 ~ x!2 ~ x!2 ~ x!2 ~ x]
  [x ~@2 x!4 ~ x!2 ~@14]
  ~@14
  [x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x]!3
// … 4 more lines

More by Haak