Strudelify

Dolce uragano

Gianni Bella

KeyD♭ majorTempo70 bpm
0:00/0:00
// Dolce uragano — Gianni Bella
// 70 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 69 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 · electric bass finger
const bass = note(`<
  A B C D E F G H@2 I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM Q R S T U V W X AN X AN X
  AN X AN X AN X AN X AN X AN X AN AO AP@3
>`.pickRestart({
  A: "db2@7 ~@3 ab1@2 db2@7 ~@3 f1@2", B: "gb1@7 ~@3 gb1@2 ab1@5 ~ ab1@5 ~", C: "db2@8 ~@2 ab1@2 db2@7 ~@3 f1@2",
  D: "gb1@8 ~@2 gb1@2 ab1@5 ~ ab1@3 ~ ab1 bb1", E: "db2@21 ~ ab1@2", F: "db2@10 bb1@2 ab1@11 ~",
  G: "eb2@10 db2@2 b1@9 ~ bb1@2", H: "[ab1@3 ~ ab1@2 ab1@3 ~ ab1@2 db2@21 ~ ab1@2 db2@11 ~]/2",
  I: "db2 ~ db2 ~@5 ab1@2 bb1 ~ db2@2 ~@4 b2@5 ~", J: "ab1 ~@3 ab1 bb1 eb2 ~@2 eb3@3",
  K: "b1!2 ~@2 b1 bb1 ab1 ~ ab1 ab2 f2 eb2", L: "db2@2 ~@4 bb2@2 ab2@2 f2@2 db2@9 ~ ab1@2",
  M: "db2!2 ~@2 ab1 bb1 db2@4 gb1 g1", N: "ab1@6 ~@4 eb2@2 ab1 ~ ab1 ~@5 b1@2 db2@2",
  O: "eb2@6 ~@4 db2@2 b1 ~ b1@2 ~@4 ab1@2 bb1@2", P: "c2@6 ab1@4 eb2@2 ab2@5 ~ ab2@5 ~", Q: "db2@9 ~ db2 ~ db2@10 f1@2",
  R: "gb1@8 db2@2 f2@2 eb2@9 ~ eb2@2", S: "ab1@5 ~ ab1@4 ab1@2 db2@9 ~ db2@2", T: "f2@9 ~ f1@2 gb1@9 ~ gb1@2",
  U: "ab1@5 ~ ab1@3 ~ ab1@2 db2@9 ~ db2 ~", V: "db2@9 ~ f1@2 gb1@3 ~ gb1@5 ~ gb1@2",
  W: "ab1@3 ~ ab1 ~ ab1@3 ~ ab1@2 db2@3 ~ db2@5 ~ db2 ~", X: "db2@10 f1@2 gb1@3 ~ gb1@2 gb2@3 ~ gb1@2",
  Y: "ab1@5 ~ ab1@4 ~@2 db2@9 ~ db2 ~", Z: "db2@5 ~ db2 ~@3 f1@2 gb1@3 ~ gb1@2 gb2@2 ~@2 gb1@2",
  AA: "ab1@5 ~ ab1@5 ~ db2@5 ~ db2@5 ~", AB: "db2@2 db2@2 ~@6 bb1@2 db2@5 ~ db2@6",
  AC: "ab1 ~ ab1@2 ~@6 ab1@2 eb2@5 ~ eb2@5 ~", AD: "b1 ~ b1@2 ~@4 bb1@2 a1@2 ab1 ~ ab1@2 ab1 ~ ab1 ~ ab1 ~ ab1 bb1",
  AE: "db2@7 ~ ab1 bb1 db2 eb2 db2@11 ~", AF: "db2 ~ db2 ~@5 ab1@2 bb1 ~ db2@5 ~ b2@5 ~",
  AG: "ab1 ~ ab1@2 ~@4 bb2@2 ab2 ~ eb2@5 ~ eb3@6", AH: "b1@2 b1@2 ~@4 b1@2 bb1@2 ab1@5 ~ ab2@4 f2@2",
  AI: "db2@5 ~ ab1 bb1 db2 ~ db2 eb2 db2@9 ~ ab1@2", AJ: "db2!2 ~@2 ab1 bb1 db2@3 f2@2 g1",
  AK: "ab1@9 ~ eb2@2 ab1 ~ ab1@7 ~ ab1@2", AL: "eb2@8 ~@2 db2@2 b1 ~ b1@5 ~ bb1@2 b1@2",
  AM: "c2@6 ~@2 c2@2 eb2@2 ab1@5 ~ ab1@5 ~", AN: "ab1@5 ~ ab1@4 ~@2 db2@3 ~ db2@5 ~ db2 ~",
  AO: "db2@10 f1@2 gb1@3 ~ gb1@2 gb1@3 ~ gb1@2", AP: "[~ ab1@6 ~@2 ab1@6 ~@3 db1@10 ~ db2@21 ~@22]/3",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · string ensemble 2
const string_ensemble_2 = note("<A B A B ~@13 C@4 D@2 E@2 F@2 ~@13 C@4 D@2 G@18 H@5>".pickRestart({
  A: "ab3 a3, [db4,f4]", B: "[bb3,db4,gb4] [c4,eb4,ab4]",
  C: "[ab4 a4 ~@2 c4 db4 c4 [db4,gb4,bb4], db4@3 eb4@2 f4@2 ~, f4@2 [bb3,gb4]@2 ab4@3 ~]/4", // Gb Ebm
  D: "[[c4,eb4] ~ a4 [gb4,bb4], ab4 ~, ~ db4@3, ~ f4@2 ~]/2", // Cm Gb
  E: "[[c4,eb4] ~ a4 [bb3,gb4], ab4 ~, ~ db4@3, ~ f4@2 ~]/2", // Cm Ebm
  F: "[[c4,eb4] ~ a4 [bb3,eb4,gb4], ab4 ~, ~ [db4,f4]@2 ~]/2", // Cm Ebm Db
  G: "[[c4,eb4,ab4] ab4 a4 [bb3,gb4], ~ db4@3, ~ f4@2 ~]/2", // Ab Ebm
  H: "[[c4,eb4,ab4]@12 ab4@12 a4@12 [bb3,gb4]@13 [c4,eb4,ab4]@17 [bb3,gb4]@10 ~ [db4,f4,ab4]@21 ~@22, ~@12 db4@37 ~@71, ~ f4@2 ~@7]/5", // Ab Ebm Ab Ebm Db
})).s("gm_string_ensemble_2").gain(0.14).pan(0.3)

// other · alto sax
const alto_sax = note("<~@6 A B C D E F G ~@18 C H E I J ~@33>".pickRestart({
  A: "~@11 f3", B: "bb3@2 ab3@2 f3@2 bb3@2 ab3@2 f3 ~ f3@3 ~@9", C: "~@8 f3@2 gb3@2 ab3@3 ~ gb3@2 bb3@4 ab3@2",
  D: "gb3@2 f3@3 ~@3 f3@2 gb3@2 ab3@3 ~ gb3@2 bb3@4 ab3 ~", E: "gb3@4 ~@4 gb3@2 ab3@2 bb3@3 ~@9",
  F: "~@8 f3 ~ gb3 ~ bb3@2 ab3 ~ f3 ~ bb3@2 ab3@2 f3 ~", G: "f3 ~@5",
  H: "gb3@2 f3@3 ~@3 f3@2 gb3@2 ab3@3 ~ gb3@2 bb3@4 ab3@2", I: "~@10 db3 ~ gb3@2 f3@2 db3@2 gb3@2 f3@2 db3 ~",
  J: "db3 ~@7",
})).s("gm_alto_sax").gain(0.33)

// chords · piano
const piano = note(`<
  A B A C D E F G@3 H I J K L F M N O P Q R S T S R U V@2 H I W@2 H I J K L F M N O P Q R S T S X S X S X S X S X S X S
  X S X S X S Y ~@2
>`.pickRestart({
  A: "~@2 [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~@3 [a4,db5,f5] ~ [a4,db5,f5] ~ [a4,db5,f5] ~ [a4,db5,f5] ~ [a4,db5,f5] ~", // Db Aaug
  B: "~@2 [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [bb4,db5] ~@3 [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~, ~@5 gb4@2 ~@5", // Gb Bbm Gb Ab
  C: "~@2 [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~@5", // Gb Ab
  D: "db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3, db2@23 ~",
  E: "db4 ab3 f3 db4 ab3 f3 eb4 b3 ab3 eb4 b3 ab3, db2@11 ~ ab1@9 ~@3",
  F: "eb4 bb3 gb3 eb4 bb3 gb3 eb4 b3 gb3 eb4 b3 gb3, eb2 b1",
  G: "[eb4@2 c4@2 ab3@2 eb4@2 c4@2 ab3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3 ~ db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2, ab1@12 db2@23 ~ db2@23 ~ db2@11 ~]/3",
  H: "eb4 b3 ab3 eb4 b3 ab3 eb4 bb3 gb3 eb4 bb3 gb3, ab1@3 ~ eb2@4",
  I: "eb4 b3 gb3 eb4 b3 gb3 eb4 c4 ab3 eb4 c4 ab3, b1 ab1",
  J: "db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3, db2@12 db2 ~@11",
  K: "db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3, ~@12 db2@11 ~",
  L: "eb4 b3 ab3 eb4 b3 ab3 eb4 b3 ab3 eb4 b3 ab3, ab1",
  M: "eb4@2 c4@2 ab3@2 eb4@2 c4@2 ab3@2 eb4@2 c4@2 ab3@2 eb4@2 c4@2 ab3 ~, ab1@23 ~",
  N: "[ab4,db5,f5]@10 ~@2 [a4,db5,f5]@9 ~@3", O: "[gb4,bb4,db5]@10 ~@2 [gb4,bb4,eb5]@9 ~@3",
  P: "[ab4,c5,eb5]@9 ~@3 [ab4,db5,f5]@11 ~", Q: "[ab4,c5,f5]@9 ~@3 [gb4,bb4,db5]@10 ~@2",
  R: "[ab4,c5,eb5]@10 ~@2 [ab4,db5,f5]@11 ~", S: "[a4,db5,f5]@9 ~@3 [gb4,bb4,db5]@10 ~@2",
  T: "[ab4,c5,eb5]@3 ~ [ab4,db5,f5]@3 ~", U: "[a4,db5,f5]@5 ~ [gb4,bb4,eb5]@5 ~",
  V: "[[c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2 db4@2 ab3@2 f3@2, ~@12 db2@23 ~ db2@11 ~]/2", // Ab
  W: "[db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3, db2@12 db2@23 ~ db2@11 ~]/2",
  X: "[ab4,c5,eb5]@10 ~@2 [ab4,db5,f5]@9 ~@3", Y: "~ [ab4,eb5]@14 ~@9, ~ c5@12 ~@11",
})).s("gm_piano").gain(0.21).pan(0.9)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  A B C D ~@12 E F G H I J K L ~@15 E F G M I J K N K N K N K N K N K N K N K N K N K N K O@3
>`.pickRestart({
  A: "~@4 f5 ab5 a5@4 f5 a5", B: "bb5@11 ~ db6@6 c6@6", C: "~@8 f5@2 ab5@2 a5@7 ~ f5@2 a5@2",
  D: "bb5@11 ~ db6@6 c6@3 ~@3", E: "eb5 ~ ab4 ~ ab4 ~ eb5 ~ ab4 ~ ab4 ~ ab4 ~ eb5 ~ ab5 ~ ab4 ~ eb5 ~ ab5 ~",
  F: "f5 ab4 db5 ab5 f5 ab5 a5@6", G: "bb5 db6", H: "eb6@6 ~@5 f5", I: "eb5@10 c5@2 bb4@11 ~",
  J: "ab4@6 ~@3 db5 f5 ab5", K: "a5@2 db5 eb5 f5 a5 bb5@2 ~ bb4@3", L: "f5@6 eb5@5 ~@13", M: "eb6@5 ~@6 f5",
  N: "f5@6 eb5@5 ~@7 db5@2 f5@2 ab5@2", O: "[~ f5@8 eb5@8 ~ eb5@10 ~ db5@21 ~@22, ~@18 db6@31 ~@23]/3",
})).s("gm_string_ensemble_1").gain(0.25)

// other · distortion guitar
const distortion_guitar = note(`<
  A B A C ~@11 D E ~@6 F G H I J ~@10 D E ~@6 F G H K L G H M L G H N F G H K F G H O P@3
>`.pickRestart({
  A: "[db4,db5] [f4,f5]", B: "[eb4,eb5]@11 ~ db5@6 [c4,c5]@6", C: "[eb4,eb5]@9 [db5,d5] c5 ~@13",
  D: "[eb3,bb3,eb4]@4 [db3,ab3,db4] [c3,g3,c4] [b2,gb3,b3]@3 ~ [b2,gb3,b3] [bb2,f3,bb3]", // Eb5 Db5 C5 B5 Bb5
  E: "[ab2,eb3,ab3]@2 [ab2,eb3,ab3]!4 [ab3,eb4,ab4]!6", F: "~@12 [db4,db5]@11 ~", G: "[f4,f5]@12 [eb4,eb5]@11 ~",
  H: "[db4,db5]@6 [c4,c5]@4 ~@2 [db4,db5]@11 ~", I: "[f4,f5]@12 [eb4,eb5]@9 [d4,d5] [c4,db4,c5,db5] [bb4,b4]",
  J: "a4 ab4 ~@22", K: "[f4,f5]@12 [eb4,eb5]@9 [d4,d5] [db4,c5,db5] [bb4,b4]", L: "a4 ~@11 [db4,db5]@11 ~",
  M: "[f4,f5]@12 [eb4,eb5]@9 d5 [c5,db5] [bb4,b4]", N: "[f4,f5]@12 [eb4,eb5]@9 [d4,d5] [c5,db5] [bb4,b4]",
  O: "[f4,f5]@12 [eb4,eb5]@9 [d4,d5] [db4,db5] [b4,c5]", // F Eb D Db Cmaj7
  P: "[~ [f4,f5]@8 [eb4,eb5]@9 [eb4,eb5]@8 ~@2 db4@23 ~@21, ~@27 db5@23 ~@22]/3", // F Eb
})).s("gm_distortion_guitar").gain(0.27).pan(0.7)

// other · distortion guitar · soft notes
const distortion_guitar_soft = note("<~ A ~ B ~@22 C D ~@21 E F ~@2 G F ~@2 H I ~@2 E I ~@2 J ~@3>".pickRestart({
  A: "~@2 db4 ~", B: "~@9 [db4,d4] [b3,c4,b4] [a3,bb3,a4,bb4] [ab3,ab4] ~@11", C: "~@23 [bb3,b3]", D: "a3 ab3 ~@22",
  E: "~@22 c4 [bb3,b3]", F: "a3 [ab3,ab4] ~@22", G: "~@21 d4 [c4,db4] [bb3,b3]", H: "~@22 [c4,db4] [bb3,b3]",
  I: "[a3,a4] [ab3,ab4] ~@22", J: "~@23 [b3,c4]",
})).s("gm_distortion_guitar").gain(0.14).pan(0.7)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@4 A B C D A@2 E F A@2 G C H ~@10 I A E F A@2 E F A@2 G C H ~@29>".pickRestart({
  A: "db4 ab3 f3 db4 ab3 f3 db4 ab3 f3 db4 ab3 f3", B: "db4 ab3 f3 db4 ab3 f3 eb4 b3 ab3 eb4 b3 ab3",
  C: "eb4 bb3 gb3 eb4 bb3 gb3 eb4 b3 gb3 eb4 b3 gb3", D: "eb4 c4 ab3 eb4 c4 ab3 db4 ab3 f3 db4 ab3 f3",
  E: "eb4 b3 ab3 eb4 b3 ab3 eb4 bb3 gb3 eb4 bb3 gb3", F: "eb4 b3 gb3 eb4 b3 gb3 eb4 c4 ab3 eb4 c4 ab3",
  G: "eb4 b3 ab3 eb4 b3 ab3 eb4 b3 ab3 eb4 b3 ab3", H: "eb4 c4 ab3 eb4 c4 ab3 eb4 c4 ab3 eb4 c4 ab3",
  I: "~@6 db4 ab3 f3 db4 ab3 f3",
})).s("gm_lead_2_sawtooth").gain(0.14).pan(0.1)

// other · piano
const piano_2 = note("<~@6 A B C D E F@2 ~@18 C D E G@2 ~@33>".pickRestart({
  A: "~@22 f3 ~", B: "bb3 ab3@3 f3 ~ bb3 ab3@3 f3@7 ~@7", C: "~@10 gb3 ~ ab3@4 gb3 ~ bb3@4 ab3 ~",
  D: "gb3 f3@7 ~ gb3@3 ab3@3 gb3@3 bb3@4 ab3 ~", E: "gb3@10 ab3 ~ bb3@6 ~@6",
  F: "[~@7 f3@3 gb3 ~ bb3@3 ab3 f3 ~ bb3 ab3@3 f3@7 ~@19]/2", G: "[~@10 db3 ~ gb3 f3@3 db3 ~ gb3 f3 ~ db3@9 ~@18]/2",
})).s("gm_piano").gain(0.05)

// bass · synth bass 1
const bass_2 = note("<~@8 A B C@2 B@2 C@3 ~@10 A B C@2 B@2 C@2 B@2 C@3 ~@29>".pickRestart({
  A: "~@12 db3!2 db4 db3 db4 db3 db4!2 db3!4", B: "db3!2 db4 db3 db4 db3 db4!2 db3!6 db4 db3 db4 db3 db4!2 db3!4",
  C: "eb3!2 eb4 eb3 eb4 eb3 eb4!2 eb3!6 eb4 eb3 eb4 eb3 eb4!2 eb3!4",
})).s("gm_synth_bass_1").gain(0.24).pan(0.6)

// other · electric guitar clean
const electric_guitar_clean = note("<~@19 A B C D E ~@18 F G H I ~@8 J K L@2 M N O P Q R S T U@3>".pickRestart({
  A: "~@6 f4@2 ~ f4@2 db4", B: "c4 ab3@5 gb3@5 ~", C: "~@12 ab5@2 f5@2 ~@2 ab5 ~ f5@4", D: "db5@9 ~ db5@2 bb4@8 ~@4",
  E: "ab4 ~@2", F: "~@12 f4@5 ~ f4@3 ~ eb4@2", G: "f4@2 ab4@5 ~ bb4@2 c5@2 bb4@12",
  H: "ab4@10 ~@4 f5@4 eb5 ~ f5@4, ~@7 ab5 ~@2 ab5 ~", I: "eb5 ~@3",
  J: "~@2 [ab4,c5]@2 eb5@2 c5@2 bb4@2 eb5 ~ ab5@2 eb5@6 ab5 ~ f5@2", // Ab
  K: "eb5@5 ~@3 eb5@2 db5 ~ f5@2 eb5@4 ~@2 bb4@2 db5 ~",
  L: "[f5@2 ab5@2 f5@2 eb5@2 db5 eb5 [bb4,db5]@2 ~ eb5@7 ~@3 f5@11 ~@4 db5 ~ bb4@2 gb4@2 ab4@2 gb4 ~]/2", // Bbm
  M: "~ c5 eb5 c5 ab4@2 ~ [db4,f4] db5@3 ~", N: "~@2 bb4 a4 f4@7 ~@3 [gb3,bb3]@2 gb4 ~ gb4@2 bb3@2 gb4@2",
  O: "[ab3,c4]@2 ab4@5 ~@3 f4@2 bb4 ~ ab4@2 f4@2 eb4@2 eb4@3 db4", // Ab
  P: "eb4@6 f4 eb4 db4 eb4 db4 bb3 db4@5 ~ eb3 f3 ab3 bb3 ab3 f3",
  Q: "ab3 bb3 db4 eb4 db4 bb3 eb4 bb3 db4 eb4@3 ab4@2 f4@2 db4@6 ~@2",
  R: "~@2 [db4,f4] ~ [db4,f4]@2 eb4@2 db4@3 ~@3 [gb4,bb4]@2 ab4@2 gb4 ~ [gb4,bb4]@4", // Db Gb
  S: "~ [ab4,c5] bb4 ab4@2 ~@2 ab5 f5 eb5@2 ~", T: "~@2 ab5 g5 gb5 e5 [e5,f5]@2 db5@3 ~@7 [db4,f4]@2 db5@4",
  U: "[~ f5@8 eb5@8 ~ [bb4,eb5]@10 [ab4,db5]@22 ~@22]/3", // Eb5 Db5
})).s("gm_electric_guitar_clean").gain(0.33)

// chords · pizzicato strings · Gb5 Db Gb5 Db Gb5 Db Ab5 Ebm …
const pizzicato_strings = note(`<
  ~@28
  [~@4 [db4,gb4] ~ [db4,gb4,gb5] ~ [db4,f4,f5] ~@3 [db4,gb4,gb5] ~ [db4,f4,f5] ~@3 [db4,gb4,gb5] ~ [db4,f4,f5] ~@3]
  [~@22 [eb4,ab4] ~]
  [[eb4,ab4] ~ [eb4,gb4] ~@9 [ab4,db5] ~ [bb4,eb5] ~ ab4 ~ [ab4,db5] ~ [bb4,eb5] ~@3]
  ~@38
>`).s("gm_pizzicato_strings").gain(0.32)

// other · whistle
const whistle = note(`<
  ~@32
  [~@5 db6 ab5@5 ab5]
  [b5 ~@3]
  [~@5 f5 ab5@4 eb5 ab5]
  [f5@5 ~@18 ab5]
  [db6@5 ~ f5@4 ~ ab5 db6@2 db5@4 ~@6]
  ~@32
>`).s("gm_whistle").gain(0.06).pan(0.7)

// other · synth drum
const synth_drum = note("<~@8 [a4 ~@3 g5 ~@2 g5!2 ~ d5 ~ c6 ~@11] ~@7 [~@14 d4!10] ~@22 [~@17 d4!7] ~@29>")
  .s("gm_synth_drum").gain(0.57)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@7 B ~@22 B ~@26 C ~@2>".pickRestart({
  A: "x", B: "~@11 x", C: "~@5 x ~@2",
})).gain(0.48)
// … 40 more lines

More by Gianni Bella