Strudelify
Una donna per amico cover art

Una donna per amico

Una donna per amico

Battisti

KeyD majorTempo127 bpm
0:00/0:00
// Una donna per amico — Battisti
// 127 bpm, 4/4, key D 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 132 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(127/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 · piano
const piano = note(`<
  A B C D E B F G H@2 I@2 J@4 K L M N O P Q R A B Q S J@4 T@2 U@2 K L M V A B W X Y@6 Z@2 AA AB AA AC AD AB AE AF AG@7
  AH@6 AI@2 AJ@2 AK@2 AL@8 AM@6 AN@2 AO AP@8 AQ@7 AR@8 AS@6 AT@2 AU@2 AT@2 AV
>`.pickRestart({
  A: "[d4,f#4,a4]@28 ~ [e4,g4,c5]@3", B: "~@5 [d4,g4,b4]@26 ~", C: "[d4,f#4,a4]@27 ~@2 [f4,a#4,d5]@3",
  D: "~@5 [f4,a4,c5]@4 ~@4 [e4,g4,c5]@4 ~@4 [d4,g4,b4]@4 ~@4 [g4,b4]@2 ~, ~@29 d4 ~@2", // F C G
  E: "[d4,f#4,a4]@27 ~@2 [e4,g4,c5]@3", F: "[d4,f#4,a4]@28 ~ [f4,a#4,d5]@3",
  G: "~@5 [f4,a4,c5]@3 ~@5 [e4,g4,c5]@4 ~@4 [d4,g4,b4]@3 ~@5 [d4,g4] ~@2, ~@29 b4@2 ~", // F C G G5
  H: "[[d4,f#4,a4]@28 ~ [d4,g4,b4]@19 [d4,g4,b4]@16]/2", I: "[[d4,f#4,a4]@29 [d4,g4,b4]@19 [d4,g4,b4]@16]/2",
  J: "[[d4,f#4,a4]@29 [d4,g4,b4]@18 ~ [d4,g4,b4]@16]/2", K: "[d4,f#4,a4]@31 ~", L: "[d4,e4,g4,b4]@31 ~",
  M: "[d4,f#4,a4,d5]@31 ~", N: "[d4,g4,b4]!2", O: "[d4,f#4,a4]@29 [e4,g4,c5]@3", P: "~@5 [d4,g4,b4]@25 ~@2",
  Q: "[d4,f#4,a4]@29 [f4,a#4,d5]@3", R: "~@5 [f4,a4,c5]@4 ~@4 [e4,g4,c5]@4 ~@4 [d4,g4,b4]@4 ~@4 [d4,g4,b4] ~@2",
  S: "~@5 [f4,a4,c5]@4 ~@4 [e4,g4,c5]@4 ~@4 [d4,g4,b4]@3 ~@5 [d4,g4,b4] ~@2", // F C G
  T: "[[d4,f#4,a4]@28 ~ [d4,g4,b4]@18 ~ [d4,g4,b4]@16]/2", U: "[[d4,f#4,a4]@28 ~ [d4,g4,b4]@17 ~@2 [d4,g4,b4]@15 ~]/2",
  V: "[d4,g4,b4]@15 ~ [d4,g4,b4]@14 ~@2", W: "[d4,f#4,a4]@29 [b4,d5,g5]@3",
  X: "~@5 [a4,d5,f#5]@4 ~@4 [g4,c5,e5]@4 ~@4 [g4,b4,d5]@4 ~@4 [g4,b4,d5]@2 ~", // D C G
  Y: "[[f4,a4,c5]@29 [e4,g4,a4,c5]@34 ~]/2", Z: "[[f4,a4,c5]@29 [e4,g4,a4,c5]@33 ~@2]/2",
  AA: "[g#3,c4,d#4,g4] [g3,a#3,d4,f4]", AB: "[g#3,c4,d#4,g4]@31 ~", AC: "[g#3,c4,d#4,g4]",
  AD: "[g#3,c4,d#4,g4]@16 [g3,a#3,d4,f4]@15 ~", AE: "[g#3,c4,d#4,g4]@15 ~ [g3,a#3,d4,f4]@16",
  AF: "[g#3,c4,d#4,g4]@14 ~@2 [f3,g#3,c4,d#4]@7 ~ [g#3,c4,d#4,f4]@7 ~", // G#maj7 Fm7
  AG: "[[a#3,d#4,g4]@31 [c4,d#4,g#4]@15 ~ [c4,d#4,g#4]@15 ~ [a#3,d#4,g4]@31 ~ [c4,d#4,g#4]@15 ~ [c4,d#4,g#4]@16 [a#3,d#4,g4]@32 [c4,d#4,g#4]@16 [c4,d#4,g#4]@16 [a#3,d#4,g4]@32 [c4,d#4,g#4]]/7", // D# G# D# G# D# G# D# G#
  AH: "[~@15 [c4,d#4,g#4]@16 [a#3,d#4,g4]@32 [c4,d#4,g#4]@30 ~@2 [a#3,d#4,g4,a#4]@31 ~ [c4,d#4,g#4]@15 ~ [c4,d#4,g#4]@16 [d#4,g4,a#4,d#5]@28 ~@2 [f4,g#4,c#5]@3]/6", // G# D# G# D# G# D# C#
  AI: "[~@5 [d#4,g#4,c5]@25 ~ [d#4,g4,a#4,d#5]@29 ~ [b4,d#5,f#5]@3]/2", // G# D# B
  AJ: "[~@5 [a#4,c#5,f#5]@4 ~@4 [g#4,c#5,f5]@4 ~@4 [g#4,c5,d#5]@4 ~@4 [g#4,c5,d#5]@2 [g4,a#4,d#5]@28 ~@2 [f4,g#4,c#5]@3]/2", // F# C# G# D# C#
  AK: "[~@5 [d#4,g#4,c5]@26 [d#4,g4,a#4,d#5]@29 ~ [b4,d#5,f#5]@3]/2", // G# D# B
  AL: "[~@5 [a#4,c#5,f#5]@4 ~@4 [c#5,f5]@3 ~@5 [g#4,c5,d#5]@3 ~@5 [g#4,c5,d#5]@2 [d#4,g4,a#4,d#5]@29 ~ [d#4,g#4,c5]@18 [d#4,g#4,c5]@16 [d#4,g4,a#4,d#5]@29 ~ [d#4,g#4,c5]@18 [d#4,g#4,c5]@16 [d#4,g4,a#4,d#5]@29 ~ [d#4,g#4,c5]@18 [d#4,g#4,c5]@16 [d#4,g4,a#4,d#5]@29 ~ [d#4,g#4,c5]@3, ~@13 g#4@5 ~@238]/8", // F# C# G# D# G# D# G# D# …
  AM: "[~@15 [d#4,g#4,c5]@15 ~ [d#4,g4,a#4,d#5]@31 ~ [d#4,f4,g#4,c5]@31 ~ [d#4,g4,a#4,d#5]@31 ~ [d#4,g#4,c5,d#5]@16 [d#4,g#4,c5,d#5]@15 ~ [d#4,g4,a#4,d#5]@29 ~ [f4,g#4,c#5]@3]/6", // G# D# Fm7 D# G# D# C#
  AN: "[~@5 [d#4,g#4,c5]@26 [d#4,g4,a#4,d#5]@29 ~ [c5,d#5,g#5]@3]/2", // G# D# G#
  AO: "~@5 [a#4,d#5,g5]@4 ~@4 [g#4,c#5,f5]@3 ~@5 [g#4,c5,d#5]@3 ~@5 [g#4,c5,d#5]@2 [f#4,a#4,c#5]", // D# C# G# F#
  AP: "[~@29 [g#4,c#5,f5]@34 [f#4,g#4,a#4,c#5]@29 ~ [g#4,c#5,f5]@34 [f#4,g#4,a#4,c#5]@29 [g#4,c#5,f5]@35 [f#4,g#4,a#4,c#5]@29 [g#4,c#5,f5]@34 ~ [g#4,b4,c#5,e5]]/8", // C# F# C# F# C# F# C# C#m7
  AQ: "[~@15 [f#4,b4,c#5,d#5]@16 [g#4,b4,c#5,e5]@30 ~@2 [g#4,b4,c#5,e5]@16 [f#4,b4,c#5,d#5]@16 [g#4,b4,c#5,e5]@30 ~@2 [g#4,b4,c#5,e5]@15 ~ [f#4,b4,c#5,d#5]@16 [g#4,b4,c#5,e5]@30 ~@2 [g#4,b4,c#5,e5]@14 ~@2 [f#4,b4,c#5,d#5]@15 ~ [g#4,b4,c#5,e5], ~@63 d#5 ~@63 d#5 ~@96]/7", // B C#m7 B C#m7 B C#m7 B C#m7
  AR: "[~@15 [f#4,a4,c#5,e5]@6 ~@2 [e4,a4,c#5]@7 ~ [e4,f#4,g#4,b4]@31 ~ [e4,a4,c#5]@16 [e4,a4,c#5]@16 [e4,f#4,g#4,b4]@32 [e4,a4,c#5]@16 [e4,a4,c#5]@16 [e4,f#4,g#4,b4]@31 ~ [e4,a4,c#5]@16 [e4,a4,c#5]@16 [e4,f#4,g#4,b4]@31 ~ [e4,a4,c#5]]/8", // F#m7 A E A E A E A …
  AS: "[~@15 [e4,a4,c#5]@16 [e4,f#4]@32 [e4,f#4,a4,c#5]@31 ~ [e4,g#4,b4,e5]@32 [e4,a4,c#5,e5]@16 [e4,a4,c#5,e5]@15 ~ [e4,g#4,b4,e5]@29 [f#4,a4,d5]@3 ~, ~@31 [g#4,b4]@63 ~@98]/6", // A Esus2 F#m7 E A E D G#m
  AT: "[~@4 [e4,a4,c#5]@25 ~@2 [e4,g#4,b4,e5]@29 [g4,c5,e5]@4]/2", // A E C
  AU: "[~@4 [g4,d5]@5 ~@3 [f#4,a4,d5]@5 ~@3 [e4,a4,c#5]@5 ~@3 [e4,a4,c#5]@2 ~ [e4,g#4,b4,e5]@28 ~ [f#4,a4,d5]@4, ~@4 b4@3 ~@57]/2", // G5 D A E D
  AV: "~@4 [g4,b4,d5]@4 ~@4 [f#4,d5]@3 ~@5 [e4,a4]@5 ~@7, ~@12 a4@5 ~@3 c#5@3 ~@9", // G D A5
})).s("gm_piano").gain(0.16).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  A@2 B@2 A@2 B@2 C@2 D@2 E@2 F@2 G H I J K@2 L@2 K@2 L@2 C@2 D@2 E@2 F@2 G M N J K@2 L@2 O P Q R S T U V W X Y Z AA AB
  AC AD AE@8 AF@7 AG@4 AH@8 AI@8 AJ@8 AK@3 AL@5 AM AN@8 AO@5 AP@2 AQ@2 AP@2 AR
