Strudelify
KeyG majorTempo70 bpm
0:00/0:00
// Tutu — Davis Miles
// 70 bpm, 4/4, key G major. 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: duplicate parts dropped: ch 8 synth brass 1 (copy of ch 3 trumpet)
// note: Full arrangement: all 91 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/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 · fretless bass
const bass = note(`<
  ~@4 A@4 B@6 C@6 D@2 E ~@3 F G@3 H@4 I@2 J ~@6 K ~@5 L M@4 N@4 O@6 P@2 ~@8 F Q@2 R S Q@2 T U@2 V T W@2 X@2 Y
>`.pickRestart({
  A: "[g2 ~@10 g2 d2 ~@5 f2@4 ~ g2@2 ~@10 g2 d2@5 ~ f2@4 ~ g2@2 ~@10 g2 d2@6 f2@5 g2@3 ~@9 g2 d2 ~@2 f2 ~@2 a#2 ~ a2 ~@2 f2]/4",
  B: "[g2@3 ~@8 g2 d2@6 f2@5 ~ a#3 ~ d4 a#3@2 ~@6 g2 d2@6 f2@4 ~ g2@2 ~@10 g2 d2@6 f2@4 ~ g2@3 ~@9 g2 d2@5 ~ f2@4 ~ g2@3 ~@9 g2 d2@6 f2@5 g2@2 ~@5 a3@2 g3@2 ~ g2 d2 ~@2 f2 ~@2 a#2 ~ a2 ~@2 f2, ~@23 g2@2 ~@119]/6",
  C: "[g2@2 ~@9 g2 d2@5 ~ f2@4 ~@2 a#3 c4 ~ a#3@2 g3@2 ~@4 g2 d2@5 ~ f2@4 ~ g2@4 ~@8 g2 d2@5 ~ f2@3 ~@2 g2@2 ~@10 g2 d2@5 ~ f2@4 ~ g2@2 ~@10 g2 ~@3 a#3@2 ~ a3@2 g3 ~@2 g2@2 ~@10 g2 d2 ~@2 f2 ~@2 a#2 ~ a2 ~@2 f4, ~@23 g2@2 ~@83 d2@6 f2@4 ~@26]/6",
  D: "[e4@3 ~@2 a3@3 d4@3 ~ b3@6 e3@12 ~@18]/2", E: "~@12 a#3 c4 d4 a#3@2 ~@7", F: "g2@2 ~@9 g2 d2@5 ~ f2@4 ~ g2",
  G: "[~@11 g2 d2@5 ~ f2@4 ~ g2@2 ~@10 g2 d2@5 ~ f2@4 ~ g2@3 ~@9 g2 d2 ~@2 f2 ~@2 a#2 ~ a2 ~@3]/3",
  H: "[g2@3 ~@8 g2 d2@5 ~ f2@4 ~ g2@2 ~@10 g2 d2@6 f2@5 g2@2 ~@10 g2 d2@5 ~ f2@4 ~ g2@3 ~@9 g2 d2 ~@2 f2 ~@2 a#2 ~ a2 ~@2 f2]/4",
  I: "[e2@4 ~ a2@3 d2@3 ~ b1@5 ~ e2@12 ~@18]/2", J: "~@2 [c4,d4] ~@3 a#3 ~@2 f3 ~@14", K: "~@5 g1@13 ~@6", L: "~@23 f2",
  M: "[g2@2 ~@9 g2 d2@5 ~ f2@4 ~@2 a#3 ~ d4 a#3 ~@7 g2 d2@5 ~ f2@4 ~ g2@2 ~@10 g2 d2@5 ~ f2@4 ~@2 a#3 ~@2 a#3 ~@7 g2 d2 ~@2 f2 ~@2 a#2 ~ a2 ~@2 f2, ~@23 g2@2 ~@46 g2@2 ~@23]/4",
  N: "[g2@2 ~@9 g2 ~@6 f2@4 ~ g2@2 ~@10 g2 d2@5 ~ f2@3 ~@2 g2@2 ~@10 g2 d2@5 ~ f2@4 ~ g2@2 ~@10 g2 d2@2 ~ f2 ~@2 a#2 ~ a2 ~@2 f2]/4",
  O: "[g2@2 ~@9 g2 d2@5 ~ f2@4 ~@2 a#3 ~@2 [a3,a#3] ~ g3 ~@5 g2 d2@4 ~@2 f2@4 ~ g2@2 ~@10 g2 d2@4 ~@2 f2@3 ~@2 g2@2 ~@10 g2 d2@4 ~@2 f2@3 ~@2 g2@2 ~@10 g2 d2@4 ~@2 f2@3 ~@2 g2@2 ~@10 g2 d2 ~@2 f2 ~@2 a#2 ~ a2 ~@2 f4, ~@23 g2@2 ~@119]/6", // A#maj7
  P: "[e4@4 ~ a3@3 d4@4 b3@5 ~ e3@19 ~@11]/2", Q: "[~@11 g2 d2@4 ~@2 f2@4 ~ g2@2 ~@10 g2 d2@5 ~ f2@3 ~@2 g2]/2",
  R: "~@11 g2 ~@3 f2 ~@2 a#2 ~ a2 ~@2 f2", S: "g2@2 ~@9 g2 d2@4 ~@2 f2@4 ~ g2",
  T: "~@11 g2 d2 ~@2 f2 ~@2 a#2 ~ a2 ~@2 f2",
  U: "[g2@2 ~@9 g2 ~@6 f2@3 ~@2 g2@2 ~@2 a#3@2 ~ a3@2 g3 ~@2 g2 d2@4 ~@2 f2@3 ~@2 g2]/2",
  V: "~@11 g2 d2@4 ~@2 f2@4 ~ g2",
  W: "[g2@2 ~@9 g2 d2@4 ~@2 f2@4 ~@2 a#3 ~@2 a#3@2 ~@6 g2 d2@4 ~@2 f2@3 ~@2 g2, ~@23 g2@2 ~@23]/2",
  X: "[~@11 g2 d2@4 ~@2 f2@4 ~ g2@2 ~@2 a#3@2 ~ a3@2 g3 ~@2 g2 ~@3 f2 ~@2 a#2 ~ a2 ~@2 f2]/2", Y: "g2 ~@11",
})).s("gm_fretless_bass").gain(0.18)

