Strudelify

Boy From New York City

The Manhattan Transfer

KeyG minorTempo140 bpm
0:00/0:00
// Boy From New York City — The Manhattan Transfer
// 140 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 104 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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.

// other · tenor sax · "Sax"
const tenor_sax = note(`<
  ~@7 A B A B C D E F G H I J K D L F ~ M N O@2 B A B ~@4 A B A B C D E F G H I J K D L F ~ M N O@2 B A B P Q@2 R S T@2
  U V ~@3 A B A B C D E F G H I J K D L F ~ M N O@2 B A B ~@9
>`.pickRestart({
  A: "~@16 f3@2 g3@3 ~ bb3@2", B: "bb3@3 ~ f3@2 g3@6 ~@12", C: "~@11 g3", D: "bb3@5 ~ g3@5 ~ bb3@5 ~ g3@5 ~",
  E: "bb3@5 ~ g3@5 ~ bb3@5 ~ c4@5 ~", F: "g3@3 ~ f3@2 g3@3 ~ bb3@2 ~@12", G: "~@16 bb3@2 c4@5 ~",
  H: "eb4@3 ~ bb3@2 c4@6 ~@12", I: "~@10 bb3@2 eb4@5 ~ c4@5 ~", J: "db4@5 ~ bb3@6 ~@12", K: "~@16 f3@2 g3@3 ~ f3@2",
  L: "bb3@5 ~ g3@3 ~ f3@2 bb3@5 ~ c4@5 ~", M: "f3@10 ~@2 a3@5 ~ c4@5 ~", N: "d4@5 ~ c4@6 ~@10 f3@2",
  O: "[eb3@5 ~ eb3@5 ~ g3@3 ~ bb3@5 ~ c4@5 ~ bb3@11 ~@3 g3@3 ~ bb3@2]/2", P: "~@18 bb3@3 ~ bb3@2",
  Q: "[eb4@5 ~ eb4@5 ~ eb4@3 ~ eb4@5 ~ f4@5 ~ eb4@8 ~@12]/2", R: "d4@5 ~ d4@5 ~ d4@3 ~ bb3@2 c4@5 ~",
  S: "c4@5 ~ bb3@6 ~@6 bb3@3 ~ bb3@2", T: "[eb4@5 ~ eb4@5 ~ eb4@3 ~ eb4@5 ~ f4@5 ~ eb4@6 ~@2 d4@8 ~@2 c4@2]/2",
  U: "c4@5 ~ c4@5 ~ c4@5 ~ d4@5 ~", V: "d4@3 ~ c4@6 ~@2 d4@5 ~ c4@5 ~",
})).s("gm_tenor_sax").gain(0.26).pan(0.3)

