Strudelify
Step By Step cover art

1990 · Step By Step

Step By Step

New Kids on the Block

KeyE♭ minorTempo120 bpm
0:00/0:00
// Step By Step — New Kids on the Block
// 120 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "SYN BASS" synth bass 2 (copy of ch 2 "BASS" slap bass 2)
// note: Full arrangement: all 139 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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, A@4 for four bars: edit a riff to change every repeat.

// bass · slap bass 2 · "BASS"
const bass = note(`<
  ~@8 A B A B A B A B A B A B A B A C D E D E D E D E F E D E D E D G H I A B A B A B A B D E D E D E D E F E D E D E D
  G H I A B A B A B A B J K J K J L J M N A B A B A B A B A B ~@3 O D E D E D E D E F E D E D E D G H I A B A B A B A B
  A B A B A B A B A B A B P ~
>`.pickRestart({
  A: "eb2 ~ eb2 ~ eb2 ~ bb1 ~ bb1 ~ bb1 ~ bb1!2 db2 bb1", B: "eb2 ~ db2 ~ bb1 ~ ab1 ~ ab1 ~ ab1 ~ bb1 ~ bb1 ~",
  C: "eb2 ~ db2@2 bb1 ~ ab1 ~ ab1 ~ ab1 ~ bb1 ~ bb1 ~", D: "eb1 ~ eb1 ~ eb1 ~ eb1 ~ eb1 ~ eb1 ~ eb1 ~ eb1 ~",
  E: "eb1 ~ eb1 ~ bb1 ~ ab1 ~ ab1 ~ ab1 ~ bb1 ~ bb1 ~", F: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~",
  G: "ab1 ~ ab1 ~ ab1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~", H: "bb1 ~ bb1 ~ bb1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", I: "b1@3 ~",
  J: "ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1 ~", K: "ab1 ~ ab1 ~ ab1 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~",
  L: "ab1 ~ ab1 ~ ab1 ~ db2@3 ~ db2 ~ db2 ~ db2 ~", M: "ab1@2 ~ bb1@4 ~", N: "bb1@4 ~@2 b1@7 ~@3",
  O: "~@6 ab1@2 ~@2 ab1 ~ bb1@3 ~", P: "eb2 ~ eb2 ~@13",
})).s("gm_slap_bass_2").gain(0.42).pan(0.2)

