Strudelify

E' ancora sabato

Celentano

KeyF majorTempo100 bpm
0:00/0:00
// E' ancora sabato — Celentano
// 100 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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.

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@20 A B@2 ~ A C@3 ~@7 D ~@3 D E@3 F@5 G@6 H I H J K L@2 A M@3 N O@3 P@2 Q R S@2 T U@6 V@6 W X J Y Z AA AB@2 AC AD AE
  AF AG AH AI AJ AK@6
>`.pickRestart({
  A: "f4 e4@2 c4@4 ~", B: "[f4@2 e4@4 c4@4 bb3@2 d4@2 c4@15 ~@3]/2", C: "[f4 e4@2 c4@2 bb3 d4 c4@11 ~@6]/3",
  D: "f4@2 e4@4 c4@9 ~", E: "[~@16 db4@14 ~@2 [a3,c4]@13 ~@3, ~@15 f3@15 ~ f3@14 ~@3, ~@15 bb3@13 ~@20]/3",
  F: "[f4@2 e4@4 c4@8 ~@2 c4@12 ~@14 f3@5 ~@17 c4@12 ~@4, ~@15 [f3,a3]@13 ~@3 f3@10 ~@22 [f3,a3]@13 ~@4, ~@8 d4@5 ~@7, ~@8 bb3@3 ~@9]/5", // F
  G: "[~@16 d4@11 ~@5 [bb3,db4]@13 ~@3 c4@11 ~@5 d4@13 ~@3 d4@10 ~@6, ~@15 [f3,bb3]@12 ~@4 [eb3,g3]@14 ~@2 [f3,a3]@11 ~@5 [gb3,a3]@13 ~@3 [g3,bb3]@11 ~@6]/6", // Bbm Bb5 Eb F Gbm Gm
  H: "~@3 f3@5, ~ db4@6 ~, ~@2 bb3@5 ~", I: "~@3 f3@4 ~, ~@2 c4@11 ~@3, ~@2 a3@5 ~",
  J: "~@6 f3@7 ~@3, ~@2 c4@11 ~@3, ~@4 a3@9 ~@3", K: "~@3 f3@4 ~, ~ db4@6 ~, ~@4 bb3@9 ~@3",
  L: "[~@6 c4@21 ~@5, ~@2 f3@25 ~@5, ~@4 a3@23 ~@5]/2", M: "[f4 e4@2 c4@2 bb3 [db4,d4] c4@10 ~@7]/3", N: "f4 e4@2 c4@5",
  O: "[f4@2 e4@4 c4@4 bb3@2 d4@2 c4@21 ~@13]/3",
  P: "[~@6 bb3 ~@15 c4@10, ~@2 f3@14 ~@2 f3@13 ~, ~@4 a3@15 ~ a3@11 ~]/2", Q: "~@6 c4@9 ~, ~ f3@7, ~@4 a3@11 ~",
  R: "~@3 c4@5, ~ f3@7, ~ a3@3", S: "[~@2 a3 c4@6 ~@2 c4@5, ~@2 g3@15 ~ g3@14, ~@5 bb3@3]/2", T: "~@2 bb3 c4@5, ~ f3@7",
  U: "[~@4 bb3@2 c4@9 ~ [a3,c4]@15 ~ d4@9 ~@5 f3@12 ~@2 [bb3,d4]@3 ~ c4@10 ~@2 c4@15 ~ [a3,c4]@3 f3, ~@2 f3@13 f3@15 ~ f3@13 bb3@14 ~ f3@3 ~ f3@28 f3@3 ~@2, ~@31 bb3@11 d4@16 ~@6 a3@13 ~@19, ~@74 f4@17 ~@5]/6", // Am Bb Am
  V: "[[bb3,d4]@12 ~@14 eb3@3 ~@3 c4@12 ~@4 c4@8 d4@5 ~@3 d4@9 ~@3 bb3@2 g3 ~ [bb3,db4]@13 ~@3, ~@15 g3@14 ~@2 [f3,a3]@13 ~@3 [gb3,a3]@15 ~ g3@14 ~@2 f3@14 ~@3, ~@15 eb3@10 ~@49 d4@4 ~@18, ~@16 [bb3,db4]@14 ~@33 bb3@12 ~@5 a3 ~@15]/6", // Bb Bbm F Gbm Bbm
  W: "~@6 f3@7 ~@3, ~ c4@6 ~, ~@2 a3@5 ~", X: "~@3 f3@4 ~, ~ db4@6 ~, ~@2 bb3@5 ~",
  Y: "~@3 f3@3 ~@2, ~@2 db4@11 ~@3, ~ bb3@2 ~", Z: "~@6 d4@9 ~, ~@2 f3@13 ~, ~@4 a3@11 ~",
  AA: "~@6 f3@5 ~ [a3,d4]@4, ~@2 d4@9 ~@5, ~@4 a3@7 f3@4 ~", // D5
  AB: "[~@2 f3@2 a3@2 bb3@4 c4@12 ~@4 c4@4 e3 ~, ~@11 e3@3 ~@2, ~@24 a3@7 ~]/2", AC: "~@3 eb4@5, ~ g3@7, ~ c4@3",
  AD: "~@2 [g3,a3] ~@3 gb4@7 ~@3, ~@3 a3@12 ~, ~@2 c4@5 ~", AE: "~@3 d4@4 ~, ~@2 g3@13 ~, ~@2 bb3@5 ~",
  AF: "~@4 f3 ~ f3@9 ~, ~ db4@6 ~, ~@2 bb3@5 ~", AG: "~@3 c4@4 ~, ~ f3@6 ~, ~@4 a3@11 ~",
  AH: "~@6 db4@9 ~, ~ f3@7, ~@4 bb3@11 ~", AI: "~@3 c4@4 ~, ~ f3@6 ~, ~@2 a3@5 ~",
  AJ: "~@3 db4@4 ~, ~ f3@6 ~, ~@4 bb3@9 ~@3", AK: "[[f3,a3,c4]@53 ~@11 f4@17 ~@15, ~@21 [f3,a3]@6 ~@5]/6",
})).s("gm_acoustic_guitar_steel").gain(0.16).pan(0.9)

// chords · percussive organ
const percussive_organ = note("<~@44 A@3 B@3 C@4 D@7 ~@16 E@6 F@6 G@7 H@6 I@8>".pickRestart({
  A: "[~ bb5@2, ~@5 [bb4,d5]@11]/3", B: "[[a4,c5]@31 ~ [bb4,d5]@15 ~, ~@31 f4@16 ~]/3",
  C: "[[g4,bb4,db5]@15 ~ c5@16 c5@15 ~ g5@16, eb4@14 ~ f4@16 ~@16 [g4,bb4]@17, ~@16 a4@31 ~ f5 ~@15]/4", // Gdim Gm
  D: "[~@10 f4@4 ~@2 a4@15 ~@7 f5@9 [f4,a4]@15 ~@2 db5@15 ~ f5@30 ~@2, f4@8 bb4@7 [f4,c5]@16 [f4,bb4]@16 ~@32 [f4,a4]@31 ~@2, ~@6 db5@9 ~@17 db5@14 ~@17 bb4@15 ~@34]/7", // F F5 Bb5 F
  E: "[~@16 bb5@31 a4@16 ~ f4@2 f4 ~ f4@2 g4@3 ~ a4@4 ~@2 d5@15 ~, ~@15 [bb4,d5]@32 c5@31 ~ f4@16 ~]/6", // Bb
  F: "[[eb4,bb4]@15 ~@2 f4@13 ~@44 f4@4 ~@8 f5@10, ~@15 f4@2 ~@14 gb4@15 ~ g4@15 ~ f4@10 ~@6 f4@16 ~, ~@16 [a4,c5]@15 ~ d5@31 ~@3 f5@4 bb4@9 ~ [a4,c5]@16, ~@48 bb4@20 db5@11 ~@17]/6", // Eb5 Am
  G: "[[a4,bb4] ~@5 f5@9 ~@7 f5@8 ~@10 f4@5 ~ d5 ~ d5@31 ~ [e4,f4,gb4] ~@14 [e4,a4]@6 ~ [e4,a4]@9 d5, f4@4 f4@10 ~ f4@4 ~ f4@10 ~ f4@9 ~@6 f4@33 ~@33, ~ db5@13 ~ a4@2 ~ a4@12 ~ a4@3 ~@4 bb4@8 ~ a4@48 ~@17, ~@16 c5@15 ~ db5@15 ~@32 c5@32 ~]/7", // Bbmaj7 A5
  H: "[~ eb5@2 ~@3 eb5@9 ~ gb5@12 ~@4 g5@15 ~ bb4@15 ~ c5@15 ~ db5@6 ~@4 bb4@2 f4@2 bb4@2, [g4,c5]@15 a4@16 g4@15 ~ f4@15 ~ f4@29 ~@4, ~@16 d5@30 ~@17 a4@14 ~@2 bb4@9 db5@8, ~@86 f5@5 ~@5]/6", // C5
  I: "[~@10 f5@5 ~ db5@6 ~@4 bb4@5 ~@7 f5@80 ~@10, f4@15 f4@15 ~ [f4,a4]@87 ~@10, d5@2 ~@4 c5@9 ~@7 f5@10 ~@96, ~ a4@14 ~ bb4@8 db5@7 ~ c5@85 ~@11]/8", // F
})).s("gm_percussive_organ").gain(0.22)

// chords · percussive organ · soft notes
const percussive_organ_soft = note(`<
  ~@45 A B@3 ~@3 C ~ D ~@2 E@2 ~@20 F@3 G H I@2 J@2 ~ K ~@4 L ~@2 M@3 ~@3 N ~@6
