Strudelify

Il giocatore di biliardo

Angelo Branduardi

KeyE majorTempo119 bpm
0:00/0:00
// Il giocatore di biliardo — Angelo Branduardi
// 119 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 16 piano (copy of ch 5 choir aahs)
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(119/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 A B C D A B C D A B C D A B C D A B C D A E D A B C F D@2 G H I G H I G H I G J@2 K L M N M O P Q R S P Q R S
  P Q R S P Q R S P T O P Q R U I D V W X V W X V W X V Y@2 Z@2 AA AB AA AC AD F AE AF AD F AE AF AD F AE AF AD F AE
  AG@3
>`.pickRestart({
  A: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~", B: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  C: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", D: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  E: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", F: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  G: "a1 ~ a1 ~ a1 ~ e2 ~ e2 ~ e2 ~ b1 ~ b1 ~", H: "b1 ~ b1 ~ b1 ~ b1 ~ c#2 ~ c#2 ~ c#2 ~ a1 ~",
  I: "a1 ~ a1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", J: "[b1 ~ b1 ~ b1 ~ b1 ~ c#2@6 a1@6 b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~]/2",
  K: "b0@4 b1@11 ~", L: "f#2@3 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", M: "a1 ~ a1 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  N: "e2 ~ e2 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", O: "e2 ~ e2 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  P: "b1 ~ b1 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~", Q: "c#2 ~ c#2 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  R: "a1 ~ a1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", S: "e1 ~ e1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  T: "c#2 ~ c#2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", U: "e1 ~ e1 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ a1 ~ a1 ~",
  V: "b1 ~ b1 ~ a1 ~ a1 ~ a1 ~ e2 ~ e2 ~ e2 ~", W: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ c#2 ~ c#2 ~",
  X: "c#2 ~ a1 ~ a1 ~ a1 ~ b1 ~ b1 ~ b1 ~ b1 ~", Y: "[b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ c#2@6 a1@6 b1 ~ b1 ~ b1 ~ b1 ~]/2",
  Z: "[b1 ~ b1 ~ b0@4 b1@11 ~ f#2@3 ~ a1 ~ a1 ~ a1 ~ a1 ~]/2", AA: "a1 ~ a1 ~ a1 ~ a1 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  AB: "e2 ~ e2 ~ e2 ~ e2 ~ a1 ~ a1 ~ a1 ~ a1 ~", AC: "e2 ~ e2 ~ e2 ~ e2 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  AD: "b1 ~ b1 ~ b1 ~ b1 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~", AE: "a1 ~ a1 ~ a1 ~ a1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  AF: "e1 ~ e1 ~ e1 ~ e1 ~ b1 ~ b1 ~ b1 ~ b1 ~", AG: "[e1 ~ e1 ~ e1 ~ e1 ~ b1 ~ b1 ~@3 b1@26 ~@8]/3",
})).s("gm_electric_bass_finger").gain(0.43)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@2 B@2 A@2 B@2 C D E F@3 G H I D E F@3 G H J@4 K@3 L@2 M@9 N@3 O@8 P Q@4 R@3 S@2 T@8 U@6 V@9 W X Y@8 Z@8 AA@8
>`.pickRestart({
  A: "[[c#5,g#5]@2 [a4,a5] c#5, e5]/2", B: "[g#5@12 f#5@2 e5@2 [f#4,d#5]@15 ~, b4, e5@7 ~@9]/2",
  C: "[c#5,e5]@7 ~@9, g#4", D: "a4@2 b4 a4", E: "g#4@2 f#4 e4", F: "[d#4@24 e4@8 a3@15 ~, ~ c#4]/3", G: "[b3,e4]@15 ~",
  H: "[d#4,f#4,b4]", I: "g#4, e4@7 ~, c#5@3 ~", J: "[c#4 ~ [f#3,d#4] [g#3,c#4,e4], [g#3,e4] ~, ~@16 b3@33 ~@15]/4",
  K: "[a4@3 ~ b3@4 [c#4,g#4]@2 [a3,c#4,a4]@2, [a3,e4]@2 g#3@3 ~, ~@3 g#4@5 ~@4]/3", L: "[b3,d#4,b4]/2",
  M: "[[e3,a3,c#4] [c#4,e4] [f#3,b3,d#4]@2 [g#3,c#4,e4] [a3,c#4,e4] [f#3,b3]@2, ~@3 g#3@2 ~@13 d#4@5 ~]/3", // A C#m B C#m A B5
  N: "[[e3,a3,c#4]@6 [c#4,e4]@6 [f#3,b3,d#4]@12 [g#3,c#4,e4]@6 [a3,c#4,e4]@6 [b3,d#4,f#4]@11 ~, ~@3 g#3@2 ~@19]/3", // A C#m B C#m A B
  O: "[[b3,e4,g#4]@2 ~@2 [b3,d#4,f#4]@16 [c#4,e4,a4]@16 [g#3,b3,e4]@16 [c#4,e4,a4]@16 [g#3,b3,e4]@16 ~@2 b4@14 [c#5,e5]@7 ~@9 a4@8 b4@4, ~@21 [b3,d#4,f#4]@4 g#4@4 ~@3, ~@85 f#5@14 ~@29]/8", // E B A E A E C#m B
  P: "a4 g#4@2 f#4", Q: "[e4@4 d#4@24 e4@8 a3@15 ~ [b3,e4]@12, ~@7 c#4@6 ~@3]/4",
  R: "[~ [d#4,f#4,b4]@4 [c#5,g#5]@4 [a4,a5]@2 c#5, ~@5 e5@7]/3", // B C#5 A
  S: "[a5@2 g#5@6 f#5 e5 [f#4,d#5]@6, ~ b4@7, ~@2 e5@7 ~@7]/2", // D#m
  T: "[~@2 [g#4,e5]@8 ~@2 a5 g#5 f#5@2 g#5@2 [g#4,e5]@8 [f#4,d#5]@8 c#4@8 ~@8 [f#3,d#4]@8 [g#3,c#4,e4]@6, ~@4 c#5@24 b4@40 ~@16 b3@33 ~@11, ~ g#5@5 ~@26, ~@5 e4@4 ~@8 [g#3,e4]@8 ~@7]/8", // C#m D#m C#m
  U: "[~@2 a4@6 ~@2 b3@8 [c#4,g#4]@4 [a3,c#4,a4]@4 [b3,d#4,b4]@16 [e3,a3,c#4]@3 [c#4,e4]@3, ~@2 [a3,e4]@8 g#3@12 ~@23 g#3@2 ~, ~@4 g#4@5 ~@15]/6", // C#5 A B A C#m A5
  V: "[[f#3,b3,d#4]@2 [g#3,c#4,e4] [a3,c#4,e4] [f#3,b3]@2 [e3,a3,c#4] [c#4,e4], ~@12 d#4@5 ~@4 g#3@2 ~]/3", // B C#m A B5 A C#m
  W: "[f#3,b3,d#4]@3 [g#3,c#4,e4]", X: "~ [a3,c#4,e4]@3 [b3,d#4,f#4]@4",
  Y: "[~@2 [b3,g#4] ~ [d#4,f#4,b4]@8 [c#4,e4,a4]@8 [g#3,b3,e4]@8 [c#4,e4,a4]@8 [g#3,b3,e4]@8 ~ b4@7 [c#5,g#5]@8 [a4,a5]@4, ~@4 e4 ~@83 [b3,d#4,f#4]@16 ~@24, ~@89 f#5@14 ~ e5@24]/8", // E B A E A E C#5 A …
  Z: "[~@4 a5@4 g#5@12 f#5@2 e5@2 [f#4,d#5]@15 ~ [g#4,e5]@16 ~@4 a5@2 g#5@2 f#5@4 g#5@4 [g#4,e5]@16 [f#4,d#5]@16 [c#5,g#5]@16 [a4,a5]@8, c#5 b4@4 c#5@3 b4@5 ~@3, ~@4 e5@7 ~@9 g#5@10 ~@22 e5@12, ~@7 e4@2 ~@7]/8", // D#m C#m D#m C#5 A
  AA: "[~@4 a5@4 g#5@12 f#5@2 e5@2 [f#4,d#5]@15 ~ [g#4,e5]@16 ~@4 a5@2 g#5@2 f#5@4 g#5@4 [g#4,e5]@16 [f#4,d#5]@32 ~@8, c#5@8 b4@32 c#5@24 b4@57 ~@7, ~@4 e5@7 ~@9 g#5@10 ~@34, ~@7 e4@2 ~@7]/8", // D#m C#m D#m
})).s("gm_string_ensemble_1").gain(0.22).pan(0.6)

