Strudelify

La collina dei ciliegi

Battisti

KeyC majorTempo108 bpm
0:00/0:00
// La collina dei ciliegi — Battisti
// 108 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 electric guitar clean (copy of ch 8 acoustic guitar steel)
// note: Full arrangement: all 132 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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(`<
  ~@15 A@2 B@2 C@6 D E@5 F G H I J K L M N O P Q R K S ~@3 T U V W ~ I J K L M N X@2 Y Z AA@2 AB@2 AC AD K AE K AF AB@2
  AC AD K AE K AF AB@2 AC@2 AG AH AI@4 AJ@5 ~ AK AL AM@2 AN AO AP@2 AQ@3 AR AS AO AT@2 AU@3 AR AS AO AT@2 AV@3 AW@7
>`.pickRestart({
  A: "[~@3 g1@2 a1@2 c2@15 ~ g1@2 ~@2 g1@10 ~@2 c2@15 ~ g1@2 ~@2 g1@5]/2",
  B: "[~ a1@2 c2@2 a1@2 c2@15 ~ g1@2 ~@2 g1@10 ~@2 c2@15 ~ g1@2 ~@2 g1@4 g1]/2",
  C: "[~ c2@2 d2@4 e2@15 ~ b1@2 ~@2 b1@10 ~@2 e2@15 ~ b1@2 ~@2 b1@10 ~@2 f2@15 ~ c2@2 ~@2 c2@10 ~@2 f2@15 ~ c2@2 ~@2 c2@10 ~@2 f1 ~ f1@2 ~@16 f1@9 ~@3 f1 ~ f1@2 ~@16 f1@5]/6",
  D: "~@2 f1@7 f1@4 f1@2 f1@2 ~@15", E: "[~@9 f1@3 c2@2 f2@3 c2@3 f1@115 ~@25]/5", F: "~@14 g1 a1",
  G: "c2@15 ~ g1@2 ~@2 g1@10 a1@2", H: "c2@15 ~ g1@2 ~@2 g1@6 a1@2 c2@4", I: "a1@7 a1", J: "e2@15 ~ f2@12 g1@2 a1@2",
  K: "c2@15 ~ g1@2 ~@2 g1@10 ~@2", L: "c2@15 ~ g1@2 ~@2 g1@6 a1@2 c2@2 g1@2", M: "a1", N: "e2@12 e2@3 ~ e2@15 ~",
  O: "f2@11 ~ f2@19 ~", P: "g3 f3!2 c3!2 f2 f2@10", Q: "a1@15 ~ a1@2 ~@2 a1@6 c2@2 d2@4", R: "e2@15 ~ f2@8 a2@8",
  S: "c2@15 ~ g1@2 ~@2 g1@11 ~", T: "~@6 g1 c2", U: "a1@16 a1@3 ~ a1@8 c2@4", V: "e2@4 e2 e2@3", W: "f2@4 f1 f1@3",
  X: "[f2@63 ~]/2", Y: "a1@6 a1 d2", Z: "e2@15 ~ f2@16", AA: "[c2@35 ~ g2@4 c3@4 g2@4 d3@4 c3@4 c2@4 d2@4]/2",
  AB: "e2@15 ~ b1@2 ~@2 b1@10 ~@2", AC: "f2@15 ~ c2@2 ~@2 c2@10 ~@2", AD: "g2@15 ~ d2@2 ~@2 d2@10 ~@2",
  AE: "c2@15 ~ g1@2 ~@2 g1@8 a1@4", AF: "c2@15 ~ g1@2 ~@2 g1@4 g1@2 c2@2 d2@4", AG: "f1 ~ f1@2 ~@16 f1@9 ~@3",
  AH: "f1 ~ f1@2 ~@28", AI: "[f1 ~ f1@2 ~@24 f1@15 f1@14 f1@15 f1 ~ f1@2 ~@16 f1@9 ~@3 f1@2 f1@2 ~@16 f1@4]/4",
  AJ: "[~@12 f1@3 c2@2 f2@3 c2@3 f1@118 ~@19]/5", AK: "~@7 g1 a1 c2@7", AL: "~ g1 ~ g1@5 a1 c2@7",
  AM: "[~ g1 ~ g1@3 a1 c2@2 a1@14 a1@2 e2@7]/2", AN: "~ f2@6 g1 a1 c2@7", AO: "~ g1 ~ g1@5 ~ c2@7",
  AP: "[~ g1 ~ g1@3 a1 c2 g1 a1@16 e2@6 e2]/2",
  AQ: "[~@2 e2@15 ~ f2@11 ~ f2@19 ~ g3@2 f3@2 f3@2 c3@2 c3@2 f2@2 f2@20 a1@14]/3", AR: "~ a1 ~ a1@3 c2 d2@2 e2@7",
  AS: "~ f2@4 a2@4 c2@7", AT: "[~@2 g1@2 ~@2 g1@11 ~ a1@32 e2@12 e2@2]/2",
  AU: "[~@2 e2@15 ~ f2@11 ~ f2@19 ~ f2@4 f2@8 f2@12 f2@8 a1@14]/3", AV: "[~@2 e2@15 ~ f2@68 ~ a1@9]/3",
  AW: "[~@8 a1@2 ~@2 a1@6 c2@2 d2@4 e2@15 ~ f2@8 a2@8 c2@15 ~ g1@2 ~@2 g1@10 ~@2 c2@15 ~ g1@2 ~@2 g1@8 a1@4 c2@15 ~ g1@2 ~@2 g1@4 c2@49 ~@31]/7",
})).s("gm_electric_bass_finger").gain(0.53)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@34 A@4 B@4 C@4 ~@8 A@4 D@2 E@2 C@4 ~@34 F@4 G@8 H@3 I J@6 K@3 L@2 ~ M@3 ~
>`.pickRestart({
  A: "[[a5,c6]@2 [g5,b5] a5 g5@4, e6, ~@3 c6@5]/4", B: "[[a5,c6] ~@2 d5, e5 f5, ~@4 g5@7 a5@5, ~@2 b5@3 c6@3]/4",
  C: "[[c5,a5]@2 b4 f5 e5@4, e5@3 c5@5, ~ g5@3]/4", D: "[[a5,c6] [g5,b5], e5]/2", E: "[e5,f5,a5,c6]/2",
  F: "[~@9 [a5,c6]@16 [g5,b5]@8 a5@8 g5@23, ~@9 e6@55, ~@33 c6@31]/4", // Am G
  G: "[~@9 [a5,c6]@16 ~@32 d5@16 [c5,a5]@16 b4@8 f5@8 e5@23, ~@9 e5@32 f5@32 e5@24 c5@31, ~@25 g5@28 a5@20 ~@16 g5@39, ~@25 b5@24 c6@24 ~@55]/8", // Am F
  H: "[~@9 [a5,c6]@16 ~@16 f5@7, ~@9 e5@32 ~@7, ~@25 [g5,b5]@23]/3", I: "~@9 d5@7, ~ c6@15, ~@5 a5@11",
  J: "[~@9 [c5,a5,a6]@16 [b4,g6]@8 [f5,f6]@8 [e5,g6]@32 [a5,c6,c7]@16 [g5,b5,b6]@7, ~@9 e5@24 c5@40 ~@23, ~@25 g5@48 e5@23]/6", // F Em F Em Am G
  K: "[~@18 c7@17 b6@17 a6@33 ~@11, ~@6 [f5,a5,c6]@23 ~@3]/3", L: "[~@30 g5@27 ~@7]/2", M: "[~@24 [c4,e5,c6]@71 ~]/3",
})).s("gm_string_ensemble_2").gain(0.3).pan(0.3)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@34 A B C@2 A D E@2 A B F@2 ~@8 A B C@2 A D E@2 A B F@2 ~@34 G@2 H@8 I@8 J@7 ~@3 K@3 ~
>`.pickRestart({
  A: "a3", B: "e3 f3", C: "c3/2", D: "e3", E: "f3/2", F: "[c3@61 ~@3]/2", G: "[~@9 a3@16 e3@7]/2",
  H: "[~ f3@8 c3@32 a3@16 e3@16 f3@32 a3@16 e3@7]/8", I: "[~@2 f3@16 c3@61 ~@3 a3@32 e3@32 f3@64 a3@32 e3@14]/8",
  J: "[~@2 f3@16 c3@61 ~@3 [a3,a4]@32 [e3,b4]@32 c5@17 d5@17 e5@34 ~@10, ~@146 f3@69 ~@9]/7", K: "[~@3 c4@8 ~]/3",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.8)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@8 B@8 C@8 D E F@4 G H I@2 J@2 I@2 K@2 L M J@2 I@2 J@2 I@2 K@2 N ~ J@2 I@2 K@2 O@2 J@2 I@2 P@6 I@2 P@6 I@2 Q@5 R S@3
  T U@6 V@8 W@16 X@2 Y@8
>`.pickRestart({
  A: "[~@23 g2@2 ~@6 [g3,c4,e4]@6 ~@18 g2@2 ~@6 [g3,c4,e4]@6 ~@18 g2@2 ~@6 [g3,c4,e4]@8 ~@8 [g#3,b3,e4]@6 ~@2 b2@2 ~@6 [g#3,b3,e4]@6 ~@10 [g#3,b3,e4]@6 ~@2 e2@2 ~@6 [g#3,b3,e4]@6 ~@18 f2@2 ~@6 [a3,c4,f4]@6 ~@18 g2@2 ~@6 [b3,d4,g4]@6 ~@18 g2@2 ~@2 g2@4 [g3,c4,e4], ~@7 c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~ e2@16 ~@4 [e2,b2]@11 ~ [e2,b2]@15 ~@5 [e2,b2]@11 ~ f2@15 ~@5 f2@11 ~ g2@16 ~@4 g2@11 ~ c3@16 ~@9, ~@15 [g3,c4,e4]@16 ~@6 [g3,c4,e4]@8 ~@2 [g3,c4,e4]@16 ~@6 [g3,c4,e4]@8 ~@2 [g3,c4,e4]@16 ~@22 [g#3,b3,e4]@10 ~@6 [g#3,b3,e4]@8 ~@8 [g#3,b3,e4]@10 ~@6 [g#3,b3,e4]@8 ~@2 [a3,c4,f4]@16 ~@6 [a3,c4,f4]@8 ~@2 [b3,d4,g4]@16 ~@6 [b3,d4,g4]@4 ~@6 [g3,c4,e4]@16 ~]/8", // C E F G C E5 C E …
  B: "[~@23 g2@2 ~@6 [g3,c4,e4]@8 ~@16 g2@2 ~@6 [g3,c4,e4]@6 ~@18 g2@2 ~@6 [g3,c4,e4]@8 ~@8 [g#3,b3,e4]@6 ~@2 b2@2 ~@6 [g#3,b3,e4]@6 ~@10 [g#3,b3,e4]@6 ~@2 e2@2 ~@6 [g#3,b3,e4]@6 ~@18 f2@2 ~@6 [a3,c4,f4]@6 ~@18 g2@2 ~@6 [b3,d4,g4]@6 ~@18 g2@2 ~@2 g2@4 [g3,c4,e4], ~@5 [g3,c4,e4]@8 ~@2 [g3,c4,e4]@16 ~@16 [g3,c4,e4]@16 ~@6 [g3,c4,e4]@8 ~@2 [g3,c4,e4]@16 ~@22 [g#3,b3,e4]@10 ~@6 [g#3,b3,e4]@8 ~@8 [g#3,b3,e4]@10 ~@6 [g#3,b3,e4]@8 ~@2 [a3,c4,f4]@16 ~@6 [a3,c4,f4]@8 ~@2 [b3,d4,g4]@16 ~@6 [b3,d4,g4]@4 ~@6 [g3,c4,e4]@16 ~, ~@7 c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~ e2@16 ~@4 [e2,b2]@11 ~ [e2,b2]@15 ~@5 [e2,b2]@11 ~ f2@15 ~@5 f2@11 ~ g2@16 ~@4 g2@11 ~ c3@16 ~@9]/8", // C E F G C E F G …
  C: "[~@23 g2@2 ~@6 [g3,c4,e4]@8 ~@16 g2@2 ~@6 [g3,c4,e4]@6 ~@18 g2@2 ~@6 [g3,c4,e4]@8 ~@8 [g#3,b3,e4]@6 ~@2 b2@2 ~@6 [g#3,b3,e4]@6 ~@10 [g#3,b3,e4]@6 ~@2 e2@2 ~@6 [g#3,b3,e4]@6 ~@10 [a3,c4,f4]@6 ~@2 f2@2 ~@6 [a3,c4,f4]@6 ~@10 [a3,c4,f4]@6 ~@2 f2@2 ~@6 [a3,c4,f4]@6 ~@2 [c3,f3] ~ [c3,f3]@2 ~@2 [c3,f3] ~ [c3,f3] ~@3 [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3]@2 f3 ~ [c3,f3], ~@5 [g3,c4,e4]@8 ~@2 [g3,c4,e4]@16 ~@16 [g3,c4,e4]@16 ~@6 [g3,c4,e4]@8 ~@2 [g3,c4,e4]@16 ~@22 [g#3,b3,e4]@10 ~@6 [g#3,b3,e4]@8 ~@8 [g#3,b3,e4]@10 ~@6 [g#3,b3,e4]@8 ~@8 [a3,c4,f4]@4 ~@12 [a3,c4,f4]@8 ~@8 [a3,c4,f4]@4 ~@12 [a3,c4,f4]@8 ~@19, ~@7 c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~ e2@16 ~@4 [e2,b2]@11 ~ [e2,b2]@15 ~@5 [e2,b2]@11 ~ f2@15 ~@5 f2@11 ~ f2@15 ~@5 f2@11 ~@26]/8", // C E F F5 C E F E5
  D: "~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3]@2 ~@2 [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [f2,c3,f3] ~@7 [f2,c3,f3]@5", // F5
  E: "~@2 [f2,c3,f3]@7 [f2,c3,f3]@4 [c3,f3] ~ [c3,f3]@2 ~@2 [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [f2,c3,f3]@7", // F5
  F: "[~ [f2,c3,f3]@8 [c3,f3]@3 [c3,f3]@2 [c3,f3]@3 [c3,f3]@3 [c3,f3]@2 ~@2 [c4,e4]@21 ~@30 e4@53, ~@22 f3@23 f3@26 f3@55 ~@2, ~@23 a3@23 a3@26 a3@54 ~@2, ~@47 c4@26 ~ c4@53 ~, ~@24 e4@13 ~@27]/4", // F5 C
  G: "~@4 [a3,c4,e4]@3 ~@5 [a3,c4,e4]@4, a2@20 a2@9 ~@3, ~@2 e3@7 ~@7, ~@7 [a3,c4,e4]@5 ~@4", // Am
  H: "~ [g3,b3,e4] ~ [a3,c4,f4], e2@15 ~ f2@16, ~@4 b2@11 ~@5 c3@12", // Em F
  I: "[~@8 g2 ~@3 [g3,c4,e4]@3 ~@9 g2 ~@3 [g3,c4,e4]@4, c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~, ~@4 [g3,c4,e4]@8 ~@3 [g3,c4,e4]@4 ~ [g3,c4,e4]@8 ~@4]/2", // C
  J: "[~@8 [a2,e3] ~@3 [a3,c4,e4]@3 ~@3 b2@2 [g3,b3,e4]@4 ~@4 [a3,c4,f4]@4, a2@16 ~@4 [a2,e3]@11 ~ e2@16 f2@14 ~@2, ~@8 [a3,c4,e4]@16 ~@6 [a3,c4,e4]@4 ~@18 c3@7 ~@5]/2", // A5 Am Em F A5 Am
  K: "[~@8 e2 ~@3 [a3,c4,e4]@3 ~@3 b2@2 [g3,b3,e4]@4 [e2,b2,e3]@2 [b2,e3,g3]@2 [g3,b3,e4]@4, a2@16 ~@4 a2@11 ~ e2@16 ~@16, ~@4 [a3,c4,e4]@8 ~@3 [a3,c4,e4]@2 ~@15]/2", // Am Em E5 Em Am
  L: "[f3,a3,c4,e4]@2 a3 e4 e4@2 [f3,a3,c4,e4,a4]@2 [e4,a4]!2 [e4,a4]@2 [f3,a3,c4,e4,a4]@2 [f3,a3,c4,e4,a4]@2, ~@3 [f3,a3,c4]@3 ~@3 [f3,a3,c4]@3 ~@4", // Fmaj7 A5 Fmaj7 F
  M: "[c4,e4,a4]!2 [e4,a4]!2 [a3,c4,e4,a4] [c4,e4,a4] f3@2 f3@2 [f3,a3,c4]@4 [f3,a3,c4]@2, [f3,a3] [f3,a3,c4] f3 [c4,e4,a4]@2 [e4,a4]@3, ~@5 a3@5 ~@6", // Am A5 Am F Am A5
  N: "~@2 [a3,c4,f4,a4]@3 ~@3, f2@3 ~", O: "[[f3,a3,c4,e4,a4]@9 [a3,c4,e4,a4]@2 [a3,c4,e4] [a3,c4,e4,a4]@4]/2",
  P: "[~@4 [g#3,b3,e4]@3 ~ b2 ~@3 [g#3,b3,e4]@3 ~@5 [g#3,b3,e4]@3 ~ e2 ~@3 [g#3,b3,e4]@3 ~@5 [a3,c4,f4]@3 ~ f2 ~@3 [a3,c4,f4]@3 ~@5 [b3,d4,g4]@3 ~ g2 ~@3 [b3,d4,g4]@3 ~@9 g2 ~@3 [g3,c4,e4]@3 ~@9 g2 ~@3 [g3,c4,e4]@4, e2@7 [g#3,b3,e4]@5 ~@3 [g#3,b3,e4]@4 ~@4 [g#3,b3,e4]@5 ~@3 [g#3,b3,e4]@4 ~@4 [a3,c4,f4]@2 ~@6 [a3,c4,f4]@4 ~@4 [b3,d4,g4]@2 ~@6 [b3,d4,g4]@4 ~ [g3,c4,e4]@8 ~@3 [g3,c4,e4]@4 ~ [g3,c4,e4]@8 ~@4, ~@20 [e2,b2]@11 ~ [e2,b2]@15 ~@5 [e2,b2]@11 ~ f2@15 ~@5 f2@11 ~ g2@15 ~@5 g2@11 ~ c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~]/6", // E F G C E F G C …
  Q: "[~@8 [g#3,b3,e4]@6 ~@2 b2@2 ~@6 [g#3,b3,e4]@6 ~@10 [g#3,b3,e4]@6 ~@2 e2@2 ~@6 [g#3,b3,e4]@6 ~@10 [a3,c4,f4]@6 ~@2 f2@2 ~@6 [a3,c4,f4]@6 ~@10 [a3,c4,f4]@6 ~@2 f2@2 ~@6 [a3,c4,f4]@6 ~@2 [c3,f3] ~ [c3,f3]@2 ~@2 [c3,f3] ~ [c3,f3] ~@3 [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3]@2 f3 ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~, e2@7 [g#3,b3,e4]@5 ~@3 [g#3,b3,e4]@4 ~@4 [g#3,b3,e4]@5 ~@3 [g#3,b3,e4]@4 ~@4 [a3,c4,f4]@2 ~@6 [a3,c4,f4]@4 ~@4 [a3,c4,f4]@2 ~@6 [a3,c4,f4]@4 ~@13, ~@20 [e2,b2]@11 ~ [e2,b2]@15 ~@5 [e2,b2]@11 ~ f2@15 ~@5 f2@11 ~ f2@15 ~@5 f2@11 ~@33]/5", // E F F5 E F E5
  R: "[c3,f3] ~ [c3,f3]@2 ~@2 [c3,f3] ~ [c3,f3] ~@3 [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3]@2 f3 ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~", // F5
  S: "[[c3,f3] ~ [c3,f3]@2 ~@2 [c3,f3] ~ [c3,f3] ~@3 [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3]@2 [c3,f3] ~@6 [c4,e4,f4]@14 ~ [e4,f4]@13 ~@2 f4@13 [c3,f3] ~ [c3,f3]@2 ~@2 [c3,f3] ~ [c3,f3] ~@3 [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3]@2 f3 ~, ~@28 [f3,a3]@14 ~ [f3,a3,c4]@14 f3@14 ~@25, ~@29 [a3,c4,e4]@7 ~@12]/3", // F5 Fmaj7 F5 F Am
  T: "[c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3]@2 ~@2 [c3,f3] ~ [c3,f3] ~@3 [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3] ~ [c3,f3]@2 f3 ~", // F5
  U: "[[c3,f3] ~ [c3,f3] ~ [f2,c3,f3]@8 [c3,f3]@3 [c3,f3]@2 ~ f3@2 [c3,f3]@3 [c3,f3]@2 ~@2 [c4,e4]@27 ~@38 e4@49 ~@13 [a3,c4,e4]@6 ~@10 [a3,c4,e4]@8 ~@8 [g3,b3,e4]@6, ~@17 c3@3 ~@5 f3@28 ~ f3@33 ~ f3@51 ~@7 a2@20 a2@9 ~@3 e2@14, ~@26 a3@28 ~ a3@33 ~ a3@50 ~@11 e3@14 ~@18 b2@10, ~@56 c4@33 ~@2 c4@51 ~@18 [a3,c4,e4]@10 ~@22, ~@29 e4@17 ~@50]/6", // F5 C Am Em Am
  V: "[~@5 [a3,c4,f4]@4 ~@8 g2 ~@3 [g3,c4,e4]@3 ~@9 g2 ~@3 [g3,c4,e4]@4 ~@8 [a2,e3] ~@3 [a3,c4,e4]@3 ~@3 b2@2 [g3,b3,e4]@4 ~@4 [a3,c4,f4]@4 ~@8 g2 ~@3 [g3,c4,e4]@3 ~@9 g2 ~@3 [g3,c4,e4]@4 ~@8 e2 ~@3 [a3,c4,e4]@3 ~@3 b2@2 [g3,b3,e4]@3, ~@2 f2@16 ~@8 [g3,c4,e4]@16 ~@6 [g3,c4,e4]@8 ~@2 [g3,c4,e4]@16 ~@16 [a3,c4,e4]@16 ~@6 [a3,c4,e4]@4 ~@18 c3@7 ~@5 c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~ a2@16 ~@4 a2@11 ~ e2@14, ~@6 c3@12 c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~ a2@16 ~@4 [a2,e3]@11 ~ e2@16 f2@14 ~@10 [g3,c4,e4]@16 ~@6 [g3,c4,e4]@8 ~@2 [g3,c4,e4]@16 ~@16 [a3,c4,e4]@16 ~@6 [a3,c4,e4]@4 ~@12]/8", // F C A5 Am Em F C Am …
  W: "[~ [e2,b2,e3]@2 [b2,e3,g3]@2 [g3,b3,e4]@4 [f3,a3,c4,e4]@2 a3 e4 e4@2 [f3,a3,c4,e4,a4]@2 [e4,a4]!2 [e4,a4]@2 [f3,a3,c4,e4,a4]@2 [f3,a3,c4,e4,a4]@2 [c4,e4,a4]!2 [e4,a4]!2 [a3,c4,e4,a4] [c4,e4,a4] f3@2 f3@2 [f3,a3,c4]@4 [f3,a3,c4]@2 ~@8 [a2,e3] ~@3 [a3,c4,e4]@3 ~@3 b2@2 [g3,b3,e4]@4 ~@4 [a3,c4,f4]@4 ~@8 g2 ~@3 [g3,c4,e4]@3 ~@9 g2 ~@3 [g3,c4,e4]@4 ~@8 e2 ~@3 [a3,c4,e4]@3 ~@3 b2@2 [g3,b3,e4]@3, ~@24 [f3,a3,c4]@6 ~@6 [f3,a3,c4]@6 ~@8 [f3,a3]@4 [f3,a3,c4]@4 f3@4 [c4,e4,a4]@8 [e4,a4]@12 ~@8 [a3,c4,e4]@16 ~@6 [a3,c4,e4]@4 ~@18 c3@7 ~@5 c3@16 ~@4 g2@11 ~ c3@16 ~@4 g2@11 ~ a2@16 ~@4 a2@11 ~ e2@14, ~@60 a3@10 ~@12 a2@16 ~@4 [a2,e3]@11 ~ e2@16 f2@14 ~@10 [g3,c4,e4]@16 ~@6 [g3,c4,e4]@8 ~@2 [g3,c4,e4]@16 ~@16 [a3,c4,e4]@16 ~@6 [a3,c4,e4]@4 ~@12]/8", // E5 Em Fmaj7 A5 Fmaj7 Am A5 Am …
  X: "[~@2 [e2,b2,e3]@4 [b2,e3,g3]@4 [g3,b3,e4]@8 [a3,c4,e4,a4]@17 [a3,c4,e4]@13 [a3,c4,e4]@4 [a3,c4,e4]@9 [a3,c4,e4]@3, ~@9 f3@17 ~@6, ~@35 a4@17 a4@12]/2", // E5 Em Am
  Y: "[~ [a3,c4,e4,a4]@21 ~@18 [a2,e3]@2 ~@6 [a3,c4,e4]@6 ~@6 b2@4 [g3,b3,e4]@8 ~@8 [a3,c4,f4]@8 ~@16 g2@2 ~@6 [g3,c4,e4]@6 ~@18 g2@2 ~@6 [g3,c4,e4]@8 ~@16 g2@2 ~@2 g2@3 ~ [c3,g3,c4,e4]@50 ~@30, ~@23 a2@16 ~@5 [a2,e3]@11 ~ e2@16 f2@14 ~@2 [g2,c3,e3]@16 ~@4 g2@11 ~@21 g2@11 ~@105, ~@31 [c4,e4]@16 ~@49 [g3,c4,e4]@16 ~@6 [g3,c4,e4]@8 ~@2 [g3,c4,e4]@16 ~@16 [g3,c4,e4]@16 ~@80, ~@32 a3@16 ~@6 [a3,c4,e4]@4 ~@18 c3@7 ~@37 c3@16 ~@16 c3@16 ~@88]/8", // Am A5 Am Em F C A5 C …
})).s("gm_acoustic_guitar_steel").gain(0.36).pan(0.6)

