Strudelify

A me me piace 'o blues

Daniele

KeyC majorTempo113 bpm
0:00/0:00
// A me me piace 'o blues — Daniele
// 113 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(113/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 · epiano2
const epiano2 = note(`<
  A@2 B@3 C D C D E F G D G H F I J E K L J E M N@2 O@8 P Q R S T E K Q J E M U V W E K L J E M N@2 O@8 X E K L Y Z Y AA
  AB L AC AD J L Y AE AF AG AH AI AJ AG AK AL AM@8 AN@2 AO@2
>`.pickRestart({
  A: "[~@15 [a2,e3,a3]@3 [g2,d3,g3] ~ [e3,a3] ~@2 [g2,f3,a3,d4]@3 [f2,d#3,g3,c4]@6, ~@10 a2 ~@5]/2", // A5 G5 A5 Dm Cm
  B: "[~ [f2,f3,a#3,d4,f4] ~@3 [g2,g3,c4,e4,g4] ~@3 [a2,a3,d4,f#4,a4] ~@3 [b2,b3,e4,g#4,b4] ~ [e2,d4,g4,c5]@20 ~@5 [g3,b3,c4,e4]@3 ~@5]/3", // A# C D E C Cmaj7
  C: "[g3,a#3,c4,e4] ~ [g3,a3,c4,e4] ~", D: "[g#3,c4,e4,g4] ~ [g3,b3,c4,e4] ~",
  E: "[g3,a#3,c4,e4]@3 ~@5 [g3,a3,c4,e4]@3 ~@5", F: "[g#3,c4,e4,g4]@4 ~@4 [g3,b3,c4,e4]@3 ~@5",
  G: "[g3,a#3,c4,e4]@4 ~@4 [g3,a3,c4,e4]@3 ~@5", H: "[f#3,a#3,c4,f4] ~ [d#3,g3,a#3,d4] ~",
  I: "[g3,a#3,c4,e4]@4 ~@4 [g3,a3,c4,e4]@3 ~@3 [g#3,c4,e4,g4] ~", J: "~ [g#3,c4,e4,g4]@2 ~@5 [g3,b3,c4,e4]@3 ~@5",
  K: "[g#3,c4,e4,g4]@3 ~@5 [g3,b3,c4,e4]@3 ~@5", L: "[g3,a#3,c4,e4]@3 ~@5 [g3,a3,c4,e4]@3 ~@3 [g#3,c4,e4,g4] ~",
  M: "[f#3,a3,c4,e4]@3 ~@5 [d#3,g3,a#3,d4]@3 ~@5", // F#m7b5 D#maj7
  N: "[[g#3,c4,e4,g4] ~@2 [e3,a3]@3 [d3,g3] ~ [e3,a3] ~@2 [f3,a3,d4]@3 [d#3,g3,c4]@6 [f3,a#3,d4,f4]@4 [g3,c4,e4,g4]@4 [a3,d4,f#4,a4]@4]/2", // C A5 G5 A5 Dm Cm A# C …
  O: "[[b3,e4,g#4,b4] [a#3,d4,e4]@2 [a3,c4,e4,g4]@2 [g#3,c4,e4,g4]@2 [b3,c4,e4,g4]@2 [g3,a#3,d4,f4]@2 [a3,c4,e4,g4]@2 [g#3,c4,e4,g4]@2 [b3,c4,e4,g4]@2 [g3,a#3,d4,f4]@2 [f3,a3,c4,e4]@2 [g#3,c4,e4,g4]@2 [b3,c4,e4,g4]@2 [a3,c#4,f4]@4 [g#3,c4,e4,g4]@3]/8", // E Em7b5 Am7 C Cmaj7 Gm7 Am7 C …
  P: "~@4 [g3,b3,c4,e4] ~@3", Q: "[g3,a#3,c4,e4]@3 ~@5 [g3,a3,c4,e4]@2 ~@4 [g#3,c4,e4,g4] ~",
  R: "~ [g#3,c4,e4,g4]@2 ~@5 [g3,b3,c4,e4]@2 ~@6", // C Cmaj7
  S: "[g3,a#3,c4,e4]@3 ~@3 [g3,a3,c4,e4] ~ [g3,a3,c4,e4] g3 f3 [g#3,c4,e4,g4]@2 ~@3", // C7 Am7 C
  T: "[g#3,c4,e4,g4]!2 ~@6 [g3,b3,c4,e4]@2 ~@6", U: "[g#3,c4,e4,g4]@3 ~@5 [g3,b3,c4,e4]@3 ~@3 [g3,a#3,c4,e4] ~",
  V: "~ [g3,a#3,c4,e4] ~@4 [g3,a3,c4,e4] ~@2 [g3,g#3,a3,c4,e4] ~@4 [g#3,c4,e4,g4] ~", // C7 Am7 C
  W: "e3 [g#3,c4,e4,g4]@2 ~@5 [g3,b3,c4,e4]@3 ~@5", X: "~@8 [g3,b3,c4,e4]@3 ~@5",
  Y: "~ [g#3,c4,e4,g4]@3 ~@4 [g3,b3,c4,e4]@3 ~@5", Z: "[g3,a#3,c4,e4]@3 ~@5 [g3,a3,c4,e4]@3 ~@3 [g#3,c4,e4,g4]!2",
  AA: "[g3,a#3,c4,e4]@3 ~@3 [g3,a3,c4,e4] ~ [a3,c4,e4] g3 f3 [g#3,c4,e4,g4]@2 ~ e3 ~", // C7 Am7 Am C
  AB: "[g#3,c4,e4,g4] [g#3,c4,e4,g4]@2 ~@5 [g3,b3,c4,e4]@3 ~@5", // C Cmaj7
  AC: "~ [g#3,c4,e4,g4]@2 ~@5 [g3,b3,c4,e4]@3 ~@3 [g3,a#3,c4,e4] ~", // C Cmaj7 C7
  AD: "~ [g3,a#3,c4,e4]@2 ~@3 [g3,a3,c4,e4] ~@2 [a3,c4,e4]@2 ~@3 [g#3,c4,e4,g4]!2, ~@9 g3 ~@6", // C7 Am7 Am C
  AE: "[g3,a#3,c4,e4]@3 ~@3 [g3,a3,c4,e4] ~ [g3,a3,c4,e4] ~@2 [g#3,c4,e4,g4]@2 ~@3", // C7 Am7 C
  AF: "[g#3,c4,e4,g4] [g#3,c4,e4,f4,g4] ~@2 [f3,c4,e4]@2 ~@3 [f3,a3,c4,e4,g4] ~ [e3,g#3,c4,e4,g4]@2 ~@3, ~@4 [a3,g4] ~@11", // C Fmaj7 C A7
  AG: "~@4 [a2,a3,c4,e4,g4]@3 ~@6 [b2,c#4,f#4,a4]@3", // Am7 F#m
  AH: "~ [a#2,c4,f4,g#4]@3 [a3,c4,e4,g4] ~@4 [f3,a3,c4,e4,g4] ~ [e3,g#3,c4,g4]@2 ~@3, ~@4 f3@2 ~@5 e4 ~@4", // Fm Am7 Fmaj7 C
  AI: "~ [a2,a3,c4,e4,g4] [b2,a3,d4,f#4] [c3,b3,e4,g4]", // Am7 Bm7 Cmaj7
  AJ: "[b2,a3,d4,f#4]@3 [a3,c4,e4,g4] ~@5 [f3,a3,c4,e4,g4] ~ [e3,g#3,c4,g4]@2 ~@3, ~@3 f3@2 ~@6 e4 ~@4", // Bm7 Am7 Fmaj7 C
  AK: "~ [a#2,c4,f4,g#4]@3 [a3,c4,e4,g4] ~@4 [f3,a3,c4,e4,g4] ~ [e3,c4,e4,g4]@2 ~@3, ~@4 f3@2 ~@5 g#3 ~@4", // Fm Am7 Fmaj7 C
  AL: "~ [f3,a#3,d4,f4] [g3,c4,e4,g4] [a3,d4,f#4,a4]", // A# C D
  AM: "[[b3,e4,g#4,b4]@3 ~ [a#3,d4,e4]@8 [a3,c4,e4,g4]@8 [g#3,c4,e4,g4]@8 [b3,c4,e4,g4]@8 [g3,a#3,d4,f4]@8 [a3,c4,e4,g4]@8 [g#3,c4,e4,g4]@8 [b3,c4,e4,g4]@8 [g3,a#3,d4,f4]@8 [f3,a3,c4,e4]@8 [g#3,c4,e4,g4]@8 [b3,c4,e4,g4]@8 [a3,c#4,f4]@16 [g#3,c4,e4,g4]@12]/8", // E Em7b5 Am7 C Cmaj7 Gm7 Am7 C …
  AN: "[~@3 [a2,e3,a3]@3 [d3,g3] ~ [e3,a3] ~@2 [g2,f3,a3,d4]@3 [f2,d#3,g3,c4]@6 ~ [f2,f3,a#3,d4,f4] ~@3 [g3,c4,e4,g4] ~@3 [a2,a3,d4,f#4,a4] ~@2, ~@6 g2@2 a2@2 ~@15 g2@2 ~@5]/2", // A5 G5 A5 Dm Cm A# C D
  AO: "[~ [b2,b3,e4,g#4,b4] ~ [e2,d4,g4,c5]@20 ~ [e3,g#3,c4,e4,g4]!2 ~@6]/2", // E C
})).s("gm_epiano2").gain(0.27)