// other · brass section
const brass_section = note("<~@38 A B@2 C ~@40 D E F ~@27>".pickRestart({
  A: "~@12 [a4,a5] ~ [b4,b5] ~", // A B
  B: "[[c#5,c#6]@2 [b4,b5] ~ [a4,a5] ~ [b4,b5]@2 [a4,a5] ~ [g#4,g#5] ~ [f#4,f#5]@6 ~@2 [f#4,f#5] ~ [g#4,g#5] ~ [e4,e5]@2 [d#4,d#5] ~ [c#4,c#5] ~ [c#4,c#5]@2]/2", // C# B A B A G# F# G# …
  C: "[d#4,d#5] ~ [e4,e5] ~ [f#4,f#5]@7 ~@5", // D# E F#
  D: "[a4,a5] ~ [b4,b5] ~ [c#5,c#6]@2 [b4,b5] ~ [a4,a5] ~ [b4,b5]@2 [a4,a5] ~ [g#4,g#5] ~", // A B C# B A B A G#
  E: "[f#4,f#5]@6 ~@2 [f#4,f#5] ~ [g#4,g#5] ~ [e4,e5]@2 [d#4,d#5] ~", // F# G# E D#
  F: "[c#4,c#5] ~ [c#4,c#5]@2 [d#4,d#5] ~ [e4,e5] ~ [f#4,f#5]@7 ~", // C# D# E F#
})).s("gm_brass_section").gain(0.48).pan(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D E C D A B C F D ~ G@9 H@3 I J K L M N O@8 P@8 Q@8 ~ R S T R S T R S T
  R U V W@2 X Y Z AA AB@8 AC@8 ~@2
>`.pickRestart({
  A: "~ c#5@3, ~ g#4@6 ~, ~ g#3@5 ~@2, ~@2 c#4@5 ~", B: "~ b4@3, ~ e4@6 ~, ~ e3@5 ~@2, ~@2 b3@5 ~",
  C: "~ e4@3, ~ b3@6 ~, ~ b2@5 ~@2, ~@2 e3@5 ~", D: "~ b4@3, ~ f#4@6 ~, ~ f#3@5 ~@2, ~@2 b3@5 ~",
  E: "~ [g#4,c#5]@3, ~ g#3@5 ~@2, ~@2 c#4@5 ~", F: "~ [c#4,c#5] ~ [a3,a4], ~ [g#3,g#4]@3 ~ [e3,e4]@3",
  G: "[[a3,c#4,e4]@4 ~@2 [c#4,e4,g#4]@4 ~@2 [b3,d#4,f#4]@7 ~@5 [c#4,e4,g#4]@4 ~@2 [a3,c#4,e4]@4 ~@2 [b3,d#4,f#4]@6 ~@6]/3", // A C#m B C#m A B
  H: "[[a3,c#4,e4]@4 ~@2 [c#4,e4,g#4]@4 ~@2 [b3,d#4,f#4]@7 ~@5 [e4,g#4,c#5]@4 ~@2 [c#4,e4,a4]@4 ~@2 [d#4,f#4,b4]@6 ~@6]/3", // A C#m B C#m A B
  I: "[e4,g#4,b4] ~ [d#4,f#4,b4]@6", J: "~@2 [e3,e4] [b3,b4]",
  K: "[e4,e5]@3 ~@3 [b2,b3] ~ [e3,e4]@2 [b2,b3]@2 [f#3,f#4]@2 [e3,e4]@2", L: "[b2,b3]@3 ~@5 [e3,e4]@4 [b3,b4]@4",
  M: "[e4,e5]@3 ~@3 [b2,b3]@2 [e3,e4]@2 [b2,b3]@2 [f#3,f#4]@2 [e3,e4]@2", // E B E B F# E
  N: "[b2,b3]@3 ~@3 [f#3,f#4]@2 [b3,b4]@2 [f#3,f#4]@2 [e4,e5]@2 [d#4,d#5]@2", // B F# B F# E D#
  O: "[[c#4,c#5] [b3,b4] ~@2 c#5@6 ~@2 b4@6 ~@2 e4@6 ~@2 b4@6 ~@2 c#5@6 ~@2 b4@6 ~@2 e4@6 ~@2 [b3,b4]@4, ~@3 g#4@6 ~@3 b3@5 ~@2 b3@6 ~@2 f#4@6 ~@2 g#4@6 ~@3 b3@5 ~@2 b3@6 ~@7, ~@3 g#3@5 ~@3 e3@5 ~@3 b2@5 ~@4 b3@5 ~@3 c#4@5 ~@2 e4@6 ~@3 e3@5 ~@2 [f#3,f#4]@5, ~@4 c#4@5 ~@2 e4@6 ~@3 e3@5 ~@2 f#3@5 ~@3 g#3@5 ~@3 e3@5 ~@3 b2@5 ~@8]/8", // C# B F#
  P: "[~@2 c#5@3 ~ b4@3 ~ e4@3 ~ b4@3 ~ c#5@3 ~ b4@3 ~ e4@3 ~ [b3,b4]@2, ~@3 g#4@6 ~@3 b3@5 ~@2 b3@6 ~@2 f#4@6 ~@2 g#4@6 ~@3 b3@5 ~@2 b3@6 ~@7, ~@3 g#3@5 ~@3 e3@5 ~@3 b2@5 ~@4 b3@5 ~@3 c#4@5 ~@2 e4@6 ~@3 e3@5 ~@2 [f#3,f#4]@5, ~@4 c#4@5 ~@2 e4@6 ~@3 e3@5 ~@2 f#3@5 ~@3 g#3@5 ~@3 e3@5 ~@3 b2@5 ~@8]/8", // B F#
  Q: "[~@2 [g#4,c#5]@3 ~ e4@3 ~ b4@3 ~ c#5@3 ~ b4@3 ~ e4@3 ~ [c#4,c#5] ~ [a3,a4] ~ [b3,b4]@2, ~@3 g#3@5 ~@3 b2@5 ~@4 b3@5 ~@3 c#4@5 ~@2 e4@6 ~@3 e3@5 ~@6 [e3,e4]@3 ~ [f#3,f#4]@5, ~@4 c#4@5 ~@2 b3@6 ~@2 f#4@6 ~@2 g#4@6 ~@3 b3@5 ~@2 b3@6 ~@2 [g#3,g#4]@3 ~@10, ~@12 e3@5 ~@2 f#3@5 ~@3 g#3@5 ~@3 e3@5 ~@3 b2@5 ~@16]/8", // C#5 C# A B E F# G#
  R: "~@2 [a3,c#4,e4]@2 ~ [c#4,e4,g#4]@2 ~", S: "[b3,d#4,f#4]@7 ~@5 [c#4,e4,g#4]@4",
  T: "~ [a3,c#4,e4]@2 ~ [b3,d#4,f#4]@3 ~", U: "[b3,d#4,f#4]@7 ~@5 [e4,g#4,c#5]@4",
  V: "~ [c#4,e4,a4]@2 ~ [d#4,f#4,b4]@3 ~", W: "[~@2 [e4,g#4,b4] ~ [d#4,f#4,b4]@6 ~@4 [e3,e4]@2]/2",
  X: "[b3,b4]@4 [e4,e5]@3 ~@3 [b2,b3] ~ [e3,e4]@2 [b2,b3]@2", Y: "[f#3,f#4]@2 [e3,e4]@2 [b2,b3]@3 ~@5 [e3,e4]@4",
  Z: "[b3,b4]@4 [e4,e5]@3 ~@3 [b2,b3]@2 [e3,e4]@2 [b2,b3]@2", // B E B E B
  AA: "[f#3,f#4]@2 [e3,e4]@2 [b2,b3]@3 ~@3 [f#3,f#4]@2 [b3,b4]@2 [f#3,f#4]@2", // F# E B F# B F#
  AB: "[[e4,e5] [d#4,d#5] [c#4,c#5] [b3,b4] ~@2 c#5@6 ~@2 b4@6 ~@2 e4@6 ~@2 b4@6 ~@2 c#5@6 ~@2 b4@6 ~@2 e4@6 ~@2 [b3,b4]@2, ~@5 g#4@6 ~@3 b3@5 ~@2 b3@6 ~@2 f#4@6 ~@2 g#4@6 ~@3 b3@5 ~@2 b3@6 ~@5, ~@5 g#3@5 ~@3 e3@5 ~@3 b2@5 ~@4 b3@5 ~@3 c#4@5 ~@2 e4@6 ~@3 e3@5 ~@2 [f#3,f#4]@3, ~@6 c#4@5 ~@2 e4@6 ~@3 e3@5 ~@2 f#3@5 ~@3 g#3@5 ~@3 e3@5 ~@3 b2@5 ~@6]/8", // E D# C# B F#
  AC: "[~@3 c#5@3 ~ b4@3 ~ e4@3 ~ b4@3 ~ c#5@3 ~ b4@3 ~ e4@3 ~ [b3,b4], ~@5 g#4@6 ~@3 b3@5 ~@2 b3@6 ~@2 f#4@6 ~@2 g#4@6 ~@3 b3@5 ~@2 b3@6 ~@5, ~@5 g#3@5 ~@3 e3@5 ~@3 b2@5 ~@4 b3@5 ~@3 c#4@5 ~@2 e4@6 ~@3 e3@5 ~@2 [f#3,f#4]@3, ~@6 c#4@5 ~@2 e4@6 ~@3 e3@5 ~@2 f#3@5 ~@3 g#3@5 ~@3 e3@5 ~@3 b2@5 ~@6]/8", // B F#
})).s("gm_electric_guitar_clean").gain(0.42)

// other · shanai
const shanai = note(`<
  A@2 B C D@2 B E F ~@6 G H ~@6 G H ~@33 I@3 J@4 K@3 ~@26 L@2 M@4 N@2 O@2 M@4 P@2 ~@2
>`.pickRestart({
  A: "[e5@20 d#5@2 c#5@2 b4@3 [b4,c#5] a4@4]/2", B: "b4", C: "~@2 a4@2 g#4 a4@3, b4@3 ~",
  D: "[e5@20 d#5@2 c#5@2 b4@2 c#5 b4 a4@4, g#4@7 ~@9]/2", E: "~@2 a4@2 g#4 a4@3, b4@13 ~@3", F: "g#4@7 ~",
  G: "b4@2 a4@2 g#4 a4@3", H: "g#4@9 ~@7",
  I: "[~@4 b4@4 a4@4 g#4@2 a4@6 e5@20 d#5@2 c#5@2 b4@3 [b4,c#5], ~@20 g#4@9 ~@19]/3", // Bsus2
  J: "[a4@2 b4@8 ~@2 a4@2 g#4 a4@3 g#4@10 a4 g#4 f#4@2, ~@5 b4@3 ~@8]/4", K: "[g#4@2 e4@8 b4@2 a4@2 g#4 a4@3 g#4@6]/3",
  L: "[~@4 e5@10 d#5 c#5]/2", M: "[b4@3 [b4,c#5] a4@4 b4@16 ~@4 a4@4 g#4@2 a4@6 g#4@20 a4@2 g#4@2, ~@6 b4@3 ~@7]/4",
  N: "[f#4 g#4 e4@4 b4 a4]/2", O: "[g#4 a4@3 e5@10 d#5 c#5, ~@8 g#4@13 ~@11]/2", P: "[f#4 g#4 e4@4 ~@2]/2",
})).s("gm_shanai").gain(0.51)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A E D A B C F D@2 G H I G H I G H I G J@2 K L M N M O P Q R S P Q R S
  P Q R S P Q R S P T O P Q R U I D V W X V W X V W X V Y@2 Z@2 AA AB AA AC AD F AE AF AD F AE AF AD F AE AF AD F AE
  AG@2 ~
>`.pickRestart({
  A: "c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~", B: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  C: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", D: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~",
  E: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~", F: "c#3 ~ c#3 ~ c#3 ~ c#3 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  G: "a2 ~ a2 ~ a2 ~ e3 ~ e3 ~ e3 ~ b2 ~ b2 ~", H: "b2 ~ b2 ~ b2 ~ b2 ~ c#3 ~ c#3 ~ c#3 ~ a2 ~",
  I: "a2 ~ a2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~", J: "[b2 ~ b2 ~ b2 ~ b2 ~ c#3@6 a2@6 b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~]/2",
  K: "b1@4 b2@11 ~", L: "f#3@3 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~", M: "a2 ~ a2 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~",
  N: "e3 ~ e3 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~", O: "e3 ~ e3 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~",
  P: "b2 ~ b2 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~", Q: "c#3 ~ c#3 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  R: "a2 ~ a2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", S: "e2 ~ e2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~",
  T: "c#3 ~ c#3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~", U: "e2 ~ e2 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ a2 ~ a2 ~",
  V: "b2 ~ b2 ~ a2 ~ a2 ~ a2 ~ e3 ~ e3 ~ e3 ~", W: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ c#3 ~ c#3 ~",
  X: "c#3 ~ a2 ~ a2 ~ a2 ~ b2 ~ b2 ~ b2 ~ b2 ~", Y: "[b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ c#3@6 a2@6 b2 ~ b2 ~ b2 ~ b2 ~]/2",
  Z: "[b2 ~ b2 ~ b1@4 b2@11 ~ f#3@3 ~ a2 ~ a2 ~ a2 ~ a2 ~]/2", AA: "a2 ~ a2 ~ a2 ~ a2 ~ e3 ~ e3 ~ e3 ~ e3 ~",
  AB: "e3 ~ e3 ~ e3 ~ e3 ~ a2 ~ a2 ~ a2 ~ a2 ~", AC: "e3 ~ e3 ~ e3 ~ e3 ~ b2 ~ b2 ~ b2 ~ b2 ~",
  AD: "b2 ~ b2 ~ b2 ~ b2 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~", AE: "a2 ~ a2 ~ a2 ~ a2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  AF: "e2 ~ e2 ~ e2 ~ e2 ~ b2 ~ b2 ~ b2 ~ b2 ~", AG: "[e2 ~ e2 ~ e2 ~ e2 ~ b2 ~ b2 ~@3 b2@9 ~@9]/2",
})).s("gm_electric_guitar_muted").gain(0.25)