>`.pickRestart({
  A: "f5 ~@15", B: "[~@15 f5@31 ~ bb4, ~@23 d5]/3", C: "~@6 gb4@8 b4 ~", D: "db5@5 ~@11", E: "[c5@15 f4@15 ~@2]/2",
  F: "[~@14 f5@33 ~, ~@14 g5 ~@33]/3", G: "bb4@7 ~", H: "~ db5@15, g4@15 ~", I: "[~@15 a4@15 db5@2]/2",
  J: "[~@15 db5@3 ~@14]/2", K: "~@2 bb4@13 ~", L: "~ e4@6 ~", M: "[~@15 bb4@16 db5@16 ~]/3", N: "~@15 c5",
})).s("gm_percussive_organ").gain(0.1)

// chords · pad warm
const pad_warm = note(`<
  ~@12 A@8 B@6 C@8 D@2 ~@2 D@2 E@4 F@6 G@2 H@2 I J K L M@3 N@4 O@5 ~@3 P@4 Q@7 R@5 S@2 T@8 ~ U V W X@7
>`.pickRestart({
  A: "[~@32 a3@31 ~@32 f3@32 ~, [f3,c4]@60 ~@3 g3@31 ~@34, ~@64 c4@61 ~@3]/8", // F5
  B: "[g3@31 ~ f3@32 [g3,g4]@32, c4@31 ~, f4@5 ~@91]/6", // G
  C: "[d4@5 ~ c4@25 f4@65 bb3@31 ~, f3@31 c4@93 ~@4, ~@31 a3@63 ~@34]/8", D: "[a3,c4,f4]/2",
  E: "[[g3,c4]@14 ~ [bb3,db4]@16 ~ c4@32, ~@14 f3@17 a3@33]/4", // C5 Bbm
  F: "[~@15 bb4@32 ~ [c4,a4]@32 [d4,bb4]@16, ~@7 bb3@16 ~@25, ~@15 f4@76 ~@5]/6", // F Gm
  G: "[[eb3,g3,bb3]@15 ~ a3@16, ~@15 [f3,c4]@16 ~]/2", H: "[ab3 ~@2 gb3@11 ~ [bb3,g4]@17, c4@14 g3@17 ~]/2",
  I: "[bb3,db4,bb4]", J: "[c4,a4]@15 ~", K: "[db4,bb4]@15 ~", L: "[c4,a4]",
  M: "[[db4,bb4]@15 ~ a3@32, ~@15 f3@32 ~, ~@16 c4 ~@31]/3", // Gb
  N: "[a3 ~@15 g4@15 [f3,a3]@32 g3, [g3,c4]@31 c4@16 ~@17]/4", O: "[c4@15 [g3,c4]@16 ~ f4@47 ~, ~@31 [a3,c4]@47 ~@2]/5",
  P: "[g4@31 f4@32 ~, c4@15 ~]/4",
  Q: "[~@15 d4@32 [c4,f4]@32 ~@3 a4@6 bb4@9 ~ f3 ~ d3 ~@3 db4@7 ~, [f3,a3,c4]@16 ~@84 eb3@11 ~, ~@14 bb3@32 ~@33 c4@18 ~@5 g3@10]/7", // F5 F
  R: "[~@8 f4@8 a3@14 ~ [a3,c4] g4@15 [bb3,db4]@16 ~@3 c5@14, a3@15 ~@15 g3@17 ~@33, ~@2 c4@29 bb3@16 ~@16 f4@17]/5", // Am Bbm
  S: "[c5 bb4 a4@2, f4, db4 ~]/2",
  T: "[[db4,bb4]@15 ~@33 [c4,a4]@31 [c4,eb4]@16 ~ gb4@15 ~ [g4,bb4]@16, ~@15 [a3,d4]@31 a3@32 ~@17 c4@16 d4@16 ~, ~ f4@2 ~@5]/8", // Gb F Cm Gm D5
  U: "c5", V: "~ f4, db5", W: "a4@3 g4@2 a4@3, f4 ~@3",
  X: "[[f4,bb4]@15 ~@64 f4@22 ~@11, ~@15 f3@62 ~ f3@23 ~@11, ~@8 [a3,c4]@43 ~@5]/7", // Bb5 Am
})).s("gm_pad_warm").gain(0.15)

// chords · pad warm · soft notes
const pad_warm_soft = note(`<
  ~@18 A ~@2 B C@2 ~@2 D@2 ~@4 E@2 ~@2 F@2 ~@3 G@4 ~@5 H ~@4 I@4 J@2 ~@2 K@2 L@2 ~@3 M@7 N@5 O ~ P Q ~ R@3 S ~@2 T@5 ~ U
  ~@3 V ~@6