// bass · electric bass finger
const bass = note(`<
  A@2 B@3 C D E F C G H G I J K C L H G H G I J M@2 N O P O P O Q R S C D T U C G H G I J K C L H G H G I J M@2 N O P O
  P O Q R V C W X Y C Z AA AB AC Y AD AE AF AG AH AI AJ AK AL AM AN AO AP N O P O P O Q R AQ@2 AR@2
>`.pickRestart({
  A: "[~@15 a1@3 g1 ~ a1 ~@2 g1@3 f1@6]/2", B: "[~ f1 ~@3 g1 ~@3 a1 ~@3 b1 ~ e1@20 ~ a1@2 ~@4 b1 ~ c2@2 ~@2]/3",
  C: "~@3 g1 f1@3 ~@4 f1 e1@2 ~@2", D: "e2@4 a1@3 ~@3 b1 ~ c2@2 ~@2", E: "~@4 f1@3 ~@4 d2 e2 b1 e1 ~",
  F: "g#1@2 b1 ~ a1@2 ~@4 b1 ~ c2@2 ~@2", G: "e2@4 a1@2 ~@4 b1 ~ c2@2 ~@2", H: "~@3 g1 f1@2 ~@5 f1 e1@2 ~@2",
  I: "~@3 g1 f1@2 ~@3 e2 d#2@2 d2@2 a1@2", J: "d1@4 f1@3 ~@3 f1 ~ e1@3 ~", K: "e2@3 ~ a1@2 g1 ~ a1 ~ b1 ~ c2@2 ~@2",
  L: "e2@2 ~@2 a1@2 ~@4 b1 ~ c2@2 ~@2", M: "[e2@3 a1@3 g1 ~ a1 ~@2 g1@3 f1@5 ~ f1@4 g1@4 a1@4]/2",
  N: "b1@4 c2@4 g2@3 f#1 f1@4", O: "f2@3 f1 e1@4 e2@3 g#1 a1@2 e2@2", P: "a2@2 a1@2 g1@4 g2@3 g1 f1@4",
  Q: "a2@2 a1@2 b1!2 a1 ~ b1@2 a1 b1 ~ b1 a1 ~", R: "b1 ~ a1@2 a#1!2 a1 ~ a#1 ~ a1 a#1 ~ a#1 a1 ~",
  S: "a#1!2 a1 ~ a1@3 ~@3 b1 ~ c2@2 ~@2", T: "~@3 g1 f1@2 ~@5 e2@3 b1@2", U: "e1 e1@3 a1@2 ~@4 b1 ~ c2@2 ~@2",
  V: "a#1!2 a1 ~ a1@2 ~@4 b1 ~ c2@3 ~", W: "e2@4 a1@2 ~@4 b1 ~ c2@3 ~", X: "~@3 g1 f1@3 ~@4 d2 e2 b1 e1 ~",
  Y: "e2@4 a1@3 ~@3 b1 ~ c2@3 ~", Z: "e2@3 ~ a1@3 ~@3 b1 ~ c2@3 ~", AA: "~@3 g1 f1@2 ~@5 e2@3 b1 ~",
  AB: "e1!2 ~@2 a1@3 ~@3 b1 ~ c2@3 ~", AC: "~@3 g1 f1@4 ~@3 f1 ~@2 e1@2", AD: "f1 ~@2 g1 f1@3 ~ e1 ~@2 f1 e1 ~ e1 ~",
  AE: "~@2 e1 ~ a1@2 g1 ~ a1 ~ b1 ~ c2@2 ~@2, e2 ~@3", AF: "f1 ~@2 f#1 f1@3 ~@4 f1 e1@2 e1@2",
  AG: "e2@4 a1@2 g1 ~ a1 ~ b1 ~ c2@2 ~@2", AH: "~@3 f#1 f1@3 ~@4 e2@3 b1 ~", AI: "e1!2 ~@2 f1@2 ~@3 f1 ~ e1@2 ~@3",
  AJ: "~@4 a1@2 ~@7 b1@2 ~", AK: "~ a#1@3 f1@2 ~@3 f1 ~ e1@2 ~@3", AL: "~ a1 b1 c2", AM: "g1@3 f1 ~@4 f2 f1 ~ e1@2 ~@3",
  AN: "~@4 a1@2 ~@7 b1@3", AO: "~ a#1@2 ~ f1@2 ~@2 f2 f1 ~ e1@2 ~@3", AP: "~ f1 g1 a1",
  AQ: "[a#1!2 a1 a1@3 g1 ~ a1 ~@2 g1@3 f1@6 ~ f1 ~@3 g1 ~@3 a1 ~@2]/2", AR: "[~ b1 ~ e1@20 ~@9]/2",
})).s("gm_electric_bass_finger").gain(0.33)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<~@64 A B C D E B F G H I J K L M N O ~@20>".pickRestart({
  A: "~@6 [c4,e4,a4]!2 ~ [c4,e4,a4] ~@4 [c4,e4,a4] ~", B: "~@3 [c4,e4,a4]@2 ~ [c4,e4,a4] ~@5 [c4,e4,c5]!2 ~@2",
  C: "[c4,e4,b4]!2 ~@4 [c4,e4,a4] ~@7 [c4,e4,a4] a4", D: "~@3 [c4,e4,a4]@2 ~ [c4,e4,a4] ~@7 [c4,e4,a4] a4",
  E: "~ [c4,e4,a4] ~@4 [c4,e4,a4] ~@7 [c4,e4,a4] a4", F: "[c4,e4,b4]!2 ~@4 [c4,e4,a4] ~@7 [c4,e4,a4]!2",
  G: "~@3 [c4,e4,a4]@2 ~ [c4,e4,a4] ~@7 [g#3,c4,e4,g4] [g#3,e4]", // Am C C#m
  H: "~ [g#3,c4,e4,g4] ~@4 [c4,e4,a4] [e4,a4] ~@6 [c4,e4,a4]!2", // C Am A5 Am
  I: "~@3 [c4,e4,a4]@2 ~ [c4,e4,a4] ~@5 [c4,e4,c5] ~ [c4,e4,c5] ~", // Am C
  J: "[c4,e4,b4] ~@5 [c4,e4,a4] a4 ~@2 c4 ~ [c4,e4,a4] ~ [c4,e4,a4] ~", // Cmaj7 Am
  K: "[c4,e4,a4] ~ c4 [c4,e4,a4]@2 ~ [c4,e4,a4] ~@7 [c4,e4,a4] a4", // Am
  L: "~ [c4,e4,a4] ~@4 [c4,e4,a4] c4 ~@6 [c4,e4,a4]!2", // Am
  M: "~@3 [c4,e4,a4]@2 ~ [c4,e4,a4] ~@3 c4 ~ [c4,e4,c5] ~ [c4,e4,c5] ~", // Am C
  N: "[c4,e4,b4]!2 ~@4 [c4,e4,a4]!2 ~@6 [c4,e4,a4] [c4,a4]", O: "~@3 [c4,e4,a4]@2 ~ [c4,e4,a4] ~@9",
})).s("gm_electric_guitar_jazz").gain(0.24).pan(0.7)