// bass · fretless bass · soft notes
const bass_soft = note(`<
  ~@9 A ~@3 B ~ C ~@2 D ~@3 E F ~@5 G ~@6 H ~@14 I ~ J K ~@4 L ~@17 M ~@4 N O ~@3 P ~ Q ~
>`.pickRestart({
  A: "~ c4 ~@22", B: "~@2 g3 a#3@2 g3 ~@18", C: "~@2 d4 ~@21", D: "~@14 g3 ~@2 g3 ~@6",
  E: "~@17 g3 f3 d3 c3 a#2 a2 g#2", F: "g2 ~@11", G: "~@23 f2", H: "~@3 c4 a#3 g3 ~@2 g3 ~ d3 c3 a#2 g2 f2 g2@3 ~@6",
  I: "~ c4 ~ a3 ~ g3@2 ~@17", J: "~ c4 d4 a3 ~ g3@2 ~@17", K: "~@12 d2@5 ~@7", L: "~ c4 d4 ~@21", M: "~@12 d2 ~@11",
  N: "~@3 d2 ~@2", O: "~@2 g3 ~@21", P: "~ c4 d4 ~@2 g3@2 ~@17", Q: "~@2 g3 ~@9 d2 ~@11",
})).s("gm_fretless_bass").gain(0.09)

