Strudelify

Get Ready

The Temptations

KeyE♭ minorTempo142 bpm
0:00/0:00
// Get Ready — The Temptations
// 142 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 103 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(142/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.

// chords · piano
const piano = note(`<
  A B C D E D C D E D C D E D C D E D F G H@2 F G I@4 E D C D E D C D E D C D E D F G H@2 F G I@4 E D C D E D J K L M N
  O P O N O P O N O P Q@3 R@4 S@8 P O N O P O N O P O T@4 U
>`.pickRestart({
  A: "eb2@3 eb2@3 db2 ~@2 eb2@2 ~@4 db2@2 ~@4 db2@2 ~", B: "eb2@3 eb2@3 db2@3 eb2@2 ~@4 db2@3 ~@3 db2@3",
  C: "[eb2,bb3,eb4,g4] ~@2 eb2@3 db2@3 [bb3,eb4,g4] ~@5 db2@3 ~@3 db2@3, ~@3 eb2 ~@4", // Eb
  D: "[eb2,bb3,eb4,g4] ~@2 eb2@3 db2 ~@2 [c4,eb4,ab4] ~@5 [bb3,db4,bb4]@6 db2@3, ~@3 [ab2,c5] ~ gb2 ~@2, ~@15 gb4 ~@8", // Eb Ab Bbm Ab
  E: "[eb2,bb3,eb4,g4] ~@2 eb2@3 db2@3 [bb3,eb4,g4] ~@5 db2@3 [eb4,g4,bb4]@3 db2@3, ~@3 eb2 ~@4", // Eb
  F: "gb2@3 gb2@3 db2@3 [gb2,bb3,db4]@4 ~@2 [db2,gb4]@3 [gb2,bb3,db4]@3 db2@3, [bb3,db4]@7 ~@2 gb4@6 [bb3,db4] ~@2 gb4@6", // Gb Gb5 Gb Bbm
  G: "b2@3 b2@3 gb2@3 [b2,bb3,eb4]@4 ~@2 [gb2,gb4]@3 [b2,bb3,eb4]@3 bb2@3, [bb3,eb4]@7 ~@2 gb4@6 [bb3,eb4] ~@2 gb4@6", // Bmaj7 Gb Bmaj7 Eb5
  H: "[[b3,eb4]@6 eb2@3 [ab2,b3,eb4]@4 ~@2 [eb2,gb4]@3 [ab2,b3,eb4]@3 bb2@3 db3@3 db3@3 ab2@3 [db3,ab3,db4,f4]@4 ~@2 [ab3,db4,f4] ~@2 [db3,ab3,db4,f4]@3 db3@3, ab2@3 ~@6 gb4@6 [b3,eb4] ~@2 gb4@30, ~@8 [ab3,db4,f4]@2 ~@3 db3 ~@2]/2", // B Abm Ebm Abm Db B Db
  I: "[[b3,eb4]@6 eb2@3 [ab2,b3,eb4]@4 ~@2 [eb2,gb4]@3 [ab2,b3,eb4]@3 bb2@3 db3@3 db3@3 ab2@3 [db3,ab3,db4,f4]@4 ~@2 [ab3,db4,f4] ~@2 [db3,ab3,db4,f4]@3 db3@3 [eb2,bb3,eb4,g4] ~@2 eb2@3 db2@3 [bb3,eb4,g4] ~@5 db2@3 ~@3 db2@3 [eb2,bb3,eb4,g4] ~@2 eb2@3 db2 ~@2 [c4,eb4,ab4] ~@5 [bb3,db4,bb4]@6 db2@3, ab2@3 ~@6 gb4@6 [b3,eb4] ~@2 gb4@69 gb4 ~@8, ~@8 [ab3,db4,f4]@2 ~@3 db3 ~@5 eb2 ~@7 [ab2,c5] ~ gb2 ~@2]/4", // B Abm Ebm Abm Db Eb Ab Bbm …
  J: "[eb3,ab3,c4,eb4] ~@2 [f3,bb3]@5, ~@9 [d4,f4]@13 ~@2", K: "[eb3,c4,eb4]@3 ~@6 [f3,bb3,d4,f4]@13 ~@2, ab3 ~@23",
  L: "[ab3,c4,eb4] ~@2 [f3,bb3,f4]@3 [ab3,c4,eb4] ~, eb3 ~@8 d4@7 ~@2 eb3 ~@5", // Ab Bb5 Ab
  M: "[b3,eb4,gb4] ~@2 [b3,eb4]@4 ~@3 [b3,eb4,gb4] ~@2 bb3@6 [ab3,c4]@3 ~@2, ~@3 gb4 ~@9 d4@4 ~@2 eb4 ~@4, ~@13 f4 ~@10", // B Ab
  N: "~ [eb2,bb3,g4] ~@2 eb2@3 db2@3 [bb3,g4] ~@5 db2@3 ~@3 db2@2, ~@5 eb4@7, ~@10 eb2@3 ~@11", // Eb
  O: "~ [eb2,bb3,g4] ~@2 eb2@3 db2@2 ~ [ab2,c5]@3 ~@3 [bb3,db4,bb4]@6 db2@2, ~@5 eb4@7, ~@10 [c4,ab4] ~@5 gb2@3 ~@5, ~@16 gb4 ~@7", // Eb Ab Bbm Fm
  P: "~ [eb2,bb3,g4] ~@2 eb2@3 db2@3 [bb3,g4] ~@5 db2@3 [g4,bb4]@3 db2@2, ~@10 eb4@9 eb4@5, ~@10 eb2@3 ~@11", // Eb Gm
  Q: "[~ [eb2,bb3,g4] ~@2 eb2@3 db2@2 ~ [ab2,c5]@3 ~@3 [bb3,db4,bb4]@6 db2@3 gb2@3 gb2@3 db2@3 [gb2,bb3,db4]@4 ~@2 [db2,gb4]@3 [gb2,bb3,db4]@3 db2@3 b2@3 b2@3 gb2@3 [eb4,gb4]@6 [gb2,eb4,gb4]@3 [b2,bb3]@3 bb2@2, ~@10 eb4@39 bb3@7 ~@8 bb3 ~@7, ~@10 [c4,ab4] ~@5 gb2@3 ~@39 [b2,bb3]@4 ~@10, ~@16 gb4 ~@8 [bb3,db4]@7 ~@2 gb4@6 [bb3,db4] ~@2 gb4@6 ~@18 [eb4,gb4]@5]/3", // Eb Ab Bbm Gb Gb5 Gb Ebm Bmaj7 …
  R: "[~ b3@6 eb2@3 [eb4,gb4]@6 [eb2,eb4,gb4]@3 [ab2,b3]@3 bb2@3 db3@3 db3@3 ab2@3 [db3,ab3,db4]@4 ~@2 [db3,f4]@3 [db3,ab3,db4]@3 db3@3 gb2@3 gb2@3 db2@3 [gb2,bb3,db4]@4 ~@2 [db2,gb4]@3 [gb2,bb3,db4]@3 db2@3 b2@3 b2@3 gb2@3 [eb4,gb4]@6 [gb2,eb4,gb4]@3 [b2,bb3]@3 bb2@2, ~ ab2@3 ~@6 [ab2,b3]@3 ~@3 b3 ~@2 eb4@54 bb3@7 ~@2 [b2,bb3]@4 ~@10, ~@19 gb4@30 [bb3,db4]@7 ~@2 gb4@6 [bb3,db4] ~@2 gb4@6 ~@15 bb3 ~@2 [eb4,gb4]@5, ~@25 [ab3,db4]@6 ~@3 f4@6 [ab3,db4] ~@2 f4@53]/4", // Ebm Abm Db5 Db Db5 Gb Gb5 Gb …
  S: "[~ b3@6 eb2@3 [eb4,gb4]@6 [eb2,eb4,gb4]@3 [ab2,b3]@3 bb2@3 db3@3 db3@3 ab2@3 [db3,ab3,db4]@4 ~@2 [db3,f4]@3 [db3,ab3,db4]@3 db3@3 [eb2,bb3,g4] ~@2 eb2@3 db2@3 [bb3,g4] ~@5 db2@3 ~@3 db2@3 [eb2,bb3,g4] ~@2 eb2@3 db2@2 ~ [ab2,c5]@3 ~@3 [bb3,db4,bb4]@6 db2@3 [eb2,bb3,g4] ~@2 eb2@3 db2@3 [bb3,g4] ~@5 db2@3 [g4,bb4]@3 db2@3 [eb2,bb3,g4] ~@2 eb2@3 db2@2 ~ [ab2,c5]@3 ~@3 [bb3,db4,bb4]@6 db2@3 [eb2,bb3,g4] ~@2 eb2@3 db2@3 [bb3,g4] ~@5 db2@3 ~@3 db2@3 [eb2,bb3,g4] ~@2 eb2@3 db2@2 ~ [ab2,c5]@3 ~@3 [bb3,db4,bb4]@6 db2@2, ~ ab2@3 ~@6 [ab2,b3]@3 ~@3 b3 ~@2 gb4@69 gb4 ~@41 [c4,ab4] ~@5 gb4 ~@41 [c4,ab4] ~@5 gb4 ~@7, ~@19 eb4@30 ~@9 eb4@15 ~@9 eb4@15 ~@9 eb4@9 eb4@6 ~@9 eb4@15 ~@9 eb4@15 ~@9 eb4@14, ~@25 [ab3,db4]@6 ~@3 f4@6 [ab3,db4] ~@2 f4@149, ~@58 eb2@3 ~@21 [c4,ab4] ~@5 gb2@3 ~@15 eb2@3 ~@27 gb2@3 ~@15 eb2@3 ~@27 gb2@3 ~@5]/8", // Ebm Abm Db5 Db Db5 Eb Ab Bbm …
  T: "[~ [eb3,ab3,c4]@3 ~@6 [f3,bb3]@15 [eb3,c4]@3 ~@6 [f3,bb3,d4]@13 ~@2 [ab3,c4]@3 ~@6 [f3,bb3]@9 [ab3,c4]@3 ~@3 [b3,gb4] ~@2 eb4@6 [b3,gb4] ~@3 bb3@6 [ab3,c4]@3 ~, ~ eb4@24 eb4@24 eb4@18 eb4@6 eb4@3 b3@4 ~@6 d4@4 ~@6, ~@10 f4@24 f4@24 f4@27 ~ f4 ~@9, ~@10 d4@13 ~@2 ab3 ~@23 eb3 ~@8 d4@7 ~@2 eb3 ~@8 gb4 ~@5 eb4@9 ~ eb4 ~@3]/4", // Ab Bb5 Cm Bb Ab Bb5 Ab B5 …
  U: "~@8 [bb3,eb5]@3 ~@3 [ab3,db4,db5]@3 [bb3,eb5]@3 ~@4, ~@8 eb4 ~@8 eb4 ~@6", // Eb5 Db5 Eb5
})).s("gm_piano").gain(0.56).pan(0.7)