// chords · electric guitar jazz · soft notes
const electric_guitar_jazz_2 = note("<~@66 A B@2 C D ~@4 B E F G ~@21>".pickRestart({
  A: "~@12 c4 ~@2 [c4,e4]", B: "~@15 [c4,e4]", C: "~ e4 ~@8 c4 ~@4 c4", D: "~@12 c4 ~@3", E: "~@4 c4 ~@2 a4 ~@2 c4 ~@5",
  F: "~ c4 ~@14", G: "~@10 c4 ~ c4 ~@2 e4",
})).s("gm_electric_guitar_jazz").gain(0.12).pan(0.7)

// chords · brass section
const brass_section = note("<~@79 A B C D E F G D H I ~@7 J@2 K@2>".pickRestart({
  A: "~@6 [a4,c5,e5,g5] ~ [a4,c5,e5,g5] ~ c5 [g#4,e5,f#5] ~@4, ~@11 [c5,g5]@2 ~@3", // Am7 C#m C5
  B: "[g#4,c5,e5,g5]!2 ~@2 [a4,c5,g5] ~@4 [a4,c5,e5,g5] ~ [g#4,c5,e5,g5] ~@4, ~@2 e5 ~@5", // C Am7 C
  C: "~@4 [a4,c5,e5,g5]@2 ~@7 [c#5,f#5,a5]@3", // Am7 F#m
  D: "~ [c5,f5,g#5]@3 [a4,c5,e5,g5] ~@4 [a4,c5,e5,g5] ~ [g#4,c5,e5,g5] ~@4", // Fm Am7 C
  E: "~@2 [a3,c4,e4]@2 [a3,d4,f#4]@2 e4!2, ~@3 [b3,g4]", // Am D Em
  F: "[a3,d4,f#4]@3 [a4,c5,d#5,e5,g5] ~@5 [a4,c5,e5,g5] ~ [g#4,c5,e5,g5] ~@4", // D Am7 C
  G: "~@4 [c5,e5,g5]@2 ~@7 [c#5,f#5,a5]@3, ~@4 a4 ~@11", H: "~ [a#3,d4,f4] [c4,e4,g4] [d4,f#4,a4]",
  I: "[e4,g#4,b4] ~@3", // E
  J: "[~@3 [e4,a4]@3 [d4,g4] ~ [e4,a4] ~@2 [f4,a4,d5]@2 ~ [d#4,g4,c5]@5 ~@2 [a#3,d4,f4] ~@3 [c4,e4,g4] ~@3 [d4,f#4,a4] ~@2]/2", // A5 G5 A5 Dm Cm A# C D
  K: "[~ [e4,g#4,b4] ~ [d4,g4,c5]@20 ~ [d4,g4,c5]!2 ~@6]/2", // E Csus2
})).s("gm_brass_section").gain(0.41)

