Strudelify

Dirty Work

Steely Dan

KeyD♭ majorTempo79 bpm
0:00/0:00
// Dirty Work — Steely Dan
// 79 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 12, 4/4 at bar 13, 5/4 at bar 16, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 62 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(79/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 · lead 1 square
const lead_1_square = note(`<
  ~@8 A B C@2 D E F G H I J I J I K L@3 M N O P Q R S T U T U V@2 ~@7 W X W X W X W X W X W X Y ~@3
>`.pickRestart({
  A: "db4!2 ~ db4@5 bb3 db4@2 ~ eb4@3 eb4", B: "eb4 f4 ~ f4@4 ~ f4 ~ eb4 ~ db4@3 db4",
  C: "[db4 ~ eb4 db4 eb4 db4@3 bb3 ~ db4 ~ f4@2 ~@2 db4@2 db4@2 eb4@2 ~ bb3 c4 ~ bb3 ~ c4 ab3@3, ~@15 eb4@2 ~@12 bb3 ~@2]/2",
  D: "gb4 ~ f4 ~ db4@2 ~ db4!2 db4@2 ~ db4 db4@2 ~", E: "bb3 ~ db4 ~ eb4@3 eb4!2 f4 ~ f4@4 ~",
  F: "f4 ~ eb4 ~ db4@3 db4!2 ~ eb4 db4 eb4 db4 ~@2", G: "bb3 db4@3 f4 ~ f4 ~ f4 eb4 db4 ~ eb4@4",
  H: "~@12 db4 eb4 ~ f4", I: "~ gb4 ~ f4 ~ eb4@2 ~ eb4 db4 db4@4 db4 b3", J: "db4 b3@5 ~@6 db4 eb4 ~ f4",
  K: "db4 b3@5 ~@10",
  L: "[~@12 db4!2 ~ db4@5 bb3 db4@2 ~ eb4 ~@2 eb4!2 f4 ~ f4@4 ~ f4 ~ eb4 ~ db4@3 db4!2 ~ eb4 db4]/3",
  M: "eb4 db4@3 bb3 ~ db4 ~ f4@2 ~@2 db4@2 db4@2, ~@11 eb4@2 ~@3",
  N: "eb4@2 ~ bb3 c4 ~ bb3 ~ c4 ab3@3 ~@2 gb4 f4, ~@9 bb3 ~@6", O: "db4@2 ~ db4!2 db4@2 ~ db4 db4@2 ~ bb3 ~ db4 ~",
  P: "eb4@3 eb4!2 f4 ~ f4@4 ~ f4 ~ eb4 ~", Q: "db4@3 db4!2 ~ eb4 db4 eb4 db4 ~@2 bb3 db4@3",
  R: "f4 ~ f4 ~ f4 eb4 db4 ~ eb4@5 ~@3", S: "~@8 db4 eb4 ~ f4 ~ gb4 ~ f4",
  T: "f4 eb4@2 ~ eb4 db4 db4@4 db4 b3 db4 b3@3", U: "b3@2 ~@6 db4 eb4 ~ f4 ~ gb4 ~ f4",
  V: "[f4 eb4@2 ~ eb4 db4 db4@4 db4 b3 db4 b3@5 ~@14]/2", W: "~@4 db4 eb4 ~ f4 ~ gb4 ~ f4 ~ eb4@2 ~",
  X: "eb4 db4 db4@4 db4 b3 db4 b3@5 ~@2", Y: "~@4 db4 eb4 ~ f4 ~@8",
})).s("gm_lead_1_square").gain(0.51)

// other · lead 1 square · soft notes
const lead_1_square_soft = note(`<
  ~@58
  [~@9 gb4 ~ f4 ~ eb4@2 ~]
  [eb4 db4 db4@4 db4 b3 db4 b3@5 ~@2]
  [~@4 db4 eb4 ~ f4 ~ gb4 ~ f4 ~ eb4@2 ~]
  [eb4 db4 db4@4 db4 b3 db4 b3@5 ~@2]
>`).s("gm_lead_1_square").gain(0.26)

