Strudelify

Feel Like Making Love

George Benson

KeyE♭ minorTempo109 bpm
0:00/0:00
// Feel Like Making Love — George Benson
// 109 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(109/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 · synth bass 2
const bass = note(`<
  A B C B D B C B E F G H@2 I J K L M N O P Q R S T U F G H@2 I J K L M N O P Q R S T U F G H@2 I J K L M N O P Q R S V
  W@3 X Y Z AA AB AC AD AE AF AG AH AI@2 AJ AK AL AM AN AO AP AQ AR AS AT AU AN AO AP AQ AR AS AT AU AV ~@14 AW AN AO AP
  AQ AR AS AT AX AN AO AP AQ AR AS AT AX AY
>`.pickRestart({
  A: "~@3 c3", B: "c2@3 c2 ~@4 c2@3 c2 ~@4", C: "f1@3 f1 ~@4 d2@4 g2@4", D: "f2@3 f2 ~@3 f2 g2 ~ g2 ~ g2@2 ~@2",
  E: "f1 ~@2 f1 ~@3 g1@5 ~@4", F: "c2 ~@2 g2 c2 ~@2 eb2", G: "f2 ~@2 d2 f1 ~@2 g1",
  H: "[bb1@4 ~@3 bb1 ~@3 c2 bb1 ~ ab1@8 g1@3 g2 f2 ~ eb2 ~ d2 ~]/2", I: "c2 ~@2 b1 c2 ~@2 f2", J: "f1 ~@2 f2 f1 ~@2 g1",
  K: "bb1@2 ~@5 bb1 bb1@2 bb1@2 ~@4", L: "e1@2 ~@5 b1 e2@2 ~ b1 e1 ~ e1 ~", M: "eb2@3 ~@4 eb2 g2!2 bb2@2 c3@2 db3 d3",
  N: "d2@3 d2 ~ d2 d2@2 d2@2 ~@4 d2 db2", O: "c2@2 ~@5 g1 c2 f2 g2@2 bb2@2 c3 d3", P: "g2@3 g2 ~@2 g1@2 bb1@4 d2@4",
  Q: "eb2@2 ~@5 eb2 g2!2 bb2@2 c3@2 db3 d3", R: "d2@3 f3@5 d2@2 ~@6", S: "a1@3 a2 a1@2 a1@2 ab1@3 ab2 ab1@2 ab1@2",
  T: "g1@3 g2 g1 ~ g1 ~@3 d2 ~@2 db2 ~@2", U: "c2", V: "g1@3 g2 g1@2 g1@2 gb1@4 gb2@2 db2 gb1", W: "c2/3",
  X: "f2@3 d2@5 a1@3 bb1@5", Y: "db2@3 db2 eb2 ~ eb2 ~ e2 ~ e2 ~ gb2 ~ g2 ~",
  Z: "ab2@3 ab2@3 ab2 eb2 g1@3 g2 g2@2 d2 g1", AA: "gb1@3 gb1!2 ~ gb1 ~ gb1 ~ gb1 ~ b1@4",
  AB: "b1 gb2 b1@2 b1 ~ b1 ~ gb2@4 eb2@4", AC: "e2@3 e2 ~@2 e2@2 eb2@3 bb2 eb3 bb2 eb2@2",
  AD: "ab1@3 ab1 ~@2 ab1 a1 b1@3 b1 gb1 ab1 b1@2", AE: "e2@3 e2@3 e2@2 eb2@3 eb2@3 eb2@2",
  AF: "d2@2 ~ g2@3 gb2 gb2@5 ~@4", AG: "db2 ~@2 ab2 db2 ~@2 e2", AH: "gb2 ~@2 eb2 gb1 ~@2 ab1",
  AI: "[b1@4 ~@3 b1 ~@3 db2 b1 ~ a1@8 ab1@3 ab2 gb2 ~ e2 ~ eb2 ~]/2", AJ: "db2 ~@2 c2 db2 ~@2 gb2",
  AK: "gb1 ~@2 gb2 gb1 ~@2 ab1", AL: "b1@2 ~@5 b1 b1@2 b1@2 ~@4", AM: "f1@2 ~@5 c2 f2@2 ~ c2 f1 ~ f1 ~",
  AN: "e2@3 ~@4 e2 ab2!2 b2@2 db3@2 d3 eb3", AO: "eb2@3 eb2 ~ eb2 eb2@2 eb2@2 ~@4 eb2 d2",
  AP: "db2@2 ~@5 ab1 db2 gb2 ab2@2 b2@2 db3 eb3", AQ: "ab2@3 ab2 ~@2 ab1@2 b1@4 eb2@4",
  AR: "e2@2 ~@5 e2 ab2!2 b2@2 db3@2 d3 eb3", AS: "eb2@3 gb3@5 eb2@2 ~@6", AT: "bb1@3 bb2 bb1@2 bb1@2 a1@3 a2 a1@2 a1@2",
  AU: "ab1@3 ab1@3 g1 gb1 f1@4 ~ a1 bb1 b1", AV: "e1", AW: "~@9 e2 gb2@2 b1@4", AX: "ab1@3 ab1@3 g1 gb1 f1@4 f1@4",
  AY: "b1",
})).s("gm_synth_bass_2").gain(0.49).pan(0.6)