>`.pickRestart({
  A: "[d1@4 ~ d1@2 ~ a1@2 ~ b1@2 d2@6 ~@2 d2@2 ~ a1@2 ~ b1@2 d1@5 ~@3 d1@3 a1 ~@2 b1@2 d2@6 ~@2 d2@2 ~ b1@2 ~ a1@2 b1@2 ~]/2",
  B: "[d1@3 ~@2 d1@2 ~ a1@2 ~ b1@2 d2@6 ~@2 d2@3 a1@2 ~ b1@2 d1@5 ~@3 d1@2 ~ a1@2 ~ b1 ~ d2@6 ~@2 d2@2 ~ b1@2 ~ a1@2 b1@2 ~]/2",
  C: "[d2@6 ~@2 d1@6 ~@2 e1@7 ~ f#1@4 ~ g1@9 ~@2 g1@7 ~ a1@6 ~@2 a1@7 ~]/2",
  D: "[d2@7 ~ d1@7 ~ e1@6 ~@2 f#1@4 ~ g1@9 ~@2 g1@7 ~ a1@6 ~@2 a1@7 ~]/2",
  E: "[d2@6 ~@2 d1@6 ~@2 e1@6 ~@2 f#1@5 g1@8 ~@3 g1@7 ~ a1@6 ~@2 a1@7 ~]/2",
  F: "[d2@6 ~@2 d1@6 ~@2 e1@6 ~@2 f#1@4 ~ g1@8 ~@3 g1@6 ~@2 a1@5 ~@3 a1@7 ~]/2",
  G: "d2@6 ~@2 d1@6 ~@2 e1@6 ~@2 f#1@7 ~", H: "e1@6 ~@2 g1@7 ~ b1@6 ~@2 e2@3 b1@2 g1 ~@2",
  I: "f#1@7 ~ a1@7 ~ d2@7 ~ f#2@2 ~ d2@2 a1 ~@2", J: "g1@7 ~ g1@6 ~@2 a1@6 ~@2 a1@7 ~",
  K: "[d1@4 ~ d1@2 ~ a1@2 b1@2 ~ d2@6 ~@2 d2@2 ~ a1@2 b1@2 ~ d1@5 ~@3 d1@3 a1 ~ b1@2 ~ d2@6 ~@2 d2@2 ~ b1@2 a1@2 ~ b1@2 ~]/2",
  L: "[d1@3 ~@2 d1@2 ~ a1@2 b1@2 ~ d2@6 ~@2 d2@3 a1@2 b1@2 ~ d1@5 ~@3 d1@2 ~ a1@2 b1 ~@2 d2@6 ~@2 d2@2 ~ b1@2 a1@2 ~ b1@2 ~]/2",
  M: "e1@6 ~@2 g1@7 ~ b1@6 ~@2 e2@2 b1@2 ~ g1 ~@2", N: "f#1@7 ~ a1@7 ~ d2@7 ~ f#2@2 d2@2 ~ a1 ~@2",
  O: "f1@4 ~ f1 ~@2 f1@4 ~ f1 ~@2 f1@4 ~ f1 ~@2 f1@3 ~@2 a1@2 ~",
  P: "a1@3 ~@2 a1 ~@2 a1@4 ~ a1 ~@2 a1@3 ~@2 a1 ~@2 a1@3 ~@2 a1 ~@2",
  Q: "f1@4 ~ f1 ~@2 f1@3 ~@2 f1 ~@2 f1@3 ~@2 f1 ~@2 f1@3 ~@2 a1 ~@2",
  R: "a1@3 ~@2 a1@2 ~ a1@2 ~@3 a1@2 ~ a1@3 ~@2 a1@2 ~ a1@2 ~@3 a1 ~@2",
  S: "f1@2 ~@3 f1 ~@2 f1@2 ~@3 f1@2 ~ f1@3 ~@2 f1@2 ~ f1@3 ~@2 a1@2 ~",
  T: "a1@3 ~@2 a1 ~@2 a1@3 ~@2 a1 ~@2 a1@3 ~@2 a1 ~@2 a1@2 ~@3 a1 ~@2",
  U: "f1@2 ~@3 f1 ~@2 f1@2 ~@3 f1 ~@2 f1@3 ~@2 f1@2 ~ f1@2 ~@3 a1@2 ~",
  V: "a1@2 ~@3 a1 ~@2 a1@3 ~@2 a1@2 ~ a1@2 ~@3 a1@2 ~ a1@2 ~@3 a1 ~@2",
  W: "g#1@2 ~@3 g#1 ~@2 g#1@2 ~@3 g#1 ~@2 g1@3 ~@2 g1@2 ~ g1@3 ~@2 g1@2 ~",
  X: "g#1@3 ~@2 g#1 ~@2 g#1@2 ~@3 g#1@2 ~ g#1@2 ~@3 g#1@2 ~ g#1@2 ~@3 g#1@2 ~",
  Y: "g#1@2 ~@3 g#1@2 ~ g#1@2 ~@3 g#1@2 ~ g1@3 ~@2 g1 ~@2 g1@2 ~@3 g1@2 ~",
  Z: "g#1@3 ~@2 g#1@2 ~ g#1@2 ~@3 g#1@2 ~ g#1@2 ~@3 g#1@2 ~ g#1@2 ~@3 g#1@2 ~",
  AA: "g#1@3 ~@2 g#1 ~@2 g#1@2 ~@3 g#1@2 ~ g1@2 ~@3 g1 ~@2 g1@2 ~@3 g1@2 ~",
  AB: "g#1@3 ~@2 g#1@2 ~ g#1@2 ~@3 g#1@2 ~ g#1@2 ~@3 g#1 ~@2 g#1@2 ~@3 g#1 ~@2",
  AC: "g#1@3 ~@2 g#1 ~@2 g#1@2 ~@3 g#1 ~@2 g1@3 ~@2 g1@2 ~ g1@2 ~@3 g1 ~@2",
  AD: "g#1@3 ~@2 g#1 ~@2 g#1@3 ~@2 g#1 ~@2 a#1@3 ~@2 a#1@2 ~ a#1@2 ~@3 a#1 ~@2",
  AE: "[d#2@6 ~ d#1@7 ~ f1@6 ~@2 g1@6 ~@2 g#1@7 ~ g#1@7 ~ a#1@6 ~@2 a#1@7 ~ d#2@7 ~ d#1@7 ~ f1@6 ~@2 g1@6 ~@2 g#1@7 ~ g#1@7 ~ a#1@7 ~ a#1@6 ~@2 d#2@7 ~ d#1@6 ~@2 f1@6 ~@2 g1@6 ~@2 g#1@7 ~ g#1@6 ~@2 a#1@6 ~@2 a#1@6 ~@2 d#2@7 ~ d#1@6 ~@2 f1@7 ~ g1@6 ~@2 g#1@7 ~ g#1@7 ~ a#1@7 ~ a#1@6 ~@2 d#2]/8",
  AF: "[~@7 d#1@6 ~@2 f1@6 ~@2 g1@7 ~ f1@6 ~@2 g#1@7 ~ c2@6 ~@2 f2@2 ~ c2@2 ~ g#1@2 g1@7 ~ a#1@7 ~ d#2@7 ~ g2@3 d#2@2 ~ a#1@2 g#1@6 ~@2 g#1@3 d#2@2 ~ g#2@2 a#1@4 ~@2 a#1@3 ~@2 a#1@4 ~ d#1@4 ~@2 d#1@2 a#1@2 ~ c2@2 ~ d#2@6 ~@2 d#2@2 a#1@2 ~ c2@2 ~ d#1@5 ~@3 d#1@2 a#1 ~@2 c2@2 ~ d#2@6 ~@2 d#2@2 c2@2 ~ a#1@2 ~ c2@2 d#1@3 ~@3 d#1@2 a#1@2 ~ c2@2 ~ d#2@6 ~@2 d#2@2 a#1@2 ~ c2@2 ~ d#1@3]/7",
  AG: "[~@5 d#1@2 a#1@2 ~ c2 ~@2 d#2@6 ~@2 d#2@2 c2@2 ~ a#1@2 ~ c2@2 d#1@4 ~@2 d#1@2 a#1@2 ~ c2@2 ~ d#2@6 ~@2 d#2@2 a#1@2 ~ c2@2 ~ d#1@5 ~@3 d#1@2 a#1 ~@2 c2@2 ~ d#2@6 ~@2 d#2@2 c2@2 ~ a#1@2 ~ c2@2 d#1@3 ~@3 d#1@2 a#1@2 ~ c2@2 ~ d#2@6 ~@2 d#2@2 a#1@2 ~ c2@2 ~ d#1@3]/4",
  AH: "[~@5 d#1@2 a#1@2 ~ c2 ~@2 d#2@6 ~@2 d#2@2 c2@2 ~ a#1@2 ~ c2@2 d#2@6 ~@2 d#1@6 ~@2 f1@7 ~ g1@4 ~@2 g#1@9 ~ g#1@7 ~ a#1@6 ~@2 a#1@7 ~ d#2@7 ~ d#1@7 ~ f1@6 ~@2 g1@4 ~@2 g#1@9 ~ g#1@7 ~ a#1@6 ~@2 a#1@7 ~ d#2@6 ~@2 d#1@6 ~@2 f1@6 ~@2 g1@5 ~ g#1@8 ~@2 g#1@7 ~ a#1@6 ~@2 a#1@7 ~ d#2@6 ~@2 d#1@6 ~@2 f1@6 ~@2 g1@4 ~@2 g#1@3]/8",
  AI: "[~@7 g#1@6 ~@2 a#1@5 ~@3 a#1@7 ~ d#2@6 ~@2 d#1@6 ~@2 f1@6 ~@2 g1@7 ~ f1@6 ~@2 g#1@7 ~ c2@6 ~@2 f2@3 c2@2 ~ g#1 ~ g1@7 ~ a#1@7 ~ d#2@7 ~ g2@2 ~ d#2@2 ~ a#1 ~ g#1@7 ~ g#1@6 ~@2 a#1@6 ~@2 a#1@7 ~ d#1@4 ~@2 d#1@2 a#1@2 ~ c2@2 ~ d#2@6 ~@2 d#2@2 a#1@2 ~ c2@2 ~ d#1@5 ~@3 d#1@2 a#1 ~@2 c2@2 ~ d#2@6 ~@2 d#2@2 c2@2 ~ a#1@2 ~ c2@2 d#1@3 ~@3 d#1@2 a#1@2 ~ c2@2 ~ d#2@6 ~@2 d#2@2 a#1@2 ~ c2@2 ~ d#1@3]/8",
  AJ: "[~@5 d#1@2 a#1@2 ~ c2 ~@2 d#2@6 ~@2 d#2@2 c2@2 ~ a#1@2 ~ c2@2 f#1@4 ~@2 f#1 ~ f#1@4 ~@2 f#1 ~ f#1@4 ~@2 f#1 ~ f#1@3 ~@3 a#1@2 a#1@3 ~@3 a#1 ~ a#1@4 ~@2 a#1 ~ a#1@3 ~@3 a#1 ~ a#1@3 ~@3 a#1 ~ f#1@4 ~@2 f#1 ~ f#1@3 ~@3 f#1 ~ f#1@3 ~@3 f#1 ~ f#1@3 ~@3 a#1 ~ a#1@3 ~@3 a#1@2 a#1@2 ~@4 a#1@2 a#1@3 ~@3 a#1@2 a#1@2 ~@4 a#1 ~ f#1@2 ~@4 f#1 ~ f#1@2 ~@4 f#1@2 f#1@3 ~@3 f#1@2 f#1@3 ~@2 a#1@2 ~ a#1@3 ~@2 a#1 ~@2 a#1@3 ~@2 a#1 ~@2 a#1@3 ~@2 a#1 ~@2 a#1@2 ~@3 a#1 ~@2 f#1@2 ~@3 f#1 ~@2 f#1@2 ~@3 f#1 ~@2 f#1@3 ~@2 f#1@2 ~ f#1@2 ~@3 a#1@2 ~ a#1]/8",
  AK: "[~@4 a#1 ~@2 a#1@3 ~@2 a#1@2 ~ a#1@2 ~@3 a#1@2 ~ a#1@2 ~@3 a#1 ~@2 a1@2 ~@3 a1 ~@2 a1@2 ~@3 a1 ~@2 g#1@3 ~@2 g#1@2 ~ g#1@3 ~@2 g#1@2 ~ a1@3 ~@2 a1 ~@2 a1@2 ~@3 a1@2 ~ a1@2 ~@3 a1@2 ~ a1@2 ~@3 a1@2 ~ a1]/3",
  AL: "[~@4 a1@2 ~ a1@2 ~@3 a1@2 ~ g#1@3 ~@2 g#1 ~@2 g#1@2 ~@3 g#1@2 ~ a1@3 ~@2 a1@2 ~ a1@2 ~@3 a1@2 ~ a1@2 ~@3 a1@2 ~ a1@2 ~@3 a1@2 ~ a1@3 ~@2 a1 ~@2 a1@2 ~@3 a1@2 ~ g#1@2 ~@3 g#1 ~@2 g#1@2 ~@3 g#1@2 ~ a1@3 ~@2 a1@2 ~ a1@2 ~@3 a1@2 ~ a1@2 ~@3 a1 ~@2 a1@2 ~@3 a1 ~@2 a1@3 ~@2 a1 ~@2 a1@2 ~@3 a1 ~@2 g#1@3 ~@2 g#1@2 ~ g#1@2 ~@3 g#1 ~@2 a1]/5",
  AM: "~@4 a1 ~@2 a1@3 ~@2 a1 ~@2 b1@3 ~@2 b1@2 ~ b1@2 ~@3 b1 ~@2 e2",
  AN: "[~@7 e1@7 ~ f#1@6 ~@2 g#1@6 ~@2 a1@7 ~ a1@7 ~ b1@6 ~@2 b1@7 ~ e2@7 ~ e1@7 ~ f#1@6 ~@2 g#1@6 ~@2 a1@7 ~ a1@7 ~ b1@7 ~ b1@6 ~@2 e2@7 ~ e1@6 ~@2 f#1@6 ~@2 g#1@6 ~@2 a1@7 ~ a1@6 ~@2 b1@6 ~@2 b1@6 ~@2 e2@7 ~ e1@6 ~@2 f#1@7 ~ g#1@6 ~@2 a1@7 ~ a1@7 ~ b1@7 ~ b1@6 ~@2 e2]/8",
  AO: "[~@7 e1@6 ~@2 f#1@6 ~@2 g#1@7 ~ f#1@6 ~@2 a1@7 ~ c#2@6 ~@2 f#2@3 c#2@2 a1 ~@2 g#1@7 ~ b1@7 ~ e2@7 ~ g#2@3 e2@2 b1@2 ~ a1@6 ~@2 a1@3 e2@2 a2@2 ~ b1@4 ~ b1@3 ~@3 b1@4 ~ e1@4 ~ e1@2 ~ b1@2 ~ c#2@2 e2@6 ~@2 e2@2 ~ b1@2 ~ c#2@2 e1@4]/5",
  AP: "[~@4 e1@3 b1 ~@2 c#2@2 e2@6 ~@2 e2@2 ~ c#2@2 ~ b1@2 c#2@2 ~ e1@3 ~@2 e1@2 ~ b1@2 ~ c#2@2 e2@6 ~@2 e2@3 b1@2 ~ c#2@2 e1@4]/2",
  AQ: "[~@4 e1@2 ~ b1@2 ~ c#2 ~ e2@6 ~@2 e2@2 ~ c#2@2 ~ b1@2 c#2@2 ~ e1@4 ~ e1@2 ~ b1@2 ~ c#2@2 e2@6 ~@2 e2@2 ~ b1@2 ~ c#2@2 e1@4]/2",
  AR: "~@4 e1@2 ~ b1@2 ~ c#2 ~ e2@6 ~@2 e2@2 ~@10",
})).s("gm_electric_bass_finger").gain(0.18)

// chords · pad poly
const pad_poly = note(`<
  ~@8 A@2 B@4 C@2 D E F G ~@8 H@4 I@8 ~@3 J@5 K@8 L@3 M@8 N@5 ~@8 O@6 P@6 ~@3 Q@7 R@2 S@7 T@8 U@5 ~@8