>`.pickRestart({
  A: "a3 ~@15", B: "g4@15 ~", C: "f4/2", D: "[~ bb3@2 ~ a3@27 ~]/2", E: "[~@2 g4@29 ~]/2", F: "[~ g4@31, [c4,d4]]/2",
  G: "[~@15 f3@39 ~@10]/4", H: "db4", I: "[f4@46 ~ f4@16 ~]/4", J: "[~@5 c4@26 ~]/2", K: "[~@15 [c4,f4,c5]@17]/2",
  L: "[~@15 g4@16 ~]/2", M: "[~ [c4,f4]@23 ~@16 a4@16, ~@2 c5@105 ~@5]/7", N: "[~@15 bb4@32 c5@32 ~]/5", O: "f4 ~",
  P: "f3", Q: "~ gb3@15", R: "[bb4@5 c4@6 ~@5]/3", S: "[c4,d4,e4] ~ c4@14", T: "[~@15 e4@32 c5@32 ~]/5", U: "~ db5@7",
  V: "db5@15 ~",
})).s("gm_pad_warm").gain(0.08)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@12 A B A C D E A B F E A B D E A B A B A B D E A B D E A B D G A B A H I B A H J K L M N B N B N B A E D B A E D B A
  B A B A E D B A B I H A B I O A P Q G A G A G R S T U V W Q G A G A G A B A B ~@2
>`.pickRestart({
  A: "~@2 [c4,f4,a4] f4 ~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~", // F
  B: "~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~", // F
  C: "~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] g4", // F
  D: "~@2 [d3,bb3,c4] c4 ~@2 [d3,bb3,c4] ~@3 [d3,bb3,c4] ~@3 [d3,bb3,c4] ~", // Gm
  E: "~@2 [d3,bb3,c4] ~@3 [d3,bb3,c4] ~@3 [d3,bb3,c4] ~ [d3,bb3,c4] ~ [d3,bb3,c4] ~", // Gm
  F: "~@2 [g3,a3,c4] [d3,a3,c4] ~@2 [d3,bb3,c4] ~@3 [d3,bb3,c4] ~@3 [d3,bb3,c4] ~", // Am7 D7 Gm
  G: "~@2 [f3,bb3,db4] ~@3 [f3,bb3,db4] ~@3 [f3,bb3,db4] ~ [f3,bb3,db4] ~ [f3,bb3,db4] ~", // Bbm
  H: "~@2 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~", // Bb
  I: "~@2 [f3,bb3,d4] bb3 ~@2 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~", // Bb
  J: "~@2 [f3,bb3,db4] bb3 ~@2 [db4,eb4,g4] ~@3 [db4,eb4,g4] ~@3 [db4,eb4,g4] ~", // Bbm Eb7
  K: "~@2 [c4,a4,bb4] ~@3 [c4,a4,bb4] ~@3 [c4,a4,bb4] ~ [c4,a4,bb4] ~ [c4,a4,bb4] ~", // F
  L: "~@2 [a3,d4,gb4] d4 ~@2 [a3,d4,gb4] ~@3 [a3,d4,gb4] ~@3 [a3,d4,gb4] ~", // D
  M: "~@2 [d3,g3,bb3] ~@3 [d3,g3,bb3] ~@3 [d3,g3,bb3] ~ [d3,g3,bb3] ~ [d3,g3,bb3] ~", // Gm
  N: "~@2 [f3,bb3,db4] bb3 ~@2 [f3,bb3,db4] ~@3 [f3,bb3,db4] ~@3 [f3,bb3,db4] ~", // Bbm
  O: "~@2 [db4,eb4,g4] ~@3 [db4,eb4,g4] ~@3 [db4,eb4,g4] ~ [db4,eb4,g4] ~ [db4,eb4,g4] ~", // Eb7
  P: "~@2 [a3,d4,gb4] ~@3 [a3,d4,gb4] ~@3 [a3,d4,gb4] ~ [a3,d4,gb4] ~ [a3,d4,gb4] ~", // D
  Q: "~@2 [d3,g3,bb3] g3 ~@2 [d3,g3,bb3] ~@3 [d3,g3,bb3] ~@3 [d3,g3,bb3] ~", // Gm
  R: "~@2 [a3,d4,f4] d4 ~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~", // Dm
  S: "~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] [e4,a4]", // Dm A5
  T: "~@2 [e3,a3,c4] a3 ~@2 [e3,a3,c4] ~@3 [e3,a3,c4] ~@3 [e3,a3,c4] ~", // Am
  U: "~@2 [e3,a3,c4] ~@3 [e3,a3,c4] ~@3 [e3,a3,c4] ~ [e3,a3,c4] ~ [e3,a3,c4] ~", // Am
  V: "~@2 [g3,a3,c4] a3 ~@2 [g3,a3,c4] ~@3 [g3,a3,c4] ~@3 [g3,a3,c4] ~", // Am7
  W: "~@2 [c4,d4,gb4] ~@3 [c4,d4,gb4] ~@3 [c4,d4,gb4] ~ [c4,d4,gb4] ~ [c4,d4,gb4] ~", // D7
})).s("gm_acoustic_guitar_nylon").gain(0.11).pan(0.7)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@12 A ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ A ~ C ~ A ~ D ~ E ~ F ~ F ~ F ~ A ~ B ~ A ~ B ~ A
  ~ A ~ A ~ B ~ A ~ C ~ A ~ C ~ A ~ G ~ A ~ A ~ H ~ I ~ J ~ G ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@12 [c4,f4] a4 ~@2", B: "~@12 [d3,c4] bb3 ~@2", C: "~@12 [f3,bb3] d4 ~@2", D: "~@12 [db4,eb4] g4 ~@2",
  E: "~@12 [a3,d4] gb4 ~@2", F: "~@12 [f3,bb3] db4 ~@2", G: "~@12 [d3,g3] bb3 ~@2", H: "~@12 [a3,d4] f4 ~@2",
  I: "~@12 [e3,a3] c4 ~@2", J: "~@12 [g3,a3] c4 ~@2",
})).s("gm_acoustic_guitar_nylon").gain(0.05).pan(0.7)