// other · electric guitar muted
const electric_guitar_muted = note("<~@64 A@8 B A C D B E F A B A G ~ H A B ~@13>".pickRestart({
  A: "~@6 a3!2 g3 a3 ~@6", B: "~@6 a3!2 g3 a3 ~@2 a3!2 g3 a3", C: "c4@3 ~@3 a3!2 g3 a3 ~@2 a3!2 g3 a3",
  D: "~@2 a3!2 g3 a3 ~@2 a3 g3 ~ a3 ~@4", E: "~@6 a3!2 g3 ~@3 a3!2 g3 a3", F: "~ g3 c4@2 ~@2 a3!2 g3 a3 ~@2 a3!2 g3 a3",
  G: "~ c4@2 ~@3 a3!2 g3 a3 ~@2 a3!2 g3 a3", H: "d4@2 ~@4 a3!2 g3 a3 ~@2 a3!2 g3 a3",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.2)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@25 A B@3 C@6 ~@20 A B@3 C@6 ~@23 D@3 C@6 ~@3>".pickRestart({
  A: "~ [a#3,d4,f4] [c4,e4,g4] [d4,f#4,a4]", // A# C D
  B: "[[e4,g#4,b4]@3 ~ [a#3,d4,e4]@7 [a3,c4,e4]@8 [e4,g4]@8 [b3,c4,e4,g4]@8 [d4,f4,a4]@9 [e4,g4,c5]@4, ~@19 [g#3,c4]@5 ~@11 a#3@5 ~@8]/3", // E Em7b5 Am Em Cmaj7 Dm C G#
  C: "[~@3 [g#3,c4,e4,g4]@8 [b3,c4,e4,g4]@9 [a#3,d4,f4,a4]@8 [c4,e4,g4,c5]@8 [g#3,c4,e4,g4]@8 [b3,c4,e4,g4]@8 [a3,c#4,f4]@16 [g#3,c4,e4,g4]@16 ~@12]/6", // C Cmaj7 A#maj7 C Cmaj7 Aaug C
  D: "[~@4 [a#3,d4,e4]@7 [a3,c4,e4]@8 [e4,g4]@8 [b3,c4,e4,g4]@8 [d4,f4,a4]@9 [e4,g4,c5]@4, ~@19 [g#3,c4]@5 ~@11 a#3@5 ~@8]/3", // Em7b5 Am Em Cmaj7 Dm C G#
})).s("gm_string_ensemble_2").gain(0.3)

