Strudelify
Piccola citta eterna cover art

Sopravvissuti e sopravviventi

Piccola citta eterna

LIGABUE

KeyA majorTempo129 bpm
0:00/0:00
// Piccola citta eterna — LIGABUE
// 129 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 162 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(129/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, A@4 for four bars: edit a riff to change every repeat.

// bass · fretless bass
const bass = note(`<
  ~@13 A B C@2 D@2 C@2 D@2 E F D G H I D@2 H J K L M N D O C P D K C@2 D G C Q D G R S D O A@3 C@2 D@2 T C D@2 U@2 V W X
  Y C@2 D@2 C@2 D@2 E F D K C@2 D G C Q D G R S D O A@4 C@2 D@2 T C D@2 U@2 V W X Y C@2 D@2 C@2 D@2 Z@2 AA AB AC AD AA
  AE AC AD AB@2 AF AG AB AH A@4 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 F ~@3
>`.pickRestart({
  A: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", B: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 b1@2",
  C: "a1@2 ~ a1 a2@2 a1 ~ a1@2 ~ a1 a2@2 a1 ~", D: "d2@2 ~ d2 d3@2 d2 ~ d2@2 ~ d2 d3@2 d2 ~",
  E: "a1@2 ~ a1 a2@2 a1 ~ a1@2 ~@6", F: "c2@2 a1 ~ a1@2 c2@2 a1 ~ a1@2 c2@2 a1@2",
  G: "d2@2 ~ d2 d3@2 d2 ~ d2@2 ~@2 d3@2 g2 a2, ~@11 d2@3 ~@2", H: "a1@2 ~ a1 a2@2 a1 ~ a1@4 a2@2 d2 e2",
  I: "a1@2 ~ a1 a2@2 a1 ~ a1@4 a2@2 a1 d2", J: "a1@2 ~ a1 a2@2 a1 ~ a1@2 ~ a1 ~ a1 d2 e2, ~@6 a2 ~",
  K: "d2@2 ~ d2 d3@2 d2 ~ d2@2 ~ d2 d3@2 g2 a2", L: "d2@2 ~ d2 d3@2 d2 ~ d2@3 ~ d3@2 d2@2",
  M: "b1@2 ~ b1 b2@2 b1 ~ b1@4 b2@2 b1 f#2", N: "f#1@2 ~ f#1 f#2@2 f#1 ~ f#1@4 f#2@2 f#1 ~",
  O: "e2@2 ~ e2 e3@2 e2 ~ e2@2 ~ e2 e3@2 e2 ~", P: "c2@2 a1 ~ a1 ~ c2@2 a1 ~ a1 ~ c2@2 a1 ~",
  Q: "a1@2 ~ a1 a2@2 a1 ~ a1@2 ~ a1 a2@2 a1@2", R: "b1@2 ~ b1 b2@2 b1 ~ b1@2 ~ b1 b2@2 b1 ~",
  S: "f#1@2 ~ f#1 f#2@2 f#1 ~ f#1@2 ~ f#1 f#2@2 f#1 ~", T: "a1@2 ~@2 a2@2 a1 ~ a1@2 ~ a1 a2@2 a1 ~, ~@3 a1@2 ~@11",
  U: "b1@2 ~ b1 b2@2 b1@8 b1 ~", V: "f#1@2 ~ f#1 f#2@2 f#1@8 f#2@2", W: "f#1@2 ~ f#1 f#2@2 f#1@6 f#2@2 f#1 ~",
  X: "d2@2 ~ d2 d3@2 d2@6 d3@2 d2 ~", Y: "e2@2 ~ e2 e3@2 e2@6 e3@2 e2 ~", Z: "a1@5 ~ a1@6 ~@4",
  AA: "d2@2 ~ d2 b1@2 d2@2 ~@8", AB: "d2@2 ~ d2 b1@2 d2@2 ~@6 d2 ~", AC: "a1@2 ~ a1 f#1@2 a1@2 ~@8",
  AD: "a1@2 ~ a1 f#1@2 a1@2 ~@6 a1 ~", AE: "d2@2 ~ d2 b1@2 d2@2 ~@4 d2@3 ~", AF: "b1@2 ~ b1 a1@2 b1@2 ~@6 b1 ~",
  AG: "f#1@2 ~ f#1 e1@2 f#1@2 ~@6 f#1 ~", AH: "e2@2 ~ e2 d2@2 e2@2 ~@4 e2 ~@3",
})).s("gm_fretless_bass").gain(0.41)