// chords · epiano2 · "EP"
const epiano2 = note(`<
  ~@7 A ~@3 B C D C D C D C D C D C D E ~@7 F@2 G@2 H@2 I J K@2 C D C D C D C D E ~@7 F@2 L@2 H@2 I J K@2 C D C D C D C
  D M N M N M O P Q R ~ S T U V W X Y X Z AA ~@2 AB E ~@7 F@2 G@2 H@2 I J K@2 AC AD AC AD AC AD AC AD AC AD AC AD AC AD
  AC AD AC AD AC AE ~@2
>`.pickRestart({
  A: "~@8 [b2,gb3,b3,eb4]@3 ~ [db3,ab3,db4]@3 ~", B: "~@8 [eb3,gb3,b3]@3 ~ [f3,ab3,db4]@3 ~",
  C: "[gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~", // Ebm Db
  D: "[gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [f3,ab3,db4] ~ [f3,ab3,db4] ~", // Ebm B Db
  E: "[eb3,gb3,bb3,eb4]@3 ~@13", F: "[[gb3,bb3,eb4]@21 ~ [b2,gb3,b3]@6 [db3,ab3,db4]@4, eb3@19 ~@3 a3 ~@5 f3@2 ~@2]/2",
  G: "[[gb3,bb3,eb4]@21 ~@3 [b2,gb3,b3]@4 [db3,f3,ab3,db4]@3 ~, eb3@19 ~@5 eb3@2 ~@6]/2", // Ebm B5 Db
  H: "[[eb3,gb3,bb3,eb4]@19 ~@3 [b2,eb3,b3]@6 [db3,f3,ab3,db4]@3 ~, ~@11 gb3@2 ~@3]/2", I: "[bb3,eb4], [eb3,gb3]@7 ~",
  J: "[ab2,ab3,eb4]@5 ~ [bb2,bb3,db4,f4]@9 ~, b3@3 ~@13", K: "[[bb2,bb3,db4,f4]@6 [b3,eb4,gb4]@23 ~@3, ~@6 b2@25 ~]/2",
  L: "[[gb3,bb3,eb4]@21 ~ [b2,eb3,gb3,b3]@6 [db3,f3,ab3,db4]@3 ~, eb3@19 ~@13]/2", // Ebm B Db
  M: "[ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~", // Abm
  N: "[ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~", // Abm Bbm Db
  O: "[ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [bb3,db4,f4] ~ [ab3,b3,f4] ~ [ab3,b3,f4] ~", // Abm Bbm Fdim
  P: "[ab3,db4,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~ [ab3,b3,eb4] ~", // Absus4 Abm
  Q: "[b3,eb4]@5 ~ [bb2,bb3]@9 ~", R: "[bb2,f4]@3 [b2,eb4]@5", S: "~@12 [db3,db4]@3 ~", T: "[eb3,gb4]@3 ~@13",
  U: "~@8 f3@6 eb3 ~, ~ [db3,ab3,db4,f4,ab4]", V: "[eb3,gb3,bb3,eb4,gb4,bb4]", W: "~@3 [db3,ab3,db4,f4,ab4]",
  X: "[eb3,gb3,bb3,eb4,gb4,bb4]@3 ~@13", Y: "~@12 [db3,f3,ab3,db4,f4,ab4]@3 ~",
  Z: "~@8 [db3,f3,db4,f4,ab4]@3 ~ [db3,f3,db4,f4,ab4]@3 ~", AA: "[eb3,gb3,eb4,gb4,bb4]@3 ~",
  AB: "~@6 [ab3,b3,eb4]@5 ~ [bb3,db4,f4]@3 ~", // Abm Bbm
  AC: "[bb3,eb4,gb4] ~ [bb3,eb4,gb4] ~ [bb3,eb4,gb4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~", // Ebm Db
  AD: "[bb3,eb4,gb4] ~ [bb3,eb4,gb4] ~ [bb3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~", // Ebm B Db
  AE: "[bb3,eb4,gb4] ~ [bb3,eb4,gb4] ~@13", // Ebm
})).s("gm_epiano2").gain(0.19).pan(0.2)