// chords · epiano2
const epiano2 = note(`<
  ~@9 A B C@2 D B E@2 F G H I J K L M N A B C@2 D B O P F G H I J K L M N A B C@2 D B E@2 F G H I J K L Q R@3 ~@9 S T
  U@2 V T W@2 X Y Z AA AB AC AD AE X Y Z AA AB AC AD AE ~@16 X Y Z AA AB AC AD AE X Y Z AA AB AC AD AE AF
>`.pickRestart({
  A: "f4@3 eb4@12 ~, [g3,c4]@15 ~", B: "[f3,bb3,d4]@15 ~", C: "[[f3,a3,d4]@13 ~ [f3,bb3,d4]@7 ~ [g3,b3,eb4]@9 ~]/2",
  D: "f4@4 eb4@11 ~, [g3,c4]@15 ~", // C5
  E: "[[f3,a3,d4]@11 ~@4 a4@8 ~ bb4@3 c5@3 d5@2, ~@12 a3@11 ~@9, ~@13 d4@10 ~@9, ~@14 f4@9 ~@9]/2", // Dm
  F: "g4@10 f5@5 ~, [bb4,d5]@15 ~", G: "[f4,bb4,d5]@15 ~", H: "[bb4,c5,eb5]@15 ~", I: "[g4,bb4,d5]@2 eb5 f5",
  J: "[bb4,d5,f5]@15 ~", K: "[bb4,d5]@15 ~", L: "[a4,c5]@7 ~ [ab4,c5]@7 ~", M: "[g4,bb4]@9 ~ [e4,g4]@2 ~ [db4,f4]@3",
  N: "[c4,e4]", O: "[f3,a3,d4]@15 ~", P: "[d4,gb4,bb4]@15 ~", Q: "[g4,bb4] [gb4,bb4]",
  R: "[~ c7 [bb6,c7,d7], [f3,c4]@3 [d5,e5,f5] b6@8, ~@6 f4@7 [g5,a5,b5]@32 ~@3, ~@5 g4@2 [c6,d6,e6]@16 ~, ~@11 [a4,b4,c5]@4 [f6,g6,a6]@32 ~]/3", // Bb F5 Dm G C Am F
  S: "gb4@3 e4@12 ~, [ab3,db4]@15 ~", T: "[gb3,b3,eb4]@15 ~",
  U: "[[gb3,bb3,eb4]@13 ~ [gb3,b3,eb4]@7 ~ [ab3,c4,e4]@9 ~]/2", V: "gb4@4 e4@11 ~, [ab3,db4]@15 ~",
  W: "[[gb3,bb3,eb4]@11 ~@4 bb4@8 ~ b4@3 db5@3 eb5@2, ~@12 bb3@11 ~@9, ~@13 eb4@10 ~@9, ~@14 gb4@9 ~@9]/2", // Ebm
  X: "ab4@10 gb5@5 ~, [b4,eb5]@15 ~", Y: "[gb4,b4,eb5]@15 ~", Z: "[b4,db5,e5]@15 ~", AA: "[ab4,b4,eb5]@2 e5 gb5",
  AB: "[b4,eb5,gb5]@15 ~", AC: "[b4,eb5]@15 ~", AD: "[bb4,db5]@7 ~ [a4,db5]@7 ~", AE: "[ab4,b4] [f4,ab4]",
  AF: "[gb4,bb4,eb5]", // Ebm
})).s("gm_epiano2").gain(0.35).pan(0.3)