// other · guitar harmonics
const guitar_harmonics = note("<~@124 A@3 B A@3 B C A D@2 A@2 ~@24>".pickRestart({
  A: "a3@3 g#3@3 e3@2", B: "a3@3 g#3@3 a3@2", C: "a3@6 ~@6 e3@3 ~, ~@6 g#3@9 ~", D: "a3@3 g#3@3 f#3@2",
})).s("gm_guitar_harmonics").gain(0.22).pan(0)

// chords · distortion guitar
const distortion_guitar = note(`<
  A@4 B@7 C@2 D E F@2 G@2 F@2 G@2 H I@6 J@7 K@3 I@6 J@7 L@2 M N O F@2 G@2 F@2 G@2 P@5 Q F@2 G@2 F@2 G@2 H I@6 J@7 L@2 M
  R M S F@2 G@2 F@2 G T P@5 Q F@2 G@2 F@2 G@2 U@2 V@2 W@2 V@2 U@2 V@2 X Y Z AA AB@2 AC AB AD AE G@2 F@2 G@2 F@2 G@2 F@2
  G@2 AF@4
>`.pickRestart({
  A: "[~@5 a3 e4 ~ d4@12 ~@2 a3 ~ a3@8, ~@7 a3@13 ~ d4@2 c#4@9]/4",
  B: "[~@10 a3@2 e4@2 ~@2 d4@24 ~@2 d4@2 a3@2 ~@2 a3@24 ~@2 a3@2 e4@2 ~@2 d4@23 [d3,f#3,a3] [b3,d4] ~@5 f#3@2, ~@14 a3@27 ~@5 c#4@27 ~@5 a3@26 ~@2 c#4@5 ~, ~@27 a3]/7", // D Bm
  C: "[d3@14 ~@3 f#4@15, ~@15 [e3,a3]@17, ~ [f#3,c#4]]/2", D: "a3 ~@3 d4@2 ~@2 e4@2 d4@2 ~@2 d4@2, ~ e4@2 a3@2 ~ g3@2",
  E: "~@2 d4 ~ e4 d4 g3 d4, a3@2 ~ a3@2 ~@3, ~ e4@2 ~@5", F: "[e3,a3]@3 a2 [e3,a3]@2 a2@2 [e3,a3]@3 a2 [e3,a3]@2 a2@2",
  G: "[d3,a3]@3 a2 [d3,a3]@2 a2@2 [d3,a3]@3 a2 [d3,a3]@2 a2@2", H: "[e3,a3]@13 ~@3",
  I: "[c3@2 a2 ~ a2@2 c3@2 a2@2 a2@2 c3@2 ~@2 [d3,a3]@30 ~@2 e3@29 ~@3 d3@16, ~@14 a2@2 ~@31 [a3,b3]@31 ~ a3@17, ~@15 [d4,e4]@30 ~ e4@31 ~ [d4,e4]@18]/6", // D5 Asus2 Dsus2
  J: "[~@16 e3@29 ~@3 d3@30 ~@4 d3@11 ~@2 [e3,f#3,a3]@14 ~@2 [a3,b3], ~@14 e4@31 ~ [d4,e4]@31 ~@2 [f#3,a3]@14 ~@17 [d4,e4]@2, ~@15 [a3,b3]@31 ~ a3@30 ~ [b2,b3]@15 ~ [f#2,c#4]@15 ~@3]/7", // F#m7 Asus2 Dsus2 F#m Dsus2 Asus2 B F#5
  K: "[[d3,e3]@13 ~@2 [e3,b3,d4]@13 ~@3 [e3,a3,b3]@16 ~, ~@14 e4@14 ~@2 [a2,e4]@17 ~]/3", // Dsus2 E7 Esus4 A5
  L: "[[d3,e3]@13 ~@2 [e3,b3,d4]@13 ~@4, ~@7 e4@7 ~@2]/2", // Dsus2 E7
  M: "[d3,a3,d4] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~, ~@3 d4 ~@2 d4 ~", // D5
  N: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3,d4] ~ [d3,a3] ~, ~ d4 ~@2 d4 ~@3", // D5
  O: "[d3,a3,d4] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3,d4] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3,d4] ~ [d3,a3] ~", // D5
  P: "[[b2,f#3,a3,b3]@29 ~@2 [c#3,a3]@32 ~ [e3,a3,d4]@14 ~@2, ~@15 f#2@16 ~@9, ~@31 f#3@30 ~@2 d3@15 ~@2]/5", // B7 F#m Dsus2
  Q: "[e3,g#3,e4]@7 ~", // E
  R: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ d4@2 [d3,a3] ~ [d3,a3,d4] ~ [d3,a3] ~, ~@2 d4@2 ~@4 a3 ~@7", // D5
  S: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3,d4] ~ [d3,a3] ~ [d3,a3,d4] ~ [d3,a3] ~, ~ d4 ~@6", // D5
  T: "[d3,a3]@3 ~ [d3,a3]@2 a2@2 [d3,a3]@3 a2 [d3,a3]@2 a2@2, ~@3 a2@2 ~@11", U: "[[e3,a3]@15 ~]/2",
  V: "[[d3,a3]@15 ~]/2", W: "[e3,a3]/2", X: "[f#3,b3]@15 ~", Y: "[f#3,c#4]@15 ~", Z: "[d3,a3]@15 ~", AA: "[e3,b3]@15 ~",
  AB: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  AC: "[d3,a3] ~ [d3,a3] a3 d3 ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  AD: "[e3,a3]@3 a2 [e3,a3]@2 a2@2 [e3,a3]@3 a2 [e3,a3]@2 a2 ~", // A5
  AE: "~ e3@2 a2 [e3,a3]@2 a2@2 [e3,a3]@3 a2 [e3,a3]@2 a2@2, a3@3 ~@13", // A5
  AF: "[c3@2 a2 ~ a2@2 c3@2 a2@2 a2 ~ c3@2 [a2,e3]@50]/4", // A5
})).s("gm_distortion_guitar").gain(0.28).pan(0.1)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@15 A B A C D E A F G H I@2 J K L@2 M N O@2 P Q R S T H U@2 J K V@2 W X Y@2 Z AA AB AC AD AE AF A B A C D E A F ~
  AG@3 AH AI A B A AJ A E A AK G AL U@2 J K AM@2 AN@2 Y@2 Z AA AB AO AD AE AP AQ AR B AS C AS C A F ~ AG@3 AH AI A B A C
  D E A F AT@2 AU@2 AV@2 AU@2 AT@2 AU@2 Z AA AW S AX AY AZ BA A B A C A E A F A B A C A E A F BB@4