// bass · slap bass 2
const bass_2 = note(`<
  ~@5 A B C ~@2 D ~@3 E D ~ F ~ G ~@3 H ~@12 G I ~@2 G ~@3 H G ~ J ~ J ~@3 H ~@12 G ~@3 G ~@2 K L M N O ~@2 P Q R S T U
  V ~@13
>`.pickRestart({
  A: "~@15 e1", B: "e2 ~@7", C: "~@7 e2", D: "~ e2 ~@6", E: "~ d2 ~@6", F: "~@2 e2 ~@13", G: "~ e1 ~@6", H: "~ d1 ~@6",
  I: "~@11 e1 ~@4", J: "~@2 e1 ~@13", K: "~@14 e1 ~", L: "~ e1 ~@14", M: "~@2 f1 ~@13", N: "~ e1@2 ~@13",
  O: "~@10 f1 ~@5", P: "~@4 f1@2 ~@3 f1 ~ e1@2 ~@3", Q: "~@4 a1@2 ~@7 b1@2 ~", R: "~ a#1@3 f1@2 ~@3 f1 ~ e1@2 ~@3",
  S: "~ a1 b1 c2", T: "g1@3 f1 ~@4 f2 f1 ~ e1@2 ~@3", U: "~@4 a1@2 ~@7 b1@3", V: "~ a#1@2 ~ f1@2 ~@2 f2 f1 ~ e1@2 ~@3",
})).s("gm_slap_bass_2").gain(0.6)

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