// chords · epiano2
const epiano2 = note(`<
  ~@20 A B@3 C D@2 ~ E@2 F@2 G@2 H@2 I@2 J@2 K@3 L@5 M N O@2 P@3 Q@6 C R@3 C R@3 ~@7 S T@4 M U@7 V@5 W@3 X Y@2 Z@2 AA@7
  ~
>`.pickRestart({
  A: "~ e4@2 c4@5, f4@3 ~@5", B: "[f4@2 e4@4 c4@4 bb3@2 d4@2 c4@23 ~@11, ~@12 db4 ~@35]/3", C: "f4@2 e4@4 c4@9 ~",
  D: "[f4 e4@2 c4@2 bb3 d4 c4@9, ~@12 db4 ~@19]/2", E: "[~@3 c4@13, ~ f3@15, ~ a3@7]/2",
  F: "[~@6 c4@23 ~@3, ~@2 f3@27 ~@3, ~@4 a3@25 ~@3]/2", G: "[~@5 c4@10 ~, ~@2 g3@13 ~, ~@3 bb3@12 ~]/2",
  H: "[~@3 c4@13, ~@4 a3@27 ~]/2", I: "[~@5 c4@5 ~@6, ~@2 g3@19 ~@11]/2", J: "[~@6 c4@25 ~, ~@2 f3@29 ~]/2",
  K: "[~@16 db4@15 ~ c4@15 ~, ~@15 [f3,bb3]@16 [f3,a3]@16 ~]/3", // Bb5 F
  L: "[f4 e4@2 c4@6 ~@20 d4@2 ~@4 f4@5, ~@31 bb3@21 bb3@10 ~ a3@17, ~@31 f3@19 f3@12 f3@8 ~@10, ~@16 d4@13 ~@11, ~@27 c4@4 ~ c4@8]/5",
  M: "[f3,a3,c4]@15 ~", N: "[f3,bb3,d4]", O: "[[eb3,g3,bb3,db4]@15 ~ c4@16, ~@15 [f3,a3]@17]/2",
  P: "[[gb3,a3,c4]@15 ~ [bb3,d4]@15 ~ db4@16, ~@15 g3@15 ~ [f3,bb3]@17]/3", // Gbdim Bb Bb5
  Q: "[[f3,a3,c4]@15 ~ db4@10 ~@4 f3 ~ [a3,c4]@15 ~ db4@15 ~ c4@31 ~, ~@15 f3@15 ~ f3@15 ~ [f3,bb3]@16 [f3,a3]@32 ~, ~@15 bb3@13 bb3@4 ~@64, ~@13 db4@3 ~@32]/6", // F Am Bb5 F
  R: "[f4 e4@2 c4@2 bb3 d4 c4@16 ~, ~@12 db4 ~@35]/3", S: "f4 e4@2 c4@5",
  T: "[~@6 g3@4 a3@4 ~@2 [bb3,d4]@18 ~@4 c4@4 d4@5 ~ c4@14 ~@2, f3@14 ~ f3@19 f3@12 ~ [f3,a3]@16 ~, ~@18 bb3@5 ~@9]/4", // Bb F
  U: "[[f3,bb3,d4]@15 ~ [bb3,db4]@15 ~ c4@15 ~ c4@15 ~ d4@15 ~ db4@15 ~ [a3,c4]@15 ~, ~@15 [eb3,g3]@16 [f3,a3]@16 a3@15 ~ [g3,bb3]@16 [f3,bb3]@16 f3@16 ~]/7", // Bb Bbm Am Eb F Gm Bb5
  V: "[[bb3,db4]@15 ~ c4@15 ~ db4@15 ~@23 d4@9 ~, ~@15 [f3,a3]@16 [f3,bb3]@16 f3@19 f3@13 ~, ~@24 d4@11 ~@5, ~@48 a3@20 a3@11 ~]/5", // Bbm F Bb5
  W: "[e3@10 ~@16 e3@2 [e3,a3,c4]@3 ~@11 g3@2 [g3,c4,eb4]@4, a3@3 a3@4 ~ eb4@3 ~, ~@5 e3@8 ~@11, ~@14 c4@14 ~@3 c4@13 ~@4]/3", // Am Cm
  X: "gb4@3 [a3,c4,gb4], a3@5 ~@3", Y: "[[g3,bb3,d4]@15 ~ [bb3,db4]@15 ~, ~@15 f3@16 ~]/2",
  Z: "[[f3,a3,c4]@15 ~ db4@15 f3, ~@15 bb3@16 ~]/2", // F
  AA: "[[a3,c4]@15 ~ db4@15 ~ c4@40 ~@24 f3@16, ~@15 [f3,bb3]@16 [f3,a3]@41 ~@7 a3@31 ~@2, ~@79 f3@16 ~@17, ~@5 f4@2]/7", // Am Bb5 F
})).s("gm_epiano2").gain(0.28).pan(0.1)

