Strudelify

Disincanto

Mango

KeyE minorTempo112 bpm
0:00/0:00
// Disincanto — Mango
// 112 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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 · electric bass finger
const bass = note(`<
  ~@20 A B A C A D E F G H I J K L M N O P Q R S T U V W X Y Z Q R S AA U AB AC@2 ~@7 AD A D E F G H I J K L M N O P Q R
  S T U V W X Y Z Q R S AA U AB AE@6 ~@3
>`.pickRestart({
  A: "e2@3 b2 c3@3 b2", B: "e2@3 b1 c2@3 b1", C: "b1@3 f#2 g2@3 f#2", D: "c2@3 f#2 g2@3 g2", E: "g1@5 ~ g1 ~ g1@6 a1@2",
  F: "d2@5 ~ g2 a2 b2@4 a2@3 ~", G: "e2@4 ~@2 e2 ~ e1@2 f#1@2 g1@4", H: "c2@5 ~ f#2@2 g2@6 f#2@2",
  I: "a1@5 ~ a1 ~ a1@5 ~ a1@2", J: "b1@5 ~ f#2@2 g2@6 f#2@2", K: "c2@5 ~ c2 ~ c2@7 ~, ~@8 b1 ~@7",
  L: "d2@5 ~ d2 ~ d2@8", M: "g2@6 g2 ~ g2@7 ~", N: "a1@5 ~ a1 ~ a1@8", O: "b1@5 ~ b1 ~ b1@6 f#2@2", P: "b2@3 f#2 b2@4",
  Q: "g1@5 ~ g1 ~ g1@7 ~", R: "d2@5 ~ d2@2 e1@3 ~ f#1@3 ~", S: "a1@5 ~ a1 ~ a1@6 ~@2", T: "e2@5 ~ e2 ~ d2@7 ~",
  U: "g1@5 ~ g1 ~ g1@8", V: "d2@5 ~ d2@2 f#1@4 e1@4", W: "a1@5 ~ a1 ~ a1@4 b1@3 ~", X: "c2@6 c2@2 d2@7 ~",
  Y: "e1@5 ~ e1 ~ e1@7 ~", Z: "c1@5 ~ c1@2 c1@7 ~", AA: "e2@5 ~ e2 ~ d2@2 a1@2 d1@4", AB: "d2@5 ~ d2@2 d2@4 d1@4",
  AC: "a1/2", AD: "~@5 a2 b2@2", AE: "a1/6",
})).s("gm_electric_bass_finger").gain(0.6)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@13 A B C D E F G@3 ~@7 H@3 I J K L M@2 N@4 O@4 P Q N@4 R@4 ~@13 S@3 I J K L M@2 N@4 O@4 P Q N@4 T@4 U@6 ~
>`.pickRestart({
  A: "[g4,e5,g5] [f#4,d5,f#5] [e4,c5,e5] [d4,b4,d5]", B: "[c4,a4,c5] [b3,g4,b4] [a3,f#4,a4] [g3,e4,g4]",
  C: "[f#3,f#4,b4]", D: "[e3,g3,c4]", E: "[f#3,a3,d4]", F: "e5 d5, [g3,b3,d4,g4]",
  G: "[[a3,c4,e4,a4,c5] [f#3,d#4,f#4] [e3,e4,g4]@4, ~ [b3,b4]@5]/3", // Am D#m Em B
  H: "[[e4,g4] [f#4,a4] b4 [c4,c5] b4@2 c5@2 g3@2 [f#3,d#4]@2, ~ e4@4 ~, ~ a3 b4]/3", I: "[g3,e4,c5]", J: "[a3,f#4,d5]",
  K: "[e3,c4]@3 [d3,b3]@5, g4", L: "[a2,a3,c4,g4]", M: "[d#3,f#3,b3,f#4]/2",
  N: "[[b4,b5]@3 [a4,a5] [d4,d5] [d5,d6] [a4,a5]@2 [c5,c6]@2 [f#4,f#5] [e4,e5] [g3,b3,f#4,f#5]@2 [d3,f#3,a3,d4,d5]@2, d3@4 e3@3 ~, [g3,b3] a3@2 ~, ~ f#3 c4 ~]/4", // B A D A C F# E Gmaj7 …
  O: "[[b4,b5]@2 [a4,a5] [g4,g5] [a4,a5] [d5,d6] [d4,d5]@2 [e4,e5]@3 [f#4,f#5] [g3,g4,g5]@2 [d3,f#3,a3,a4,a5]@2, d3@4 [e3,c4]@3 ~, [g3,b3] a3@2 ~, ~ f#3 ~@2]/4", // B A G A D E F# G …
  P: "[e3,e4,e5]@2 [f#3,f#4,f#5] [g3,g4,g5] [f#3,f#4,f#5]@4", // E F# G F#
  Q: "[e3,e4,e5]@2 [f#3,f#4,f#5] [g3,g4,g5] [f#3,f#4,f#5]@3 ~", // E F# G F#
  R: "[[b4,b5]@2 [a4,a5] [g4,g5] [a4,a5] [d5,d6] [d4,d5]@2 [e3,c4,e4,c5]@8, d3 ~, [g3,b3] a3@3, ~ f#3 ~@2]/4", // B A G A D C G
  S: "[[e4,g4] [f#4,a4] b4 [c4,c5] b4@2 a4@2 g4@2 [d#4,f#4]@2, ~ e4@4 ~, ~ a3 a3]/3", // Em F#m C D#m
  T: "[[b4,b5]@8 [a4,a5]@4 [g4,g5]@4 [a4,a5]@4 [d5,d6]@4 [d4,d5]@8 [c4,c5] ~@3 [c4,c5] ~@3 [c4,c5] ~@3 [c4,c5]@2 [b3,b4]@2 [c4,c5] ~@3 [c4,c5] ~@3 [c4,c5] ~@3 [c4,c5]@2 [b3,b4]@2, d3 [c3,e3,a4,e5], [g3,b3] a3@3, ~ f#3 ~@2]/4", // B A G A D C B C …
  U: "[[c4,c5] ~@3 [c4,c5] ~@3 [c4,c5] ~@3 [c4,c5]@2 [b3,b4]@2 [c4,c5] ~@3 [c4,c5] ~@3 [c4,c5] ~@3 [c4,c5]@2 [b3,b4]@2 [d4,d5] ~@3 [d4,d5] ~@3 [d4,d5] ~@3 [d4,d5]@2 [b3,b4]@2 ~@48, [e3,a3,a4], f#5 g5 a5@4]/6", // C B C B D B A5
})).s("gm_string_ensemble_1").gain(0.29)

// chords · pad warm
const pad_warm = note(`<
  A@6 B@6 C@3 D E F@2 G@3 B@6 C@3 D E F@2 H I@2 J K L M J K N@2 O P J Q@2 R J S T@2 U@6 B@6 C@3 D E F@2 H I@2 J K L M J
  K N@2 O P J Q@2 R J S T@2 V@6 ~