>`.pickRestart({
  A: "[~@29 [b3,d4,g4]@34 ~]/2", B: "[[d4,f#4,a4]@29 [b3,d4,g4]@34 ~]/2", C: "[[d4,f#4,a4]@28 ~ [b3,d4,g4]@33 ~@2]/2",
  D: "[d4,f#4,a4]@31 ~", E: "[d4,g4,b4]@31 ~", F: "[f#4,a4,d5]@31 ~", G: "[d4,g4,b4]",
  H: "[~@29 [b3,d4,g4]@34 [d4,f#4,a4]@29 ~ [b3,d4,g4]@33 ~ [d4,f#4,a4]]/4", // G D G D
  I: "[~@29 [b3,d4,g4]@34 [d4,f#4,a4]@29 ~ [b3,d4,g4]@33 ~ [d4,f#4,a4]@31 ~ [d4,g4,b4]@31 ~ [d4,f#4,a4]@32 [d4,g4,b4]@32 ~]/8", // G D G D G D G
  J: "[~@31 [c4,f4,a4]@29 ~ [c4,e4,g4,a4]@34 [c4,f4,a4]@29 ~ [c4,e4,g4,a4]@33 ~ [c4,f4,a4]]/5", // F Am7 F Am7 F
  K: "[~@29 [c4,e4,g4,a4]@34 [c4,f4,a4]@29 ~ [c4,e4,g4,a4]@33 ~ [c4,d#4,g4]@16 [a#3,d4,g4]@16 [c4,d#4,g4]@31 ~ [c4,d#4,g4]@16 [a#3,d4,g4]@16 [c4,d#4,g4]@30 ~@2 [c4,d#4,g4]]/8", // Am7 F Am7 Cm Gm Cm Gm Cm
  L: "[~@15 [a#3,d4,g4]@16 [c4,d#4,g4]@31 ~ [c4,d#4,g4]@16 [a#3,d4,g4]@15 ~ [c4,d#4,g4]]/3", // Gm Cm Gm Cm
  M: "[~@15 [c4,d#4,g#4]@15 ~ [a#3,d#4,g4]@31 ~ [c4,d#4,g#4]@32 [a#3,d#4,g4]@31 ~ [c4,d#4,g#4]@31 ~ [a#3,d#4,g4]@32 [c4,d#4,g#4]@32 [a#3,d#4,g4]@32 [c4,d#4,g#4]]/8", // G# D# G# D# G# D# G# D# …
  N: "[~@31 [a#3,d#4,g4]@32 [c4,d#4,g#4]@32 [d#4,g4,a#4]@31 ~ [c4,d#4,g#4]@32 ~]/5", // D# G# D# G#
  O: "[~@28 [c4,d#4,g#4]@34 ~ [a#3,d#4,g4]@29 [c4,d#4,g#4]@34 ~ [a#3,d#4,g4]@29 [c4,d#4,g#4]@34 ~ [a#3,d#4,g4]]/6", // G# D# G# D# G# D#
  P: "[~@28 [c4,d#4,g#4]@34 ~ [a#3,d#4,g4]@32 [c4,d#4,g#4]@31 ~ [d#4,g4,a#4]@32 [c4,d#4,g#4]@31 ~@2]/6", // G# D# G# D# G#
  Q: "[~@31 [f#4,a#4,c#5]@29 [f4,g#4,a#4,c#5]@34 ~ [f#4,a#4,c#5]@28 ~ [f4,g#4,a#4,c#5]@34 ~ [f#4,a#4,c#5]@29 [f4,g#4,a#4,c#5]@35 [f#4,a#4,c#5]]/7", // F# A#m7 F# A#m7 F# A#m7 F#
  R: "[~@28 [f4,g#4,a#4,c#5]@34 ~ [e4,g#4,c#5]]/2", // A#m7 C#m
  S: "[~@15 [f#4,b4,d#5]@16 [e4,g#4,c#5]@32 [e4,g#4,b4,c#5]@16 [f#4,b4,d#5]@16 [e4,g#4,c#5]@31 ~ [e4,g#4,b4,c#5]@16 [f#4,b4,d#5]@16 [e4,g#4,b4,c#5]@31 ~ [e4,g#4,b4,c#5]@15 ~ [f#4,b4,d#5]@15 ~ [e4,g#4,b4,c#5]]/7", // B C#m C#m7 B C#m C#m7 B C#m7 …
  T: "[~@15 [f#4,a4,c#5]@16 [d#4,f#4,g#4,b4]@32 [e4,a4,c#5]@32 [e4,f#4,g#4,b4]@31 ~ [e4,a4,c#5]@32 [e4,f#4,g#4,b4]@32 [e4,a4,c#5]@31 ~ [e4,f#4,g#4,b4]@31 ~ [e4,a4,c#5]]/8", // F#m G#m7 A E A E A E …
  U: "[~@31 e4@32 e4@31 ~ [e4,g#4,b4]@32 [e4,a4,c#5]@32 ~, ~@31 [f#4,g#4,b4]@63 ~@66]/5", // E A G#m7
})).s("gm_pad_poly").gain(0.09).pan(0.9)

// bass · clavinet
const bass_2 = note("<A@6 B A ~@12 C@6 D C ~@12 C@4 ~@27 E F@5 G@2 H ~@11 E F@3 H ~@27 I J@5 K@2 L>".pickRestart({
  A: "d2 ~@2 d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2",
  B: "d2@2 ~ d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2",
  C: "d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2 d2 ~@2",
  D: "d2@2 d2 ~@2 d2 ~@2 d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2 d2 ~@2 d2 ~ d2 ~@2 d2 ~@2", E: "~@31 d#2",
  F: "~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2",
  G: "[~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2@2 ~ d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2]/2",
  H: "~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~ d#2 ~@2 d#2 ~@2 d#2 ~@2", I: "~@31 e2",
  J: "~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@2 e2",
  K: "[~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@2 e2@2 ~ e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@2 e2]/2",
  L: "~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@2 e2 ~@2 e2 ~ e2 ~@11",
})).s("gm_clavinet").gain(0.23).pan(0.3)

// chords · synth brass 1
const synth_brass_1 = note(`<
  A B C D E F G D H ~@11 I B C D J F K D L ~@11 I B M N ~@27 O@2 P@2 Q@2 R@2 S@2 ~@10 T@2 U@2 V ~@27 W@2 X@2 Y@2 Z@2 AA