// chords · synth brass 1
const synth_brass_1 = note("<~ A B C D A B E F ~@119>".pickRestart({
  A: "[eb4,g4,d5]@3 [eb4,g4,c5] ~@4 [eb4,g4,bb4]@3 [eb4,g4,c5] ~@4", // Ebmaj7 Cm Eb Cm
  B: "[eb4,g4,bb4]@3 [f4,a4,c5] ~@4 [d4,f4,bb4]@4 [f4,a4,c5]@4", // Eb F Bb F
  C: "[eb4,g4,bb4,d5]@3 [eb4,g4,c5] ~@4 [eb4,g4,bb4]@3 [eb4,g4,c5] ~@4", // Ebmaj7 Cm Eb Cm
  D: "[eb4,g4,bb4]@3 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5]@2 ~@2", // Eb
  E: "[g4,bb4,d5]@3 [eb4,g4,c5] ~@4 [eb4,g4,bb4]@3 [eb4,g4,c5] ~@4", // Gm Cm Eb Cm
  F: "[eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@3 [f4,a4,c5]@2 ~@7", // Eb F
})).s("gm_synth_brass_1").gain(0.4)

// chords · pad new age
const pad_new_age = note("<~@15 A B ~@15 A B ~@43 C D ~@49>".pickRestart({
  A: "~@2 [d4,f4] [f4,a4]", B: "[gb4,bb4]@2 ~ [d4,gb4]@2 [bb3,d4]@2 ~ [gb3,bb3]@8", C: "~@2 [eb4,gb4] [gb4,bb4]",
  D: "[g4,b4]@2 ~ [eb4,g4]@2 [b3,eb4]@2 ~ [g3,b3]@8", // G Eb B G
})).s("gm_pad_new_age").gain(0.35).pan(0.7)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B C D A B E F G H I@2 G J K L M N O P M N Q R S T J U@2 T J V L M N O P M N Q R S W X@2 Y Z AA@2 AB M N O P M N Q
  AC AD AE AD AF ~@8 AG AH AI@2 AJ AK AL AM AN AO AP AQ AN AO AR AS AN AO AP AQ AN AO AR AS ~@16 AN AO AP AQ AN AO AR AT
  AN AO AP AQ AN AO AR AT AU