>`.pickRestart({
  A: "[e1,e2]/6", B: "[[e2,g3,e4] [b2,f#3,d4] e2 [c2,c3,c4] [g2,b3] [d3,f#3,a3], b3 ~, ~@2 g3@3 ~, ~ e4 d4]/6",
  C: "[[e2,b3] c3 [a2,a3], e4, g3@2 ~, ~ c4@2]/3", D: "[b2,f#3,b3,d#4]", E: "[c3,g3,c4,e4]",
  F: "[[d2,d3,f#3,a3] [g2,g3,b3], d4]/2", G: "[[a2,a3,c4,e4] [b2,f#3,d#4] [e2,g3,e4]@4, ~ b3@5]/3", H: "[a2,a3,c4,e4]",
  I: "[b2,f#3,b3,d#4]/2", J: "[g3,b3,d4,g4]", K: "[d3,a3,d4,f#4]", L: "[a3,c4,e4,a4]",
  M: "[e3,b3,e4,g4] [d3,a3,d4,f#4]", N: "[[a3,e4,a4]@2 [c3,e4,g4] [d3,d4,f#4,a4], c4@3 ~]/2", O: "[e3,e4,g4,b4]",
  P: "[c3,c4,e4,g4]", Q: "[[d3,d4,f#4] [a3,c4,e4], a4]/2", R: "[e3,e4,g4,b4] [d3,d4,f#4,a4]", S: "[d3,d4,f#4,a4]",
  T: "[a2,a3,c4,e4]/2", U: "[~ f#5 ~@4, [e2,e3,g3,b3,e4]]/6", V: "[~@2 f#4 [a2,e3]@3, [a3,e4], c4 ~]/6",
})).s("gm_pad_warm").gain(0.29)

// other · piano
const piano = note("<~@16 A@5 ~@11 B@5 ~@17 C@2 ~ D@2 ~@13 E@5 ~@11 F@2 ~@4 C@2 ~ G@2 ~@4>".pickRestart({
  A: "[~@7 e5@2 d5 e5 d5 e5 d5@8 g5@2 e5@6 d#5 e5@3 ~@7]/5", B: "[~@7 e5@2 d5 e5 d5 e5 d5@8 g5@2 e5@6 d#5 d#5@3 ~@7]/5",
  C: "[g5@5 f#5 e5 ~]/2", D: "[~@3 b4@3 ~@2]/2", E: "[~@7 e5@2 d5 e5 d5 e5 d5@8 g5@2 e5@6 d#5@6 ~@5]/5",
  F: "[b5@7 c6@2 a5@6 ~]/2", G: "[~@6 c6 g5@4 ~@5]/2",
})).s("gm_piano").gain(0.05)

// other · melodic tom
const melodic_tom = note("<~@37 A ~@3 B ~@3 C ~ D ~@11 E ~@17 A ~@3 B ~@3 C ~ D ~@7 C ~@7>".pickRestart({
  A: "~@10 f4!2 c4!2 c3 ~", B: "~@10 f3!2 c3!2 f2 c2", C: "~@2 f3 ~@5 c3 ~ f2 ~@5", D: "~@6 f3 ~ c3 ~@7",
  E: "~@4 f3!2 c3 ~ c3!2 f2 ~@5",
})).s("gm_melodic_tom").gain(0.34)

// chords · tubular bells
const tubular_bells = note("<~@2 A B A C A B A C A B A C A B A C A D ~@38 A B A C A B A C ~@37>".pickRestart({
  A: "~@2 [e4,f#4,g4] ~ [e4,f#4,g4] ~ [f#4,g4,a4] ~", // Em F#m
  B: "[f#4,g4,a4]@3 ~ [f#4,g4,a4]@3 ~ [f#4,g4,a4]@2 ~@2 [f#4,g4,a4]@3 ~", // F#m
  C: "[f#4,g4,a4] ~ [f#4,g4,a4] ~ [f#4,g4,a4] ~ [f#4,g4,a4] ~", // F#m
  D: "[f#4,g4,a4]@3 ~ [f#4,g4,a4]@2 ~@2 [f#4,g4,a4]@2 ~@2 [f#4,g4,a4]@3 ~", // F#m
})).s("gm_tubular_bells").gain(0.3).pan(0.4)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@20 A@2 B C B D E F G D H I D J E K L@2 M N O P M N O Q R S M N O P M N T@2 ~ U V@4 B C B D W F G D H I D J E K L@2 M
  N O P M N O Q R S M N O P M N T@2 ~@7
>`.pickRestart({
  A: "b4/2", B: "~@2 [b3,e4] ~ [b3,e4] ~ [b3,e4] ~", C: "~@4 [b3,f#4]@2 ~@2 [b3,f#4]@2 ~@2 [b3,f#4]@3 ~",
  D: "~@2 [g3,c4] ~ [g3,c4] ~ [g3,c4] ~", E: "~@2 [g3,d4] ~ [g3,d4] ~ [g3,d4] ~",
  F: "~@4 [a3,d4]@2 ~@2 [a3,d4]@2 ~@2 [a3,d4]@3 ~", G: "~@4 [b3,e4]@2 ~@2 [b3,e4]@2 ~@2 [b3,e4]@3 ~",
  H: "~@4 [a3,e4]@2 ~@2 [a3,e4]@2 ~@2 [a3,e4]@3 ~", I: "~@4 [b3,d#4]@2 ~@2 [b3,d#4]@2 ~@2 [b3,d#4]@3 ~",
  J: "~@2 [a3,d4] ~ [a3,d4] ~ [a3,d4] ~", K: "~@2 [a3,e4] ~ [a3,e4] ~ [a3,e4] ~",
  L: "~@2 [b3,d#4] ~ [b3,d#4] ~ [b3,d#4] ~", M: "[g2,d3,g3]", N: "[a2,d3,a3]", O: "[a2,e3,a3]",
  P: "[b2,e3,b3] [a2,d3,a3]", Q: "[c3,g3,c4] [d3,a3,d4]", R: "[e3,b3,e4]", S: "[c3,g3], c4@3 ~", T: "[a2,e3,a3]/2",
  U: "~@6 [b3,e4] ~", V: "[b3,e4] ~ [b3,e4] ~ [b3,e4] ~ [b3,e4] ~", W: "~@4 [g3,d4]@2 ~@2 [g3,d4]@2 ~@2 [g3,d4]@3 ~",
})).s("gm_distortion_guitar").gain(0.29).pan(0.6)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@2 A@3 B C D E F G H I J K L J M N O P@2 Q D E F G H I J K L J M N K L@2 R S T U V W X Y Z AA AB AC AD AE AF AG AH@2
  ~@4 C@3 D E F G H I J K L J M N K L@2 R S AI U V W X Y Z AJ AB AC AD AK AF AG AH@2 ~@7