// other · trumpet
const trumpet = note(`<
  ~@9 A B@2 C ~@2 A D@2 E@2 F@2 ~@3 A G@2 H A D@2 E@2 F@2 ~@17 A B@2 C ~@2 A D@2 I J F@2 ~@7 A G@2 C A D@2 I ~@10
>`.pickRestart({
  A: "~@23 d5", B: "[g5@17 ~ d6@5 c6@22 ~@2 [g5,a5]]/2", C: "a#5 f6@5", D: "[g5@18 d6@5 c6@19 ~@5 [g5,a5]]/2",
  E: "[a#5@4 f6@32 ~@11 f6]/2", F: "[e6@4 ~ a5@3 d6@4 b5@4 ~ a5 e5@16 ~@2 a#4 ~@2 c5 ~@2 d5@2 ~@4]/2",
  G: "[g5@17 ~ d6@5 c6@22 ~ g5 a5]/2", H: "a#5@2 f6@9 ~", I: "a#5@4 f6@15 ~@5", J: "~@23 f6",
})).s("gm_trumpet").gain(0.11).pan(0.3)

// other · trumpet · soft notes
const trumpet_soft = note("<~@10 A ~@9 B ~@5 A ~@7 B ~@19 A ~@9 B ~@9 A ~@16>".pickRestart({
  A: "~@18 c#6 ~@5", B: "~@8 c#6 ~@8 g5 ~@6",
})).s("gm_trumpet").gain(0.05).pan(0.3)