>`.pickRestart({
  A: "[a3,d4] ~ [a3,d4] ~ [a3,d4]@2 c#4@2 [a3,d4]@3 ~ [a3,d4]@2 c#4@2", // D5
  B: "[a3,d4]@3 ~ [a3,d4]@2 c#4@2 [a3,d4]@2 c#4 ~ [a3,b3]@2 c#4@2", // D5 Asus2
  C: "[a3,d4]@3 ~@3 c#4@2 ~@2 c#4@2 [a3,b3]@2 c#4 ~, ~ [a3,d4]!2 ~", // D5 Asus2 D5
  D: "[a3,d4] ~ [a3,d4] ~ [a3,d4]@2 c#4@2 [a3,d4]@4 a3@2 c#4@2, ~@12 d4 ~@3", // D5
  E: "[a3,d4]@3 ~ [a3,d4]@2 c#4@2 ~@2 c#4@2 [a3,b3]@2 [a3,c#4]@2, ~@2 [a3,d4] ~", // D5 Asus2 A D5
  F: "[a3,d4]@3 ~ [a3,d4]@2 c#4@2 ~@2 c#4@2 [a3,b3]@2 c#4@2, ~@2 [a3,d4] ~", G: "a3@13 ~@3",
  H: "[c3,c4]@2 [a2,a3] ~ [a2,a3]@2 [c3,c4]@2 [a2,a3] ~ [a2,a3]@2 [c3,c4]@2 [a2,a3]@2", // C A C A C A
  I: "[d4@25 ~ d3@6, a3@9 ~@7, e3@15 ~@17]/2", J: "~@2 a3@3 g3@3, a2@5 ~@3", K: "c3@5 ~ c4@3 ~ c4@5 ~",
  L: "[~@6 d4@23 ~@3, a3@25 ~@7, e3@21 ~@11]/2", M: "~@2 e3@2 a3 ~ e3 ~ a3@2 e3 ~@3 g3@2",
  N: "~@2 f#3@2 e3 ~ d3 ~ f#3@4 e3@4", O: "[~@6 e4@23 ~@3, [a3,d4]@29 ~@3]/2", P: "[b2,f#3]", Q: "[f#2,c#3]@7 ~",
  R: "[d3,a3]", S: "[e3,b3]@15 ~", T: "[a2,e3,a3]@13 ~@3", U: "[d3@5 ~ d4@19 ~ d3@6, [e3,a3]@13 ~@3]/2",
  V: "[~@2 d4@13 ~, a3@15 ~]/2", W: "e4@2 c#5 ~ [a4,c#5]@2 c#5@4 e4@2 [a4,c#5]@2 [a4,c#5]@2, a4@2 ~ a4@3 ~@2",
  X: "c#5@2 e4@3 ~ e4@8 ~@2, a4@3 ~@5", Y: "[[a3,d4]@31 ~]/2", Z: "[f#3,b3]", AA: "[f#3,c#4]@15 ~",
  AB: "[a3,d4], e4 ~@15", AC: "[b3,e4]",
  AD: "[d3,a3,d4] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~, ~@3 d4 ~@2 d4 ~", // D5
  AE: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3,d4] ~ [d3,a3] ~, ~ d4 ~@2 d4 ~@3", // D5
  AF: "[d3,a3,d4] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3,d4] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3,d4] ~ [d3,a3] ~", // D5
  AG: "[~@2 f#3@2 a3@2 b3@6 f#3@2 ~@16 c#4@17 ~, ~@14 a3@33 ~, ~@26 f#4@21 ~]/3", AH: "[a3,d4,e4]", AI: "[b3,e4]@7 ~",
  AJ: "[a3,d4]@3 ~@3 c#4@2 ~@2 c#4@2 b3@2 c#4 ~, ~ [a3,d4]!2 a3", // D5
  AK: "[a3,d4]@2 [a3,d4] c#4 ~ c#4 [a3,b3] c#4, ~@2 [a3,d4] ~", // D5 Asus2 D5
  AL: "c4@2 [a2,a3] ~ [a2,a3]@2 [c3,c4]@2 [a2,a3] ~ [a2,a3]@2 [c3,c4]@2 [a2,a3]@2, c3 ~@15", // A C A C A
  AM: "[d3@5 ~ d4@23 ~@3, [e3,a3]@29 ~@3]/2", AN: "[~@2 e3@2 f#3@2 a3@2 b3 a3 b3@2 a3@2 c#4@8 a3@10]/2",
  AO: "b3, e4@7 ~",
  AP: "[a3,d4]@2 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~, ~@3 d4 ~@2 d4 ~", // D5
  AQ: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3,d4] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~, ~ d4 ~@4 d4@2", // D5
  AR: "[a3,d4] ~ [a3,d4] ~ a3@2 c#4@2 [a3,d4]@3 ~ [a3,d4]@2 c#4@2", // D5
  AS: "[a3,d4]@2 [a3,d4]@2 a3@2 c#4@2 [a3,d4]@3 ~ [a3,d4]@2 c#4@2, ~@4 d4 ~@11", AT: "[[e3,a3]@15 ~]/2",
  AU: "[[d3,a3]@31 ~]/2", AV: "[e3,a3]/2", AW: "[d3,a3]@15 ~",
  AX: "[c#3,c#4] ~ [d3,d4] ~ [d3,d4] ~ [c#3,c#4] ~ [d3,d4] ~ [d3,d4] ~ [c#3,c#4] ~ [d3,d4] ~", // C# D C# D C# D
  AY: "[d3,d4] ~ [c#3,c#4] ~ [d3,d4] ~ [d3,d4] ~@2 c#4 [d3,d4] ~ [c#3,c#4]@2 [d3,d4] ~, ~@4 c#3 ~@3", // D C# D C# D
  AZ: "[c#3,c#4]@2 [d3,d4] ~ [d3,d4] ~ [c#3,c#4]@2 [d3,d4] ~ [d3,d4] ~ [c#3,c#4]@2 [d3,d4] ~", // C# D C# D C# D
  BA: "[d3,d4] ~ [c#3,c#4]@2 [d3,d4] ~ [d3,d4] ~ [c#3,c#4]@2 [d3,d4] ~ [c#3,c#4]@2 [d3,d4] ~", // D C# D C# D C# D
  BB: "[[c3,c4]@2 [a2,a3] ~ [a2,a3]@2 [c3,c4]@2 [a2,a3] ~ [a2,a3]@2 [c3,c4]@2 [a2,e3,a3]@50]/4", // C A C A C A5
})).s("gm_overdriven_guitar").gain(0.37).pan(0.9)

// chords · rock organ
const rock_organ = note(`<
  ~@13 A B C@2 D@2 E@2 F@2 G ~ H@8 I@2 J@2 K L M ~ I@2 N@2 H@4 I@2 O P@2 Q R@3 S@2 D@4 F@2 T@4 K L U V E@2 D@2 W@2 X ~
  I@2 N@2 I@2 N@2 I@2 O Y K L Z@4 D@8 AA@4 K L D@2 AB AC D@2 F@2 AD@6 AE@6 AF@2 K AG AH@4 AI@2 D@2 AJ@2 E@2 AK@4 AL@2
  AM@2 ~ AN ~@2