// chords · epiano2 · soft notes
const epiano2_soft = note("<~@34 A@2 B ~ C@2 ~@7 D ~@36 E@2 ~@3 F ~@4 G H@2 I ~@2 J@2 ~@4 K@3 ~>".pickRestart({
  A: "[~ f3@15]/2", B: "~@3 a3@2 ~@3", C: "[~@4 a3@27 ~]/2", D: "~@3 f3@5", E: "[~@15 gb3@16 ~]/2", F: "f3@15 ~",
  G: "~ c4@13 ~@2", H: "[~@15 g3@11 ~@6]/2", I: "~@5 a3 ~@2, c4@3 ~", J: "[~@15 f3@16 ~]/2", K: "[~@15 c4@29 ~@4]/3",
})).s("gm_epiano2").gain(0.14).pan(0.1)

// bass · fretless bass
const bass = note(`<
  A B C D C D C D E F C D C D C D E F C D E F C D E F C D C D C D E F C D E@2 C D G H C I J@2 K L M@2 N O P Q R S T S U
  C V E F W D E F C B C V C D X F C I Y@2 Z@2 AA@2 AB S AC AD K AE AF O AG AH AI AJ AK AL AM AN AO AP AQ AP AR A AS W B
  AT@2
>`.pickRestart({
  A: "f1@5 ~ c2@9 ~", B: "f1@5 ~ c2 ~ c2@7 ~", C: "f1@2 ~ c2@4 ~", D: "f1@4 ~@2 c2 ~ c2@6 ~@2", E: "g1@2 ~ c2@4 ~",
  F: "g1@4 ~@2 c2 ~ c2@6 ~@2", G: "g1@5 ~ c2@9 ~", H: "bb1@5 ~ f1@8 ~@2", I: "f1@5 ~ c2 ~ c2@6 ~@2",
  J: "[f1 ~ f1 ~ f1@2 g1@3 ~ a1@4 bb1@7 ~ bb1 ~ bb1@6 f1@2]/2", K: "bb1@5 ~ bb1 ~ bb1@5 ~ bb1@2",
  L: "f1@5 ~ f1 ~ f1@6 c1@2", M: "[f1@2 f1@2 f1@2 g1@4 a1@3 ~ bb1@7 ~ bb1 ~ bb1@6 f1 ~]/2",
  N: "eb1@5 ~ eb1 ~ eb1@5 ~ eb1@2", O: "f1@4 ~@2 f1 ~ f1@5 ~ f1@2", P: "d2@5 ~ d2 ~ d2@6 a1@2",
  Q: "g1@5 ~ g1 ~ g1@5 ~ g1@2", R: "bb1@4 ~@2 bb1 ~ bb1@5 ~ bb1@2", S: "f1@5 ~ f1 ~ f1@5 ~ f1@2", T: "bb1@2 ~ bb1@4 f1",
  U: "bb1@4 ~@2 bb1 ~ bb1@8", V: "f1@4 ~@2 c2 ~ c2@7 ~", W: "f1@4 ~@2 c2@9 ~", X: "g1@4 ~@2 c2@9 ~",
  Y: "[f1@2 f1 ~ f1@2 g1@3 ~ a1@4 bb1@7 ~ bb1 ~ bb1@6 f1@2]/2", Z: "[bb1@5 ~ a1@3 ~ g1@3 ~ f1@6 ~@2 f1 ~ f1@6 c1@2]/2",
  AA: "[f1@2 f1 ~ f1@2 g1@3 ~ a1@3 ~ bb1@7 ~ bb1 ~ bb1@6 f1@2, ~@30 g1 ~]/2", AB: "eb1@5 ~ eb1 ~ eb1@6 eb1@2",
  AC: "d2@5 ~ d2 ~ d2@5 ~ d2@2, c2 ~@15", AD: "g1@2 ~ g1@2 g1 a1 bb1", AE: "f1@4 ~@2 f1@7 ~ f1@2",
  AF: "bb1@2 c2@2 bb1 ~ bb1@6 f1@2 bb1@2", AG: "bb1@5 ~ bb1 ~ bb1@6 a1 f1", AH: "d2@5 ~ d2@8 a1@2",
  AI: "d2@3 d2 ~ a1 d2@8 d2 c2", AJ: "a1@5 ~ a1@8 e1@2", AK: "a1@3 a1 ~@2 a1@7 ~ a1 bb1, e1 ~@15",
  AL: "c2@5 ~ c2@8 a1@2", AM: "c2@3 c2 ~@2 c2@7 ~ c2@2", AN: "g1@5 ~ g1@7 ~ g1 a1", AO: "bb1@5 ~ bb1@7 ~ bb1@2",
  AP: "f1@5 ~ f1@7 ~ f1@2", AQ: "bb1@5 ~ bb1@4 f1@4 bb1@2", AR: "bb1@5 ~ bb1@8 bb1@2", AS: "f1@5 ~ c2 ~ c2@8",
  AT: "[f1@9 ~@7]/2",
})).s("gm_fretless_bass").gain(0.43)