// other · string ensemble 1 · "ST1 ."
const string_ensemble_1 = note(`<
  ~@6 A@2 B ~ C D E@2 F@2 G H I J G K I J ~@4 B L M N ~@3 O P O Q R S T G H I J G K I J ~@4 B L M N ~@3 O P O Q R S T U
  V I J U K I J W X W Y Z AA AB AC AD ~ AE AF AG AH AI AJ AI AK AL AM AN ~ AO ~@4 K L M N ~@3 O P O Q R S T AP B I J AP
  B I J AP B I AQ AP B I J AP B I J AF ~
>`.pickRestart({
  A: "[~@2 bb5 ~ db6 eb6 ~ db6 eb6@14 ~@2 [gb5,b5]@3 ~ [ab5,db6]@3 ~]/2", B: "eb6 ~@7",
  C: "~@2 bb4 ~ db5 eb5 ~ db5 eb5@8", D: "db5 eb5!3 gb5 eb5!3 db5 eb5!4 f5 gb5 ab5", E: "[eb6@15 ~]/2",
  F: "[~@2 bb5 ~ db6 eb6 ~ db6 eb6@14 f5 gb5 ab5 ~ gb5 ~ f5@2 ~@2]/2", G: "eb5@2 ~@10 bb4 db5 eb5 gb5", H: "eb5 ~@15",
  I: "~@4 bb4@2 db5@2 db5@4 bb4@2 db5 ~", J: "db5@4 b4@2 bb4@2 ab4@2 gb4@2 f4@3 ~", K: "eb5 ~@7", L: "~@12 eb4!3 gb4",
  M: "eb4 ~@15", N: "~@7 eb5", O: "~@6 [gb4,b4]@5 ~ [ab4,db5]@3 ~",
  P: "[bb4,eb5] ~ [bb4,eb5] ~ [bb4,eb5] ~ [bb4,eb5] ~@9", // Eb5
  Q: "[bb4,eb5] ~ [bb4,eb5] ~ [bb4,eb5] ~ [bb4,eb5] ~@5 eb5 db5 b4 bb4", R: "b4@6 db5@9 ~", S: "db5@5 ~ eb5@5 ~ gb5@4",
  T: "bb6@4 ab6@4 gb6@4 eb6 f6 gb6 bb6", U: "eb5@2 ~@10 bb5 db6 eb6 gb6", V: "eb6 ~@15", W: "eb5@15 ~",
  X: "eb5@5 ~ db5@5 ~ f5@4", Y: "eb5@5 ~ db5@5 ~ f5@2 db5 ~", Z: "[db5,eb5] ~@5 db6 eb6 ~@8",
  AA: "[db5,eb5] ~@5 db5@2 ~@2 db5 ~ eb5@3 ~", AB: "db6 eb6 ~@4 db6 eb6 ~@8", AC: "eb5@5 ~ db5@9 ~",
  AD: "db5@5 ~ eb5@5 ~ eb6 f6 gb6 ab6", AE: "~@12 [ab4,db5]@3 ~", AF: "[bb4,eb5] ~@7", AG: "~@3 [f4,ab4,db5]",
  AH: "[gb4,bb4,eb5]@5 ~@11", AI: "~@12 [f4,ab4,db5]@3 ~", AJ: "[gb4,bb4,eb5] ~@15", AK: "[gb4,bb4,eb5] ~@7",
  AL: "~@8 [f4,ab4,db5]@3 ~ [f4,ab4,db5]@3 ~", AM: "[gb4,bb4,eb5]@7 ~@9", AN: "db5 eb5!3 gb5 eb5 db5 eb5 ~@8",
  AO: "~@6 [eb4,ab4]@5 ~ [e4,f4] ~@3, ~@12 bb4@3 ~", AP: "eb5@2 ~@10 bb5 db6 eb6 gb6, bb4 ~@15",
  AQ: "db5@3 ~ b4@2 bb4@2 ab4@2 gb4@2 f4@2 ~@2",
})).s("gm_string_ensemble_1").gain(0.36).pan(0.7)