// chords · trombone
const trombone = note("<~@5 A B C ~@14 D E F G H I J K L M N O P O P O ~ Q R S T@2 U V W@16>".pickRestart({
  A: "eb4 [db4,ab4] [eb4,ab4]@2 [db4,gb4]@2 [db4,f4]@2, ab4 ~@15", // Db5 Ab5 Gb5 Db
  B: "[f4,bb4]@4 ~ ab4 [eb4,gb4]@4 ~@6, ~ [f4,bb4] ~@2", // Bb5 Ebm Bb5
  C: "[eb4,ab4]@2 db4@2 ~@4 [c4,f4]@2 [bb3,eb4]@3 ~@3, ~@2 ab4 ~@13", D: "~@6 [eb4,ab4] db4, ~@14 ab4 ~",
  E: "~@2 [c4,f4] bb3 ~@2 [f3,db4]@2, ~@6 eb4 ~@9", F: "gb3@5 ~@3 [eb3,c4]@5 ~@3, db4@3 ~@13",
  G: "ab3@4 [f3,db4]@3 ~ [eb3,bb3]@5 ~@3, f4@3 ~@13", H: "[eb3,b3]@5 ~@3 [db3,db4]@5 ~@3",
  I: "[c4,eb4]@3 ~ [bb3,db4]@3 ~ [ab3,c4]@3 ~ [gb3,bb3]@3 ~", J: "[ab3,db4]@5 ~@3 [bb3,db4]@5 ~@3",
  K: "[c4,eb4]@5 ~@3 [ab3,db4]@4 [bb3,db4]@3 ~", L: "[gb3,bb3]@5 ~@3 [gb3,b3]@5 ~@3",
  M: "[ab3,db4]@5 ~@3 [bb3,eb4]@4 [bb3,eb4]@4", N: "[bb3,eb4]!4 db3@3 ~ [db3,ab3]@5 ~@3", O: "~@8 [db3,ab3]@5 ~@3",
  P: "b3!2 ~ c4 db4@4 [db3,ab3]@5 ~@3", Q: "~@7 ab4!4 ab4@2 ~ bb4 c5",
  R: "~ bb4 ab4@2 f4@2 ab4 f4@2 ~@2 ab4 f4 eb4 c4 ab3", S: "bb3 ~ c4 ~@4 bb3 c4@5 ~ ab3@2",
  T: "[bb3 c4@2 gb3 ab3@3 ab3 bb3 c4 ~ gb3 ab3@2 ~ f3@5 ~@3 db4 gb4!2 bb4!2 db5 ~ gb4 bb4]/2",
  U: "~ db5 ~ bb4 c5@3 ~ c5 eb5 ~ c5 ~ bb4 ab4 ~", V: "eb4 ~ f4 ~ eb4@3 ~ eb4@3 ~ eb4!4", W: "[~ db4@4 ~@3]/2",
})).s("gm_trombone").gain(0.36).pan(0.8)

// chords · drawbar organ · "HAMMOND ORGAN"
const drawbar_organ = note("<~ A@2 B@2 ~@27 C@2 D@4 ~ E F G F H I J K L M@12 N@2>".pickRestart({
  A: "[ab5@8 bb5 ~ ab5 ~ f5 eb5 db5@5 ~ bb4 db5!2 bb4 eb5 ~ bb4 ~@5]/2",
  B: "[f4 ab4 ~@2 bb4 db5 ~ bb4 ~ ab4 f4 ~ bb4 ~ ab4 f4@4 ~ eb4 f4 eb4 db4 eb4 f4 eb4 db4 ~@4]/2",
  C: "[~@4 db4@27 ~]/2", D: "[b3 b3@2 c4 db4@27 ~]/2",
  E: "~@4 [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~", // Ab5
  F: "[eb4,ab4] ~ [eb4,ab4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~ [c4,f4] ~", // Ab5 F5
  G: "[c4,f4] ~ [c4,f4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~", // F5 Ab5
  H: "[c4,f4] ~ [c4,f4] ~ [db4,gb4] ~ [db4,gb4] ~ [db4,gb4] ~ [db4,gb4] ~ [db4,gb4] ~ [db4,gb4] ~", // F5 Gb5
  I: "[db4,gb4] ~ [db4,gb4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~ [eb4,ab4] ~", // Gb5 Ab5
  J: "[eb4,ab4] ~ [eb4,ab4] ~ [eb4,bb4]@3 ~ [eb4,bb4]@3 ~ eb4!4", K: "~@4 db4@11 ~", L: "~@12 b3 b3@2 c4",
  M: "[db4@27 ~ b3 b3@2 c4]/2", N: "[db4@27 ~@5]/2",
})).s("gm_drawbar_organ").gain(0.51)