>`.pickRestart({
  A: "[f#4,a4,d5]@25 ~@4 [e4,g4] ~@2, ~@29 c5@2 ~", B: "~@5 [d4,g4,b4]@24 ~@3", C: "[f#4,a4,d5]@27 ~@2 [f4,a#4,d5]@3",
  D: "~@5 [f4,a4,c5]@3 ~@5 [e4,g4,c5]@3 ~@5 [d4,g4,b4]@3 ~@5 [d4,g4,b4]@2 ~", // F C G
  E: "[f#4,a4,d5]@27 ~@2 [g4,c5]@2 ~, ~@29 e4 ~@2", F: "~@5 [d4,g4,b4]@25 ~@2", G: "[f#4,a4,d5]@26 ~@3 [f4,a#4,d5]@3",
  H: "[f#4,a4,d5]@25 ~@7", I: "[f#4,a4,d5]@25 ~@4 [e4,g4,c5]@2 ~", J: "[f#4,a4,d5]@28 ~ [e4,g4,c5]@2 ~",
  K: "[f#4,a4,d5]@25 ~@4 [f4,a#4,d5]@3", L: "[f#4,a4,d5]@27 ~@5", M: "[f#4,a4,d5]@24 ~@5 [b4,d5,g5]@3",
  N: "~@5 [a4,d5,f#5]@3 ~@5 [g4,c5,e5]@3 ~@5 [g4,b4,d5]@8 ~@3", O: "[~@31 [a#4,d#5,g5]@28 ~@2 [g#4,c#5,f5]@2 ~]/2",
  P: "[~@5 [g#4,c5,d#5]@25 ~ [a#4,d#5,g5]@27 ~@3 [b4,d#5,f#5]@3]/2", // G# D# B
  Q: "[~@5 [a#4,c#5,f#5]@3 ~@5 [g#4,c#5,f5]@4 ~@4 [g#4,c5,d#5]@3 ~@5 [g#4,c5,d#5]@2 ~@2 g5@27 ~ [g#4,c#5,f5]@3, ~@31 [a#4,d#5]@26 ~@7, ~@33 c#5 ~@30]/2", // F# C# G# C# D#5
  R: "[~@5 [g#4,c5,d#5]@25 ~ [d#5,g5]@28 ~@2 [b4,d#5,f#5]@3, ~@31 a#4@24 ~@9]/2", // G# D# B
  S: "[~@5 [a#4,c#5,f#5]@3 ~@5 [g#4,c#5,f5]@3 ~@5 [g#4,c5,d#5]@3 ~@5 [g#4,c5,d#5]@2 [a#4,d#5,g5]@26 ~@7]/2", // F# C# G# D#
  T: "[~@31 [a#4,d#5,g5]@27 ~@3 [g#4,c#5,f5]@3]/2", U: "[~@5 [g#4,c5,d#5]@25 ~ [a#4,d#5,g5]@24 ~@6 [d#5,g#5,c6]@3]/2",
  V: "~@5 [d#5,g5,a#5]@3 ~@5 [c#5,f5,g#5]@3 ~@5 [c5,d#5,g#5]@8 ~@3", // D# C# G#
  W: "[~@31 [b4,e5,g#5]@27 ~@2 [a4,d5,f#5,a5]@2 ~@2]/2", // E D
  X: "[~@4 [c#5,e5,a5]@24 ~@3 [b4,e5,g#5]@28 ~ [c5,e5,g5]@3 ~]/2", // A E C
  Y: "[~@4 [b4,d5,g5]@4 ~@4 [a4,d5,f#5]@4 ~@4 [a4,c#5,e5]@4 ~@4 [a4,c#5,e5]@2 ~ [b4,e5,g#5]@27 ~@2 [a4,d5,f#5]@3 ~]/2", // G D A E D
  Z: "[~@4 [a4,c#5,e5]@23 ~@4 [b4,e5,g#5]@28 ~ [c5,e5,g5]@3 ~]/2", // A E C
  AA: "~@4 [b4,d5,g5]@3 ~@5 [a4,d5,f#5]@4 ~@4 [a4,c#5,e5]@4 ~@8", // G D A
})).s("gm_synth_brass_1").gain(0.2).pan(0.6)

// other · pad sweep
const pad_sweep = note("<A@4 B@8 ~@4 C@4 A@4 B@8 ~@4 A@4 D@4 ~@27 E@4 F@8 ~@4 G@8 ~@28 H@8 ~>".pickRestart({
  A: "[d5@127 ~]/4", B: "d5/8", C: "[d5@63 ~]/4", D: "[d5@119 ~@9]/4", E: "[~@31 d#5@97]/4", F: "[~@31 d#5@209 ~@16]/8",
  G: "[~@31 d#5@126 ~@2 d#5@97]/8", H: "[~@31 e5@127 ~ e5@97]/8",
})).s("gm_pad_sweep").gain(0.16).pan(0.8)

// chords · lead 8 bass lead
const lead_8_bass_lead = note("<~@53 A@2 B ~ C@2 ~@46 D@2 E@2 F ~@22>".pickRestart({
  A: "[~@5 [d#5,a#5]@4 ~ [d#5,g#5] ~@5 [d#5,g5]@5 c5@2 ~@3 [a#4,d#5]@9 ~@29, ~@21 f5 ~@42]/2", // D#5 G#5 D# D#5
  B: "~@2 [d#5,a#5] ~@5 [d#5,a#5]@2 [c5,g5]@5 ~@3 [a#4,d#5] ~@5 [a#4,d#5]@2 [c5,f5]@6", // D#5 C5 D#5 F5
  C: "[~@5 [d#5,a#5]@4 ~ [d#5,g#5] ~@5 [d#5,g5]@5 c5@2 ~@3 [a#4,d#5]@10 ~@28, ~@21 f5 ~@42]/2", // D#5 G#5 D# D#5
  D: "[~@4 [e5,b5]@4 ~@2 [e5,a5] ~@4 [e5,g#5]@5 c#5@2 ~@4 [b4,e5]@10 ~@28, ~@20 f#5 ~@43]/2", // E5 A5 E E5
  E: "[~@2 [e5,b5] ~@4 [e5,b5]@2 ~ [c#5,g#5]@6 ~@2 [b4,e5] ~@4 [b4,e5]@2 ~@2 f#5@9 ~@28, ~@26 c#5@9 ~@29]/2", // E5 C#5 E5
  F: "~@4 [e5,b5]@4 ~@2 [e5,a5] ~@4 [e5,g#5]@5 [c#5,f#5] ~@5 [b4,e5]@6", // E5 A5 E F#5 E5
})).s("gm_lead_8_bass_lead").gain(0.11).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  [x!4]!60
  [x ~@6 x ~@7 x ~@7 x ~@7 x]
  [~@7 x ~@7 x ~@7 x ~@7 x]!70
  [~@7 x ~@7 x ~@4 x ~@11]
>`).gain(0.2)