// chords · string ensemble 1 · "ST2"
const string_ensemble_1_2 = note(`<
  ~@16 A B A B A C D E F G H B I B I C J B J C J C J K L@2 A B A B A C D E F G H B I B I C J B J B J C J K L@2 A B A B A
  C D E M@2 N O P Q ~ R S I T I U V@4 W@2 X@2 ~ Y F G H B I B I C J B J C J C J K L@2 Z AA AB B I AA AC B A AA AD@2 Z AA
  AB B I AA AE ~@3
>`.pickRestart({
  A: "[eb4,gb4,bb4]@5 ~ [db4,f4,ab4]@10", B: "[eb4,gb4,bb4]@3 [b3,eb4,gb4]@3 [db4,f4,ab4]@2",
  C: "[eb4,gb4,bb4]@7 ~ [b3,eb4,gb4]@4 [db4,f4,ab4]@4", D: "[eb4,gb4,bb4]@5 ~ [db4,f4,ab4]@9 ~",
  E: "[eb4,gb4,bb4]@7 ~ [b3,eb4,gb4]@4 [db4,f4,ab4]@3 ~", F: "[eb4,gb4,bb4]@6 [f4,ab4]@9 ~, ~@6 db4@7 ~@3",
  G: "[eb4,bb4]@3 [b3,eb4]@3 [db4,f4,ab4]@2, gb4@3 ~", H: "[ab4,bb4] ~ bb4@6 [db4,f4,ab4]@7 ~, [eb4,gb4] ~",
  I: "[eb4,gb4,bb4]@8 [db4,f4,ab4]@7 ~", J: "[eb4,gb4,bb4]@15 ~", K: "[ab3,eb4,ab4]@6 [bb3,db4,f4,bb4]@9 ~",
  L: "[[bb3,db4,f4,bb4]@6 [b3,eb4,gb4,b4]@25 ~]/2", M: "[[eb4,ab4,b4]@22 [db4,f4,bb4]@5 ~ [db4,f4,ab4]@4]/2",
  N: "[b3,eb4,ab4]", O: "[eb4,ab4]@3 [db4,f4,bb4]@3 [db4,f4,ab4]@2, b3 ~@3", P: "[eb4,ab4,b4]@15 ~",
  Q: "[eb4,ab4,b4]@6 [db4,f4,bb4]@5 ~ [db4,f4,ab4]@4", R: "b3@4 ~@2 bb3@9 ~", S: "bb3@6 b3@9 ~",
  T: "[eb4,gb4,bb4]@2 [b3,eb4,gb4] [db4,f4,ab4], f4 ~@7 db4 ~@7", U: "[eb4,gb4,bb4]@8 ~ [db4,f4]@7, ~@8 ab4@7 ~",
  V: "[[eb4,gb4,bb4]@7 [db4,f4,ab4]]/2", W: "[[eb4,gb4,bb4]@23 ~ [db4,f4,ab4]@8]/2", X: "[[eb4,gb4,bb4]@21 ~@11]/2",
  Y: "~@6 [eb4,ab4,b4]@5 ~ [db4,f4,bb4]@4", Z: "[eb4,gb4,bb4]@6 [db4,f4,ab4]@9 ~, ~@6 g4 ~@9",
  AA: "[eb4,gb4,bb4]@6 ~@2 [gb5,b5]@3 ~ [db4,f4,ab4,ab5,db6]@4, ~@3 [b3,eb4,gb4]@3 ~@2", // Ebm B5 Db B
  AB: "[eb4,gb4,bb4]@7 ~ [db4,f4,ab4]@8, [bb5,eb6] ~@7", AC: "[eb4,gb4,bb4]@6 [db4,f4,ab4]@9 ~, [bb5,eb6] ~@7",
  AD: "[[eb4,gb4,bb4]@6 [db4,f4,ab4]@9 ~ [eb4,gb4,bb4]@7 ~ [eb4,gb4,b4]@3 ~ [db4,f4,ab4]@3 ~, [bb5,eb6]@27 ~@5]/2", // Ebm Db Ebm B Db Eb5
  AE: "[eb4,gb4,bb4]@3 ~@5, [bb5,eb6] ~@7", // Ebm Eb5
})).s("gm_string_ensemble_1").gain(0.15).pan(0.2)

// other · lead 2 sawtooth · "SYN"
const lead_2_sawtooth = note(`<
  ~@7 A ~@3 B ~@17 C D ~@4 E ~ E ~@17 F D ~@19 G H G I J K ~ L M ~@6 N O ~@3 P ~@7 F D ~@33
>`.pickRestart({
  A: "~@8 [b3,eb4,gb4]@4 ~ f4@2 ~, ~@12 [db4,ab4]@3 ~", B: "~@8 [b3,eb4,gb4]@3 ~ [db4,f4,ab4]@4", C: "~@12 eb5!3 gb5",
  D: "eb5 ~@15", E: "~@3 [b3,eb4,gb4]@3 [db4,f4,ab4] ~", F: "~@12 eb5 ~@2 gb5", G: "eb5@4 b5 bb5 ab5 gb5",
  H: "eb5@6 db5@5 ~ f5@4", I: "ab5@6 db5@5 ~ f5@4", J: "eb5", K: "eb5@5 ~ f5@6 f5@3 ~", L: "b4@4 ~@2 bb5@9 ~",
  M: "db5@5 ~@11", N: "~@8 eb6 [bb5,db6] a5 [gb5,ab5] bb5 [ab5,a5] gb5 [db5,eb5]",
  O: "eb5 [bb4,db5] a4 [gb4,ab4] a4 [gb4,ab4] eb4 [bb3,db4] eb4 [bb3,db4] a3 [gb3,ab3] ~@4", // Bbm Gbsus2 Bbm Gbsus2
  P: "db6 eb6!3 gb6 eb6 db6 eb6 ~@8",
})).s("gm_lead_2_sawtooth").gain(0.32).pan(0.2)