// bass · slap bass 1
const bass_2 = note(`<
  ~@4 A@4 B@6 C@6 D@2 ~ E F G H I@3 J@4 K@2 ~@3 L ~ M@2 N ~@5 O P@4 Q@4 R@6 S ~ T U@2 V ~@4 H W@2 X Y W@2 Z AA@2 AB Z
  AC@2 AD@2 AE
>`.pickRestart({
  A: "[g1@3 ~@9 d1@4 ~@2 f1@4 ~ g1@4 ~@8 g1 d1@5 ~ f1@4 ~ g1@2 ~@10 g1 d1@6 f1@5 g1@3 ~@9 g1 d1 ~@2 f1 ~@2 a#1 ~ a1 ~@2 f1, ~@11 g1@4 ~@81]/4",
  B: "[g1@3 ~@8 g1 d1@6 f1@5 g1@2 ~@10 g1 d1@6 f1@4 ~ g1@2 ~@10 g1 d1@6 f1@4 ~ g1@3 ~@9 g1 d1@5 ~ f1@4 ~ g1@3 ~@9 g1 d1@6 f1@5 g1@2 ~@10 g1 d1 ~@2 f1 ~@2 a#1 ~ a1 ~@2 f1]/6",
  C: "[g1@2 ~@6 g1 ~@2 g1 d1@5 ~ f1@4 ~ g1@2 ~@10 g1 d1@5 ~ f1@4 ~ g1@4 ~@8 g1 d1@5 ~ f1@3 ~@2 g1@2 ~@10 g1 d1@5 ~ f1@4 ~ g1@2 ~@10 g1 d1@6 f1@4 ~ g1@2 ~@10 g1 d1 ~@2 f1 ~@2 a#1 ~ a1 ~@2 f1]/6",
  D: "[e1@3 ~@2 a1@3 d1@3 ~ b0@6 e1@12 ~@18]/2", E: "~@23 g1", F: "~@2 g1@2 ~@16 g2 ~@3", G: "~@6 d1@3 f1@2 ~",
  H: "g1@2 ~@9 g1 d1@5 ~ f1@4 ~ g1",
  I: "[~@11 g1 d1@5 ~ f1@4 ~ g1@2 ~@10 g1 d1@5 ~ f1@4 ~ g1@3 ~@9 g1 d1 ~@2 f1 ~@2 a#1 ~ a1 ~@3]/3",
  J: "[g1@3 ~@8 g1 d1@5 ~ f1@4 ~ g1@2 ~@10 g1 d1@6 f1@5 g1@2 ~@10 g1 d1@5 ~ f1@4 ~ g1@3 ~@9 g1 d1 ~@2 f1 ~@2 a#1 ~ a1 ~@2 f1]/4",
  K: "[e1@4 ~ a1@3 d1@3 ~ b0@5 ~ e1@12 ~@18]/2", L: "~@5 g1 ~@18", M: "[~@23 g1@3 ~@22]/2", N: "~@5 g0@13 ~@6",
  O: "~@11 f1 ~@6 a#1 ~ a1 ~@2 f1",
  P: "[g1@2 ~@9 g1 ~@6 f1@4 ~ g1@2 ~@10 g1 d1@5 ~ f1@4 ~ g1@2 ~@10 g1 d1@5 ~ f1@4 ~ g1@2 ~@10 g1 d1 ~@2 f1 ~@2 a#1 ~ a1 ~@2 f1]/4",
  Q: "[g1@2 ~@9 g1 ~@6 f1@4 ~ g1@2 ~@10 g1 d1@5 ~ f1@3 ~@2 g1@2 ~@10 g1 d1@5 ~ f1@4 ~ g1@2 ~@10 g1 d1@2 ~ f1 ~@2 a#1 ~ a1 ~@2 f1]/4",
  R: "[g1@2 ~@9 g1 d1@5 ~ f1@4 ~ g1@2 ~@10 g1 d1@4 ~@2 f1@4 ~ g1@2 ~@10 g1 d1@4 ~@2 f1@3 ~@2 g1@2 ~@10 g1 d1@4 ~@2 f1@3 ~@2 g1@2 ~@10 g1 d1@4 ~@2 f1@3 ~@2 g1@2 ~@10 g1 d1 ~@2 f1 ~@2 a#1 ~ a1 ~@2 f1]/6",
  S: "e1@4 ~ a1@3 d1@4 b0@5 ~ e1@6", T: "~@15 g1@5 ~@4", U: "[~@23 g1@2 ~ [g0,g1]@2 ~@20, ~@23 g0 ~@24]/2",
  V: "~@6 d2@7 ~ a#2 g2@2 ~ d2@2 a#2@4", W: "[~@11 g1 d1@4 ~@2 f1@4 ~ g1@2 ~@10 g1 d1@5 ~ f1@3 ~@2 g1]/2",
  X: "~@11 g1 ~@3 f1 ~@2 a#1 ~ a1 ~@2 f1", Y: "g1@2 ~@9 g1 d1@4 ~@2 f1@4 ~ g1",
  Z: "~@11 g1 d1 ~@2 f1 ~@2 a#1 ~ a1 ~@2 f1", AA: "[g1@2 ~@9 g1 ~@6 f1@3 ~@2 g1@2 ~@10 g1 d1@4 ~@2 f1@3 ~@2 g1]/2",
  AB: "~@11 g1 d1@4 ~@2 f1@4 ~ g1",
  AC: "[g1@2 ~@9 g1 d1@4 ~@2 f1@4 ~@2 a#2 ~@10 g1 d1@4 ~@2 f1@3 ~@2 g1, ~@23 g1@2 ~@23]/2",
  AD: "[~@11 g1 ~@6 f1@4 ~ g1@2 ~ g2 ~@8 g1 ~@3 f1 ~@2 a#1 ~ a1 ~@2 f1]/2", AE: "g1@2 g1 ~@21",
})).s("gm_slap_bass_1").gain(0.21).pan(0.7)