// chords · epiano1 · "PIANO"
const epiano1 = note(`<
  ~ A B A B A B A C D E F G H I J K L M L M L M N@4 O P@3 Q R S T S T S T U ~@6 V W X W X W V W X W X W X W X Y
>`.pickRestart({
  A: "[ab3,db4]@5 ~@3 [bb3,db4]@5 ~@3", B: "[ab3,db4]@5 ~@3 eb4!2 ~ e4 f4@3 ~", C: "[bb3,db4] [bb3,eb4]",
  D: "[c4,eb4] [ab3,db4]", E: "[bb3,db4] [b3,eb4]", F: "~ [eb4,ab4] [db4,f4] [c4,eb4]", G: "[bb3,gb4] f4 [bb3,db4]@2",
  H: "[bb3,eb4] [c4,eb4]", I: "[ab3,db4] [bb3,db4]", J: "[b3,eb4]@9 ~@3 [bb3,eb4]@4",
  K: "[bb3,eb4]@4 [bb3,eb4]!4 db4@4 [ab3,db4]@4", L: "~@4 [bb3,db4]@5 ~@3 [ab3,db4]@4",
  M: "~@4 eb4!2 ~ e4 f4@3 ~ [ab3,db4]@4", // Db5
  N: "[~@4 [bb3,db4]@3 ~@5 [bb3,db4]@8 [bb3,eb4]@8 [c4,eb4]@8 [ab3,db4]@8 [bb3,db4]@8 [b3,eb4]@8 ~@4]/4", // Bbm Eb5 Cm Db5 Bbm B
  O: "[eb4,ab4] [db4,f4] [c4,eb4] [bb3,gb4]", // Ab5 Db Cm Ebm
  P: "[f4 [bb3,db4]@2 [bb3,eb4]@2 [c4,eb4]@2 [ab3,db4]@2 [bb3,db4]@2 [b3,eb4]]/3", // Bbm Eb5 Cm Db5 Bbm B
  Q: "[db4,f4]@5 ~@3 [bb3,eb4]@4 [bb3,eb4]@4", R: "[bb3,eb4]!4 db4@4 [ab3,db4]@5 ~@3",
  S: "[bb3,db4]@5 ~@3 [ab3,db4]@5 ~@3", T: "eb4!2 ~ e4 f4@3 ~ [ab3,db4]@5 ~@3", U: "[bb3,db4]@5 ~@11",
  V: "db4@4 [ab3,db4]@5 ~@3 [bb3,db4]@4", W: "~@4 [ab3,db4]@5 ~@3 eb4!2 ~ e4", X: "f4@3 ~ [ab3,db4]@5 ~@3 [bb3,db4]@4",
  Y: "~@4 [ab3,db4]@5 ~@7", // Db5
})).s("gm_epiano1").gain(0.51).pan(0.1)