// chords · piano
const piano = note(`<
  ~@22 A@3 B@5 ~@21 C@2 D E@2 F ~ G H@2 ~ I J ~@15 K@2 ~@4 L M N O@3 P@5 ~ Q@2 ~ R@3 ~ S@3 ~ T@2 U ~ V@4 W@2 X ~ Y@3 ~
  Z@3 ~@5
>`.pickRestart({
  A: "[~@27 a3@4 c4@4 a3@3 e4@8 ~ d4@2 c4@3 d4@3 ~ a3@4 ~@3 a3@2 c4@3 a3@3 e4@8 d4@2 c4@3 d4@3 ~ a3@8]/3",
  B: "[~@2 a3@6 ~ a3@2 c4@2 ~ a3@2 e4@8 d4@2 ~ a3@3 e4@8 d4@2 ~ c4@3 d4@2 e4@3 d4@3 c4@3 e4@88 ~@17]/5",
  C: "[~@24 e4@35 ~@5]/2", D: "~@3 [b3,d4,g#4]", E: "[[c4,e4,a4]@14 [d4,g4,b4]@9 [c4,f4,a4]@8 [c4,e4,g4]]/2",
  F: "[b3,d4,f4] [g3,c4,e4]@3 ~@12", G: "[a3,c4]", H: "[~ [g3,b3]@23 [a3,c4]@19 ~@21]/2", I: "[a3,c4,e4]",
  J: "[g3,b3,g4]@8 [f3,a3,f4]@4 [e3,g3,e4] [d3,f3,d4] [c3,e3,c4]@2", K: "[~@16 g4@3 ~ g4@3 ~ g4@3 g4@3 ~ f4@6 ~@27]/2",
  L: "~@19 a3@4 c4@4 ~ a3@4", M: "e4@11 d4@2 c4@3 d4@4 ~ a3@7 ~@4", N: "~@24 a3@3 c4@2 a3@3",
  O: "[e4@10 d4@3 c4@3 d4@4 a3@4 ~@4 [c4,f4,a4]@14 ~ [c4,f4,a4]@14 [c4,f4,a4]@13 ~@26]/3", // F
  P: "[a3@3 c4@3 a3@2 e4@3 d4@2 c4@3 d4@3 a3@5 e4@2 d4@2 ~ c4@2 d4@3 ~ a3@5 e4@11 d4@3 c4@4 e4@97 ~@5]/5",
  Q: "[~@11 [c4,e4]@8 [b3,d4]@11 [a3,c4]@12 e3@2 [a2,d3]@2 [g2,c3]@6 ~@12, ~@42 c3 ~@21]/2", // C Bm Am D5 C5
  R: "[~@9 [g3,b3]@4 ~ [a3,c4]@32 [g3,b3]@16 [f3,a3]@12 [c3,e3]@3 [a2,d3]@2 [g2,c3]@9 ~@8]/3", // G Am G F C D5 C5
  S: "[~@18 [c4,e4]@24 [c4,e4]@8 [b3,d4]@8 [b3,d4]@4 [b3,d4]@7 ~ [b3,d4]@4 ~ [c4,e4]@9 ~@12]/3", // C Bm C
  T: "[~@18 [a3,c4]@29 [g3,b3]@17]/2", U: "~@2 [f3,a3]@11 [c3,e3]@2 ~ [a2,d3]@2 [g2,c3]@10 ~@4",
  V: "[~@3 g4@15 a4@31 g4@31 a4@31 ~@17]/4", W: "[~@5 [b3,d4,g#4]@4 [c4,e4,a4]@14 [d4,g4,b4]@9]/2",
  X: "[c4,f4,a4]@8 [c4,e4,g4] [b3,d4,f4] [g3,c4,e4]@3 ~@3", Y: "[~@18 [a3,c4]@33 [g3,b3]@23 [a3,c4]@20 ~@2]/3",
  Z: "[~@23 [a3,c4,e4]@33 [g3,b3,g4]@16 [f3,a3,f4]@8 [e3,g3,e4]@2 [d3,f3,d4]@2 [c3,e3,c4]@4 ~@8]/3", // Am G F Em Dm C
})).s("gm_piano").gain(0.07)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A B C@5 ~@32 D E@4 ~@5 F G@5 H G@5 I G J ~@18 K ~@3 K L@5 M L N O P L@2 Q R L N L S L T ~ U V W X@3 ~@2
>`.pickRestart({
  A: "~@31 x", B: "~ x ~ x ~ x ~@9 x ~@15 x", C: "~@15 x ~@15 x", D: "~@4 x!4", E: "~ x ~@2", F: "~ x!7", G: "~ x ~ x",
  H: "~@4 x ~@7 x ~ x!2", I: "~@4 x ~@7 x ~@2 x", J: "x!3 ~ x!3 ~", K: "~@13 x ~@2", L: "~@5 x ~@7 x ~@2",
  M: "~@10 x ~ x!3 ~@11 x ~@5", N: "~@5 x ~@3 x ~@3 x ~@2", O: "~@5 x ~@7 x ~ x", P: "x!5 ~@8 x ~@2",
  Q: "~@5 x ~@5 x ~ x ~@2", R: "~@5 x!3 ~@5 x ~@2", S: "x ~@4 x ~@7 x ~@2", T: "~@5 x ~@10", U: "~@23 x ~@7 x",
  V: "~@4 x ~ x ~ x ~ x ~ x!4", W: "x!4 ~@12", X: "x!2",
})).gain(0.7)

// drums · hihat
const hihat = s("hh").struct("<~@17 A B@5 C ~@42 D E@12 F ~@22 G H@5 I H@3 J ~@19>".pickRestart({
  A: "~@7 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x", B: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  C: "~@3 x ~@3 x ~ x ~@22", D: "~ x!7", E: "x!8", F: "x!7 ~", G: "~@15 x", H: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  I: "~ x ~ x ~@7 x ~ x ~ x", J: "~ x ~ x ~ x ~ x ~@8",
})).gain(0.39)

// drums · low tom
const low_tom = s("lt").struct("<~@98 A ~@3 A ~@9 B ~@13 C ~@5>".pickRestart({
  A: "~@14 x ~ x!2 ~@14", B: "~@7 x!2 ~@7", C: "~@8 x!4 ~@4",
})).gain(0.47)

// drums · mid tom
const mid_tom = s("mt").struct("<~@112 [~@5 x!2 ~@9] ~@13 [~@4 x!4 ~@8] ~@5>").gain(0.54)

// drums · open hat
const open_hat = s("oh").struct("<~@79 [~@7 x] ~@28 [~@5 x ~@10] ~@23>").gain(0.39)

// drums · crash
const crash = s("cr").struct("<~@66 A ~@31 B ~@3 B ~@5 C ~@3 C ~@3 C ~ B ~ C ~@5 D ~@2 E ~@2>".pickRestart({
  A: "x", B: "~@13 x ~@2", C: "~@9 x ~@6", D: "~@3 x", E: "~ x",
})).gain(0.39)

// drums · ride
const ride = s("rd").struct("<~@50 A@2 B ~@3 A@4 C ~@51 D E F G H F G F I E G ~@4 J@2 K ~@2>".pickRestart({
  A: "x!2", B: "x ~@3 x!2 ~@2", C: "x", D: "~@13 x ~ x", E: "~ x ~@3 x ~ x ~ x ~@3 x ~@2",
  F: "~ x ~@3 x ~@3 x ~@3 x ~@2", G: "~ x ~@3 x ~@3 x ~@6", H: "~ x ~@11 x ~@2", I: "~ x ~@3 x ~@7 x ~ x", J: "x!4",
  K: "x!2 ~@2",
})).gain(0.47)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@112 A B C D B C@3 E B F ~@3 G H@2 I ~@2>".pickRestart({
  A: "~@11 x ~@4", B: "~@3 x ~@7 x ~@3 x", C: "~@3 x ~@3 x ~@3 x ~@3 x", D: "~@3 x ~@3 x ~@7 x",
  E: "~@3 x ~@3 x ~@3 x ~@4", F: "~@3 x ~@3 x ~@8", G: "~@7 x", H: "~ x ~ x ~ x ~ x", I: "~ x ~ x ~@4",
})).gain(0.23)

// drums · tambourine
const tambourine = s("tb").struct("<~@32 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ B@2 C ~ A ~ A ~ A ~@73>".pickRestart({
  A: "~@8 x!9 ~@15", B: "~@8 x!6 ~@10 x!6 ~@2", C: "~@8 x!6 ~@18",
})).gain(0.16)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@32 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ B@2 C ~ A ~ A ~ A ~@73>".pickRestart({
  A: "~@17 x!3 ~@12", B: "~@7 x ~@7 x", C: "~@7 x ~@8",
})).gain(0.08)

stack(
  bass, string_ensemble_2, string_ensemble_1, acoustic_guitar_steel, piano, kick, snare, hihat, low_tom, mid_tom,
  open_hat, crash, ride, ride_soft, tambourine, tambourine_soft
)

More by Battisti