>`.pickRestart({
  A: "[eb4,g4,d5]@3 [eb4,g4,c5] ~@4 [eb4,g4,bb4]@3 [eb4,g4,c5] ~@4", // Ebmaj7 Cm Eb Cm
  B: "[eb4,g4,bb4]@3 [f4,a4,c5] ~@4 [d4,f4,bb4]@4 [f4,a4,c5]@4", // Eb F Bb F
  C: "[eb4,g4,bb4,d5]@3 [eb4,g4,c5] ~@4 [eb4,g4,bb4]@3 [eb4,g4,c5] ~@4", // Ebmaj7 Cm Eb Cm
  D: "[eb4,g4,bb4]@3 [eb4,g4,bb4] ~@3 [eb4,g4,bb4] [g4,bb4,eb5] ~ [g4,bb4,eb5] ~ [g4,bb4,eb5]@2 ~@2", // Eb
  E: "[g4,bb4,d5]@3 [eb4,g4,c5] ~@4 [eb4,g4,bb4]@3 [eb4,g4,c5] ~@4", // Gm Cm Eb Cm
  F: "[eb4,g4,bb4] ~@2 [eb4,g4,bb4] ~@3 [f4,a4,c5]@2 ~@7", G: "~@5 [eb4,g4,c5]!4 ~@7", H: "~@5 [d4,f4,bb4]!3 ~@8",
  I: "[~@5 [d4,f4,a4]!2 [d4,a4] [d4,f4,a4] ~@5 [f4,bb4,d5]@6 ~@2 eb5@4 f5@2 eb5@4, ~@11 [g4,b4]@5]/2", // Dm D5 Dm Bb G
  J: "~@5 [d4,f4,bb4]!4 ~@7", K: "~@4 [d4,f4,a4] [f4,a4] [d4,f4,a4]!4 ~@6", L: "~@5 [gb4,bb4]!4 ~@7",
  M: "~@2 [d4,g4,bb4]!2 ~@2 [d4,g4,bb4]!2 ~@2 [d4,g4,bb4]!2 ~@2 [d4,g4,bb4]!2", // Gm
  N: "~@2 [d4,f4,bb4]!2 ~@2 [d4,f4,bb4]!2 ~@2 [d4,f4,bb4]!2 ~@2 [d4,f4,bb4]!2", // Bb
  O: "~@2 [eb4,g4,bb4]!2 ~@2 [eb4,g4,bb4]!2 ~@2 [eb4,g4,bb4]!2 ~@2 [eb4,g4,bb4]!2", // Eb
  P: "~@2 [d4,g4,bb4]!2 ~@2 [d4,g4,bb4]!2 ~@2 [d4,f4,bb4]!2 ~@2 [d4,f4,bb4]!2", // Gm Bb
  Q: "~@2 [e4,a4]!2 ~@2 [e4,a4]!2 ~@2 [eb4,ab4]!2 ~@2 [eb4,ab4]!2", // A5 Ab5
  R: "~@2 [d4,g4]!2 ~@2 [d4,g4] ~@3 [e4,g4] ~@2 [db4,f4] ~@2", S: "[c4,e4]@13 ~@3", T: "~@5 [eb4,g4,c5]!5 ~@6",
  U: "[~@5 [d4,f4,a4]!4 ~@5 [f4,bb4,d5]@6 ~@2 eb5@4 f5@2 eb5@4, ~@11 [g4,b4]@5]/2", V: "~@5 [f4,a4] [d4,f4,a4]!4 ~@6",
  W: "~@4 bb4@2 c5@2 d5@2 g4 bb4@5", X: "[~@5 bb4@2 c5 d5@2 g4 bb4 ~ c5@2 d5@13 ~ f5 g5 f5]/2",
  Y: "ab5 f5 eb5 d5 f5 d5 c5 bb4 eb5 b4 bb4 ab4 d5@2 eb5 f5", Z: "d5@2 ~@2 bb4@2 c5 d5 ~ d5 bb4@6",
  AA: "[~@4 bb4@2 c5 d5 ~ c5@2 bb4 ~ f5@2 d5@10 ~ bb4 c5 d5 eb5 d5 db5]/2",
  AB: "c5 b4 bb4 a4 ab4 g4 gb4 f4 c4 b3 bb3 a3 ab3 g3 f3 e3",
  AC: "~@2 [d4,g4]!2 ~@2 [d4,g4]!2 ~@2 [db4,gb4]!2 ~@2 [db4,gb4]!2", AD: "~@3 f4 ~ f4 g4@2 f4@2 d4 f4 ~@4",
  AE: "f4@2 f4@2 f4 g4 d4 f4 ~@3 c4 d4 f4 ~@2", AF: "[eb4,g4,bb4]@3 [f4,a4,c5]@5 [f4,a4,c5]@3 [eb4,ab4,c5]@5",
  AG: "~@5 [e4,ab4,db5]!4 ~@7", AH: "~@6 [eb4,gb4,b4]!2 ~@8",
  AI: "[~@5 [eb4,gb4,bb4]!4 ~@5 [gb4,b4,eb5]@6 ~@2 e5@4 gb5@2 e5@4, ~@11 [ab4,c5]@5]/2", AJ: "~@5 [e4,ab4,db5]!5 ~@6",
  AK: "~@5 [eb4,gb4,b4]!5 ~@6", AL: "~@5 [gb4,bb4] [eb4,gb4,bb4]!3 ~@7", AM: "~@5 [g4,b4]!4 ~@7",
  AN: "~@2 [eb4,ab4,b4]!2 ~@2 [eb4,ab4,b4]!2 ~@2 [eb4,ab4,b4]!2 ~@2 [eb4,ab4,b4]!2", // Abm
  AO: "~@2 [eb4,gb4,b4]!2 ~@2 [eb4,gb4,b4]!2 ~@2 [eb4,gb4,b4]!2 ~@2 [eb4,gb4,b4]!2", // B
  AP: "~@2 [e4,ab4,b4]!2 ~@2 [e4,ab4,b4]!2 ~@2 [e4,ab4,b4]!2 ~@2 [e4,ab4,b4]!2", // E
  AQ: "~@2 [eb4,ab4,b4]!2 ~@2 [eb4,ab4,b4]!2 ~@2 [eb4,gb4,b4]!2 ~@2 [eb4,gb4,b4]!2", // Abm B
  AR: "~@2 [f4,bb4]!2 ~@2 [f4,bb4]!2 ~@2 [e4,a4]!2 ~@2 [e4,a4]!2", // Bb5 A5
  AS: "~@2 [eb4,ab4]!2 ~@2 [eb4,ab4]!2 ~@2 [d4,g4]!2 ~@2 [d4,g4]!2", // Ab5 G5
  AT: "~@2 [eb4,ab4]!2 ~@2 [eb4,ab4]!2 ~@2 [d4,ab4]!2 ~@2 [d4,ab4]!2", AU: "[eb4,gb4,bb4]",
})).s("gm_electric_guitar_clean").gain(0.3)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@9 A B C ~ A D ~ E ~@9 F D G ~ F D H E ~@37 I J K ~ L M K N ~@49>".pickRestart({
  A: "~@4 [eb4,g4,c5] ~@4 [eb4,g4,c5] ~@6", B: "~@4 [d4,f4,bb4] ~@3 [d4,f4,bb4]!2 ~@6",
  C: "~@4 [d4,f4,a4] ~@2 f4 ~ [d4,f4,a4] ~@6", D: "~@4 [d4,f4,bb4] ~@4 [d4,f4,bb4] ~@6",
  E: "~@4 [gb4,bb4] ~@4 [gb4,bb4] ~@6", F: "~@4 [eb4,g4,c5] ~@11", G: "~@4 [d4,f4,a4] ~@4 [d4,f4,a4] ~@6",
  H: "~@4 [d4,f4,a4] ~@11", I: "~@4 [e4,ab4,db5] ~@4 [e4,ab4,db5] ~@6", J: "~@4 [eb4,gb4,b4]!2 ~@2 [eb4,gb4,b4]!2 ~@6",
  K: "~@4 [eb4,gb4,bb4] ~@4 [eb4,gb4,bb4] ~@6", L: "~@4 [e4,ab4,db5] ~@11", M: "~@4 [eb4,gb4,b4] ~@11",
  N: "~@4 [g4,b4] ~@4 [g4,b4] ~@6", // G
})).s("gm_electric_guitar_clean").gain(0.15)

// other · trumpet
const trumpet = note(`<
  ~@5 A B A C ~@11 D E F ~@14 D E F ~@14 D E F ~@5 G H ~@17 I@2 J K ~@4 I@2 J K ~@20 I@2 J K ~@4 I@2 J K ~@3