// chords · piano
const piano = note(`<
  A B C D E F G H C I E J K L M N O P Q R S B C H T U V W X Y K F C Z AA AB AC AD C AE AF L AG AH AI AJ AK AL S AM M AN
  AO AP AQ AR AS Z E AT AU AV AW AX AY AZ BA BB C BC BD BE BF BG BH BI BJ B BK BL BM BN BO R BP F C BD BQ BR BS BT BU L
  C G BV H BK AA AG B BW BC
>`.pickRestart({
  A: "[bb3,d4,f4] ~ bb2 [bb3,d4,f4] ~@2 [g3,bb3,eb4] ~ eb3 [g3,bb3,eb4] ~@2", // Bb Eb
  B: "~@4 bb2@2 [d4,f4,ab4,bb4]@2 ~@4 [g3,bb3,eb4]@3 ~@3 eb4@2 g4@2 bb4 ~", // Bb7 Eb
  C: "[bb3,d4,f4]@2 ~@2 bb2@2 [bb3,d4,f4]@2 ~@10 [g3,bb3,eb4]@3 ~@3", D: "~@2 [ab3,bb3,d4,f4] ~@3 [bb3,eb4,g4] ~",
  E: "[bb3,d4,f4]@3 ~@3 bb3@2 d4@2 f4 ~ [g3,bb3,eb4]@3 ~@3 eb4@2 g4@2 bb4 ~", // Bb Eb
  F: "~@6 [d4,f4,ab4,bb4]@3 ~@3 [g3,bb3,eb4]@2 ~@2 bb2@2 [g3,bb3,eb4]@2 ~@4", // Bb7 Eb
  G: "[d4,f4,ab4,bb4]@3 ~@3 ab3@2 d4@2 f4 ~@5 bb2@2 [g3,bb3,eb4]@2 ~@4", // Bb7 Eb
  H: "[d4,f4,ab4,bb4]@3 ~@3 ab3@2 d4@2 f4 ~@7 [g3,bb3,eb4]@3 ~@3", I: "~@2 [d4,f4,ab4,bb4] ~@3 [bb3,eb4,g4] ~",
  J: "[ab3,bb3,d4,f4]@3 ~@3 ab3@2 d4@2 f4 ~@5 bb2@2 [g3,bb3,eb4]@2 ~@4", // Bb7 Eb
  K: "[bb3,d4,f4] ~ bb2 [bb3,d4,f4] ~@2 [g3,bb3,eb4] ~ bb2 [g3,bb3,eb4] ~@2", // Bb Eb
  L: "~@2 bb2 [d4,f4,ab4,bb4] ~@2 [g3,bb3,eb4] ~ bb2 [g3,bb3,eb4] ~@2", // Bb7 Eb
  M: "~@2 bb2 [bb3,d4,f4] ~@4 bb2 [g3,bb3,eb4] ~@2", // Bb Eb
  N: "[d4,f4,ab4,bb4]@2 ~@2 bb2@2 [d4,f4,ab4,bb4]@2 ~@10 [g3,bb3,eb4]@3 ~@3", O: "~@2 [g3,bb3,eb4] ~@3 [ab3,c4,eb4] ~",
  P: "~@2 eb3 [bb3,db4,eb4,g4] ~@4 eb2 [ab3,c4,eb4] ~@2", Q: "~@4 eb3@2 [g3,bb3,eb4]@2 ~@10 [ab3,c4,eb4]@3 ~@3",
  R: "[bb3,db4,eb4,g4] ~ eb3 [bb3,db4,eb4,g4] ~@4 eb2 [ab3,c4,eb4] ~@2", // Eb7 Ab
  S: "[bb3,d4,f4]@3 ~@3 bb3@2 d4@2 f4 ~ [g3,bb3,eb4]@2 ~@2 bb2@2 [g3,bb3,eb4]@2 ~@4", // Bb Eb
  T: "eb4@16 eb4@2 a4@2 c5@2 f5 ~, [c4,f4,a4]@19 ~@5", // F
  U: "~@6 [c4,eb4,f4,a4]@2 ~@4 [c4,eb4,f4,a4]@2 ~@2 [f3,g3] ~ [c4,eb4,f4,a4]@2 ~@4", // F7 Fsus2 F7
  V: "[db4,eb4,g4,bb4]@2 ~@4 [db4,eb4,g4,bb4]@2 ~@8 eb3 ~ [db4,eb4,g4,bb4]@2 ~@4", // Eb7
  W: "~@4 eb3 ~ [db4,eb4,g4,bb4]@3 ~@7 eb3 ~ [db4,eb4,g4,bb4] ~@5", // Eb7
  X: "~@6 [f3,bb3,d4]@3 ~@3 [g3,bb3,eb4]@2 ~@2 bb2@2 [g3,bb3,eb4]@2 ~@4", // Bb Eb
  Y: "~@6 [d4,f4,ab4,bb4]@3 ~@7 bb2@2 [bb3,eb4,g4]@2 ~@4", // Bb7 Eb
  Z: "[d4,f4,ab4,bb4]@3 ~@3 ab3@2 d4@2 f4 ~ [g3,bb3,eb4]@3 ~@3 eb4@2 g4@2 bb4 ~", // Bb7 Eb
  AA: "[d4,f4,ab4,bb4]@3 ~@3 ab3@2 d4@2 f4 ~ [g3,bb3,eb4]@2 ~@2 bb2@2 [g3,bb3,eb4]@2 ~@4", // Bb7 Eb
  AB: "[ab3,bb3,d4,f4]@2 ~@2 bb2@2 [ab3,bb3,d4,f4]@2 ~@4 [g3,bb3,eb4]@3 ~@3 eb4@2 g4@2 bb4 ~", // Bb7 Eb
  AC: "~@6 [bb3,d4,f4]@3 ~@3 [g3,bb3,eb4]@3 ~@3 eb4@2 g4@2 bb4 ~", // Bb Eb
  AD: "[ab3,bb3,d4,f4] ~ bb2 [ab3,bb3,d4,f4] ~@4 bb2 [g3,bb3,eb4] ~@2", // Bb7 Eb
  AE: "[d4,f4,ab4,bb4]@3 ~@3 ab3@2 d4@2 f4 ~ [bb3,eb4,g4]@2 ~@2 bb2@2 [bb3,eb4,g4]@2 ~@4", // Bb7 Eb
  AF: "[bb3,d4,f4] ~ bb2 [bb3,d4,f4] ~@2 [bb3,eb4,g4] ~ bb2 [bb3,eb4,g4] ~@2", // Bb Eb
  AG: "[bb3,d4,f4]@2 ~@2 bb2@2 [bb3,d4,f4]@2 ~@4 [g3,bb3,eb4]@3 ~@3 eb4@2 g4@2 bb4 ~", // Bb Eb
  AH: "[ab3,bb3,d4,f4]@3 ~@3 ab3@2 d4@2 f4 ~@7 [g3,bb3,eb4]@3 ~@3", // Bb7 Eb
  AI: "[g3,bb3,eb4]@3 ~@3 eb4@2 g4@2 bb4 ~ [ab3,c4,eb4]@3 ~@3 ab3@2 c4@2 eb4 ~", // Eb Ab
  AJ: "[bb3,db4,eb4,g4]@2 ~@2 eb3@2 [bb3,db4,eb4,g4]@2 ~@4 [ab3,c4,eb4]@3 ~@3 ab3@2 c4@2 eb4 ~", // Eb7 Ab
  AK: "~@6 [bb3,eb4,g4]@3 ~@3 [ab3,c4,eb4]@2 ~@2 eb2@2 [ab3,c4,eb4]@2 ~@4", // Eb Ab
  AL: "[bb3,db4,eb4,g4]@3 ~@3 db4@2 g4@2 bb4 ~ [ab3,c4,eb4]@2 ~@2 eb2@2 [ab3,c4,eb4]@2 ~@4", // Eb7 Ab
  AM: "[d4,f4,ab4,bb4] ~ bb2 [d4,f4,ab4,bb4] ~@2 [g3,bb3,eb4] ~ bb2 [g3,bb3,eb4] ~@2", // Bb7 Eb
  AN: "~@2 bb2 [ab3,bb3,d4,f4] ~@2 [g3,bb3,eb4] ~ bb2 [g3,bb3,eb4] ~@2", // Bb7 Eb
  AO: "~@6 [c4,eb4,f4,a4]@2 ~@10 [c4,eb4,f4,a4]@3 ~@3", // F7
  AP: "[c4,eb4,f4,a4]@2 ~@4 [c4,eb4,f4,a4]@2 ~@8 f3 ~ [c4,eb4,f4,a4]@2 ~@4", // F7
  AQ: "~@6 [bb3,db4,eb4,g4]@2 ~@10 [bb3,db4,eb4,g4] ~@5", AR: "~@6 [bb3,db4,eb4,g4]@2 ~@8 eb3 ~ [bb3,db4,eb4,g4] ~@5",
  AS: "~@2 bb2 [bb3,d4,f4] ~@2 [g3,bb3,eb4] ~ bb2 [g3,bb3,eb4] ~@2", // Bb Eb
  AT: "~@4 bb2@2 [ab3,bb3,d4,f4]@2 ~@10 [bb3,eb4,g4]@3 ~@3", // Bb7 Eb
  AU: "[g3,bb3,eb4]@3 ~@3 [g3,bb3,eb4]@2 ~@4 [ab3,c4,eb4]@3 ~ eb2@2 [ab3,c4,eb4]@2 ~@4", // Eb Ab
  AV: "[bb3,db4,eb4,g4]@3 ~ eb3@2 [bb3,db4,eb4,g4]@2 ~@4 [ab3,c4,eb4]@3 ~@3 [ab3,c4,eb4]@2 ~@4", // Eb7 Ab
  AW: "[f3,bb3,d4]@6 bb3@2 d4@2 f4 ~ [g3,bb3,eb4]@3 ~@3 [g3,bb3,eb4]@2 ~@4", // Bb Eb
  AX: "[d4,f4,ab4,bb4]@3 ~@3 [d4,f4,ab4,bb4]@2 ~@4 [g3,bb3,eb4]@3 ~ bb2@2 [g3,bb3,eb4]@2 ~@4", // Bb7 Eb
  AY: "[g3,bb3,eb4]@3 ~ eb3@2 [g3,bb3,eb4]@2 ~@4 [ab3,c4,eb4]@3 ~@3 [ab3,c4,eb4]@2 ~@4", // Eb Ab
  AZ: "[db4,eb4,g4,bb4]@3 ~@3 [db4,eb4,g4,bb4]@2 ~@4 [ab3,c4,eb4]@3 ~@3 [ab3,c4,eb4]@2 ~@4", // Eb7 Ab
  BA: "[c3,bb3,c4,e4,g4]@3 ~@3 [c3,bb3,c4,e4,g4]@10 g2@2 [c3,bb3,c4,e4,g4]@3 ~@3", // C7
  BB: "[f3,c4,eb4,f4,a4]@3 ~@3 [f3,c4,eb4,f4,a4]@10 c3@2 [f3,c4,eb4,f4,a4]@3 ~@3", // F7
  BC: "~@2 [d4,f4,ab4,bb4] ~@3 [g3,bb3,eb4] ~", BD: "~@6 [d4,f4,ab4,bb4]@3 ~@3 [g3,bb3,eb4]@3 ~@3 eb4@2 g4@2 bb4 ~",
  BE: "~@4 bb2@2 [d4,f4,ab4,bb4]@2 ~@10 [g3,bb3,eb4]@3 ~@3", // Bb7 Eb
  BF: "~@4 bb2@2 [bb3,d4,f4]@2 ~@4 [g3,bb3,eb4]@3 ~@3 eb4@2 g4@2 bb4 ~", // Bb Eb
  BG: "~@4 bb2@2 [ab3,bb3,d4,f4]@2 ~@10 [g3,bb3,eb4]@3 ~@3", // Bb7 Eb
  BH: "[bb3,d4,f4] ~ bb2 [bb3,d4,f4] ~@4 bb2 [bb3,eb4,g4] ~@2", // Bb Eb
  BI: "~@6 [ab3,bb3,d4,f4]@3 ~@7 bb2@2 [g3,bb3,eb4]@2 ~@4", // Bb7 Eb
  BJ: "~@4 bb2@2 [bb3,d4,f4]@2 ~@4 [bb3,eb4,g4]@3 ~@3 eb4@2 g4@2 bb4 ~", // Bb Eb
  BK: "[bb3,d4,f4] ~ bb2 [bb3,d4,f4] ~@4 bb2 [g3,bb3,eb4] ~@2", // Bb Eb
  BL: "[d4,f4,ab4,bb4]@2 ~@2 bb2@2 [d4,f4,ab4,bb4]@2 ~@10 [bb3,eb4,g4]@3 ~@3", // Bb7 Eb
  BM: "[g3,bb3,eb4]@3 ~@3 eb4@2 g4@2 bb4 ~ [ab3,c4,eb4]@2 ~@2 eb2@2 [ab3,c4,eb4]@2 ~@4", // Eb Ab
  BN: "~@6 [db4,eb4,g4,bb4]@3 ~@3 [ab3,c4,eb4]@2 ~@2 eb2@2 [ab3,c4,eb4]@2 ~@4", // Eb7 Ab
  BO: "~@6 [bb3,eb4,g4]@3 ~@7 eb2@2 [ab3,c4,eb4]@2 ~@4", BP: "~@6 [bb3,d4,f4]@3 ~@7 bb2@2 [g3,bb3,eb4]@2 ~@4",
  BQ: "~@6 [c4,eb4,f4,a4]@2 ~@10 [c4,eb4,f4,a4] ~@5", BR: "~@6 [c4,eb4,f4,a4]@2 ~@8 f3 ~ [c4,eb4,f4,a4] ~@5",
  BS: "[bb3,db4,eb4,g4]@2 ~@4 [bb3,db4,eb4,g4]@2 ~@8 eb3 ~ [bb3,db4,eb4,g4]@2 ~@4", // Eb7
  BT: "~@4 eb3 ~ [bb3,db4,eb4,g4]@3 ~@7 eb3 ~ [bb3,db4,eb4,g4] ~@5", // Eb7
  BU: "[f3,bb3,d4]@3 ~@3 bb3@2 d4@2 f4 ~@5 bb2@2 [bb3,eb4,g4]@2 ~@4", // Bb Eb
  BV: "~@6 [bb3,d4,f4]@3 ~@7 bb2@2 [bb3,eb4,g4]@2 ~@4", // Bb Eb
  BW: "~@6 [f3,bb3,d4]@3 ~@3 [bb3,eb4,g4]@2 ~@2 bb2@2 [bb3,eb4,g4]@2 ~@4", // Bb Eb
})).s("gm_piano").gain(0.33).pan(0.9)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B C D E F G H G I E I E J G K L M N O P Q R F S T U V P W X W Y J Y Z AA I Y J P W Y Q AB O AC M AD J E I AE AF U V
  X AG R AG AH AI AJ AK AL AM AN AO AA I X H X H G J Y K E I AP O AQ AR AA F AS J AT AU AV AW AS W E F G Q R H AD W AD
  AG