// chords · piccolo
const piccolo = note("<~@32 A B C D B C D E F D B C G H ~@30 I J K I J K L M K I J N O@2 ~@22>".pickRestart({
  A: "~@12 [b5,a6] ~ [b5,b6] ~", // B7 B
  B: "[c#6,c#7] ~ [c#6,b6] c#6 [c#6,a6] ~ [b5,b6] ~ [b5,a6] ~ [b5,g#6] ~ [b5,f#6]@2 e6 ~", // C# C#7 F#m B B7 E B5
  C: "d#6 ~ e6 ~ [c#6,f#6] ~ [b5,g#6] ~ [g#5,e6]@4 g#5 ~ a5@2, ~@14 c#6 ~", // F#5 E C#m
  D: "[b5,d#6] ~ [a5,e6] ~ b5@2 e6 ~ [b5,f#6] ~ [b5,g#6] ~ [b5,a6] ~ [b5,b6] ~, ~@4 f#6 ~@11", // B A5 B5 E B7 B
  E: "[c#6,c#7] ~ [c#6,b6] c#6 [c#6,a6] ~ [b5,b6] ~ [b5,a6] ~ [c#6,g#6] ~ f#6@2 [c#6,e6] ~, ~@12 b5 ~@3", // C# C#7 F#m B B7 C#5 C#m
  F: "[c#6,d#6] ~ [b5,e6] ~ [c#6,f#6] ~ [b5,g#6] ~ [g#5,e6]@4 g#5 ~ a5@2, ~@14 c#6 ~", // C#sus2 E5 F#5 E C#m
  G: "[b5,d#6] ~ [a5,e6] ~ [b5,f#6]@4 [b5,d#6] ~ [a5,c#6] ~ [b5,d#6] ~ [d#6,f#6] ~", H: "[b5,g#6] ~@3 [b5,f#6]@12",
  I: "[b5,a6] ~ [b5,b6] ~ [c#6,c#7] ~ [c#6,b6] c#6 [c#6,a6] ~ [b5,b6] ~ [b5,a6] ~ [b5,g#6] ~", // B7 B C# C#7 F#m B B7 E
  J: "[b5,f#6]@2 e6 ~ d#6 ~ e6 ~ [c#6,f#6] ~ [b5,g#6] ~ [g#5,e6]@4", // B5 F#5 E C#m
  K: "g#5 ~ a5@2 [b5,d#6] ~ [a5,e6] ~ b5@2 e6 ~ [b5,f#6] ~ [b5,g#6] ~, ~@2 c#6 ~@5 f#6 ~@7", // B A5 B5 E
  L: "[b5,a6] ~ [b5,b6] ~ [c#6,c#7] ~ [c#6,b6] c#6 [c#6,a6] ~ [b5,b6] ~ [b5,a6] ~ [c#6,g#6] ~", // B7 B C# C#7 F#m B B7 C#5
  M: "f#6@2 [c#6,e6] ~ [c#6,d#6] ~ [b5,e6] ~ [c#6,f#6] ~ [b5,g#6] ~ [g#5,e6]@4, b5 ~@15", // C#m C#sus2 E5 F#5 E C#m
  N: "g#5 ~ a5@2 [b5,d#6] ~ [a5,e6] ~ [b5,f#6]@4 [b5,d#6] ~ [a5,c#6] ~, ~@2 c#6 ~@13", // B A5 B5 B A
  O: "[[b5,d#6] ~ [d#6,f#6] ~ [b5,g#6] ~@3 [b5,f#6]@12 ~@12]/2", // B D#m E B5
})).s("gm_piccolo").gain(0.24).pan(0.3)

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

// drums · clap
const clap = s("cp").struct("<~@24 [~ x ~@2] ~@42 [~ x] ~@44>").gain(0.64)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@45 x!2 ~@41 [~ x ~@2]!2 ~@19 [~@3 x] ~@2>").gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@14 B ~@7 C ~@42 D ~@19 E ~@2>".pickRestart({
  A: "~@3 x", B: "~@5 x ~ x", C: "x", D: "~ x ~@2", E: "~@5 x!2 ~@9",
})).gain(0.56)
// … 51 more lines

More by Angelo Branduardi