// drums · snare
const snare = s("sd").struct("<A@3 B A@4 C A@10 D A@7 B A@11 E A@3 F A@7 G A@7 H I@19 J I@15 K I@35 L>".pickRestart({
  A: "~ x ~ x", B: "~@8 x ~@15 x ~@4 x ~@2", C: "~@8 x ~@14 x!2 ~@7", D: "~@4 x ~@4 x ~@2 x!2 ~@2",
  E: "~@2 x ~@5 x ~ x ~@13 x ~ x ~@2 x ~@2", F: "~@8 x ~@9 x ~@5 x ~@4 x ~@2", G: "~@8 x ~@15 x ~ x ~@2 x ~@2",
  H: "~@8 x ~@9 x ~@4 x!2 ~@7", I: "~@7 x ~@15 x ~@8", J: "~@7 x ~@15 x ~@2 x ~@2 x ~@2", K: "~@7 x ~@15 x ~@4 x!2 ~@2",
  L: "~@7 x ~@12 x ~@11",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@30 B ~@3 C ~@11 D ~@3 E ~@11 F ~@3 C ~@15 G ~@19 H ~@11 I ~@7 J>".pickRestart({
  A: "~@13 x ~@5 x ~ x ~@2 x ~@7", B: "~@13 x ~@18", C: "~@29 x ~@2", D: "~@28 x!2 ~@2", E: "~@3 x",
  F: "~@26 x ~@2 x ~@2", G: "~@18 x ~@2 x ~ x ~@8", H: "~@13 x!2 ~", I: "~@7 x", J: "~@5 x ~@2",
})).gain(0.18)

// drums · hihat
const hihat = s("hh").struct(`<
  [x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2]!19
  [x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2]
  [x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2]!40
// … 36 more lines

More by Battisti