// bass · slap bass 1 · soft notes
const bass_soft_2 = note("<~@25 A ~@3 B ~@6 C D@2 E@2 ~@8 F G ~@3 G ~@11 H ~@10 I ~@4 J ~@4 K J I ~>".pickRestart({
  A: "~@11 f1 ~@12", B: "~@23 f1", C: "~@5 g1 ~@2", D: "[~@14 g1@13 ~@21]/2", E: "[~@2 g1 g2@2 ~@18 g1@15 ~@10]/2",
  F: "~@12 d1 ~@2 f1 ~@8", G: "~@12 d1@5 ~@7", H: "~@8 g1!7 ~@9", I: "~@12 d1 ~@11", J: "~@3 d1 ~@2",
  K: "~ c3 d3 a#2@2 g2@2 ~@17",
})).s("gm_slap_bass_1").gain(0.11).pan(0.7)

// chords · orchestra hit
const orchestra_hit = note(`<
  A B C D ~@10 E@2 ~@5 F ~ G C ~@10 H ~ I@2 ~@2 J@2 ~@2 E@2 ~@18 K ~ L M N@2 ~@19 O
>`.pickRestart({
  A: "~@2 [g4,d5,g5]@3 ~@19", B: "~ [g4,d5,g5]@5 ~@6", C: "~@2 [g4,d5,g5] ~@21", D: "~@2 [g4,d5,g5]@11 ~@11",
  E: "[~@23 [g4,g5]@2 ~@23]/2", F: "~@21 [g4,d5,g5]@2 ~", G: "~@23 [g4,d5,g5]", H: "~@21 [g4,c#5,d5] ~@2, ~@21 g5@2 ~",
  I: "[~@23 [g4,g5]@2 ~@23, ~@23 d5 ~@24]/2", J: "[~@23 [g4,d5,g5]@2 ~@23]/2", K: "~@21 [g4,d5,g5] ~@2",
  L: "~@23 [g4,g5]", M: "~@2 [g4,g5] ~@21", N: "[~@23 g5@2 ~@23, ~@23 g4 ~@24]/2", O: "[g2,g3] ~@11",
})).s("gm_orchestra_hit").gain(0.26).pan(0.7)

// chords · pad sweep
const pad_sweep = note("<~@39 A@7 ~@26 B@3 ~@16>".pickRestart({
  A: "[~@23 d3@22 ~ d3@22 ~ g3 d3 ~@43 a3@4 ~ d4@8 ~@2 d4@11 ~@15 a3@12 ~, ~@23 d4@96 g3@23 c4@25 ~, ~@23 a4@8 ~@39 g2@22 ~@2 g2@24 ~ g2@49, ~@71 g3@21 ~ g3@8 d5@67, ~@15 d3@13]/7",
  B: "[~@24 c3@7 ~@41, [g2,d3,d4,g4]@13 ~@5, g3 ~@2, ~@3 c4@14 ~@7]/3", // G5
})).s("gm_pad_sweep").gain(0.14)

// chords · pad sweep · soft notes
const pad_sweep_soft = note("<~@40 A@2 B@4 ~@26 C@3 ~@16>".pickRestart({
  A: "[~@13 a3@8 ~@3, ~@5 a4@10 ~]/2", B: "[~@39 a4@7 ~@13 a4@10 ~@27, ~ g4@15, ~@57 e4@8 ~@31]/4",
  C: "[~@25 g3@27 ~@20, ~@6 c5@11 ~@7]/3",
})).s("gm_pad_sweep").gain(0.09)

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

// drums · rim
const rim = s("rim").struct(`<
  ~@7 A ~ B ~ C ~@7 D ~ E ~@4 F G ~@8 H@9 I ~@9 J ~@10 J H@7 ~@3 F ~@2 K ~@5 J ~@4
>`.pickRestart({
  A: "~@15 x ~@4 x ~@3", B: "~ x ~@2", C: "~@23 x", D: "~@11 x", E: "~@7 x", F: "~@5 x", G: "~@3 x ~@4",
  H: "~ x ~ x ~@4", I: "~@3 x ~@5 x ~@10 x ~@3", J: "~ x ~", K: "~@3 x!2 ~@7",
})).gain(0.38)

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  ~@9 A ~ B ~@6 C ~@2 D ~@9 E F ~@15 G ~@3 H ~@2 I B ~@5 C D ~@2 J ~ K ~@5 L ~@16
>`.pickRestart({
  A: "~ x ~@10", B: "~@5 x", C: "~@2 x!2 ~@2", D: "~@3 x", E: "~@2 x ~@4 x ~@16", F: "~@17 x ~@6", G: "~@5 x ~@2",
  H: "~ x ~", I: "~@5 x ~@6", J: "~ x ~@6", K: "~ x", L: "~@10 x!2",
})).gain(0.21)

// drums · clap
const clap = s("cp").struct(`<
  ~@3 A ~@21 B ~@5 C ~@5 D ~@2 C ~@6 E ~@4 F ~@3 G ~ H ~@4 A ~@2 C ~@5 C I ~@6 J ~@5 C D ~@3