>`.pickRestart({
  A: "[~@11 f#4, e2@6 g4@4 b3@8 ~@2 b3@5 ~ b3@8 ~@2 b3@6 b3@6, ~ e3@7 ~ e3@7 ~ e3@7, ~@4 b3@4 e2@7 ~ e2@7 ~ e2@6 ~@2 e2@7 ~ e2@7 ~, ~@12 f#4@6 ~@4 g4@4 ~@2 f#4@7 ~@3 g4@5 ~@5]/3",
  B: "~@12 f#4@3 ~, e2@8 e2@7 ~, ~@2 e3@13 ~, ~@4 b3@5 ~ b3@5 ~, ~@3 g4@2 ~@3",
  C: "~@3 f#4, e3@3 g4@2 b3@3, ~@2 b3@6 e3@7 ~, ~@4 e4@11 ~",
  D: "~@12 b3@3 ~, b2@3 d4@5, ~@2 f#3@8 f#3@5 ~, ~@4 b3@7 ~@5, ~@8 b2@7 ~",
  E: "~@3 f#4, e3@3 g4@2 b3@3, ~@2 b3@6 e3@7 ~, ~ e4@3", F: "~@12 c4@3 ~, c3@3 d4@5, ~@2 g3@6 c3@7 ~, ~@4 c4@6 g3@5 ~",
  G: "~@3 d4, g2@3 b3@5, ~@2 g3@6 g2@7 ~, ~ a3@2 ~, ~@5 g3@3", H: "~@3 f#4, d3@3 e4@5, ~ a3@3 d3@4, ~ d4@3, ~@5 a3@3",
  I: "~@3 f#4, e3@3 g4@2 b3@3, ~ b3@3 e3@4, ~ e4@3", J: "~@3 e4, c3@3 d4@5, ~ g3@3 c3@4, ~ c4@3, ~@5 g3@3",
  K: "~@3 e4, a2@3 c4@3 ~@2, ~@2 e3@13 ~, ~ a3 a2@2, ~@10 a3@5 ~",
  L: "~@12 b3@3 ~, b2@6 d#4@9 ~, ~@2 f#3@6 b2@7 ~, ~@2 b3@3 f#3@3", M: "~@3 d4 ~@2 e4@2, d3@3 ~ d3@4, ~ f#3@7, ~ a3@3",
  N: "~@3 d4, g2@3 b3@5, ~@2 g3@6 g2@7 ~, ~ a3@3, ~@5 g3@3", O: "~@2 a3 ~@4 d#4, a2 b2, ~ e3@2 c4@2 f#3@3, ~@3 b3",
  P: "[~ [b3,e4]@31, [e3,g3]]/2", Q: "e3 ~@11 f#4@4, ~@2 b3@6 e3@7 ~, ~@4 e4@11 ~, ~@3 g4@2 b3@3",
  R: "[d3,g3,b3,d4]@4 d4 ~ [g3,b3,d4]@3 ~ [g3,b3,d4] ~ [d3,g3,b3,d4]@3 ~, ~@3 d3@2 ~@3", // G
  S: "[d3,f#3,a3]@4 [f#3,a3,d4] ~ [d3,f#3,a3,d4]@4 [f#3,a3,d4] ~ [d3,f#3,a3,d4]@2 [f#3,a3] ~, d4@3 ~@13", // D F#m
  T: "[a2,e3,e4]@4 [a3,c4] ~ [a2,e3,a3,c4,e4]@3 ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~, [a3,c4]@3 ~@9 [a2,e3]@2 ~@2", // A5 Am A5
  U: "[e3,g3,b3,e4]@5 ~ [e3,g3,b3,e4] ~ [d3,f#3,a3,d4]@4 [d3,f#3,a3,d4]@3 ~", // Em D
  V: "[g3,b3,d4]@3 ~ [d3,g3,b3,d4] ~ [d3,b3,d4]@4 [d3,g3,d4] ~ [d3,g3,d4]@2 b3 ~, ~@6 g3@3 ~@3 b3 ~@3", // G G5
  W: "[d3,f#3,a3,d4]@4 a3 ~ [d3,f#3,a3,d4]@4 [f#3,a3] ~ [d3,f#3,a3,d4]@3 ~", // D F#m D
  X: "[a2,c4]@4 [a3,e4] ~ [a2,c4,e4]@4 a3 ~ [a3,c4,e4] ~ [a3,c4,e4] ~, [a3,e4]@3 ~@3 a3@3 ~@3 a2@2 ~@2", // Am A5 Am A5
  Y: "[g3,c4,e4]@3 ~ [g3,c4,e4]@2 c3 ~ [d3,f#3,d4]@2 [a3,d4] ~ [a3,d4]@2 [d3,f#3] ~, c3@4 ~@4 a3 ~@3 [d3,f#3] ~@3", // C D D5 D
  Z: "[g3,b3,e4]@2 e3@2 [g3,b3,e4] ~ [e3,b3]@4 [g3,b3,e4] ~ [e3,b3,e4]@2 g3 ~, ~@6 [g3,e4]@3 ~@3 g3 ~@3", // Em E5 Em E5 C
  AA: "[c3,g3,e4]@4 [g3,c4,e4] ~ [g3,c4,e4]@3 ~ [g3,c4,e4] ~ [c3,c4,e4]@2 g3 ~, c4@3 ~@3 c3@4 ~@2 g3 ~@3", // C
  AB: "[d3,g3]@4 [g3,b3,d4] ~ [d3,g3,b3,d4]@4 [d3,g3,b3,d4] ~ [d3,g3,b3,d4]@2 a3 ~, [b3,d4]@3 ~@13", // G5 G Bm
  AC: "[d3,f#3,a3,d4]@4 [f#3,a3,d4] ~ [d3,f#3,a3,d4]@3 ~ [d3,f#3,a3,d4] ~ [d3,f#3,a3,d4]@3 ~", // D
  AD: "[a2,e3,a3,c4,e4]@3 ~ [e3,a3,c4,e4] ~ [a2,e3,a3,c4,e4]@3 ~ [a2,e3,a3,c4,e4] ~ [a2,e3,a3,c4,e4]@2 [e3,a3] ~", // Am A5
  AE: "[e3,g3,b3,e4]@3 ~ [e3,g3,b3,e4]@2 e3 ~ [d3,f#3,a3,d4]@3 ~ [f#3,a3,d4]@2 d3 ~", // Em D
  AF: "[g3,b3,d4]@3 ~ [g3,b3,d4] ~ [d3,b3,d4]@4 g3 ~ [d3,g3,b3,d4]@2 g3 ~, ~@6 g3@3 ~@7", // G
  AG: "[d3,a3]@4 [f#3,a3,d4] ~ [f#3,a3,d4]@3 ~ [f#3,a3,d4] ~ [a3,d4]@2 [d3,f#3,a3] ~, [f#3,d4]@3 ~@3 d3@4 ~@2 [d3,f#3] ~@3", // D5 D D5 D
  AH: "[a2,e3,a3,c4,e4]/2", // Am
  AI: "[a2,e3,e4]@4 [a3,c4] ~ [a2,e3,c4]@4 [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~, [a3,c4]@3 ~@3 [a3,e4]@3 ~@3 [a2,e3]@2 ~@2", // A5 Am A5
  AJ: "[c3,e4]@4 [g3,c4,e4] ~ [g3,c4,e4]@3 ~ [g3,c4,e4] ~ [c3,c4,e4]@2 g3 ~, [g3,c4]@3 ~@3 c3@4 ~@2 g3 ~@3", // C C5
  AK: "[e3,g3,b3,e4]@3 ~ [g3,b3,e4]@2 e3 ~ [d3,f#3,a3,d4]@3 ~ [f#3,a3,d4]@2 d3 ~, ~@4 e3 ~@11", // Em D
})).s("gm_acoustic_guitar_nylon").gain(0.29).pan(0.3)

// chords · pizzicato strings
const pizzicato_strings = note(`<
  ~@38 A B C D E B F G H I J K L M N O P ~@23 A B C D E B F G H I J K L M N O P ~@8