>`.pickRestart({
  A: "bb1@10 bb0 ~ eb2@10 eb1 ~", B: "bb1@10 bb0 ~ eb2@3 ~@3 eb2@3 ~@3", C: "bb1@8 ~@2 bb1@2 eb2@10 b1 ~",
  D: "bb1@10 e2 ~ eb2@3 ~@3 eb2@3 ~@3", E: "bb1@10 bb0 ~ bb1@10 bb0 ~",
  F: "bb1@8 ~@2 bb1@2 bb1@3 ~ bb1 ~ bb1 ~@3 bb1 ~", G: "bb1@8 ~@2 bb1@2 bb1@10 b1 ~",
  H: "bb1@10 e2 ~ bb1@3 ~@3 bb1@3 ~@3", I: "bb1@10 e2 ~ bb1@4 bb0@2 bb1@2 ~@4", J: "bb1@10 bb0 ~ bb1@3 ~@3 bb1@3 ~@3",
  K: "bb1@4 ~ bb1 bb1@2 bb0 bb1 ~@2", L: "eb2@10 a2 ~ eb2@10 eb1 ~", M: "eb2@4 ~ eb2 eb2@2 eb1 eb2 ~@2",
  N: "eb2@10 eb1 ~ eb2@10 e2 ~", O: "eb2@10 a2 ~ eb2@3 ~@3 eb2@3 ~@3", P: "bb1@10 e2 ~ bb1@8 ~@2 bb1@2",
  Q: "bb1@10 bb0 ~ bb1@3 ~ bb1 ~ bb1 ~@3 bb1 ~", R: "bb1@10 e2 ~ bb1@10 b1 ~", S: "f2@12 c2@11 ~",
  T: "f2@8 ~@2 f2 ~ c2@6 f2@2 ~@4", U: "eb2@12 bb1@11 ~", V: "eb2@8 ~@2 eb2 ~ bb1@6 eb2@2 ~@4",
  W: "bb1@8 ~@2 bb1@2 bb1@3 ~@3 bb1@3 ~@3", X: "bb1@10 bb0 ~ bb1@10 b1 ~", Y: "bb1@4 ~ bb1 bb1@4 ~ bb1",
  Z: "bb1@10 e2 ~ bb1@3 ~ bb1 ~ bb1 ~@3 bb1 ~", AA: "bb1@8 ~@2 bb1@2 bb1@10 bb0 ~", AB: "eb2@10 a2 ~ eb2@10 e2 ~",
  AC: "eb2@10 eb1 ~ eb2@8 ~@2 eb2@2", AD: "bb1@10 e2 ~ bb1@10 bb0 ~", AE: "f2@8 ~@2 f2 ~ c3@7 ~@3 c3@2",
  AF: "f2@9 ~ f2@2 c3@2 ~@2 f1@2 c2@2 ~@4", AG: "bb1@10 bb0 ~ bb1@4 bb0@2 bb1@2 ~@4",
  AH: "eb2@2 ~@4 eb2@2 ~@4 eb2@3 ~ eb1@2 eb2@4 ~@2", AI: "eb2@2 ~@4 eb2@2 ~@4 eb2@3 ~ eb2 ~ eb2@3 ~@3",
  AJ: "bb1@2 ~@4 bb1@2 ~@4 bb1@3 ~ bb0@2 bb1@4 ~@2", AK: "bb1@3 ~ f1 ~ bb1@3 ~@3 bb1@3 ~ bb0@2 bb1@4 ~@2",
  AL: "eb2 ~@2 eb2 ~@2 eb2 ~@2 eb2 ~@2", AM: "eb2@3 ~ bb1 ~ eb2@3 ~@3 eb2@3 ~ eb1@2 eb2@4 ~@2",
  AN: "c2@2 ~@4 c2@3 ~@3 c2@3 ~ g1@2 c2@3 ~@3", AO: "f2@2 ~@4 f2@3 ~@3 f2@4 c2@2 f2@4 c2 ~",
  AP: "eb2@10 a2 ~ eb2@8 ~@2 eb2@2", AQ: "eb2@8 ~@2 eb2@2 eb2@10 eb1 ~", AR: "eb2@8 ~@2 eb2@2 eb2@3 ~@3 eb2@3 ~@3",
  AS: "bb1@10 bb0 ~ bb1@8 ~@2 bb1@2", AT: "f2@7 ~@3 f2 ~ c3@7 ~@3 c3 ~", AU: "f2@6 ~@4 f2 ~ c2@6 d2@3 ~@3",
  AV: "eb2@7 ~@3 eb2 ~ bb2@8 ~@2 bb2 ~", AW: "eb2@8 ~@2 eb2 ~ bb2@5 ~ bb2 ~@5",
})).s("gm_electric_bass_finger").gain(0.44).pan(0)

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

// drums · rim
const rim = s("rim").struct(`<
  A@3 ~ A@3 ~ A@7 B A@7 ~ A@11 B A@7 ~ A@7 ~ A@7 ~@9 A@3 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.64)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@3 A ~@19 B ~@27 A ~@15 A ~@3 A ~@15 A ~@15 A>".pickRestart({
  A: "~@2 x!2 ~ x", B: "~ x!2 ~@9",
})).gain(0.16)