// other · epiano1 · "PIANO"
const epiano1_2 = note(`<
  A B C B C B C B D E F G H@4 I J K J K J K J L M N O P Q R S T U V U V U V W X Y Z AA AB AC AD AE M AE M AE AD AE M AE
  M AE AF ~@3
>`.pickRestart({
  A: "~@3 db3", B: "~@2 db3 ~ gb2@5 ~ gb2 ~ bb2@4", C: "~@2 bb2 ~ b2@4 b2!2 ~ c3 db3@4",
  D: "~@2 bb2 ~ eb3@5 ~ eb3 ~ ab2@4", E: "~@2 ab2 ~ db3@5 ~ db3 ~ gb2@4", F: "~@2 gb2 ~ b2@5 ~ b2 ~ db3@4",
  G: "~ c3 bb2 ab2",
  H: "[gb2@2 bb2@3 bb2 eb3@3 eb3 ab2@3 ab2 db3@3 db3 gb2@3 gb2 b2@3 b2 db3@2 ~@2 eb3@2, ~@56 db3@7 ~]/4",
  I: "eb3@4 eb3!4 db3@5 ~ db3@2", J: "gb2@5 ~ gb2 ~ bb2@5 ~ bb2 ~", K: "b2@4 b2!2 ~ c3 db3@5 ~ db3 ~",
  L: "eb3@5 ~ eb3 ~ ab2@5 ~ ab2 ~", M: "db3@5 ~ db3 ~ gb2@5 ~ gb2 ~", N: "b2@5 ~ b2 ~ db3@5 ~@3", O: "c3 bb2 ab2 gb2",
  P: "bb2@3 bb2 eb3@3 eb3", Q: "ab2@3 ab2 db3@3 db3", R: "gb2@3 gb2 b2@3 b2", S: "db3 ~ eb3!2, ~@4 db3@7 ~@5",
  T: "eb3!4 db3@5 ~ db3@2 gb2@4", U: "~@2 gb2 ~ bb2@5 ~ bb2 ~ b2@4", V: "b2!2 ~ c3 db3@5 ~ db3 ~ gb2@4",
  W: "gb2 ~ gb2 ~ ab2@2 ab2@2 ab2@2 ab2@2 ab2@2 ab2@2", X: "ab2@2 ab2@2 f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~",
  Y: "f2 ~ f2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", Z: "ab2 ~ ab2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~",
  AA: "f2 ~ f2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~", AB: "gb2 ~ gb2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~",
  AC: "ab2 ~ ab2 ~ eb3@4 eb3@4 eb3!4", AD: "db3@5 ~ db3@2 gb2@5 ~ gb2 ~", AE: "bb2@5 ~ bb2 ~ b2@4 b2!2 ~ c3",
  AF: "db3@5 ~ db3 ~ gb2@5 ~@3",
})).s("gm_epiano1").gain(0.51).pan(0)

// other · epiano1 · "PIANO" · soft notes
const epiano1_soft = note(`<
  ~@58
  [~@14 gb2 ~]
  [bb2@5 ~ bb2 ~ b2@4 b2!2 ~ c3]
  [db3@5 ~ db3 ~ gb2@5 ~ gb2 ~]
  [bb2@5 ~ bb2 ~ b2@5 ~@3]
>`).s("gm_epiano1").gain(0.26).pan(0)