>`.pickRestart({
  A: "g3 ~ d4 ~ g4 ~ [g4,b4] ~ d4 ~@3 [g4,d5] ~@3", B: "a3 ~ d4 ~ f#4 ~ a4 ~@5 [f#4,a4,d5] ~@3",
  C: "a3 ~ e4 ~ a4 ~ [c5,e5] ~@5 a4 ~@3", D: "~@2 g4 ~ b4 ~ [b4,e5] ~ d4 ~ f#4 ~ [f#4,a4] ~ d5 ~",
  E: "~@2 d4 ~ g4 ~ [g4,b4] ~@5 [g4,b4,d5] ~@3", F: "a3 ~ e4 ~ a4 ~ [a4,c5] ~@3 a4 ~ [a4,e5] ~@3",
  G: "c4 ~ g4 ~ [g4,c5] ~ [g4,e5] ~ d4 ~ f#4 ~ [f#4,a4] ~ [f#4,a4,d5] ~", // C5 C F#m D
  H: "b3 ~ e4 ~ g4 ~ [g4,b4] ~@5 [g4,b4,e5] ~ g4 ~", I: "~@2 c4 ~ g4 ~ [g4,c5] ~@3 g4 ~ [g4,c5,e5] ~ g4 ~",
  J: "g3 ~ d4 ~ g4 ~ [g4,b4] ~ d4 ~ g4 ~ [g4,b4,d5] ~@3", K: "a3 ~ f#4 ~ a4 ~ d4 ~ [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3",
  L: "a3 ~ e4 ~ a4 ~ [a4,c5] ~@3 a3 ~ [a4,c5,e5] ~@3", M: "e4 ~ g4 ~ [g4,b4] ~ [g4,e5] ~ d4 ~ f#4 ~ [f#4,a4] ~ d5 ~",
  N: "g3 ~ d4 ~ g4 ~ [g4,b4] ~@3 g3 ~ [g4,b4,d5] ~@3", O: "d4 ~ f#4 ~ a4 ~ [f#4,a4,d5] ~ a3 ~ d4 ~ [f#4,a4] ~@3",
  P: "a3 ~@15",
})).s("gm_pizzicato_strings").gain(0.42)

// other · lead 8 bass lead
const lead_8_bass_lead = note("<A@4 ~@95 A@4>".pickRestart({
  A: "[e2,e3]/4", // E
})).s("gm_lead_8_bass_lead").gain(0.04)

// drums · kick
const kick = s("bd").struct("<~@20 [x ~@2 x!2 ~@3]!36 ~@7 [~@5 x ~@2] [x ~@2 x!2 ~@3]!32 ~@7>").gain(0.6)

// drums · rim
const rim = s("rim").struct(`<
  ~@20 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 C@4 ~@3 D 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 C@3 ~@4
