Strudelify

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: 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: "[[eb3,gb3,bb3,eb4]@21 ~@3 [b2,gb3,b3]@4 [db3,f3,ab3,db4]@3 ~, ~@12 eb3 ~@3]/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: "[[eb3,gb3,bb3,eb4]@21 ~ [b2,eb3,gb3,b3]@6 [db3,f3,ab3,db4]@3 ~]/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 L M ~@4 B N O P ~@3 Q R S T U V W G H I J G K L M ~@4 B N O P ~@3 Q R S T U V W X
  Y I J X K L M Z AA Z AB AC AD AE AF AG ~ AH AI AJ AK AL AM AL AN AO AP AQ ~ AR ~@4 K N O P ~@3 Q R S T U V W AS B I AT
  AS B AU AV AW B L AV AS B I AT AS B AU AV AI ~
>`.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@13 ~ 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: "~@2 bb4 db5 db5@2 bb4 db5", M: "db5@3 ~ b4@2 bb4@2 ab4@2 gb4@2 f4@3 ~", N: "~@12 eb4!3 gb4", O: "eb4 ~@15",
  P: "~@7 eb5", Q: "~@6 [gb4,b4]@5 ~ [ab4,db5]@3 ~", R: "[bb4,eb5] ~ [bb4,eb5] ~ [bb4,eb5] ~ [bb4,eb5] ~@9",
  S: "~@3 [gb4,b4]@3 [ab4,db5]@2", T: "[bb4,eb5] ~ [bb4,eb5] ~ [bb4,eb5] ~ [bb4,eb5] ~@5 eb5 db5 b4 bb4",
  U: "b4@6 db5@9 ~", V: "db5@5 ~ eb5@5 ~ gb5@4", W: "bb6@4 ab6@4 gb6@4 eb6 f6 gb6 bb6", X: "eb5@2 ~@10 bb5 db6 eb6 gb6",
  Y: "eb6 ~@15", Z: "eb5@15 ~", AA: "eb5@5 ~ db5@5 ~ f5@4", AB: "eb5@5 ~ db5@5 ~ f5@2 db5 ~",
  AC: "[db5,eb5] ~@5 db6 eb6 ~@8", AD: "[db5,eb5] ~@5 db5@2 ~@2 db5 ~ eb5@3 ~", AE: "db6 eb6 ~@4 db6 eb6 ~@8",
  AF: "eb5@5 ~ db5@9 ~", AG: "db5@5 ~ eb5@5 ~ eb6 f6 gb6 ab6", AH: "~@12 [ab4,db5]@3 ~", AI: "[bb4,eb5] ~@7",
  AJ: "~@3 [f4,ab4,db5]", AK: "[gb4,bb4,eb5]@5 ~@11", AL: "~@12 [f4,ab4,db5]@3 ~", AM: "[gb4,bb4,eb5] ~@15",
  AN: "[gb4,bb4,eb5] ~@7", AO: "~@8 [f4,ab4,db5]@3 ~ [f4,ab4,db5]@3 ~", AP: "[gb4,bb4,eb5]@7 ~@9",
  AQ: "db5 eb5!3 gb5 eb5 db5 eb5 ~@8", AR: "~@6 [eb4,ab4]@5 ~ [e4,f4] ~@3, ~@12 bb4@3 ~",
  AS: "eb5@2 ~@10 bb5 db6 eb6 gb6, bb4 ~@15", AT: "db5@2 b4 bb4 ab4 gb4 f4 ~",
  AU: "~@4 bb4@2 db5@2 db5@3 ~ bb4@2 db5@2", AV: "db5@3 ~ b4@2 bb4@2 ab4@2 gb4@2 f4@2 ~@2",
  AW: "[bb4,eb5]@2 ~@10 bb5 db6 eb6 gb6", // Eb5
})).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 C D E F G H I J B K B K L M N M E O E O P Q@2 A B A C D E F G H I J B K B K L M N M B O E O P Q@2 A B A C D
  E F G R@2 S T U V ~ W X Y Z Y AA AB@2 AC@2 AD@2 AE@2 ~ AF H I J B K B K L M N M E O E O P Q@2 AG AH AI N Y AJ AK B AL
  AH AM@2 AG AH AI N Y AJ AN ~@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]@5 ~ [b3,eb4,gb4]@6 [db4,f4,ab4]@3 ~", D: "[eb4,gb4,bb4]@5 ~ [db4,f4,ab4]@9 ~",
  E: "[eb4,gb4,bb4]@7 ~ [b3,eb4,gb4]@4 [db4,f4,ab4]@4", F: "[eb4,gb4,bb4]@6 [f4,ab4]@9 ~, ~@6 db4@7 ~@3",
  G: "[eb4,gb4,bb4]@7 ~ [b3,eb4,gb4]@4 [db4,f4,ab4]@3 ~", H: "[gb4,bb4]@3 [f4,ab4]@5, eb4@5 ~ db4@8 ~@2",
  I: "[eb4,bb4]@3 [b3,eb4]@3 [db4,f4,ab4]@2, gb4@3 ~", J: "[ab4,bb4] ~ bb4@6 [db4,f4,ab4]@7 ~, [eb4,gb4] ~",
  K: "[eb4,gb4,bb4]@8 [db4,f4,ab4]@7 ~", L: "[eb4,gb4]@2 [b3,eb4,gb4] [db4,f4,ab4], bb4@3 ~@5", M: "[eb4,gb4,bb4]",
  N: "[eb4,gb4,bb4]@5 ~ [b3,eb4,gb4]@6 [db4,f4,ab4]@4", O: "[eb4,gb4,bb4]@15 ~",
  P: "[ab3,eb4,ab4]@6 [bb3,db4,f4,bb4]@9 ~", Q: "[[bb3,db4,f4,bb4]@6 [b3,eb4,gb4,b4]@25 ~]/2",
  R: "[[eb4,ab4,b4]@22 [db4,f4,bb4]@5 ~ [db4,f4,ab4]@4]/2", S: "[b3,eb4,ab4]",
  T: "[eb4,ab4]@3 [db4,f4,bb4]@3 [db4,f4,ab4]@2, b3 ~@3", U: "[eb4,ab4,b4]@15 ~",
  V: "[eb4,ab4,b4]@6 [db4,f4,bb4]@5 ~ [db4,f4,ab4]@4", W: "b3@4 ~@2 bb3@9 ~", X: "bb3@6 b3@9 ~",
  Y: "[eb4,gb4,bb4] [db4,f4,ab4]", Z: "[eb4,gb4,bb4]@2 [b3,eb4,gb4] [db4,f4,ab4], f4 ~@7 db4 ~@7",
  AA: "[eb4,gb4,bb4]@8 ~ [db4,f4]@7, ~@8 ab4@7 ~", AB: "[[eb4,gb4,bb4]@7 [db4,f4,ab4]]/2",
  AC: "[[eb4,gb4,bb4]@27 ~ [db4,f4,ab4]@4]/2", AD: "[[eb4,gb4,bb4]@23 ~ [db4,f4,ab4]@8]/2",
  AE: "[[eb4,gb4,bb4]@21 ~@11]/2", AF: "~@6 [eb4,ab4,b4]@5 ~ [db4,f4,bb4]@4",
  AG: "[eb4,gb4,bb4]@6 [db4,f4,ab4]@9 ~, ~@6 g4 ~@9", // Ebm Db
  AH: "[eb4,gb4,bb4]@6 ~@2 [gb5,b5]@3 ~ [db4,f4,ab4,ab5,db6]@4, ~@3 [b3,eb4,gb4]@3 ~@2", // Ebm B5 Db B
  AI: "[eb4,gb4,bb4]@7 ~ [db4,f4,ab4]@8, [bb5,eb6] ~@7", // Ebm Db Eb5
  AJ: "[eb4,gb4,bb4]@5 ~@3 [gb5,b5]@3 ~ [db4,f4,ab4,ab5,db6]@4, ~@3 [b3,eb4,gb4]@3 ~@2", // Ebm B5 Db B
  AK: "[eb4,gb4,bb4]@6 [db4,f4,ab4]@9 ~, [bb5,eb6] ~@7", AL: "[eb4,gb4,bb4]@6 [db4,f4,ab4]@9 ~",
  AM: "[[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
  AN: "[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 ~ F ~@17 G D ~@19 H I H J K L ~ M N ~@6 O P ~@3 Q ~@7 G 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: "~@6 [b3,eb4,gb4]@6 [db4,ab4]@3 ~, ~@12 f4 ~@3",
  G: "~@12 eb5 ~@2 gb5", H: "eb5@4 b5 bb5 ab5 gb5", I: "eb5@6 db5@5 ~ f5@4", J: "ab5@6 db5@5 ~ f5@4", K: "eb5",
  L: "eb5@5 ~ f5@6 f5@3 ~", M: "b4@4 ~@2 bb5@9 ~", N: "db5@5 ~@11",
  O: "~@8 eb6 [bb5,db6] a5 [gb5,ab5] bb5 [ab5,a5] gb5 [db5,eb5]", // Bbm Gbsus2 Amaj7 Dbsus2
  P: "eb5 [bb4,db5] a4 [gb4,ab4] a4 [gb4,ab4] eb4 [bb3,db4] eb4 [bb3,db4] a3 [gb3,ab3] ~@4", // Bbm Gbsus2 Bbm Gbsus2
  Q: "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 G H I J K L ~@5 M N ~ O P Q R Q S T U V@2 E F G H I J K L ~@5 M N ~ O P Q R Q S T U V@2 E F G
  H I J K L W ~@4 X Y Z AA ~ AB AC AD AE ~@3 AF AG AH ~@2 AI ~@5 M N ~ O P Q R Q S T U V@2 AJ AK AL L AM AN AO AP AQ AR
  K AP AJ AK AL L AM AN AO AP AS ~
>`.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: "[eb5,gb5]@6 [db5,f5]@9 ~",
  H: "eb6@2 db6@2 b5@2 bb5@2 ab5 ~ gb5@2 f5@2 ~@2", I: "[bb4,eb5]@5 ~ [ab4,db5]@9 ~",
  J: "eb5@6 [gb4,b4]@6 [ab4,db5]@3 ~, bb4@3 ~@13", K: "[bb4,eb5]@6 [ab4,db5]@5 ~@5",
  L: "eb6@2 db6@2 b5@2 bb5@2 ab5 ~ gb5@2 f5@3 ~", M: "~@12 eb5!3 gb5", N: "eb5 ~@15", O: "[gb5,bb5,eb6]@5 ~@3",
  P: "[bb4,eb5]@6 [gb4,b4]@6 [ab4,db5]@3 ~", Q: "[bb4,eb5]@15 ~", R: "[bb4,eb5]@7 ~ [gb4,b4]@3 ~ [ab4,db5]@4",
  S: "[bb4,eb5]@5 ~ [gb4,b4]@6 [ab4,db5]@4", T: "eb5@15 ~, bb4@13 ~@3",
  U: "[ab4,eb5]@5 ~ [ab4,db5,f5]@8 ~@2, b4@3 ~@13", V: "[[bb4,db5,f5]@5 ~ [bb4,eb5,gb5]@24 ~@2, ~@6 d5 ~@25]/2",
  W: "[ab4,b4,eb5] ~@3", X: "[b4,eb5,ab5]@5 ~ [db5,f5,bb5]@6 [db5,f5,ab5]@4", Y: "[b4,eb5,ab5]",
  Z: "[b4,eb5,ab5]@5 ~ [db5,f5,bb5]@9 ~", AA: "[db5,f5,bb5]@6 [eb5,gb5,b5]@9 ~", AB: "~@12 [db5,db6]@3 ~",
  AC: "[eb5,eb6] ~@7", AD: "~@4 [f5,ab5]@3 ~, ~ db6", AE: "[eb5,gb5,bb5,eb6] ~@3", AF: "[bb5,eb6] ~@15",
  AG: "~@8 [ab5,db6]@3 ~ [ab5,db6]@3 ~", AH: "[bb5,eb6]@3 ~", AI: "~@6 [eb5,ab5]@5 ~ [f5,bb5]@3 ~",
  AJ: "[eb5,gb5]@5 ~ [db5,f5]@9 ~", AK: "[eb5,gb5]@5 ~ [b4,eb5,gb5]@5 ~ [db5,f5]@3 ~",
  AL: "[eb5,gb5]@5 ~ [db5,f5]@4 ~@6", AM: "[bb4,eb5]@5 ~ db5@8 ~@2, ~@6 ab4@5 ~@5",
  AN: "[bb4,eb5]@4 ~@2 [gb4,b4]@5 ~ [ab4,db5]@3 ~", AO: "[eb5,gb5]@6 [db5,f5]@5 ~@5",
  AP: "eb6@2 db6@2 b5@2 bb5@2 ab5@2 gb5@2 f5@3 ~", AQ: "[bb4,eb5]@5 ~ [ab4,db5]@7 ~@3",
  AR: "eb5@5 ~ [gb4,b4]@5 ~ [ab4,db5]@4, bb4@3 ~@13", AS: "[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({
// … 40 more lines

More by New Kids on the Block