// other · electric guitar jazz · "GUITAR"
const electric_guitar_jazz = note(`<
  A B C B C B C D E@2 F@2 G H I J K L M L M L M N O P Q R S T U V W X Y X Y X Y Z ~@5 AA AB AC AB AC AB AC AB AC AB AC
  AB AC AD ~@3
>`.pickRestart({
  A: "~@13 db4 f4 ab4", B: "db5 ~ ab4 ~@2 db4 gb4 bb4 db5 ~ bb4 ~@2 db4 f4 ab4",
  C: "db5 ~ ab4 ~@2 b3 eb4 gb4 b4 gb4@2 gb4 ~ db4 f4 ab4", D: "db5 ~ ab4 ~@2 db4 gb4 bb4 db5 ~ bb4 ~@5",
  E: "[[ab4,db5]@5 ~ [gb4,db5] c5 [gb4,db5] ~@5 [ab4,c5]@5 ~ [bb4,db5]@4 ab4@3 ~@3 [eb4,gb4]@2]/2", // Db5 Gb5 Ab Bbm Ebm
  F: "[~ [gb4,bb4]@2 ~@3 [b3,eb4]@2 ~ [eb4,gb4]@2 ~ ab4@8 [ab4,c5]@4 [gb4,bb4]@4 [f4,ab4]@4, [f4,ab4]@2 ~@6 [db4,f4]@2 ~@2 db5@5 ~@15]/2", // Gb B Ebm Ab Gb Fm Db
  G: "[eb4,gb4]@4 ~@4 [ab4,db5]@5 ~ [gb4,db5] c5", H: "[gb4,db5] ~@5 [ab4,c5]@5 ~ [bb4,db5]@4",
  I: "ab4@3 ~@3 [eb4,gb4]@2 ~ [gb4,bb4]@2 ~@3 [b3,eb4]@2, ~@4 [f4,ab4] ~@3", // Ebm Gb B Fm
  J: "~ [eb4,gb4]@2 ~ [f4,ab4]@4 [f4,ab4]@4 [eb4,bb4]@4, [db4,f4] ~@7", // Ebm Fm Eb5 Db
  K: "[eb4,bb4]@4 [bb3,eb4]!4 ~ db4 f4 ab4 db5 ~ ab4 ~", L: "~ db4 gb4 bb4 db5 ~ bb4 ~@2 db4 f4 ab4 db5 ~ ab4 ~",
  M: "~ b3 eb4 gb4 b4 gb4 ~ eb4 ~ db4 f4 ab4 db5 ~ ab4 ~", N: "~ db4 gb4 bb4 db5 ~ bb4 ~@5 [ab4,db5]@4",
  O: "~@2 [gb4,db5] c5 [gb4,db5] ~@5 [ab4,c5]@5 ~", // Gb5 Ab
  P: "[bb4,db5]@4 ab4@3 ~@3 [eb4,gb4]@2 ~ [gb4,bb4]@2 ~, ~@6 [f4,ab4] ~", // Bbm Ebm Gb Fm
  Q: "~@2 [b3,eb4]@2 ~ [eb4,gb4]@2 ~ ab4@8, ~@4 [db4,f4]@2 ~@2 db5@5 ~@3", R: "[ab4,c5] [gb4,bb4] [f4,ab4] [eb4,gb4]",
  S: "~@4 [ab4,db5]@5 ~ [gb4,db5] c5 [gb4,db5] ~@3", T: "~@2 [ab4,c5]@5 ~ [bb4,db5]@4 ab4@3 ~",
  U: "~@2 [eb4,gb4]@2 ~ [gb4,bb4]@2 ~@3 [b3,eb4]@2 ~ [eb4,gb4]@2 ~, ~@2 [f4,ab4] ~@3 [db4,f4] ~", // Ebm Gb B Ebm Fm Db
  V: "[f4,ab4]!2 [eb4,bb4]!2", W: "[bb3,eb4]!4 ~ db4 f4 ab4 db5 ~ ab4 ~@2 db4 gb4 bb4",
  X: "db5 ~ bb4 ~@2 db4 f4 ab4 db5 ~ ab4 ~@2 b3 eb4 gb4", Y: "b4 ~ gb4 ~@2 db4 f4 ab4 db5 ~ ab4 ~@2 db4 gb4 bb4",
  Z: "db5 ~ bb4 ~@13", AA: "~@4 [bb3,eb4,bb4]@4 [bb3,bb4]@4 eb4!4, ~@8 eb4@3 ~@5",
  AB: "~ db4 f4 ab4 db5 ~ ab4 ~@2 db4 gb4 bb4 db5 ~ bb4 ~", AC: "~ db4 f4 ab4 db5 ~ ab4 ~@2 b3 eb4 gb4 b4 gb4 ~ eb4",
  AD: "~ db4 f4 ab4 db5 ~ ab4 ~@2 db4 ~@6",
})).s("gm_electric_guitar_jazz").gain(0.51).pan(0.8)

// other · electric guitar jazz · "GUITAR" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@58
  [~@10 gb4 bb4 db5 ~ bb4 ~]
  [~ db4 f4 ab4 db5 ~ ab4 ~@2 b3 eb4 gb4 b4 gb4 ~ eb4]
  [~ db4 f4 ab4 db5 ~ ab4 ~@2 db4 gb4 bb4 db5 ~ bb4 ~]
  [~ db4 f4 ab4 db5 ~ ab4 ~@2 b3 eb4 gb4 ~@4]