// other · distortion guitar
const distortion_guitar = note("<~@92 A@3 B C@5 D E F G@2 ~@4>".pickRestart({
  A: "[~@6 a3@2 d4 ~ e4 ~ f4 ~ a4@8 ~@2 a4@2 g4@2 f4@2 e4@16 ~ a3]/3",
  B: "e4 ~@2 c4 a3 ~ e4 f4 e4 c4 a3 ~ c4 d4 e4 f4, ~ f4@2 ~@13, ~ e4 ~@6",
  C: "[g4@7 ~ g4@2 a4@2 bb4@2 a4@6 g4@2 ~@2 f4 ~@3 eb4@2 d4@7 ~ d4@2 g4 ~ a4 ~ bb4 ~ db5@9 ~ db5@2 c5@2 bb4@2 a4@15 ~ a4@2, ~@11 gb4@3 ~@26]/5",
  D: "bb4@13 ~ bb4@2", E: "a4", F: "bb4", G: "[a4@9 ~@7]/2",
})).s("gm_distortion_guitar").gain(0.33).pan(0.8)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x ~@4]!108 x ~>").gain(0.34)

// drums · snare
const snare = s("sd").struct("<~@45 [~ x]!14 ~@19 [~ x]!27 ~@5>").gain(0.34)

// … 64 more lines

More by Celentano