// other · lead 2 sawtooth · "SYN" · soft notes
const lead_2_sawtooth_soft = note("<~@55 A ~@21 B C B D E ~ F G ~@19 A ~@34>".pickRestart({
  A: "~@13 eb5!2 ~", B: "~@12 db5@3 ~", C: "[b4,ab5] ~", D: "[b4,ab5]", E: "[b4,ab5]@5 ~ [db5,bb5]@5 ~ [db5,ab5]@4",
  F: "eb5@5 ~@11", G: "~@6 b5@9 ~",
})).s("gm_lead_2_sawtooth").gain(0.08).pan(0.2)

// chords · music box · "BELL"
const music_box = note(`<
  ~@7 A ~@3 B C ~@2 D E F E G H I J K ~@5 L M ~ N O P Q P R S T U@2 E F E G H I J K ~@5 L M ~ N O P Q P R S T U@2 E F E
  G H I J K V ~@4 W X Y Z ~ AA AB AC AD ~@3 AE AF C ~@2 AG ~@5 L M ~ N O P Q P R S T U@2 E F AH K AI AJ AH K AK I J K E
  F AH K AI AJ AH K AL ~
>`.pickRestart({
  A: "~@5 ab3 [bb3,b3] [db4,eb4,e4] [gb4,ab4,bb4] [b4,db5,eb5,e5,gb5] [ab5,bb5,b5] ~ eb6 ~@3", // Bmaj7 Dbm Gb B Abm
  B: "~@8 [gb5,b5]@3 ~ [ab5,db6]@4", C: "[bb5,eb6]@11 ~@5", D: "eb6@2 db6 ~ b5 ~ bb5 ~ ab5 ~ gb5 ~ f5@3 ~",
  E: "[eb5,gb5]@3 [db5,f5]@5", F: "[eb5,gb5]@5 ~ [eb5,gb5]@6 [db5,f5]@3 ~, ~@3 b4@2 ~@3",
  G: "eb6@2 db6@2 b5@2 bb5@2 ab5 ~ gb5@2 f5@2 ~@2", H: "[bb4,eb5]@5 ~ [ab4,db5]@9 ~",
  I: "eb5@6 [gb4,b4]@6 [ab4,db5]@3 ~, bb4@3 ~@13", J: "[bb4,eb5]@6 [ab4,db5]@5 ~@5",
  K: "eb6@2 db6@2 b5@2 bb5@2 ab5 ~ gb5@2 f5@3 ~", L: "~@12 eb5!3 gb5", M: "eb5 ~@15", N: "[gb5,bb5,eb6]@5 ~@3",
  O: "[bb4,eb5]@6 [gb4,b4]@6 [ab4,db5]@3 ~", P: "[bb4,eb5]@15 ~", Q: "[bb4,eb5]@7 ~ [gb4,b4]@3 ~ [ab4,db5]@4",
  R: "[bb4,eb5]@5 ~ [gb4,b4]@6 [ab4,db5]@4", S: "eb5@15 ~, bb4@13 ~@3",
  T: "[ab4,eb5]@5 ~ [ab4,db5,f5]@8 ~@2, b4@3 ~@13", U: "[[bb4,db5,f5]@5 ~ [bb4,eb5,gb5]@24 ~@2, ~@6 d5 ~@25]/2",
  V: "[ab4,b4,eb5] ~@3", W: "[b4,eb5,ab5]@5 ~ [db5,f5,bb5]@6 [db5,f5,ab5]@4", X: "[b4,eb5,ab5]",
  Y: "[b4,eb5,ab5]@5 ~ [db5,f5,bb5]@9 ~", Z: "[db5,f5,bb5]@6 [eb5,gb5,b5]@9 ~", AA: "~@12 [db5,db6]@3 ~",
  AB: "[eb5,eb6] ~@7", AC: "~@4 [f5,ab5]@3 ~, ~ db6", AD: "[eb5,gb5,bb5,eb6] ~@3", AE: "[bb5,eb6] ~@15",
  AF: "~@8 [ab5,db6]@3 ~ [ab5,db6]@3 ~", AG: "~@6 [eb5,ab5]@5 ~ [f5,bb5]@3 ~", AH: "[eb5,gb5]@5 ~ [db5,f5]@4 ~@6",
  AI: "[bb4,eb5]@5 ~ db5@8 ~@2, ~@6 ab4@5 ~@5", AJ: "[bb4,eb5]@4 ~@2 [gb4,b4]@5 ~ [ab4,db5]@3 ~",
  AK: "[bb4,eb5]@5 ~ [ab4,db5]@7 ~@3", AL: "[bb4,eb5]@5 ~@11",
})).s("gm_music_box").gain(0.33).pan(0.7)