// bass · electric bass finger · "bass"
const bass = note(`<
  A@3 B A B A B A B A B A B A B A B C D E F C D E F A B A B A B A B A B A B A B A B C D E F C D E F A B A B A B A B G H
  I J K L K L K L K L K L K L M N O P M N O P K L K L K L K L K L K L K L K L Q R S T U
>`.pickRestart({
  A: "eb2@2 ~ eb2@2 ~ db2@2 ~ eb2@3 ~@3 db2@3 ~@3 db2@2 ~", B: "eb2@2 ~ eb2@2 ~ db2@2 ~ ab2@3 ~@3 gb2@3 ~@3 db2@2 ~",
  C: "gb1!6 ab1 bb1", D: "b1!5 bb1 b1 bb1", E: "ab1@3 ab1@3 eb1@3 ab1@5 ~ ab1@3 bb1@3 b1@3",
  F: "db2@3 db2@3 ab1@3 db2@5 ~ db2@3 eb2@3 f2@3", G: "ab1 ~@2 bb1@4 ~", H: "ab1@3 ~@6 bb1@13 ~@2",
  I: "ab1 ~@8 bb1@9 ab1@3 ~@3", J: "~ b1 ~@2 b1 ~@5 b1 ~@2 bb1@3 ~@3 ab1@3 ~@2",
  K: "~ eb2@2 ~ eb2@2 ~ db2@2 ~ eb2@3 ~@3 db2@3 ~@3 db2@2", L: "~ eb2@2 ~ eb2@2 ~ db2@2 ~ ab2@3 ~@3 gb2@3 ~@3 db2@2",
  M: "~ gb1@3 gb1@3 gb1@3 gb1@3 gb1@3 gb1@3 ab1@3 bb1@2", N: "~ b1@3 b1@3 b1@3 b1@3 b1@3 bb1@3 b1@3 bb1@2",
  O: "~ ab1@3 ab1@3 eb1@3 ab1@5 ~ ab1@3 bb1@3 b1@2", P: "~ db2@3 db2@3 ab1@3 db2@5 ~ db2@3 eb2@3 f2@2",
  Q: "~ ab1@3 ~@6 bb1@12 ~@2", R: "~ ab1@3 ~@6 bb1@13 ~", S: "~ ab1 ~@8 bb1@9 ab1@3 ~@2",
  T: "~ b1 ~@2 b1 ~@6 b1 ~@2 bb1@3 ~@3 ab1@3 ~", U: "~@8 eb2@3 ~@3 db2@3 eb2@3 ~@4",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · electric guitar clean · "gtr"
const electric_guitar_clean = note("<~@2 A@16 ~@8 A@16 ~@8 A@8 ~@4 B@12 ~@8 B@16 ~@5>".pickRestart({
  A: "~@2 [bb4,eb5] ~@3 [bb4,eb5] ~", B: "~@7 [bb4,eb5]@3 ~@9 [bb4,eb5]@3 ~@2",
})).s("gm_electric_guitar_clean").gain(0.48).pan(0.8)

// other · string ensemble 1 · "strin"
const string_ensemble_1 = note(`<
  ~@3 A ~ A ~@12 B C D E B C D E F@4 G@10 H@2 B C D E B C D E F@4 ~@4 I J@2 K L@10 M@2 N O P Q N O P Q ~ R ~ R ~ R ~ R ~
  R ~ R ~ R ~ R S T@2 U V
>`.pickRestart({
  A: "~@3 [bb3,bb4] [c4,c5] ~ [eb4,eb5] ~@2 [ab4,c5,eb5,ab5]@3 ~@3 [gb4,bb4,db5,gb5]@6 ~@3", // Bb C Eb Ab Gb
  B: "[db5,db6]@5 ~ [eb5,eb6]@6 ~@4 [ab5,ab6]@7 ~, ~@2 [gb5,gb6] ~", // Db Eb Ab Gb
  C: "[gb5,gb6]@9 [eb5,eb6]@4 ~@2 [eb5,eb6] ~@2 [eb5,eb6]@3 ~@3", // Gb Eb
  D: "[eb5,eb6]@6 ~@3 [eb5,eb6]@3 ~@3 [eb5,eb6] ~@2 [eb5,eb6] ~@5", // Eb
  E: "[db5,db6]@4 ~@5 [db5,db6] ~@2 [db5,db6]@3 [eb5,eb6]@7 ~@2", F: "[eb5@31 ~]/4", G: "[bb2@9 ~@7]/2",
  H: "[bb2@27 [bb3,bb4] [c4,c5] ~ [eb4,eb5] ~@2 [ab4,c5,eb5,ab5]@3 ~@3 [gb4,bb4,db5,gb5]@6 ~@3]/2", // Bb C Eb Ab Gb
  I: "[eb4,ab5]@3 ~@6 bb5@6 bb4 c5 ~ d5 eb5 ~ f5 g5 ~, c5 ~@8 f4@15, ~@3 d5@3 ~@2", // Ab5
  J: "[[eb4,c5,ab5]@3 ~@6 bb5@6 bb4 c5 ~@2 eb5 ~ f5 g5 ~ [c5,ab5] ~@8 [f4,bb5]@9 [eb4,ab5]@3 ~@3, ~@9 f4@13 ~@2 eb4@3 ~@21, ~@9 d5@9 d5@9 ~@6 d5@7 ~@2 c5 ~@5]/2", // Ab Fm Bb5 Ab5
  K: "[gb4,eb5,b5] ~@2 [gb4,b5] ~@5 [gb4,eb5,b5] ~@2 [f4,d5,bb5]@3 ~@4 [eb4,c5,ab5]@3 ~@2, ~ eb5 ~@6", // B B5 B Bb Ab
  L: "[~ bb2@27 ~@20]/2",
  M: "[~ bb2@27 [bb3,bb4] [c4,c5] ~ [eb4,eb5] ~@2 [ab4,c5,eb5,ab5]@3 ~@3 [gb4,bb4,db5,gb5]@6 ~@2]/2", // Bb C Eb Ab Gb
  N: "~ [db5,db6]@5 ~ [eb5,eb6]@6 ~@4 [ab5,ab6]@7, ~@13 [gb5,gb6]@6 ~@5", // Db Eb Ab Gb
  O: "~ [gb5,gb6]@9 [eb5,eb6]@4 ~@2 [eb5,eb6] ~@2 [eb5,eb6]@3 ~@2", // Gb Eb
  P: "~ [eb5,eb6]@6 ~@3 [eb5,eb6]@3 ~@3 [eb5,eb6] ~@2 [eb5,eb6] ~@4", // Eb
  Q: "~ [db5,db6]@4 ~@5 [db5,db6] ~@2 [db5,db6]@3 [eb5,eb6]@7 ~", // Db Eb
  R: "~@4 [bb3,bb4] [c4,c5] ~ [eb4,eb5] ~@2 [ab4,c5,eb5,ab5]@3 ~@3 [gb4,bb4,db5,gb5]@6 ~@2", // Bb C Eb Ab Gb
  S: "~ [eb4,ab5]@3 ~@6 bb5@6 bb4 c5 ~ d5 eb5 ~ f5 g5, ~ c5 ~@8 f4@14, ~@10 d5@9 ~@5", // Ab5
  T: "[~ [eb4,c5,ab5]@3 ~@6 bb5@6 bb4 c5 ~@2 eb5 ~ f5 g5 ~ [c5,ab5] ~@8 [f4,bb5]@9 [eb4,ab5]@3 ~@2, ~@10 f4@13 ~@2 eb4@3 ~@20, ~@10 d5@9 d5@9 ~@6 d5@7 ~@2 c5 ~@4]/2", // Ab Fm Bb5 Ab5
  U: "~ [gb4,eb5,b5] ~@2 [gb4,b5] ~@5 [gb4,eb5,b5] ~@2 [f4,d5,bb5]@3 ~@4 [eb4,c5,ab5]@3 ~, ~@4 eb5@3 ~@17", // B B5 B Bb Ab
  V: "~@8 [eb5,eb6]@3 ~@3 [db5,db6]@3 [eb5,eb6]@3 ~@4", // Eb Db Eb
})).s("gm_string_ensemble_1").gain(0.56).pan(0.8)

// chords · synth brass 2 · "brass2"
const synth_brass_2 = note(`<
  A@3 B A C ~@12 D E F G D E F G ~@5 H ~ H ~ H ~ H ~ H ~ H D E F G D E F G ~@8 I J K L ~ M ~ M ~ M ~ M ~ M ~ M N O P Q N
  O P Q ~@16 R@2 S T U
>`.pickRestart({
  A: "eb3 ~@2 eb3 ~@2 db3 ~@2 eb3@2 ~@4 db3@2 ~@4 db3 ~@2", B: "eb3 ~@2 eb3 ~@2 db3 ~@2 ab3@2 ~@4 gb3@2 ~@4 db3 ~@2",
  C: "eb3 ~@2 eb3 ~@2 db3 ~@2 ab3@2 ~@4 gb3@3 ~@6", D: "[bb4,db5]@7 ~@2 [bb4,db5]@10 ~@5",
  E: "[bb4,eb5]@7 ~@2 [bb4,eb5]@10 ~@5", F: "b4@7 ~@2 b4@9 ~@6, eb5@3 ~", G: "[bb4,f5]@7 ~@2 [ab4,f5]@10 ~@5",
  H: "~@3 [c5,eb5,ab5] ~ [bb4,db5,gb5]@2 ~", I: "[c5,eb5,ab5] ~@2 [d5,f5,bb5]@5",
  J: "[c5,eb5,ab5]@3 ~@6 [d5,f5]@13 ~@2, ~@3 bb5@5", K: "[eb5,ab5] ~@2 [d5,f5,bb5]@3 [c5,ab5] ~, c5 ~@17 eb5 ~@5",
  L: "[eb5,gb5,b5] ~@2 [eb5,gb5,b5]@3 ~@4 [eb5,gb5,b5] ~@2 [d5,f5,bb5]@3 ~@3 [c5,eb5,ab5]@3 ~@2", // B Bb Ab
  M: "~@10 [c5,eb5,ab5]@3 ~@3 [bb4,db5,gb5]@6 ~@2", N: "~ [bb4,db5]@7 ~@2 [bb4,db5]@10 ~@4",
  O: "~ [bb4,eb5]@7 ~@2 [bb4,eb5]@10 ~@4", P: "~ b4@7 ~@2 b4@9 ~@5, ~ eb5@18 ~@5",
  Q: "~ [bb4,f5]@7 ~@2 [ab4,f5]@10 ~@4", R: "~ [c5,eb5,ab5]@3 ~@6 [d5,f5,bb5]@14",
  S: "~ [eb5,ab5]@3 ~@6 [d5,f5,bb5]@9 [c5,ab5]@3 ~@2, ~ c5 ~@17 eb5 ~@4", // Ab5 Bb Fm
  T: "~ [eb5,gb5,b5] ~@2 [eb5,gb5,b5]@3 ~@3 [eb5,gb5,b5] ~@3 [d5,f5,bb5]@3 ~@3 [c5,eb5,ab5]@3 ~", // B Bb Ab
  U: "~@8 [bb4,eb5,eb6]@3 ~@3 [ab4,db5,db6]@3 [bb4,eb5,eb6]@3 ~@4", // Eb5 Db5 Eb5
})).s("gm_synth_brass_2").gain(0.33).pan(0.8)

// chords · brass section · "brass1"
const brass_section = note(`<
  A@3 B A C ~@12 D E F G D E F G ~@5 H ~ H ~ H ~ H ~ H ~ H D E F G D E F G ~@4 I J I J K L M N ~ O ~ O ~ O ~ O ~ O ~ O P
  Q R S P Q R S ~@16 T U V W X
>`.pickRestart({
  A: "[eb2,eb3] ~@2 [eb2,eb3] ~@2 [db2,db3] ~@2 [eb2,eb3]@2 ~@4 [db2,db3]@2 ~@4 [db2,db3] ~@2", // Eb Db Eb Db
  B: "[eb2,eb3] ~@2 [eb2,eb3] ~@2 [db2,db3] ~@2 [ab2,ab3]@2 ~@4 [gb2,gb3]@2 ~@4 [db2,db3] ~@2", // Eb Db Ab Gb Db
  C: "[eb2,eb3] ~@2 [eb2,eb3] ~@2 [db2,db3] ~@2 [ab2,ab3]@2 ~@4 [gb2,gb3]@3 ~@6", // Eb Db Ab Gb
  D: "[gb2,gb3,bb3,db4]@7 ~@2 [gb2,gb3,db4]@10 ~@5, ~@3 bb3@4 ~", // Gb Gb5
  E: "[b2,bb3,b3,eb4]@7 ~@2 [bb3,eb4]@10 ~@5, ~@9 [b2,b3]@7 ~@8", F: "[ab2,ab3,b3]@7 ~@2 [ab2,ab3,b3]@9 ~@6, eb4@3 ~",
  G: "[db3,ab3,db4,f4]@7 ~@2 [db3,ab3,db4,f4]@10 ~@5", H: "~@3 [ab3,c4,eb4] ~ [gb3,bb3,db4]@2 ~",
  I: "~@3 eb5!2 ~ eb5!2 ~ eb5!2 ~ eb5@3 ~@6 eb5@3, ~@21 db5 ~@2", J: "eb5@2 ~ eb5@6 ~@15, db5 ~@23",
  K: "[eb3,ab3,c4] ~@2 [f3,bb3]@5, ~@9 d4@13 ~@2", L: "[eb3,c4]@3 ~@6 [f3,bb3,d4]@13 ~@2, ab3 ~@23",
  M: "[ab3,c4] ~@2 [f3,bb3]@3 [ab3,c4] ~, eb3 ~@8 d4@7 ~@2 eb3 ~@5", // Ab Bb5 Ab
  N: "[b3,eb4,gb4] ~@2 [b3,eb4,gb4]@4 ~@3 [b3,eb4,gb4] ~@2 [d4,f4]@4 ~@2 [ab3,c4,eb4]@3 ~@2, ~@13 bb3@6 ~@5", // B Dm Ab
  O: "~@10 [ab3,c4,eb4]@3 ~@3 [gb3,bb3,db4]@6 ~@2", P: "~ [gb2,gb3,bb3,db4]@7 ~@2 [gb2,gb3,db4]@10 ~@4, ~@5 bb3@6 ~",
  Q: "~ [b2,bb3,b3,eb4]@7 ~@2 [bb3,eb4]@10 ~@4, ~@10 [b2,b3]@7 ~@7", // Bmaj7 Eb5 B
  R: "~ [ab2,ab3,b3]@7 ~@2 [ab2,ab3,b3]@9 ~@5, ~ eb4@18 ~@5", S: "~ [db3,ab3,db4,f4]@7 ~@2 [db3,ab3,db4,f4]@10 ~@4",
  T: "~ [eb3,ab3,c4]@3 ~@6 [f3,bb3,d4]@14", U: "~ [eb3,c4]@3 ~@6 [f3,bb3,d4]@13 ~, ~ ab3 ~@22",
  V: "~ [ab3,c4]@3 ~@6 [f3,bb3]@9 [ab3,c4]@3 ~@2, ~ eb3 ~@8 d4@7 ~@2 eb3 ~@4", // Ab Bb5 Ab
  W: "~ [b3,eb4,gb4] ~@2 [b3,eb4,gb4]@4 ~@2 [b3,eb4,gb4] ~@3 [d4,f4]@4 ~@2 [ab3,c4,eb4]@3 ~, ~@7 bb3@3 ~@2", // B Dm Ab
  X: "~@8 [bb4,eb5,eb6]@3 ~@3 [ab4,db5,db6]@3 [bb4,eb5,eb6]@3 ~@4", // Eb5 Db5 Eb5
})).s("gm_brass_section").gain(0.52).pan(0.3)

// other · tenor sax · "sax"
const tenor_sax = note(`<
  ~@54
  [~@3 eb5!2 ~ eb5!2 ~ eb5!2 ~ eb5@3 ~@6 eb5@3, ~@21 db5 ~@2]
  [eb5@2 ~ eb5@6 ~@15, db5 ~@23]
  [~@3 eb5!2 ~ eb5!2 ~ eb5!2 ~ eb5@3 ~@6 eb5@3, ~@21 db5 ~@2]
  [eb5@2 ~ eb5@6 ~@15, db5 ~@23]
  ~@45
>`).s("gm_tenor_sax").gain(0.64).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@2 A@56 B@2 C D E@36 F@2 G H I>".pickRestart({
  A: "x ~@3 x!2 ~ x", B: "x ~@2 x ~@4", C: "x ~@2 x ~@2 x ~", D: "~ x ~@2 x ~@5 x ~@2 x ~@5 x ~@4",
  E: "~ x ~@11 x ~@2 x ~@5 x ~", F: "~ x ~@8 x ~@13", G: "~ x ~@8 x ~@8 x ~@4", H: "~ x ~@2 x ~@6 x ~@2 x ~@5 x ~@3",
  I: "~@5 x ~@2 x ~@5 x ~@2 x ~@6",
})).gain(0.64)