// drums · clap
const clap = s("cp").struct("<A@3 ~ A@3 ~ A@15 ~ A@19 ~ A@7 ~ A@7 ~ A@7 ~ A@3 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~>".pickRestart({
  A: "~@3 x",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@19 B ~@19 C ~@7 A ~@7 D ~@7 A ~@3 A ~@15 A ~@7 D ~@8>".pickRestart({
  A: "~@11 x", B: "~@10 x!2", C: "~@3 x", D: "~@2 x!2 ~@2",
})).gain(0.64)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B C ~ A C A D A B A@3 B C E A F C A C A@2 ~ A G A@2 C F C A@2 B A E A@6 C ~ A@3 H C A@2 ~ A B A C A B C ~ A H A@3 F
  A ~ A@2 C ~ A C A C A C G D A C A G B A C ~ A F C G C H C ~ A C@2 A C A@2 ~
>`.pickRestart({
  A: "~@5 x ~@5 x", B: "~@5 x ~@2 x ~@3", C: "~@5 x ~@6", D: "~ x!2 ~@2 x ~ x ~@4", E: "~@5 x ~ x ~ x ~@2",
  F: "~@2 x ~@2 x ~ x ~@4", G: "~@5 x ~@2 x ~@2 x", H: "~@2 x ~@2 x ~@6",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@19 B ~@19 C ~@7 A ~@7 D ~@7 A ~@3 A ~@15 A ~@7 D ~@7 A>".pickRestart({
  A: "~@5 x ~@6", B: "~@8 x!2 ~@2", C: "~ x", D: "~ x ~@4",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~@3 B ~ A ~ A ~@3 A B@2 ~ A ~ C ~@3 D ~@4 B A ~@3 A ~ B ~@7 E ~@9 A ~ B ~ A ~@3 B ~@3 A ~@13 A ~@4 A ~@4 A ~@10 B
  ~@3
>`.pickRestart({
  A: "~@11 x", B: "~@8 x ~@2 x", C: "~@2 x", D: "~@5 x ~@6", E: "x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@39 A ~@7 A ~@7 B ~@7 A ~@3 A ~@15 A ~@7 B ~@7 A>".pickRestart({
  A: "~ x ~@2", B: "x",
})).gain(0.56)

// … 29 more lines

More by The Manhattan Transfer