>`.pickRestart({
  A: "[d4,f#4,a4]@15 ~", B: "[e4,g#4,b4]@15 ~",
  C: "[[a4,d5] ~ [a4,d5] ~ [a4,d5]@2 c#5@2 [a4,d5]@4 d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@2 c#5@2 b4@2 c#5 ~, ~@6 a4 ~@5 a4@7 ~ a4@11 ~]/2", // D5
  D: "[[a4,d5] ~ [a4,d5] ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@2 c#5@2 b4@2 c#5 ~, ~@4 a4@7 ~ a4@7 ~ a4@11 ~]/2", // D5
  E: "[[a4,d5] ~ [a4,d5] ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@2 c#5@2 [a4,b4]@2 c#5 ~, ~@4 a4@7 ~ a4@7 ~ a4@8 ~@4]/2", // D5 Asus2
  F: "[[a4,d5] ~ [a4,d5] ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@2 c#5@2 b4@2 c#5@2, ~@4 a4@7 ~ a4@7 ~ a4@11 ~]/2", // D5
  G: "a4@7 ~@9", H: "[[d5,f#5]@32 [c#5,e5]@31 ~, a5@63 ~]/4", I: "[[d5,f#5,a5]@31 ~]/2",
  J: "[[b4,d5]@15 ~ [a4,c#5]@16, f#5]/2", K: "[a4,d5,f#5]", L: "[b4,e5,g#5]", M: "[a4,c#5,e5]@7 ~",
  N: "[[c#5,e5,a5]@31 ~]/2", O: "[b4,d5,f#5]", P: "[[a4,c#5] [d5,a5], f#5@31 ~]/2", Q: "[e5,g#5,b5]",
  R: "[~@2 [f#5,a5], d5]/3", // F#m
  S: "[[a4,d5] ~ [a4,d5] ~@3 c#5 ~ [a4,d5]@4 d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@2 c#5@2 [a4,b4]@2 c#5 ~, ~@5 [a4,d5]@3 ~@4 a4@8 a4@8 ~@4]/2", // D5 Asus2 D5
  T: "[~@48 a5@15 ~, [b4,d5]@32 [a4,c#5]@31 ~, ~@16 f#5@47 ~]/4", // Bm A
  U: "[a4,d5] ~ [a4,d5] ~ [a4,d5]@2 c#5@2 [a4,d5]@3 ~ [a4,d5]@2 c#5@2", // D5
  V: "[a4,d5]@3 ~ [a4,d5]@2 c#5@2 d5@2 c#5@2 b4@2 c#5 ~, ~@8 a4@7 ~", // D5
  W: "[[a4,d5] ~ [a4,d5] ~ d5@2 c#5@2 d5@3 ~ d5@2 ~@2 d5@3 ~ [a4,d5]@2 c#5@2 d5@2 c#5@2 b4@2 c#5@2, ~@4 a4@7 ~ a4@7 ~@5 a4@7 ~]/2", // D5
  X: "a4@5 ~@11", Y: "[a4,c#5,f#5]", Z: "[~@32 a5@31 ~, [a4,d5,f#5]@63 ~]/4",
  AA: "[~@37 f#5@25 ~@2, [b4,d5]@31 [a4,c#5]@31 ~@2, ~@8 f#5@29 ~@27]/4", // Bm A
  AB: "[a4,d5] ~ [a4,d5] ~ d5@2 c#5@2 d5@3 ~ [a4,d5]@2 c#5@2, ~@4 a4@7 ~@5", // D5
  AC: "[a4,d5]@3 ~ d5@2 c#5@2 d5@2 c#5@2 b4@2 c#5 ~, ~@4 a4@11 ~", AD: "[~@32 [d5,f#5]@32 [c#5,e5]@31 ~, a4@95 ~]/6",
  AE: "[[d5,f#5]@32 [c#5,e5]@31 ~ [d5,f#5]@32, a4@63 a4@32 ~]/6", AF: "[[b4,d5]@15 ~ [a4,c#5]@15 ~, f#5@31 ~]/2",
  AG: "[b4,e5,g#5]@15 ~", AH: "[a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~",
  AI: "[[a4,d5] ~ [a4,d5] ~ [a4,d5] ~ c#5@2 d5@3 ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@2 c#5@2 b4@2 c#5 ~, ~@6 a4@5 ~ a4@7 ~ a4@11 ~]/2", // D5
  AJ: "[[a4,d5] ~ [a4,d5] ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@2 c#5@2 b4@2 c#5 ~, ~@4 a4@7 ~ a4@7 ~ a4@11 ~, ~@24 c#5 ~@7]/2", // D5
  AK: "[[a4,d5] ~ [a4,d5] ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@3 ~ [a4,d5]@2 c#5 ~ [a4,d5]@2 c#5@2 b4@2 [a4,c#5] ~, ~@4 a4@7 ~ a4@7 ~@9 a4 ~@3]/2", // D5 A
  AL: "[[a4,d5] ~ [a4,d5] ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@3 ~ [a4,d5]@2 c#5 ~ [a4,d5]@2 c#5 ~ [a4,b4]@2 c#5 ~, ~@4 a4@7 ~ a4@7 ~@13]/2", // D5 Asus2
  AM: "[[a4,d5] ~ [a4,d5] ~ d5@2 c#5@2 d5@3 ~ d5@2 c#5@2 d5@3 ~ [a4,d5]@2 c#5@2 d5@2 [a4,c#5]@2 b4@2 [a4,c#5] ~, ~@4 a4@7 ~ a4@7 ~@5 a4 ~@3 a4 ~@3]/2", // D5 A
  AN: "[a2,a4,e5] ~@3", // A5
})).s("gm_rock_organ").gain(0.34)

// chords · violin
const violin = note("<~ A@2 B@2 A@2 C@2 D@2 E F G H ~@109 I@2 J@2 I@2 K@2 L@2 M@2 N O ~@24>".pickRestart({
  A: "[b4@3 a4@3 e4@2 b4@3 a4@3 e4@2, d2]/2", B: "[b4@3 a4@3 d5@2 d5@3 c#5@3 b4@2, a1]/2",
  C: "[b4@3 a4@3 d5@2 a4@8, a1]/2", D: "[b4@3 a4@3 g#4@2 b4@3 ~@3 g#4@2, d2@3 e2, ~@22 a4@7 ~@3]/2",
  E: "d4@3 e4@3 a4@2, b1", F: "f#4@3 e4@3 a4@2, f#1", G: "b4@3 a4@3 e4@2, d2", H: "b4@3 a4@3 e4@2, e2",
  I: "[b4@3 a4@3 e4@2 b4@3 a4@3 e4@2, d3]/2", J: "[b4@3 a4@3 e4@2 d5@3 c#5@3 b4@2, a2]/2",
  K: "[b4@3 a4@3 g#4@2 e4@8, a2]/2", L: "[b4@3 a4@3 g#4@2 b4@3 ~@3 g#4@2, d3@3 c#3, ~@11 a4@3 ~@2]/2",
  M: "[e4@3 f#4@3 ~@2 f#2@8, b2 ~, ~@3 a4@5]/2", N: "b4@3 a4@3 e4@2, d3", O: "b4@3 a4@3 e4@2, e3",
})).s("gm_violin").gain(0.25).pan(0.9)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@15 A ~ B ~ C D ~@5 C E@2 ~ C E B C F C E G ~@3 E F B E@2 G C G@2 C E@2 G D H I ~ E J B@2 E B K ~ B L E M N B N O B ~
  N D B ~@3 B N B C N ~@2 B N P L Q B ~ R S ~@2 N ~@2 D J@2 E J N B N B N@2 B J N J N J L T ~@27 J G ~@3 E ~ U ~@5
>`.pickRestart({
  A: "~@5 x!3", B: "~@10 x ~@2 x ~@2", C: "~@11 x ~@2 x ~", D: "~@11 x ~@4", E: "~@7 x", F: "~@13 x!2 ~",
  G: "~@13 x ~@2", H: "~@4 x!2 ~ x", I: "~@2 x ~@4 x", J: "~@5 x ~@2", K: "~@3 x ~@6 x ~@2 x ~@2",
  L: "~@3 x ~@6 x ~@3 x ~", M: "~@11 x ~ x!2 ~", N: "~@5 x ~ x", O: "~@3 x ~@9 x ~@2", P: "~@3 x ~@7 x ~@2 x ~",
  Q: "x ~@9 x ~@2 x ~@2", R: "~ x", S: "~ x ~@2", T: "~@11 x ~ x ~@2", U: "~@3 x ~@10 x ~",
})).gain(0.16)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@13 A ~@18 B ~@40 C ~@11 D E ~@8 F ~@3 F ~@40 G ~@16 B ~@4>".pickRestart({
  A: "x!7 ~", B: "~@7 x", C: "~ x ~@14", D: "~ x ~@7 x ~@6", E: "~ x", F: "~@13 x ~@2", G: "x!3 ~ x!2 ~@2",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@13 [x!8] [x!4 ~@4] ~@50 [~ x] ~@96>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@25 A B C D E C F G H C I J K C A ~ L C M N O P C Q A R S H T C ~@27 U V W X M V C Y A B Z AA I K ~@66
>`.pickRestart({
  A: "~ x!3", B: "x ~@3 x ~@3 x ~@3 x ~@2 x", C: "x!4", D: "x ~ x ~ x!3 ~", E: "x!3 ~ x!3 ~",
  F: "x ~@2 x!2 ~@3 x ~@3 x ~@3", G: "x ~@3 x ~@3 x ~ x!3 ~@3", H: "x!5 ~ x ~", I: "x ~ x!3 ~ x!2",
// … 58 more lines

More by LIGABUE