// drums · rim
const rim = s("rim").struct(`<
  ~ A ~@3 A ~@7 A ~@7 A ~@2 A ~@8 A ~@7 A ~ A ~ A ~@2 A ~@9 B@3 ~@8 C ~@5 C ~ C ~@2 C ~@4 C ~@3 C ~@3 C ~@3 C D@3 ~@2
>`.pickRestart({
  A: "~@12 x ~@4 x!2 ~@2 x ~@2", B: "x ~@4 x!2 ~@2 x ~@14", C: "~@13 x ~@4 x!2 ~@2 x ~", D: "~ x ~@4 x!2 ~@2 x ~@13",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B@3 C B@7 C B@3 D E F G H F@2 H I B@7 C B@3 D B@3 C E H F H F@2 H J B@7 D K L M N O@7 P Q O@3 R S T S T@2 S U O Q
  O P O Q O P O Q O P O Q O V W X Y Z AA
>`.pickRestart({
  A: "~@12 x ~@3 x!3 ~@2 x ~@2", B: "~ x ~ x", C: "~@6 x ~@5 x ~@3 x!3 ~@2 x ~@2", D: "~@2 x ~@3 x!2", E: "x!4",
  F: "x ~ x ~ x ~ x!2", G: "x ~@5 x ~@5 x ~@2 x ~ x!2 ~ x!2 ~@2", H: "x ~@5 x ~@5 x ~@3 x!3 ~@2 x ~@2",
  I: "x ~@5 x ~@5 x ~@2 x ~@2 x!2 ~ x!2 ~", J: "x ~@5 x ~@5 x ~@4 x!2 ~@5", K: "x ~@3 x!3 ~@2 x ~@5 x ~@4 x!2 ~@2",
  L: "x ~@3 x!3 ~@2 x ~@14", M: "x ~@3 x!3 ~@2 x ~@5 x ~ x!2 ~@4 x", N: "~ x ~@2 x ~@5 x ~@2 x ~@8 x ~",
  O: "~@7 x ~@11 x ~@4", P: "~@7 x ~@5 x ~@3 x!3 ~@2 x ~", Q: "~@7 x ~@11 x ~@2 x ~", R: "~ x ~@5 x ~@5 x ~@5 x ~@4",
  S: "~ x ~@5 x ~@5 x ~@3 x!3 ~@2 x ~", T: "~ x ~@5 x ~@5 x ~@5 x ~@2 x ~", U: "~ x ~@5 x ~@5 x ~@4 x!2 ~@4",
  V: "~ x ~ x ~@3 x ~@5 x ~@3 x!3 ~@2 x ~", W: "~ x ~@3 x!3 ~@2 x ~@5 x ~@4 x!2 ~", X: "~ x ~@3 x!3 ~@2 x ~@13",
  Y: "~ x ~@3 x!3 ~@2 x ~@5 x ~ x!2 ~@4", Z: "x!2 ~@2 x ~@6 x ~@2 x ~@8 x", AA: "~@2 x ~@5 x ~@5 x ~@2 x ~@6",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A ~@3 A ~@7 A ~@7 A ~@2 A ~@8 A ~@7 A ~ A ~ A ~@2 A ~@9 B@2 C ~@8 D ~@5 D ~ D ~@2 D ~@4 D ~@3 D ~@3 D ~@3 D E@2 F
  ~@2
>`.pickRestart({
  A: "~@13 x!3 ~@8", B: "~ x!3 ~@20", C: "~ x!3 ~@12 x ~@7", D: "~@14 x!3 ~@7", E: "~@2 x!3 ~@19",
  F: "~@2 x!3 ~@12 x ~@6",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@49 [~@6 x!2] ~@31 [~@19 x ~@2 x ~] ~@15 [~ x ~@2] ~@4 [~ x ~@4]>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@2 [x!8]!56 x ~@3 [~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~]!36 [~ x ~@22] ~@4>")
  .gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~@3 A ~@7 A ~@3 B ~ B ~ A B@2 A ~@8 A ~@3 B ~@3 A ~ A B A B@2 A C ~@7 B D E D F ~@7 G H ~@4 G H G H@2 G I ~ H ~ G
  ~ H ~ G ~ H ~ G ~ H ~ G J K J L M
>`.pickRestart({
  A: "~ x", B: "~@7 x", C: "~@6 x!2", D: "x", E: "x ~@14 x ~ x!2 ~@5", F: "~@19 x!3 ~@2", G: "~@13 x ~@10", H: "~@11 x",
  I: "~@19 x ~@2 x ~", J: "~ x ~@22", K: "~ x ~@14 x ~ x!2 ~@4", L: "~@20 x!3 ~", M: "~ x ~@4",
})).gain(0.72)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@3 [~@21 x!3] ~@5 [~@21 x!3] ~@93>").gain(0.32)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~ A ~ B ~ A ~@3 B ~@3 A ~@3 C ~ C D A ~ C A ~@8 A ~@3 C ~@3 A ~ A C A ~ C A ~@8 C E F G ~@8 H I ~@4 H I H ~ I H ~@2 I
  ~ H ~ I ~ H ~ I ~ H ~ I ~ H J K L ~ M
>`.pickRestart({
  A: "~ x", B: "~@21 x!3", C: "~@7 x", D: "~@5 x ~@2", E: "x ~@16 x!2 ~@5", F: "x ~@11 x ~ x ~@5 x!2 ~@2",
  G: "x ~@19 x!2 ~@2", H: "~@13 x ~@10", I: "~@11 x", J: "~ x ~@16 x!2 ~@4", K: "~ x ~@11 x ~ x ~@5 x!2 ~",
// … 14 more lines

More by The Temptations