>`.pickRestart({
  A: "~@2 x ~ x ~@2 x ~ x ~@6", B: "~@2 x ~ x ~@2 x ~ x ~@2 x ~@3", C: "~ x ~ x", D: "~@3 x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@20 A@17 B A@7 C A@10 ~@7 D A@13 B A@7 C A@10 ~@7>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x!3 ~@3", C: "~ x!2 ~@3 x ~", D: "~@3 x",
})).gain(0.53)

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

// drums · low tom
const low_tom = s("lt").struct("<~@10 A B ~ C ~@4 A B ~@36 D B D B ~@36 D B D ~@4>".pickRestart({
  A: "x", B: "~@3 x", C: "~@7 x", D: "~@3 x ~@4",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A B C@2 D ~@3 A B C ~@36 E@4 ~@36 E@3 ~@4>".pickRestart({
  A: "~@3 x!2 ~@3", B: "~ x ~@5 x", C: "~@5 x ~@2", D: "~@2 x!2 ~@4", E: "~@2 x ~@2 x ~@2",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@56 A B A B ~@36 A B A ~@4>".pickRestart({
  A: "~@3 x", B: "~@3 x ~@4",
})).gain(0.27)

// drums · ride
const ride = s("rd").struct("<~@58 [x!2]!2 ~@38 [x!2] ~@4>").gain(0.33)

// drums · crash
const crash = s("cr").struct("<~@38 A ~@3 A ~@3 A ~ A ~@3 A ~ A ~@23 A ~@3 A ~@3 A ~ A ~@3 A ~ A ~@8>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@2 [~ x ~ x]!54 ~@4 [~ x ~ x]!36 ~@7>").gain(1.35)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@2 A@5 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 C@18 ~@4 A@3 B A B A B A B A B A B A B A B C@18
// … 9 more lines

More by Mango