Strudelify
Il nostro caro angelo cover art

Il nostro caro angelo

Il nostro caro angelo

Battisti

KeyG minorTempo165 bpm
0:00/0:00
// Il nostro caro angelo — Battisti
// 165 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 188 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 27.
setcpm(165/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 nylon
const acoustic_guitar_nylon = note(`<
  A B C@2 D E F G A B C@2 D E F G H B C@2 D E F G H B C@2 D E F G I B J@2 K E F G L B J@2 M E F G N B J@2 O E F G H B
  P@2 M E F Q R B S@2 M E T ~@34 H B J@2 K E F U V B P@2 M E F U N B W@2 X@2 Y U Z B AA@2 AB E F AC AD B C@2 D E F G H B
  C@2 D E F G I B C@2 D E F G I B C@2 O E F G H B C@2 D E F G H B C@2 D E F G AE@2 ~
>`.pickRestart({
  A: "[d3,a3,d4,f4]@2 [d4,f4] d4 [a3,d4]@3 [a3,d4,f4], a2 [a2,d3], ~ a3 ~@2, ~@3 f4@3 ~@2", // Dm D5 Dm D5
  B: "[a3,f4]@2 a3 [a3,d4,f4] [a3,d4,f4]@2 [a3,d4,f4] ~, d3@4 d3@3 ~, d4@3 ~@5", // Dm
  C: "[[f3,bb3,d4,g4]@6 [f3,bb3,d4]@2 ~@4 g4 ~ [f3,bb3,d4]@2 [d3,f3,bb3]@4 [f3,bb3]@2 [f3,bb3,d4,g4]@4 [f3,bb3]@2 [d3,f3,bb3] ~@3, g2@8 g2@7 ~, d3@2 ~ d3@5 ~@2 d3@3 ~@3, ~@3 g4@3 ~ g4@4 ~@5, ~@4 [f3,bb3,d4]@3 ~ d4@3 ~@2 [d4,g4]@2 ~]/2", // Gm7 Bb Bb5 Gm7 Bb5 Bb G5
  D: "~ e4@5 [bb3,e4,g4]@2 [bb3,e4,g4]@6 [bb3,e4,g4]@2, c3@15 ~, [bb3,g4]@3 ~@5, g3 ~ g3 ~, gb2 ~@7", // Edim Eb
  E: "[bb3,e4,g4]@3 [g3,bb3,e4] e4@2 e4 ~, c3@3 ~, g3@2 ~ g4@4 ~, ~@4 [g3,bb3]@3 ~", // Edim Gm
  F: "[bb3,d4]@3 [bb3,d4] [g2,bb3]@2 ~ [bb3,d4], [g2,d3,f3,g4] [d3,f3,g4], ~@4 d4@3 ~", // Bb Gm Bb G7
  G: "[f3,bb3,d4,g4]@3 [f3,bb3,d4] d4@2 d4 ~, [g2,d3]@4 [g2,d3,f3,bb3]@3 ~, ~@6 g4@9 ~", // Gm7 Bb G5 Gm7
  H: "[d3,a3,d4,f4]@2 [d4,f4] d4 [a3,d4]@3 [a3,d4,f4], a2@3 f4@3 ~@2, ~ a3 [a2,d3]@2", // Dm D5 Dm D5
  I: "~ f4@3 [d4,f4]@2 d4@2 [a3,d4]@6 [a3,d4,f4]@2, a2@3 f4@3 ~@2, [d3,a3,d4] a3 [a2,d3]@2", // Dm D5 Dm D5
  J: "[~ [bb3,d4,g4]@5 [f3,bb3,d4]@2 ~@4 g4 ~ [f3,bb3,d4]@2 [d3,f3,bb3]@4 [f3,bb3]@2 [f3,bb3,d4,g4]@4 [f3,bb3]@2 [d3,f3,bb3] ~@3, g2@8 g2@7 ~, f3@3 g4@3 ~ g4@4 ~@5, d3@2 ~ d3@5 ~@2 d3@3 ~@3, ~@4 [f3,bb3,d4]@3 ~ d4@3 ~@2 [d4,g4]@2 ~]/2", // Gm Bb Bb5 Gm7 Bb5 Bb G5
  K: "~ [bb3,e4,g4]@5 [bb3,e4,g4]@2 [bb3,e4,g4]@6 [bb3,e4,g4]@2, c3@15 ~, [gb2,g3]@3 ~@5 g3@4 ~@4", // Edim Gmaj7
  L: "~ [a3,f4]@3 [d4,f4]@2 d4@2 [a3,d4]@6 [a3,d4,f4]@2, a2@3 f4@3 ~@2, [d3,d4] a3 [a2,d3]@2", // Dm D5 Dm D D5
  M: "~ [bb3,e4,g4]@5 [bb3,e4,g4]@2 [bb3,e4,g4]@6 [bb3,e4,g4]@2, c3@15 ~, ~ [gb2,g3]@3 ~@4 g3@4 ~@4", // Edim Gmaj7
  N: "~ [d3,a3,d4,f4]@3 [d4,f4]@2 d4@2 [a3,d4]@6 [a3,d4,f4]@2, ~ a2@7 [a2,d3]@8, ~ a3 ~@2, ~@3 f4@3 ~@2", // Dm D5 Dm D5
  O: "~ e4@5 [bb3,e4,g4]@2 [bb3,e4,g4]@6 [bb3,e4,g4]@2, c3@15 ~, [bb3,g4]@3 ~ g3@2 ~@2, [gb2,g3]@3 ~@13", // Edim Eb Gmaj7
  P: "[~ [bb3,d4,g4]@5 [f3,bb3,d4]@2 [f3,bb3,d4]@4 g4 ~ [f3,bb3,d4]@2 [d3,f3,bb3]@4 [f3,bb3]@2 [f3,bb3,d4,g4]@4 [f3,bb3]@2 [d3,f3,bb3] ~@3, g2@8 g2@7 ~, f3@3 g4@3 ~ g4@4 ~@5, d3@2 ~ d3@5 d4@3 ~@2 [d4,g4]@2 ~, ~@10 d3@3 ~@3]/2", // Gm Bb Bb5 Gm7 Bb5 Bb G5
  Q: "~ [f3,g4]@5 [f3,bb3,d4]@2 d4@3 ~ d4@2 ~@2, [g2,d3]@4 [g2,d3,f3,bb3]@3 ~, [bb3,d4]@6 g4@9 ~", // Fsus2 Bb G5 Gm7 Bb
  R: "~ [d3,a3,d4,f4]@3 [d4,f4]@2 d4@2 ~@6 [a3,d4,f4]@2, ~ a2@7 a2@8, ~@2 a3@2 [a3,d4]@3 ~, ~@3 f4@3 ~@2, ~@9 d3@7", // Dm D5
  S: "[~ [bb3,d4,g4]@5 [f3,bb3,d4]@2 ~@4 g4 ~ [f3,bb3,d4]@2 ~@4 [f3,bb3]@2 [f3,bb3,d4,g4]@4 [f3,bb3]@2 [d3,f3,bb3] ~@3, g2@8 g2@7 ~, f3@3 g4@3 ~ g4@4 ~@5, d3@2 ~ d3@5 [d3,f3,bb3]@2 d3@3 ~@3, ~@8 [f3,bb3,d4]@6 ~@3 d4@5 ~@4 [d4,g4]@4 ~@2]/2", // Gm Bb Bb5 Gm7 Bb5 Bb G5
  T: "[g2,d3,f3,g4] ~, [bb3,d4]@3 ~@5, [a3,f4]@3 ~@13", // G7 Bb Dm
  U: "[f3,bb3,d4,g4]@6 [f3,bb3,d4]@2 d4@3 ~ d4@2 ~@2, [g2,d3]@4 [g2,d3,f3,bb3]@3 ~, ~@6 g4@9 ~", // Gm7 Bb G5 Gm7
  V: "~ f4@3 [d4,f4]@2 d4@2 [a3,d4]@5 ~ [a3,d4,f4]@2, a2@3 f4@3 ~@2, [d3,a3,d4]@3 ~ a3@4 [a2,d3]@8", // Dm D5 Dm D5
  W: "[~ [bb3,d4,g4]@5 [f3,bb3,d4]@2 ~@4 g4 ~ [f3,bb3,d4]@2 [d3,f3,bb3]@4 [f3,bb3]@2 [f3,bb3,d4,g4]@4 bb3@2 [d3,f3,bb3] ~@3, g2@8 g2@7 ~, f3@3 g4@3 ~ g4@4 ~@5, d3@4 ~@2 d3@10 ~@4 d3@6 f3 ~@5, ~@4 [f3,bb3,d4]@3 ~ d4@3 ~@2 [d4,g4]@2 ~]/2", // Gm Bb Bb5 Gm7 Bb G5
  X: "[[c3,g3,bb3,c4,e4]@9 ~@7]/2", Y: "~@3 [bb3,d4] [g2,bb3]@2 ~ [bb3,d4], ~ [d3,f3,g4], ~@4 d4@3 ~",
  Z: "~ [d3,a3,d4,f4]@3 [d4,f4]@2 d4@2 [a3,d4]@5 ~ [a3,d4,f4]@2, ~ a2@7 [a2,d3]@8, ~ a3 ~@2, ~@3 f4@3 ~@2", // Dm D5 Dm D5
  AA: "[~ [bb3,d4,g4]@5 [f3,bb3,d4]@2 ~@4 g4 ~ [f3,bb3,d4]@2 ~ [f3,bb3]@3 [f3,bb3]@2 [f3,bb3,d4,g4]@4 [f3,bb3]@2 [d3,f3,bb3] ~@3, g2@8 g2@7 ~, f3@6 g4@3 [bb3,d4]@5 g4@8 ~@10, d3@4 ~@2 d3@9 ~ d3@4 d3@6 ~@6, ~@8 f3@6 ~@3 d4@5 ~@4 [d4,g4]@4 ~@2]/2", // Gm Bb Bb5 Gm7 Bb5 Bb G5
  AB: "~ [bb3,e4,g4]@5 [bb3,e4,g4]@2 ~ [bb3,g4]@5 [bb3,e4,g4]@2, c3@15 ~, ~ [gb2,g3]@3 ~@4 [g3,e4]@5 ~@3", // Edim Eb Edim Gmaj7 C
  AC: "~ g4@5 [f3,bb3,d4]@2 ~ d4@3 d4@2 ~@2, [g2,d3]@8 ~ [g2,d3,f3,bb3]@6 ~, [f3,bb3,d4]@6 g4@9 ~", // Bb G5 Gm7 Bb
  AD: "~ f4@3 [d4,f4]@2 d4@2 [a3,d4]@6 [a3,d4,f4]@2, a2@3 f4@3 ~@2, [d3,a3,d4]@3 ~ a3@4 [a2,d3]@8", // Dm D5 Dm D5
  AE: "[~@2 f4@13 ~, d3@29 ~@3, ~ f3@29 ~@2, ~ a3@14 ~, ~@3 d4@27 ~@2]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.31)

// other · lead 5 charang
const lead_5_charang = note("<~@71 [~@4 g3 ~ a3 ~ c4 ~ d4@2 ~@4] ~@116>").s("gm_lead_5_charang").gain(0.3).pan(0.8)

// other · celesta
const celesta = note("<~@75 A@3 B C D@2 E@2 F G H I@2 J ~@98>".pickRestart({
  A: "[~@8 c5 ~ d5@2 f5@2 a5@4 f5@4 c6@4 d6@2 g5@19 ~]/3", B: "d6@3 ~ c6@2 g6@3 ~ a6@3 ~ d6@2",
  C: "f6@3 ~ c6@2 d6@3 ~ g5@2 a5 ~ d6 ~", D: "[c6 ~ a5 ~ g5@2 f5@2 e5@3 ~ d5@2 e5@6 d5@5 ~@7]/2",
  E: "[~@6 d5@2 f5@2 a5@3 ~ d6@4 c6@3 ~ a6@2 g6@3 ~ f6@3 ~]/2", F: "d6@6 f6@9 ~", G: "c6@3 ~ d6@2 g5@3 ~ a5@2 f5@4",
  H: "g5 ~ d5@2 f5@2 d6@3 ~ c6@4 ~@2", I: "[a5@4 bb5@2 f5@3 ~ g5@4 d5@4 a4@4 bb4@2 f4@4 g4@3 ~]/2", J: "d4@3 ~@5",
})).s("gm_celesta").gain(0.3).pan(0.8)

// other · electric guitar clean
const electric_guitar_clean = note("<~@64 A B@3 C D E ~@117>".pickRestart({
  A: "c5@2 c5@2 ~@2 c5 ~ c5 ~@3 c5@2 c5 ~", B: "[~@2 c5 ~ c5 ~@3 eb5@3 ~ d5@2 c5@22 ~@12]/3",
  C: "~ f5@3 ~ f5@3 ~@5 f5@2 ~", D: "~ f5@5 ~@10", E: "~ f5 g5 f5 ~ d5 f5 g5 a5@2 ~@6",
})).s("gm_electric_guitar_clean").gain(0.52)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@32 A@4 B@2 C@4 D@2 E@2 D@2 F@2 G@4 H@2 I@4 J@2 D@2 A@4 B@2 ~@3 K@4 L@2 M@2 K@4 L@2 M@2 N@2 O@6 P@2 Q@2 R@2 S@2 A@4
  T@2 C@4 D@2 E@2 D@2 F@2 U@2 V ~ H@2 I@4 J@2 D@2 W@4 X@2 Y@2 Z@2 AA@2 X@2 AB@2 AC@2 AD@2 AE@2 AB@2 AF@4 AG@2 AH@2 AC@2
  AI@2 X@2 AI@2 Z@2 AI@2 AJ@2 AI@2 AK@3
>`.pickRestart({
  A: "[a3@15 ~ bb3@15 ~, [d4,f4]@31 ~]/4", B: "[[c4,e4]@31 ~]/2", C: "[~@16 a3@15 ~, d4@63 ~]/4",
  D: "[[g3,bb3,d4,f4]@31 ~]/2", E: "[[g3,bb3,c4,e4]@31 ~]/2", F: "[[a3,d4,f4]@31 ~]/2",
  G: "[[bb3,d4,f4]@31 ~ [c4,e4]@29 ~@3, g3@15 ~, ~@32 bb3@31 ~]/4", H: "[[bb3,d4,f4], g3@15 ~]/2",
  I: "[a3@31 ~ g3 ~@9 g3@21 ~, [d4,f4]@31 ~, ~@16 bb3@15 ~]/4", J: "[[g3,bb3,e4]@31 ~, c4@29 ~@3]/2",
  K: "[a4@15 ~ bb4@16, d5, f4@31 ~]/4", L: "[[g4,c5]@31 ~]/2", M: "[[f4,d5]@15 ~]/2", N: "[a3,d4,f4]/2",
  O: "[[d4,f4]@16 [c4,e4]@16 [d4,f4]@15 ~, bb3@95 ~]/6", P: "[[a3,d4,f4]@29 ~@3]/2", Q: "[[g3,bb3]@31 ~, f4@29 ~@3]/2",
  R: "[[g3,c4,e4]@29 ~@3]/2", S: "[[g3,bb3,f4]@15 ~]/2", T: "[c4, e4@15 ~]/2", U: "[[g3,bb3,d4], f4@15 ~]/2",
  V: "[bb3,c4,e4] ~@7, g3", W: "[[d4,a4]@31 ~ bb3@31 ~, f4@31 ~]/4", X: "[[e4,g4], c4@15 ~]/2", Y: "[[bb3,f4]@31 ~]/2",
  Z: "[[d4,f4,a4]@31 ~]/2", AA: "[[bb3,f4], d4@15 ~]/2", AB: "[bb3,d4,f4]/2", AC: "[d4,f4,a4]/2", AD: "[bb3,d4]/2",
  AE: "[g4, c4@15 ~]/2", AF: "[a4@31 ~ bb3@32, f4, d4@31 ~]/4", AG: "[[c4,g4], e4@15 ~]/2", AH: "[[bb3,d4,f4]@15 ~]/2",
  AI: "[[bb3,d4,f4]@31 ~]/2", AJ: "[[c4,e4,g4]@31 ~]/2", AK: "[~ [d4,a4]@38 ~@9, f4@37 ~@11]/3",
})).s("gm_string_ensemble_1").gain(0.17).pan(0.7)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note(`<
  ~@34 A@8 ~@24 B@5 ~@6 C@4 ~@4 C@4 ~@18 A@8 ~@24 D@2 ~@2 E@2 ~@10 F@2 G@2 ~@29
>`.pickRestart({
  A: "[~@33 f4@30 ~, g3@47 ~@17, ~@64 bb3@31 ~@33]/8", B: "g3/5", C: "[~@4 bb4@27 ~]/4", D: "[d4@15 ~]/2",
  E: "[~@4 d4@27 ~]/2", F: "f4/2", G: "e4/2",
})).s("gm_string_ensemble_1").gain(0.08).pan(0.7)

// chords · piano
const piano = note(`<
  ~@72 A B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L@2 M@2 ~@24 B@2 N@2 D@2 E@2 ~@51
>`.pickRestart({
  A: "~@4 g1 a1 c2 d2",
  B: "[[d2,a3,d4,f4]@4 d1@2 ~@2 [a3,d4,f4]@4 d1@2 ~@2 [a3,d4,f4]@4 d1@2 ~@2 g4 ~@3 d2@3 ~, ~@6 d2@6 ~@2 d2@5 ~@3 d2@4 d1@4 ~@2, ~@24 [a3,d4,f4]@5 ~@3]/2", // Dm
  C: "[[g2,g3,bb3,d4,f4]@4 g1@2 ~@2 [g3,bb3,d4,f4]@4 g1@2 ~@2 [g3,bb3,d4,f4]@4 g1@2 ~@4 g1@2 g2@3 ~, ~@6 g2@6 ~@2 g2@5 ~@3 g2@4 ~@6, ~@24 [g3,bb3,d4,f4]@5 ~@3]/2", // Gm7
  D: "[[g3,bb3,c4,e4]@4 c1@2 ~@2 [g3,bb3,c4,e4]@4 c1@2 ~@2 [g3,bb3,c4,e4]@4 c1@2 c2@2 [g3,bb3,c4,e4]@2 c1@2 c2@3 ~, c2@3 ~@3 c2@5 ~@3 c2@5 ~@13]/2", // C7
  E: "[[g2,f3,g3,bb3,d4]@4 g1@2 ~@2 [f3,g3,bb3,d4]@4 g1@2 ~@2 [f3,g3,bb3,d4]@4 g1@2 ~@2 [f3,g3,bb3,d4]@2 g1@2 g2@3 ~, ~@3 g2@3 ~ g2@3 ~ g2@2 ~@3]/2", // Gm7
  F: "[[f3,a3,c4,d4] ~ [f3,a3,c4,d4] ~@5 [f3,a3,c4,d4]@6 ~@2 [f3,a3,c4,d4]@7 ~ [f3,c4,d4]@4 d2@4, ~@6 d2@7 ~ d2@11 ~@7]/2", // Dm7
  G: "[[f3,g3,bb3,d4] ~ [f3,g3,bb3,d4] ~@5 [f3,g3,bb3,d4]@6 ~@2 d4@6 ~@2 [f3,g3]@4 g2@4, ~@6 g2@7 ~ g2@6 ~@12]/2", // Gm7 Fsus2
  H: "[[c2,g3,bb3,c4,e4] ~ [bb3,c4,e4] ~@5 [g3,bb3,c4,e4]@6 c2@7 ~@3 c4@5 ~@3, ~@6 c2@7 ~@19]/2", // C7
  I: "[[f3,g3,bb3,d4] ~ [f3,g3,bb3,d4] ~@5 [f3,g3,bb3,d4]@6 ~@2 [bb3,d4] ~@5 g2@2 [f3,g3,bb3,d4]@4 g2@3 ~, g2@2 ~@4 g2@7 ~ g2@7 ~@11]/2", // Gm7 Bb Gm7
  J: "[[d2,f3,a3,c4,d4] ~ [f3,c4]@2 ~@4 [f3,a3,c4,d4]@6 d2@5 ~@3 d2@2 [c4,d4]@4 d2@4, ~@2 [a3,d4] ~@3 d2@7 ~@19]/2", // Dm7 F5 Dm7 Csus2 D5
  K: "[[f3,g3,bb3,d4] ~ [g3,bb3,d4] ~@5 [f3,g3,bb3,d4]@6 g2@6 ~@2 g2@2 [g3,bb3,d4]@4 g2@4, g2 ~@2 g2@3 ~@10]/2", // Gm7 Gm Gm7 Gm
  L: "[[g3,bb3,c4,e4] ~ [c2,g3,bb3,c4,e4] ~@5 [g3,bb3,c4,e4]@6 c2@12 ~@2 c2@3 ~, ~@3 c2@3 ~@10]/2", // C7
  M: "[[g2,f3,g3,bb3,d4] ~ [bb3,d4] ~@5 [f3,g3,bb3,d4]@7 ~@7 g2@2 [f3,g3,bb3,d4]@4 g2 ~@3, ~@6 g2@13 ~@13]/2", // Gm7 Bb Gm7
  N: "[[g2,g3,bb3,d4,f4]@4 g1@2 ~@2 [g3,bb3,d4,f4]@4 g1@2 ~@2 [g3,bb3,d4,f4]@4 g1@2 g2@2 ~@2 g1@2 g2@3 ~, ~@6 g2@6 ~@2 g2@5 ~@5 [g3,bb3,d4,f4]@5 ~@3]/2", // Gm7
})).s("gm_piano").gain(0.34)

// chords · piano · soft notes
const piano_soft = note("<~@77 A ~@7 A ~@4 B ~ C D E ~ F ~ G H I ~ J K L ~@28 A ~@54>".pickRestart({
  A: "db4 ~@15", B: "~@2 a3 ~", C: "[f3,g3,bb3]@3 g2 [bb3,d4]@2 ~@2", D: "~@2 g3 ~@13",
  E: "[g3,bb3,c4,e4]@3 ~ [g3,bb3,e4]@2 c2@2, ~@3 c2@2 ~@3", F: "[f3,g3] ~ [f3,g3,bb3,d4]@3 ~@11",
  G: "[f3,a3,c4,d4]@7 ~ [f3,a3]@5 ~@3", H: "~@2 f3 ~@13", I: "[f3,g3,bb3,d4] ~ [f3,g3,bb3,d4]@4 ~@2 f3@4 ~@4",
  J: "[g3,bb3,c4,e4]@3 ~ [g3,bb3,c4,e4]@2 ~@2", K: "~@2 [f3,g3] ~@13", L: "[f3,g3,bb3] ~ [g3,bb3] ~@13, ~ f3 ~@6",
})).s("gm_piano").gain(0.19)

// bass · electric bass finger
const bass = note(`<
  A@2 B@2 C D E F G@2 H I J K L M N@3 O P Q R@2 S T U@2 P Q V W S X Y@2 Z Q AA@2 AB AC AD AE P Q AF@2 AG@2 AH@2 P Q AI@2
  S@2 AJ AK P Q AL@2 AM AN Y@2 Z Q AO ~@2 AP AQ AR AS AT AU AR AV AP AQ AR AS AT AU AR AV AW@2 AX@2 AY@2 AZ@2 BA@2 AX@2
  AY@2 BB@2 AM X Y@2 Z Q AA@2 AB AC AD BC P Q AF@2 AG@2 AH@2 BD@2 BE@2 S@2 AJ AK P Q AL@2 ~@51
>`.pickRestart({
  A: "[g4 a4@18 ~ a4@2 g4@2 f4@4 ~@2 f4 ~]/2", B: "[f4@2 g4 ~ c4@2 d4 ~ c4@2 bb3 ~ c4@2 g4@16 ~@2, ~@12 bb3 ~@19]/2",
  C: "~@4 a4 ~ g4 ~ f4 ~ f4@4 e4 ~", D: "f4@2 g4@2 a4@2 g4@7 ~@3", E: "~ a4@2 ~ a4@2 e4@5 ~ a4@3 ~",
  F: "e4@3 ~ a4 g4 d4 ~", G: "[d4 ~ g4@2 a4@25 ~@3]/2", H: "~@4 bb3 a3 g3 ~", I: "d4@3 ~ g4 ~ f4@3 ~ g4@5 ~",
  J: "bb4 ~ a4@2 g4@12", K: "~@4 d4@2 e4@3 ~ f4@3 ~@3", L: "g4 ~ a4 ~ g4@11 ~", M: "g4 ~ d4@2 a4 ~ g4@4 d4@2 a4@2 g4@2",
  N: "[d4@32 g2@12 ~@2 g2 ~]/3", O: "g2", P: "c3@12 ~@2 c3 ~", Q: "c3", R: "[~@14 g3@8 g2 ~ g3@8, g2@21 ~@11]/2",
  S: "d3@12 ~@2 d3 ~", T: "d3", U: "[g2@18 g3 ~@3 g3@4 g2@5 ~]/2", V: "g2@7 ~ g3@6 ~@2",
  W: "g3 ~ g2 ~ a2 ~ bb2@2 c3@2 d3@2 f3@2 c3@2", X: "~@2 d3@9 ~ d3@4", Y: "[~@14 g3@4 g2 ~@3 g2@2 g3@4 g2@4, g2 ~]/2",
  Z: "c3@13 ~ c3 ~", AA: "[~@14 g3@11 ~ g2 ~ g3 ~ g2 ~, g2@21 ~@11]/2", AB: "d3@13 ~ d3 ~", AC: "~@2 d3 ~ d3@12",
  AD: "g2@13 ~ g2 ~", AE: "~ g2@3 g3@2 g2@2", AF: "[~@14 g3@3 ~ g3@7 ~ g2 ~ g3@3 ~, g2@3 ~]/2",
  AG: "[d3@6 ~ d3@6 ~ d3@2, e3 ~@31]/2", AH: "[~@14 g3@12 g2 ~ g3@3 ~, g2@21 ~@11]/2",
  AI: "[~@14 g3@8 g2@4 g3 ~ bb2 ~ c3@2, g2@5 ~@3]/2", AJ: "g2@14 g3 ~", AK: "~@2 g3@2 g2@8 ~@2 g2 ~",
  AL: "[g2@11 ~ g2@2 g3@11 ~ g3 ~ bb2@2 c3@2]/2", AM: "d3@12 ~@2 d3 ~, c3 ~@15", AN: "~ d3@4 ~ d3@2",
  AO: "[d2,d3]@3 ~@13", AP: "d3@4 ~@2 d3 ~ d3@4 ~@2 d3 ~", AQ: "d3@4 ~@2 d3 ~ d3@3 ~ d3@4",
  AR: "g2@4 ~@2 g2 ~ g2@4 ~@2 g2 ~", AS: "g2@5 ~ g2 ~ g2@8", AT: "c3@4 ~@2 c3 ~ c3@4 ~@2 c3 ~",
  AU: "c3@4 ~@2 c3 ~ c3@3 ~ c3@4", AV: "g2@4 ~@2 g2 ~ g2@5 ~@3", AW: "[d3 ~ d3 ~@3 d3 ~ d3@22 ~@2]/2",
  AX: "[g2 ~ g2 ~@3 g2 ~ g2@24]/2", AY: "[c3 ~ c3 ~@3 c3 ~ c3@22 ~@2]/2",
  AZ: "[g2 ~ g2 ~@3 g2 ~ g2@13 ~@5 g2 ~ bb2 ~ c3 ~]/2", BA: "[d3@2 d3 ~@3 d3 ~ d3@23 ~]/2",
  BB: "[g2 ~ g2 ~@3 g2 ~ g2@10 g3@3 ~ g2 ~ bb2@2 g2 ~ c3@2 bb2 ~]/2", BC: "~@2 g2@6 g3@3 ~ g2@4", BD: "[c3@7 ~]/2",
  BE: "[~@14 g3@7 ~ g2@4 g3 ~ bb2 ~ c3@2, g2@5 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@32 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~@34 C D C D C D C D C D C D C D C
  D C D C D A ~ C D C D C D C D C D A ~@50
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x ~@2 x ~@3 x", D: "x ~@6 x",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@104 [x!2 ~ x!2 ~@3] [~ x]!20 ~@2 [~ x]!10 ~@51>").gain(0.56)

// drums · low tom
const low_tom = s("lt").struct("<~@104 [~@5 x ~ x] ~@83>").gain(0.62)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@32 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@35 C B A B A B A B A B A B A B A B
  A B A B ~@2 A B A B A B A B A B ~@51
>`.pickRestart({
  A: "x!3 ~ x!4", B: "x!2 ~ x!2 ~ x!2", C: "~ x!2 ~ x!4",
})).gain(0.31)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@32 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@36 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~@3 A ~ A ~ A ~ A ~ A ~@52
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.12)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@33 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@34 B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~@51
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@32 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~@34 A B A B A B A B A B A B A B A
  B A B A B ~@2 A B A B A B A B A B ~@51
>`.pickRestart({
  A: "~ x", B: "~ x!2 ~", C: "x",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@105 x ~@19 x ~@11 x ~@50>").gain(0.56)

// drums · ride
const ride = s("rd").struct("<~@32 [~ x]!38 ~@35 [~ x]!20 ~@2 [~ x]!10 ~@51>").gain(0.56)

// … 7 more lines

More by Battisti