Strudelify
KeyE majorTempo90 bpm
0:00/0:00
// Perdono — Caterina Caselli
// 90 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 electric guitar muted (copy of ch 2 fretless bass); ch 16 piano (copy of ch 5 choir aahs)
// note: Full arrangement: all 74 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 27.
setcpm(90/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(`<
  ~@5 A B@3 C D E F G H I J K L I M N O P Q R S D E F G H I J K L I M N O P T D E F G H I J K L I M N O P Q L I M U L I
  M U L I M N O P V W@2
>`.pickRestart({
  A: "~@17 e2@3 ~@3 e2@2 b1@2 ~@5", B: "~ e2@2 ~@4 e2@2 b1@2 ~@6 e2@2 ~@4 e2@2 b1@2 ~@5",
  C: "~ e2@2 ~@4 e2@2 b1@2 ~@6 e2@3 ~@3 e2 ~ b1@2 ~@5", D: "~ e2@2 ~@4 e2 ~ b1@3 ~@5 e2@2 ~@4 e2@2 b1@3 ~@4",
  E: "~ e2@2 ~@4 e2@2 b1@2 ~@6 e2@2 ~@4 e2@2 b1@3 ~@4", F: "~ e2@2 ~@4 e2@2 b1@3 ~@5 e2@2 ~@4 e2 ~ b1@2 ~@5",
  G: "~ e2@3 ~@3 e2@2 b1@2 ~@6 e2@3 ~@3 e2@2 b1@3 ~@4", H: "~ e2@2 ~@4 e2@2 b1@4 ~@4 c#2@3 ~@3 c#2 ~ g#1@3 ~@4",
  I: "~ c#2@3 ~@3 c#2@2 g#1@3 ~@5 a1@3 ~@3 a1 ~ e1@4 ~@3", J: "~ a1@3 ~@3 a1@2 e1@3 ~@5 b1@3 ~@3 b1@2 f#1@3 ~@4",
  K: "~ b1@3 ~@3 b1@2 f#1@3 ~@5 e2@3 ~@3 e2@2 b1@3 ~@4", L: "~ e2@2 ~@4 e2@2 b1@3 ~@5 c#2@3 ~@3 c#2 ~ g#1@3 ~@4",
  M: "~ a1@3 ~@3 a1@2 e1@3 ~@5 b1@3 ~@3 b1 ~ f#1@3 ~@4", N: "~ a1@3 ~@3 a1@2 b1@3 ~@5 e2@3 ~@3 e2@2 b1@4 ~@3",
  O: "~ e2@3 ~@3 e2@2 b1@3 ~@5 c#2@3 ~@3 c#2@2 g#1@4 ~@3", P: "~ c#2@3 ~@3 c#2 ~ g#1@3 ~@5 a1@3 ~@3 a1@2 e1@3 ~@4",
  Q: "~ a1@3 ~@3 a1 ~ e1@3 ~@5 e2@3 ~@3 e2@2 b1@3 ~@4", R: "~ e2@3 ~@3 e2@2 b1@3 ~@5 e2@3 ~@3 e2@2 b1@3 ~@4",
  S: "~ e2@3 ~@3 e2@2 b1@3 ~@5 e2@3 ~@3 e2 ~ b1@2 ~@5", T: "~ a1@3 ~@3 a1 ~ e1@3 ~@5 e2@3 ~@3 e2 ~ b1@2 ~@5",
  U: "~ a1@3 ~@3 a1@2 b1@3 ~@5 e2@3 ~@3 e2@2 b1@3 ~@4", V: "~ a1@3 ~@3 a1 ~ e1@3 ~@5 e2@3 ~@3 e2@2 b1@2 ~@5",
  W: "[~ e2@2 ~@4 e2@2 b1@2 ~@4 b1@2 e1@32 ~@15]/2",
})).s("gm_fretless_bass").gain(0.39)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@7 B C D E D E D F G H I@3 J@4 K C D E D E D F G H I@3 J@4 K E D E D F G H I@3 J@4 L@3 J@12 K M@2
>`.pickRestart({
  A: "[~@33 e4@45 ~@4 g#4@41 ~@3 a4@49 ~@3 g#4@33 ~@13, ~@30 b2@48 ~ c#3@42 ~@2 [e3,a3]@51 ~ b2@37 ~@12, ~@31 [e3,g#3]@47 ~@3 e4@41 ~@2 c#4@50 ~@2 e3@35 ~@13, ~@32 b3@45 ~@3 [g#3,c#4]@42 ~@3 e4@50 ~@2 [b3,e4]@35 ~@12]/7", // A5 E C#5 E5
  B: "~@17 [e3,g#3,b3,e4]@5 ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@7", // E
  C: "~ [e3,g#3,b3,e4]@5 ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@3 ~ [e3,g#3,b3,e4]@5 ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@7", // E
  D: "~ [e3,g#3,b3,e4]@5 ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@3 ~ [e3,g#3,b3,e4]@5 ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@7", // E
  E: "~ [e3,a3,c#4,e4]@5 ~ [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4]@3 ~ [e3,g#3,b3,e4]@5 ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@7", // A E
  F: "~ [e3,g#3,b3,e4]@5 ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@3 ~ [g#3,c#4,e4,g#4]@5 ~ [g#3,c#4,e4,g#4] ~ [g#3,c#4,e4,g#4]@7", // E C#m
  G: "~ [g#3,c#4,e4,g#4]@5 ~ [g#3,c#4,e4,g#4] ~ [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4] ~ [g#3,c#4,e4,g#4]@3 ~ [e3,a3,c#4,e4]@5 ~ [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4]@7", // C#m A
  H: "~ [e3,a3,c#4,e4]@5 ~ [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4]@3 ~ [f#3,b3,d#4,f#4]@5 ~ [f#3,b3,d#4,f#4] ~ [f#3,b3,d#4,f#4]@7", // A B
  I: "[~ [f#3,b3,d#4,f#4]@5 ~ [f#3,b3,d#4,f#4] ~ [f#3,b3,d#4,f#4]@2 [f#3,b3,d#4,f#4] ~ [f#3,b3,d#4,f#4]@3 ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4] ~ [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]]/3", // B E C#m A
  J: "[~ [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [f#3,b3,d#4,f#4]@4 [f#3,b3,d#4,f#4]@2 [f#3,b3,d#4,f#4]@4 [f#3,b3,d#4,f#4]@2 [f#3,b3,d#4,f#4]@2 [f#3,b3,d#4,f#4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [f#3,b3,d#4,f#4]@2 [f#3,b3,d#4,f#4]@2 [f#3,b3,d#4,f#4]@2 [f#3,b3,d#4,f#4] ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4] ~ [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]]/4", // A B A B E C#m A
  K: "~ [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,g#3,b3,e4]@5 ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@7", // A E
  L: "[~ [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@4 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4] ~ [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@4 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [g#3,c#4,e4,g#4]@2 [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4] ~ [e3,a3,c#4,e4]@4 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]]/3", // A E C#m A
  M: "[~ [e3,g#3,b3,e4]@5 ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4] ~ [e3,g#3,b3,e4]@2 ~@4 e4@45 ~@2, ~@7 b2@24 ~, ~@15 [e3,g#3]@47 ~@2, ~@16 b3@45 ~@3]/2", // E
})).s("gm_acoustic_guitar_nylon").gain(0.2).pan(0.4)

// other · acoustic guitar nylon
const acoustic_guitar_nylon_2 = note("<~@41 A B A C@2 ~@28>".pickRestart({
  A: "~@13 b3@3 ~ b3@11 ~ e4@3", B: "~ c#4@4 b3@4 a3@2 ~ b3@3 c#4@3 b3@14",
  C: "[~ c#4@4 b3@4 a3@2 ~ b3@2 ~ c#4@3 b3@22 ~@24]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.68).pan(0.4)

// other · harpsichord
const harpsichord = note(`<
  A@2 B@5 C D E C F C G H I J K H I L M H I N D E C F C G H I J K H I L M H I O C F C G H I J K H I L M H I P H I L Q H
  I L Q H I L Q H I O R@2
>`.pickRestart({
  A: "[~@33 b5@30 ~, ~@30 b4@33 ~, ~@31 e5@32 ~, ~@32 g#5@31 ~]/2",
  B: "[~@16 g#5@32 ~@13 a5@42 ~@12 e6@34 ~@11, ~@14 g#4@34 ~@10 a4@43 ~@11 b4@36 ~@12, ~@15 [c#5,e5]@33 ~@11 c#5@43 ~@12 b5@34 ~@12, ~@60 e5@42 ~@11 [e5,g#5]@36 ~@11]/5", // C#m E
  C: "~@17 [g#3,g#5]@12 [f#3,f#5]@3", D: "~ [a3,a5]@4 [g#3,g#5]@8 [f#3,f#5]@4 [g#3,g#5]@12 [f#3,f#5]@3",
  E: "~ [a3,a5]@4 [g#3,g#5]@11 ~@16", F: "~ [a3,a5]@4 [g#3,g#5]@8 [f#3,f#5]@4 [g#3,g#5]@12 ~@3",
  G: "~ [a3,a5]@4 [g#3,g#5]@8 [f#3,f#5]@4 [b3,b5]@2 [e4,e6]@2 [g#4,g#6]@2 [e4,e6]@2 ~@7", // A G# F# B E G# E
  H: "~ [b3,b5]@2 [e4,e6]@2 [g#4,g#6]@2 [e4,e6]@2 ~@8 [c#4,c#6]@2 [e4,e6]@2 [g#4,g#6]@2 [e4,e6]@2 ~@7", // B E G# E C# E G# E
  I: "~ [c#4,c#6]@2 [e4,e6]@2 [g#4,g#6]@2 [e4,e6]@2 ~@8 [c#4,c#6]@2 [e4,e6]@2 [a4,a6]@2 [e4,e6]@2 ~@7", // C# E G# E C# E A E
  J: "~ [c#4,c#6]@2 e6@2 [a4,a6]@2 e4@2 ~@8 [b3,d#4,b5,d#6]@6 ~@2 [c#4,e4,c#6,e6]@7, ~@3 e4 ~@3 e6 ~@24", // C# A B C#m
  K: "~ [b3,d#4,b5,d#6]@7 ~ [a3,c#4,a5,c#6]@6 ~@2 [b3,b5]@2 [e4,e6]@2 [g#4,g#6]@2 [e4,e6]@2 ~@7", // B A B E G# E
  L: "~ [c#4,c#6]@2 e6@2 [a4,a6]@2 e4@2 ~@8 [d#4,d#6]@2 [f#4,f#6]@2 [b4,b6]@2 [f#4,f#6]@2 ~@7, ~@3 e4 ~@3 e6 ~@24", // C# A D# F# B F#
  M: "~ [c#4,c#6]@2 e6@2 [a4,a6]@2 e4@2 [d#4,d#6]@2 [f#4,f#6]@2 [b4,b6]@2 [f#4,f#6]@2 [b3,b5]@2 [e4,e6]@2 [g#4,g#6]@2 [e4,e6]@2 ~@7, ~@3 e4 ~@3 e6 ~@24", // C# A D# F# B F# B E …
  N: "~ [c#4,c#6]@2 e6@2 [a4,a6]@2 e4@2 ~@8 [g#3,g#5]@12 [f#3,f#5]@3, ~@3 e4 ~@3 e6 ~@24", // C# A G# F#
  O: "~ [c#4,c#6]@2 e6@2 [a4,a6]@2 e4@2 ~@23, ~@3 e4 ~@3 e6 ~@24", // C# A
  P: "~ [c#4,c#6]@2 e6@2 [a4,a6]@2 e4@2 ~@8 [b3,b5]@2 [e4,e6]@2 [g#4,g#6]@2 [e4,e6]@2 ~@7, ~@3 e4 ~@3 e6 ~@24", // C# A B E G# E
  Q: "~ [b3,b5]@2 d#6@2 [f#4,f#6]@2 b4@2 ~@8 [b3,b5]@2 [e4,e6]@2 [g#4,g#6]@2 [e4,e6]@2 ~@7, ~@3 d#4 ~@3 b6 ~@24", // B F# B E G# E
  R: "[~@17 b5@30 ~@17, ~@14 b4@33 ~@17, ~@15 e5@32 ~@17, ~@16 g#5@31 ~@17]/2",
})).s("gm_harpsichord").gain(0.36).pan(0.6)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@13 A@8 B@4 ~ C@3 D@4 E@5 F@6 D@4 E@5 G@7 H@8 I@4 J@2>".pickRestart({
  A: "[~@17 [e4,g#4,b4]@30 ~@2 [e4,g#4,c#5]@30 ~@2 [e4,a4,c#5]@30 ~@3 b4@31 [e5,g#5,b5]@32 [e5,g#5,c#6]@31 ~ [e5,a5,c#6]@32 [f#5,b5,d#6]@15, ~@113 [f#4,d#5]@31 ~@112]/8", // E C#m A E C#m A B D#m
  B: "[~ [e5,a5,c#6]@8 ~ [f#5,b5,d#6]@8 [e5,g#5,b5]@30 ~ [e5,g#5,c#6]@31 ~ [e5,a5,c#6]@24 ~@23]/4", // A B E C#m A
  C: "[~@17 [b3,g#4]@16 [c#4,a4]@16 [b3,e4,g#4]@47, ~@17 e4@31 ~@48]/3", // E F#m E
  D: "[~ [c#4,e4,a4]@16 [b3,e4,g#4]@31 ~ [e4,g#4,b4]@30 ~@2 [e4,g#4,c#5]@30 ~@2 [e4,a4,c#5]@15]/4", // A E C#m A
  E: "[~@18 b4@31 [e5,g#5,b5]@32 [e5,g#5,c#6]@31 ~ [e5,a5,c#6]@32 [f#5,b5,d#6]@15, ~@17 [f#4,d#5]@31 ~@112]/5", // E C#m A B D#m
  F: "[~ [e5,a5,c#6]@8 ~ [f#5,b5,d#6]@8 [e5,g#5,b5]@30 ~ [e5,g#5,c#6]@31 ~ [e5,a5,c#6]@24 ~@8 [b3,g#4]@16 [c#4,a4]@16 [b3,e4,g#4]@47, ~@113 e4@31 ~@48]/6", // A B E C#m A E F#m E
  G: "[~ [e5,a5,c#6]@8 ~ [f#5,b5,d#6]@8 [e5,g#5,b5]@30 ~ [e5,g#5,c#6]@31 ~ [e5,a5,c#6]@24 ~@8 [e5,g#5,b5]@32 [e5,g#5,c#6]@31 ~ [e5,a5,c#6]@32 [f#5,b5,d#6]@15]/7", // A B E C#m A E C#m A …
  H: "[~ [e5,a5,c#6]@8 ~ [f#5,b5,d#6]@7 [e5,g#5,b5]@32 [e5,g#5,c#6]@31 ~ [e5,a5,c#6]@32 [f#5,b5,d#6]@15]/4", // A B E C#m A B
  I: "[~ [e5,a5,c#6]@8 ~ [f#5,b5,d#6]@8 [e5,g#5,b5]@30 ~ [e5,g#5,c#6]@31 ~ [e5,a5,c#6]@24 ~@8 [b3,e4,g#4]@15]/4", // A B E C#m A E
  J: "[~ [e4,g#4,b4]@16 ~ [g#4,b4,e5]@29 ~@17]/2", // E
})).s("gm_string_ensemble_2").gain(0.15)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@5 A B C D@2 E D E D F G H I ~@6 J D@2 E D E D F G H I ~@6 J E D E D F G H I ~@22 K ~
>`.pickRestart({
  A: "~@23 e4 ~ b3@2 ~@5", B: "~ e4 ~@5 e4 ~ b3@2 ~@6 e4 ~@5 e4 ~ b3@2 ~@5",
  C: "~ e4 ~@5 e4 ~ b3@2 ~@10 [b3,e4,g#4] ~@7 [b3,e4,g#4] ~@2", // E
  D: "~@5 [b3,e4,g#4] ~@15 [b3,e4,g#4] ~@7 [b3,e4,g#4] ~@2", E: "~@5 [c#4,e4,a4] ~@15 [b3,e4,g#4] ~@7 [b3,e4,g#4] ~@2",
  F: "~@5 [b3,e4,g#4] ~@15 [c#4,e4,g#4] ~@7 [c#4,e4,g#4] ~@2", // E C#m
  G: "~@5 [c#4,e4,g#4] ~@15 [c#4,e4,a4] ~@7 [c#4,e4,a4] ~@2", // C#m A
  H: "~@5 [c#4,e4,a4] ~@15 [d#4,f#4,b4] ~@7 [d#4,f#4,b4] ~@2", I: "~@5 [d#4,f#4,b4] ~@26",
  J: "~@21 [b3,e4,g#4] ~@7 [b3,e4,g#4] ~@2", K: "~@15 b3@2 ~@15",
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@7 [~@17 x ~@7 x ~@6] [~ x ~@7 x ~@7 x ~@7 x ~@6]!64 [~ x ~@7 x ~@22] ~>").gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B@5 C B D B C B@3 E B@8 C B@3 C B@3 E B@6 F B D B G B@3 E B@8 D B C B@3 E B@3 H ~
>`.pickRestart({
  A: "~@13 x ~ x ~@5 x ~ x ~@5 x ~@2", B: "~@5 x ~ x ~@5 x ~@7 x ~ x ~@5 x ~@2",
  C: "~@3 x!3 ~ x ~ x ~ x!3 ~ x ~@5 x ~ x ~@5 x ~@2", D: "~@5 x ~ x ~@4 x!2 ~ x ~@5 x ~ x ~@5 x ~@2",
  E: "~@3 x!3 ~ x ~ x ~@3 x ~@7 x ~ x ~@5 x ~@2", F: "~@5 x ~@3 x!5 ~ x ~@5 x ~ x ~@5 x ~@2",
  G: "~@3 x!3 ~ x ~@3 x!2 ~@2 x ~@5 x ~ x ~@5 x ~@2", H: "~@3 x!3 ~ x ~ x ~@3 x ~@18",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A ~ B C@5 D C E C D C@3 D C@8 D C@3 D C@3 D C@6 F C E C D C@3 D C@6 G C@3 D C@3 D C@3 H ~
>`.pickRestart({
  A: "~@17 x ~@14", B: "~@17 x ~@3 x ~@3 x ~@3 x ~@2", C: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  D: "~ x ~@19 x ~@3 x ~@3 x ~@2", E: "~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@2",
  F: "~ x ~@3 x ~@15 x ~@3 x ~@3 x ~@2", G: "~ x ~@3 x ~@3 x ~@11 x ~@3 x ~@3 x ~@2", H: "~ x ~@30",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A ~@16 A ~@10 B ~@3 C ~@6 C ~@7 C ~@3 C ~>".pickRestart({
  A: "~@11 x ~@3 x ~@16", B: "~ x ~@7 x ~@3 x ~@18", C: "~@11 x ~ x ~ x ~@16",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 [~@21 x ~@7 x ~@2] [~@5 x ~@7 x ~@7 x ~@7 x ~@2]!62 [~@5 x ~@7 x ~@18] ~>")
  .gain(0.64)

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

// drums · shaker
const shaker = s("sh").struct("<~@6 A B@2 C D@7 E B@6 F G H D@7 E B@6 C D@7 E B@22 I ~>".pickRestart({
  A: "~@17 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  C: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@5 x ~@7 x ~@2", D: "~@5 x ~@7 x ~@7 x ~@7 x ~@2",
  E: "~@5 x ~@7 x ~@3 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", F: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x",
  G: "~ x ~ x!3 ~ x ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x", H: "~ x ~ x!3 ~ x ~ x ~ x!3 ~ x ~@5 x ~@7 x ~@2",
  I: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@16",
})).gain(0.64)

stack(
  bass, acoustic_guitar_nylon, acoustic_guitar_nylon_2, harpsichord, string_ensemble_2, electric_guitar_clean, kick,
  snare, hihat, mid_tom, tambourine, crash, shaker
)

More by Caterina Caselli