>`).s("gm_electric_guitar_jazz").gain(0.26).pan(0.8)

// bass · electric bass pick · "BASS"
const bass = note(`<
  A B C B C B C B D@3 E F G H I J K L K L K L K M N O P Q R S T U V W X W X W Y Z AA Z AB AC AD AE AF AE AF AE AF AE AF
  AE AF AE AF AE AF AE AG
>`.pickRestart({
  A: "~@3 db2", B: "~@2 db2 ~ gb1@5 ~ gb1 ~ bb1@4", C: "~@2 bb1 ~ b1@4 b1!2 ~ c2 db2@4",
  D: "[~@2 bb1 ~ eb2@6 eb2@2 ab1@6 ab1@2 db2@6 db2@2 gb1@6 gb1@2 b1@6 b1@2 db2@4]/3", E: "~@4 c2@3 ~ bb1@3 ~ ab1@3 ~",
  F: "gb1@3 ~ bb1@5 ~ bb1 ~ eb2@4", G: "~@2 eb2 ~ ab1@5 ~ ab1 ~ db2@4", H: "~@2 db2 ~ gb1@5 ~ gb1 ~ b1@4",
  I: "~@2 b1 ~ db2@3 ~ db2@3 ~ eb2@3 ~", J: "eb2@3 ~ eb2@3 ~ db2@5 ~ db2 ~", K: "gb1@5 ~ gb1 ~ bb1@5 ~ bb1 ~",
  L: "b1@4 b1!2 ~ c2 db2@5 ~ db2 ~", M: "eb2@3 eb2 ab1@3 ab1", N: "db2@3 db2 gb1@3 gb1", O: "b1@6 b1@2 db2@5 ~@3",
  P: "c2@3 ~ bb1@3 ~ ab1@3 ~ gb1@3 ~", Q: "bb1@5 ~ bb1 ~ eb2@5 ~ eb2 ~", R: "ab1@5 ~ ab1 ~ db2@5 ~ db2 ~",
  S: "gb1@5 ~ gb1 ~ b1@5 ~ b1 ~", T: "db2@3 ~ db2@3 ~ eb2@3 ~ eb2@3 ~", U: "eb2!4 db2@5 ~ db2 ~ gb1@4",
  V: "gb1 ~ gb1 ~ bb1@5 ~ bb1 ~ b1@4", W: "b1!2 ~ c2 db2@5 ~ db2 ~ gb1@4", X: "~@2 gb1 ~ bb1@5 ~ bb1 ~ b1@4",
  Y: "gb1 ~ gb1 ~ ab2@2 ab2@2 ab2@2 ab2@2 ab2@2 ab2@2", Z: "ab2@2 ab2@2 f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~",
  AA: "f2 ~ f2 ~ ab2@2 ab2@2 ab2@2 ab2@2 ab2@2 ab2@2", AB: "f2 ~ f2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 ~",
  AC: "gb2 ~ gb2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", AD: "ab2 ~ ab2 ~ eb3@3 ~ eb3@3 ~ eb3!4",
  AE: "db2@5 ~ db2 ~ gb1@5 ~ gb1 ~", AF: "bb1@5 ~ bb1 ~ b1@4 b1!2 ~ c2", AG: "bb1@5 ~ bb1 ~ b1@5 ~@3",
})).s("gm_electric_bass_pick").gain(0.46)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@58 [~@15 x] [x ~@14 x]!2 x>").gain(0.26)

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<A B@10 C D B@3 E B@10 F B@3 G H B@12 I B@12 J ~@3>".pickRestart({
  A: "~@6 x!2", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~ x ~ x!4", D: "x!5 ~ x ~ x ~ x ~ x ~ x ~", E: "x ~@3 x!4",
  F: "x ~ x ~ x ~ x ~ x!8", G: "x!7 ~", H: "~@2 x!6", I: "x ~ x ~ x ~@3 x ~@3 x!4", J: "x!5 ~@3",
})).gain(0.51)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct("<~@58 [~@5 x!3] [x!8]!2 [x!6 ~@2]>").gain(0.26)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~ A ~@10 B C ~ D ~ E ~ B F ~@7 G F ~ D ~ D ~@8 H I ~ F ~ F ~ F ~ F ~ F ~@5
// … 9 more lines

More by Steely Dan