>`.pickRestart({
  A: "~@5 f4@3 bb4@2 c5 ~ d5 ~ g5 ~", B: "f5@2 ~@2 c5@3 ~ bb4@4 c5@4", C: "g5 ~@2 g5 ~@3 a5@3 ~@6",
  D: "~@5 g4@2 ~ c5@2 ~ d5 ~@2 f5 ~", E: "~@11 g5 ~@2 c5@2", F: "bb4@2 c5@2 d5 ~@2 bb4 ~@8",
  G: "bb4@3 c5@3 ~@2 c5@3 eb5@3 ~@2", H: "ab5 ~@3", I: "~@5 ab4@2 ~ db5@2 ~ eb5 ~@2 gb5 ~", J: "~@11 ab5 ~@2 db5@2",
  K: "b4@2 db5@2 eb5 ~@2 b4 ~@8",
})).s("gm_trumpet").gain(0.71)

// other · synth brass 2
const synth_brass_2 = note("<~@63 A B C D E F G H ~@57>".pickRestart({
  A: "~@3 ab5", B: "db5 eb5 db5@4 db5 eb5 b4@5 ~@3", C: "~@3 eb5 e5@2 db6@2 c6 ab5 eb5@3 db5 ~ eb5",
  D: "e5 gb5 e5@4 b5 bb5 [ab5,b5]@2 [gb5,bb5] [e5,ab5] [eb5,gb5]@2 [e5,db6] [gb5,b5]", // Abm Gb E Ebm Dbm B5
  E: "[b4,eb5]@3 [bb4,db5] ~ [b4,eb5] [db5,e5]@2 gb5@4 ab5 [bb5,db6] eb6 [f6,gb6]", // B Bbm B Dbm Bbm Gbmaj7
  F: "a6@3 b6@3 db7@2 db7@3 b6 a6 [gb6,ab6] e6 [db6,d6]", // Gbsus2 Dmaj7
  G: "ab6 e6 b5 bb6 gb6 db6 b6 gb6 b6 gb6 eb6 db7 bb6 gb6 eb7 b6", H: "e7 db7 bb6 gb7 eb7 bb6 g7!2 ~@8",
})).s("gm_synth_brass_2").gain(0.54)

// chords · percussive organ
const percussive_organ = note("<~@95 A B C D E F G H A B C D E F G H ~@17>".pickRestart({
  A: "[e4,ab4,eb5]", B: "db5 b4, [eb4,gb4]", C: "[db4,e4,ab4,b4]",
  D: "[b3,gb4,b4,eb5]@2 [ab3,gb4,bb4,db5] [eb4,gb4,b4]", E: "[e4,gb4,ab4,b4,eb5]", F: "[eb4,b4,gb5] [eb4,g4,db5,gb5]",
  G: "[bb3,ab4,eb5] [a3,g4,b4,eb5]", H: "[ab3,gb4,b4,eb5] [f3,eb4,a4,b4]",
})).s("gm_percussive_organ").gain(0.3)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C B A B C D A C B E C@3 F C@3 G A C@3 H A C B E A C@2 F A C@2 G A C@3 ~ A C B I A C@2 A@2 C@2 G A C@2 J K L@2 ~
  A B C M A C ~@2 A B@2 I A C@2 A@2 C B J A B C B F B C J A C A G C@3 B@2 C@2 N B C@2 B C@2 A O F C@2 G A B C M F C@2 G
  A B C M ~
>`.pickRestart({
  A: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", B: "x ~ x!3 ~ x!3 ~ x!3 ~@3", C: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", D: "x ~ x!3 ~ x ~@9",
  E: "x ~ x!3 ~@3 x ~ x!3 ~ x!2", F: "~@2 x!3 ~ x!3 ~ x!3 ~@3", G: "x ~ x!3 ~ x!3 ~ x!2 ~@4",
  H: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x ~@3", I: "x ~ x!3 ~@3 x ~ x!3 ~@3", J: "~@2 x!3 ~ x!3 ~ x!2 ~@4", K: "~@2 x!14",
  L: "x!16", M: "x ~ x!3 ~ x!2 ~@8", N: "x ~ x!3 ~ x!3 ~@3 x ~ x!2", O: "x ~ x!3 ~ x!3 ~@7",
})).gain(0.25)

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

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@6 A ~@4 A ~@4 A ~@3 A ~@2 A@2 ~@3 A ~@3 A@2 ~@3 A ~@2 A@2 ~@3 A ~@2 A@2 ~@2 B A ~@2 C A ~ D E A ~@3
  A ~@2 A@2 ~@2 A@2 ~@3 A ~@2 A@2 ~ A ~@15 A ~ A ~@2 F A ~@2 G A ~@2 F A ~@2 G ~
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4 x ~@2 x ~@4", C: "~@2 x!2", D: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", E: "x ~@2 x ~@12",
  F: "~@3 x", G: "~ x",
})).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<~@17 A@8 ~@9 A@8 ~@9 A@8 ~@4 A@7 B ~@8 A@48 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.4)

// drums · cowbell
// … 33 more lines

More by George Benson