// other · string ensemble 1 · "BELL"
const string_ensemble_1_3 = note("<~@76 A B C D E ~@15 F ~@42>".pickRestart({
  A: "~@8 b3@2 bb3@2 ab3@2 gb3 ~", B: "eb3@6 db4@5 ~ [db5,f5]@4", C: "[b4,eb5,ab5]@5 ~@3 b3@2 bb3@2 ab3@2 gb3@2",
  D: "ab3@6 db4@5 ~ [db4,f4]@4", E: "[b4,eb5,ab5]", F: "db5 eb5!3 gb5 eb5 db5 eb5 ~@8",
})).s("gm_string_ensemble_1").gain(0.33).pan(0.7)

// other · lead 2 sawtooth · "BELL" · Bbm Gbsus2 Amaj7 Dbsus2 Bbm Gbsus2 Bbm Gbsus2
const lead_2_sawtooth_2 = note(`<
  ~@91
  [~@8 eb6 [bb5,db6] a5 [gb5,ab5] bb5 [ab5,a5] gb5 [db5,eb5]]
  [eb5 [bb4,db5] a4 [gb4,ab4] a4 [gb4,ab4] eb4 [bb3,db4] eb4 [bb3,db4] a3 [gb3,ab3] ~@4]
  ~@46
>`).s("gm_lead_2_sawtooth").gain(0.33).pan(0.7)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A ~@4 B@19 A B@9 ~ B@15 A B@9 ~ B@15 A@2 B@9 A B C B@9 A B@9 ~ B@11 A B@9 ~
>`.pickRestart({
  A: "~ x ~@2", B: "~ x ~ x", C: "~@3 x",
})).gain(0.57)

// drums · clap
const clap = s("cp").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "x", B: "x!2 ~@8 x ~ x!3 ~",
})).gain(0.51)

// drums · clap · soft notes
const clap_soft = s("cp").struct(`<
  ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@2 B C D E F G H I@3 H I@25 H I@25 H I@69 ~>".pickRestart({
  A: "x ~ x!14", B: "x ~@3 x ~@5 x ~@2 x!2 ~", C: "x!2 ~@2", D: "x!9 ~ x!4 ~ x", E: "x!7 ~@9", F: "x!2", G: "x",
  H: "~ x!7", I: "x!8",
})).gain(0.63)

// drums · low tom
const low_tom = s("lt").struct("<~@11 [~@7 x] ~@84 [~@3 x] [~ x ~ x]!2 ~@40>").gain(0.57)

// drums · mid tom
// … 27 more lines

More by New Kids on the Block