>`.pickRestart({
  A: "~@7 x ~@4", B: "~@2 x!2 ~@2", C: "~@5 x", D: "~ x ~", E: "~@5 x ~@2", F: "~ x ~@10", G: "~@11 x ~@12",
  H: "~@20 x ~@2 x", I: "x", J: "~@9 x!2 ~",
})).gain(0.27)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@31 A ~@5 B ~@13 C ~@4 D ~@27 E ~@6>".pickRestart({
  A: "~@17 x ~@6", B: "~ x", C: "~@5 x", D: "~@7 x ~@7 x ~@8", E: "~ x ~@10",
})).gain(0.11)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@4 A ~ B ~@2 A@2 C A D E F G H ~@4 A ~@3 C I ~@2 J C ~@8 A C A H K ~@4 I C ~ A ~ L M C A ~ N ~@2 A ~@24 O ~@3
>`.pickRestart({
  A: "~@5 x", B: "x ~@6 x ~@4", C: "~@3 x", D: "~@11 x ~@3 x ~@2 x ~@5", E: "~@11 x ~@2 x ~@9",
  F: "~@14 x ~@2 x ~@2 x ~@3", G: "~@9 x!2 ~", H: "~@7 x ~ x ~@2", I: "~@7 x ~@4", J: "~@15 x ~@2 x ~ x ~@3",
  K: "~ x ~@2", L: "~@17 x ~ x ~@4", M: "~@7 x!3 ~@2", N: "x ~@14 x ~@4 x ~@3", O: "~@5 x ~@2",
})).gain(0.05)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@9 A ~@3 B ~ C ~@3 D ~@2 E F ~@6 A ~ E ~@3 G H ~ I E J K L ~@3 E ~@4 A ~@4 F K ~@7 M N ~@3 O C ~@4 E ~ F E P ~@9
>`.pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@7 x ~ x ~@2", D: "~@9 x!2 ~", E: "~@5 x", F: "~ x ~", G: "~@7 x ~@2 x ~", H: "~@22 x!2",
  I: "~@11 x ~@4 x ~ x ~@5", J: "~ x ~@7 x ~@2", K: "~@5 x ~@2", L: "~@4 x ~@5 x!2", M: "~@5 x ~@18", N: "~@2 x!2 ~@2",
  O: "~@3 x!2 ~@7", P: "~ x ~@10",
})).gain(0.32)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@30 [~@7 x ~@4] ~@20 [~@7 x ~@4] ~@27 [~ x] [~@3 x] ~@10>").gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@9 A ~@3 B ~@18 C ~@3 C D ~ E ~ F A ~@2 G ~@6 A ~@5 A ~@11 H I ~@7 J ~@11
>`.pickRestart({
  A: "~@7 x ~@4", B: "~@5 x", C: "~@3 x", D: "~@9 x!2 ~", E: "~@7 x ~@16", F: "~ x ~@5 x!2 ~@3", G: "~ x ~ x ~@5 x!2 ~",
  H: "~ x ~", I: "x ~ x ~ x!2 ~@18", J: "~ x ~@6",
// … 79 more lines

More by Davis Miles