// drums · clap
const clap = s("cp").struct("<~@27 A ~ A ~ A ~ A ~@23 A ~ A ~ A ~ A ~@25 A ~ A ~ A ~ A ~@4>".pickRestart({
  A: "x",
})).gain(0.6)

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@15 x] ~@95 [~@3 x ~@12]>").gain(0.54)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C D E F G D H I H I H I H I@2 H I H I H I J K L B@7 M N O P Q H I R I H I H I@2 H I H I H I J K L B@3 S B@3 M T
  U T V U N H W X@6 Y Z AA AB AC AD AE AF AG L B@7 AH AI AJ ~
>`.pickRestart({
  A: "~ x ~@2 x ~ x!2 ~ x ~ x ~@2 x!2", B: "~ x ~ x ~ x ~ x", C: "x", D: "~@6 x!2 ~@6 x!2",
  E: "~@2 x!2 ~@2 x!2 ~@3 x ~@2 x!2", F: "~@2 x!2 ~@2 x!2 ~@4 x ~ x!2", G: "~@4 x ~ x!2 ~@2 x!2 ~@2 x!2",
  H: "~@2 x!2 ~@2 x!2 ~@2 x ~ x ~ x!2", I: "~@2 x!2 ~@2 x!2 ~@6 x!2", J: "~@2 x!2 ~ x!2 ~ x ~@7", K: "x ~ x!2 ~@12",
  L: "~@3 x ~ x ~ x", M: "~@6 x!2 ~@2 x!2 ~@3 x", N: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3 x",
  O: "~@2 x!2 ~@3 x ~@2 x!2 ~@2 x!2", P: "~@3 x ~@2 x!2 ~@2 x ~ x ~ x ~", Q: "~ x ~@4 x!2 ~@6 x!2",
  R: "~@2 x!3 ~ x!2 ~@2 x!3 ~ x!2", S: "x!2 ~ x ~ x ~ x", T: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2",
  U: "~@3 x ~@2 x!2 ~@2 x!2 ~@3 x", V: "~@3 x ~@2 x!2 ~@2 x!2 ~@2 x!2", W: "~ x!2 ~ x!4", X: "x!8", Y: "x!6 ~@2",
  Z: "~@4 x ~ x!3 ~ x ~ x ~@2 x", AA: "x ~ x ~ x ~ x!3 ~ x!3 ~ x ~", AB: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x!2",
  AC: "x ~ x ~ x ~ x!3 ~ x!3 ~@3", AD: "x ~@2 x ~@2 x!3 ~ x ~ x ~ x!2", AE: "x ~@2 x!2 ~@3 x ~ x ~ x ~@2 x",
  AF: "x ~@3 x ~ x!3 ~ x ~ x ~ x!2", AG: "x!3 ~ x ~@3", AH: "~@5 x ~@2 x ~ x!2 ~ x ~ x",
  AI: "~@2 x!2 ~@2 x ~@3 x ~@3 x ~", AJ: "~ x!2 ~@5",
})).gain(0.48)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@20 B ~@29 B ~@24 C ~@19 D>".pickRestart({
  A: "~@15 x", B: "~ x ~@6", C: "~@5 x ~@2", D: "~@3 x ~@12",
})).gain(0.54)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B C ~ D@3 E B F D F D F D F D@2 F D F D F D G H ~@8 I J K L M F D L B F D F D@2 F D F D F D G H ~@8 I ~ I ~ E I J F
  ~ N ~ N ~ N ~ O P Q R S P T R N ~@8 U V W ~
>`.pickRestart({
// … 67 more lines

More by Daniele