Strudelify

Prendila cosi

Battisti

KeyF minorTempo103 bpm
0:00/0:00
// Prendila cosi — Battisti
// 103 bpm, 4/4, key F minor. 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 149 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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(`<
  ~ A@4 B@4 C@12 D@2 E@2 D@2 E@2 F@2 G@2 H@3 D@2 E@2 D@2 E@2 F@2 G@2 H@3 I J K@2 I L M K I L N O I P Q R D@2 E@2 D@2 E@2
  F@2 G@2 S@3 D@2 E@2 D@2 E@2 F@2 G@2 S@3 I L K@2 I L K@2 I L N O I P Q R D@2 E@2 D@2 E@2 F@2 G@2 S@3 D@2 E@2 D@2 E@2
  F@2 G@2 S@3 T@6
>`.pickRestart({
  A: "[f1@53 ~@11]/4", B: "[f1@63 ~]/4", C: "f1!2 ~@4 f1!2 ~@8", D: "[bb1@4 f2@3 bb2@5 f2@3 bb1@5 f2@3 bb2@5 f2@4]/2",
  E: "[f1@4 c2@3 f2@5 c2@3 f1@5 c2@3 f2@5 c2@3 ~]/2", F: "[bb1@4 f2@3 bb2@5 f2@3 eb2@4 bb1@3 eb1@8 ~@2]/2",
  G: "[ab1@4 eb2@3 ab2@5 eb2@3 db2@4 ab1@3 db1@8 ~@2]/2", H: "[db2@4 ab2@3 db3@5 ab2@3 g2@5 d2@3 g1@5 bb1@3 c2@17]/3",
  I: "db2@2 ab2!2 ~ db3!2 ~ db2@2 ab2@3 bb2 ab2 bb2", J: "db2@2 ab2!2 ~ db3!2 ~ db2@2 eb2@3 f2 eb2 f2",
  K: "ab1@2 eb2!2 ~ ab2!2 ~ ab1@2 eb2@3 f2 eb2 f2", L: "db2 ~ ab2!2 ~ db3!2 ~ db2@2 eb2@3 f2 eb2 f2",
  M: "ab1 ~ eb2!2 ~ ab2!2 ~ ab1@2 eb2@3 f2 eb2 f2", N: "ab1@2 eb2!2 ~ f2!2 ~ ab1@2 eb2@3 f2 eb2 f2",
  O: "ab1 ~ eb2!2 ~ f2!2 ~ ab1@2 eb2@3 f2 eb2 f2", P: "db2@2 ab2!2 ~ db3!2 ~ db2 ~ e1@2 f1@2 gb1 ~",
  Q: "g1@5 g2 g1!2 a1 ~ a1!2 bb1@2 bb1!2", R: "c2", S: "[db2@3 ~ ab2@3 db3@5 ab2@3 g2@5 d2@3 g1@5 bb1@3 c2@17]/3",
  T: "[f1@83 ~@13]/6",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · epiano1
const epiano1 = note(`<
  A@5 B@4 C@8 D@4 E@2 F G@7 H@3 I J K@2 F L@6 M@4 N@4 O P@3 O Q@3 O P@3 R@4 S@4 T@2 U@2 V W@2 X Y Z@2 AA@8 AB@7 O P@3 O
  Q@3 O P@3 AC@2 AD@4 AE@4 AF AG AH@2 AI AJ AK@3 AL@2 AM@2 AN@2 AO AP@2 AQ@2 AR AS AT@4 ~@2
>`.pickRestart({
  A: "[~@16 [c5,f5]@14 ~@16 [ab4,db5]@16 [g4,bb4,d5]@17 [f4,c5], ~@15 f4@58 ~@7, ~@15 [bb4,eb5]@9 ~@16]/5", // F5 Db5 Gm F5 Eb5
  B: "[f5@14 ~@32 [g4,bb4,d5]@17 f4, ~@14 [bb4,eb5]@18 f5@31 ~, ~@24 g5@23 ~@17, ~@28 ab5@19 ~@17, ~@30 [ab4,db5]@17 ~@17]/4", // Gm Eb5 Db5
  C: "[[c5,f5]@14 [e4,g4,c5,e5]@16 [eb4,gb4,b4,eb5]@16 [d4,f4,bb4,d5]@17 ~ [f4,a4,db5]@16 [ab3,eb4,f4,ab4,c5]@16 ~@26 c5@6, ~@63 [a3,db4]@17 ~@16 [g3,d4,g4,b4]@14 [gb3,db4,gb4,bb4]@18, ~@32 f5@20 ~ f5@11]/8", // F5 C B Bb Faug Fm7 A G …
  D: "[[f3,c4,f4]@63 c4]/4", E: "[db4@13 f4@3, ab4@7 ~, ~@26 db4@3 ~@3]/2", F: "[bb3,c4,eb4,g4]",
  G: "[[ab3,c4,f4]@15 ~@31 [bb3,eb4,g4]@18 [ab3,f4]@14 ~@12 ab4@4 [db4,f4,g4,bb4]@17 ab3, ~@15 c4@31 c4@33 c4@17 ~@16, ~@15 db4@26 ~ [db4,f4]@6 ~@31 [db4,f4]@15 ~@18, ~@16 ab4@28 ~@36 c5@15 ~@17]/7", // Fm Eb Db Gm7b5 Db
  H: "[g4@10 ~@4 [ab3,c4,f4,ab4]@17 ~ [db4,f4]@7 ~ [f4,ab4,c5]@8, c4@14 ~@17 ab3@9 ~@8, ~@10 g4@6 ~@23 db4@9]/3", // Fm Db Fm
  I: "[d4,f4,bb4]", J: "[c4,g4,c5]@15 c4", K: "[db4@13 [db4,f4]@3, ab4@7 ~]/2",
  L: "[[ab3,c4,f4]@15 ~@31 [bb3,eb4,g4]@18 [ab3,f4]@14 ~@2 [db4,f4,c5]@16, ~@15 c4@31 c4@33 c4@17, ~@15 db4@26 ~ [db4,f4]@6 ~@48, ~@4 ab4@7 ~@13]/6", // Fm Eb Db Dbmaj7 Db
  M: "[[db4,f4,g4,bb4]@15 ~@11 c5@4 [c4,db4,f4,ab4]@17 ~ [c5,f5]@8 [ab4,c5]@8, ~@15 c4@15 ~@34, ~@16 ab3@31 [ab3,f4]@17, ~ [eb4,g4,bb4] ~@2]/4", // Gm7b5 Dbmaj7 F5 Ab Db Eb
  N: "[~@16 c4@14 c4@2 ~@2 f4@2 eb4@2 f4@4 eb4@3 ~ eb4@4 f4@2 eb4@2 f4@4 eb4@6, [d4,f4,bb4] [e4,c5] db4@2, ~@4 g4@13 ~@15, ~@15 ab3@16 ~, ~@15 eb4@2 ~@15]/4", // Bb C
  O: "~@2 [bb3,c4,eb4] ab3 ~ [bb3,c4,eb4] ab3 ~@3 [bb3,c4,eb4] ab3 ~ [bb3,c4,eb4] ab3 ~", // Cm7
  P: "[~@2 [bb3,c4,eb4] ab3 ~ [bb3,c4,eb4] ab3 ~@3 [bb3,c4,eb4] ab3 ~@2 c4@2 ~@2 f4@2 eb4@2 f4@4 eb4@3 ~ eb4@4 f4@2 eb4@2 f4@4 eb4@6, ~@14 ab3@33 ~, ~@7 eb4@2 ~@15, ~ db4@2]/3", // Cm7
  Q: "[~@2 [bb3,c4,eb4] ab3 ~ [bb3,c4,eb4] ab3 ~@3 [bb3,c4,eb4] ab3 ~@2 c4@2 ~@2 f4@2 eb4@2 f4@4 eb4@3 ~ eb4@4 f4@2 eb4@2 f4@4 eb4@6, ~@7 ab3@16 ~, ~@14 eb4@5 ~@29, ~ db4@2]/3", // Cm7
  R: "[d4@8 d4@8 c4@15 ~ ab4@22 ~@6 ab4@4, g3@16 ~@11 ab4@3 ~@2, [bb3,bb4]@16 e4@11 ~@4 [db4,f4]@32 ~, g4@3 ~ g4@10 ~@2 c5@16, ~@7 bb4]/4", // Bb Db
  S: "[~@16 [c4,f4]@15 ~ c5@32, [bb3,eb4,g4]@17 ~@14 [db4,f4,ab4]@32 ~, ~ ab3@3 ~@4]/4", // F5 Eb Db
  T: "[[g4,ab4,c5]@8 ~@6 bb4 ab4, eb5@11 ab3@5, ~ f4, ~@16 ab4@10 c5@5 ~, ~@16 c5@8 eb5@7 ~]/2", // Abmaj7
  U: "[~@5 ab4@2 [db4,f4,g4,bb4,c5]@9, [db4,f4,bb4]@7 ~@9]/2", V: "[ab3,eb4,g4,c5]",
  W: "[[ab3,db4,f4,ab4]@15 ~@13 c5@4, ~@15 [db4,f4]@17, ~@4 c5@3 ~, ~@2 ab4!2, ~@5 f5@3]/2", X: "~@5 d5@3, [d4,f4,bb4]",
  Y: "[bb3,g4,c5]", Z: "[~@15 f5, c5@28 ab5 g5@3, f5@3 ab4@13, ~ db5@15, ~ f4@7]/2",
  AA: "[~@34 db4@4 ~@28 g4@8 ~@16 g4@4 ~@2 f4 c5@9 c5@4 [f4,g4,bb4]@18, [ab3,c5,g5]@26 eb4@2 c4@2 f4@14 c5@2 db5@2 f5@2 ab5@2 f5@2 c5@2 db5@2 c5@2 f5@2 eb5@24 ab3@9 db4@32 ~, g4@11 g4@5 ab3@17 ~@7 eb4@8 ~@16, ~@9 eb5@3 ab4@4 ~@3 db4@14 ~@6 ab4@7 ~ f4 ab4@8 ~@8, ~@10 bb4@6 ~@4 ab4@13 ~@4 g4@4 c4@7 ~@16]/8", // Gm7 Abmaj7
  AB: "[bb4@10 bb4@4 [db4,f4]@18 ~@4 g4@4 ~@4 c5@4 ~@16 c4@14 c4@2 ~@2 f4@2 eb4@2 f4@4 eb4@3 ~ eb4@4 f4@2 eb4@2 f4@4 eb4@6, c4@50 ~@10 bb3@20 db4@31 ~, ab3@16 ab3@10 ~@13 ab3@16 ~, [eb4,g4]@7 ab4@10 ~@3 ab4@4 ~@4 d5@4 [g4,c5]@8 ~@16, ~@32 [db4,f4]@16 [d4,f4,bb4]@17 ~@13 eb4@4 ~@30]/7", // Db Eb C5 Db Bb
  AC: "[d4!2 c4@2, g3, [bb3,bb4]@16 e4@11 ~@5, g4@3 ~ g4@10 ~@2]/2", // Bb
  AD: "[[db4,f4,ab4]@28 ~@4 [g4,ab4,c5]@17 ~ [g4,ab4,c5]@14, c4 ~@27 bb4@32 ~@4, ~ eb4, ~@49 eb5@15]/4", // Db Abmaj7
  AE: "[[db4,f4,ab4]@10 ~@22 [eb4,g4,ab4]@10 ~@4 eb5@17 ~, c4 ~, ~@10 c5@4 c5@29 ~ bb4@19 ~, ~@12 bb4@4 ~@26 g5@21 ~]/4", // Db Abmaj7
  AF: "[c4,db4,f4]", AG: "~@8 c5@7 ~, [c4,db4,g4]", AH: "[~ [db4,f4], [c4,eb4,g4], ~@5 c5@11]/2", AI: "[f4,ab4,c5]",
  AJ: "~ bb3, [f4,g4,bb4]", AK: "[[c4,g4]@5 ~@9 f4@2, c5@17 c4@7, ~@8 f4@13 ~@3, ~@8 db4@11 db4@5, ~@13 bb4@11]/3",
  AL: "[~@11 eb6@5, [bb3,c4,eb4,g4]@19 g5@2 bb5@11, ~@7 bb4@9, ~@15 c5@17, ~@17 eb5@15]/2", // Cm7
  AM: "[~@13 bb4@3, [db4,f4], c5@11 c5@5, ~@7 bb4@6 ~@3, ~@9 eb5@7]/2", // Db
  AN: "[g4@7 ~@3 g5@6, [eb4,c5], ~@7 g4@9, ~ ab4, ~@9 eb5@7]/2", AO: "[g4,ab4,c5,eb5]",
  AP: "[~@3 bb4@2 [g4,bb4]@3 ~@5 [eb4,ab4]@3, [eb4,f4,c5] [g4,c5], g4@5 f5@11, ~@8 ab4@5 ~@3, ~@11 eb5@5]/2", // Gm Ab5 F7 C5
  AQ: "[~@15 ab4, f4@24 db4@3 f4@5, db4@11 c4@5, ~@3 c5@13, ~@5 bb4@11]/2", AR: "~@3 bb4@5, [bb3,d4,g4]", AS: "[e4,c5]",
  AT: "[~@41 bb5@18 ~@5, f2@9 eb4@16 [c5,eb5]@32 ~@7, ~@3 f3@8 g4@29 eb6@19 ~@5, ~@5 ab3@18 ab5@32 ~@9, ~@7 c4@17 g5@32 ~@8]/4", // Cm
})).s("gm_epiano1").gain(0.41)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~@10 A B C D E F G H@4 ~@14 I@4 J K L M N O P@2 Q R S T ~@8 U@2 V W X ~@3 Y Z@2 AA AB AC AD AE ~@16 AF@6 ~@8 U@2 AG W
  X ~@3 AH Z@2 AI AJ AK AL AM ~@28
>`.pickRestart({
  A: "e6", B: "[b5,eb6]", C: "[bb5,d6]", D: "[a5,db6]", E: "[ab5,c6]", F: "[g5,b5]", G: "[gb5,bb5]", H: "[c6@29 ~@3]/4",
  I: "[c5@24 db5@7 ab4@13 bb4@12 ab4@8]/4", J: "g4@4 f4 g4 ab4 bb4", K: "c5@10 eb5@3 db5@3", L: "bb4@10 db5@3 c5@3",
  M: "g4@3 ab4", N: "f4@11 ~@5", O: "~ c5 db5 f5", P: "g5@3 ab5", Q: "f5@7 ~@9", R: "~ eb5@2 f5", S: "d5@3 eb5",
  T: "c5@13 ~@3", U: "[~@12 g5 ~ ab5@5 ~@9 [db6,eb6] eb6 c6 db6, ~@29 db6@2 ~]/2",
  V: "eb6 f6 g6 ~@3 c6 db6 eb6 ~@3 g5 ab5 bb5 ~", W: "eb5 ~ g5 ~ c5 ~ eb5 ~ g4 ~ bb4 ~ eb4 ~ g4 ~", X: "f4 ~@3",
  Y: "[c5,c6] [db5,db6]", Z: "[[ab4,ab5] [bb4,bb5]@2 [ab4,ab5]]/2", AA: "[g4,g5] [f4,f5]",
  AB: "~ [c5,c6] [db5,db6] [eb5,eb6]", AC: "[f5,f6]@3 [ab5,ab6]", AD: "[g5,g6]@3 [ab5,ab6]", AE: "[f5,f6]@13 ~@3",
  AF: "[~@3 db4 ~ [c4,g4,c5], eb4@48 ~@16 [d4,bb4]@17 ~@15, [g4,bb4]@2 f4@3 ~, ~@2 c4@4 ~@3 bb3@3, ~ ab4 ~]/6", // C5 Gm
  AG: "eb6 f6 g6 ~@3 c6 db6 eb6 ~@3 [g5,ab5] bb5 ~@2", AH: "~ [db5,db6]", AI: "[g4,g5] [f4,f5], c5",
  AJ: "~ [eb4,c5,eb5,c6] [f4,db5,f5,db6] [g4,eb5,g5,eb6]", AK: "[ab4,f5,ab5,f6]@3 [c5,c6,ab6], ~@12 ab5 ~@3",
  AL: "[bb4,g5,bb5,g6]@3 [c5,ab5,c6,ab6]", AM: "[ab4,f5,f6]@5 ~@11, ab5 ~@15",
})).s("gm_string_ensemble_2").gain(0.15).pan(0.6)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@21 A B C D A B C D E F G H I J@2 A B C D A B C D E F G H I K@2 E L M N E L M N E L M N E L O ~ A B C D A B C D E F G
  H I J@2 A B C D A B C D E F G H I K@2 E L M P E L M P E L M P E L O ~ A B C D A B C D E F G H I J@2 A B C D A B C D E
  F G H I K@2 ~@6
>`.pickRestart({
  A: "[ab3,c4,f4]!3 [ab3,c4,f4]@3 [ab3,c4,f4]!4 [ab3,c4,f4]@6", // Fm
  B: "[ab3,c4,f4]!3 [ab3,c4,f4]@3 [ab3,c4,f4]!4 [ab3,c4,f4]@4 ~@2", // Fm
  C: "[bb3,eb4,g4]!3 [bb3,eb4,g4]@3 [bb3,eb4,g4]!3 [bb3,g4] [bb3,eb4,g4]@6", // Eb
  D: "[ab3,eb4,g4,c5]!3 [ab3,eb4,g4,c5]@3 [ab3,eb4,g4,c5]!4 [ab3,eb4,g4,c5]@4 ~@2", // Abmaj7
  E: "[db4,f4,ab4,c5]!3 [db4,f4,ab4,c5]@3 [db4,f4,ab4,c5]!4 [db4,f4,ab4,c5]@6", // Dbmaj7
  F: "[db4,eb4,g4,bb4]!3 [db4,eb4,g4,bb4]@3 [db4,eb4,bb4] [db4,eb4,g4,bb4]!3 [db4,eb4,g4,bb4]@6", // Eb7
  G: "[ab3,c4,g4]!3 [ab3,c4,g4]@3 [ab3,c4,g4]!4 [ab3,c4,g4]@5 ~", // Abmaj7
  H: "[f3,ab3,eb4]!3 [f3,ab3,eb4]@3 [f3,ab3,eb4]!4 [f3,ab3,eb4]@6", // Fm7
  I: "[ab3,c4,f4]!3 [ab3,c4,f4]@3 [ab3,c4,f4]!4 [ab3,c4,f4]@5 ~", // Fm
  J: "[[bb3,d4,g4]!3 [bb3,d4,g4]@3 [bb3,d4,g4]!4 [bb3,d4,g4]@5 ~ [c4,g4]@13 ~@3, ~@15 g3@13 ~@4]/2", // Gm C5
  K: "[[bb3,d4,g4]!3 [bb3,d4,g4]@3 [bb3,d4,g4]!4 [bb3,d4,g4]@5 ~ g4@12 ~@4, ~@15 [g3,c4]@13 ~@4]/2", // Gm C5
  L: "[db4,f4,ab4,c5]!3 [db4,f4,ab4,c5]@3 [db4,f4,ab4,c5]!4 [db4,f4,ab4,c5]@4 ~@2", // Dbmaj7
  M: "[eb4,g4,ab4,c5]!3 [eb4,g4,ab4,c5]@3 [eb4,g4,ab4,c5]!4 [eb4,g4,ab4,c5]@6", // Abmaj7
  N: "[eb4,g4,ab4,c5]!3 [eb4,g4,ab4,c5]@3 [eb4,g4,ab4,c5]!4 [eb4,g4,ab4,c5]@2 ~@4", O: "[d4,g4,bb4,d5] ~",
  P: "[eb4,g4,ab4,c5]!3 [eb4,g4,ab4,c5]@3 [eb4,g4,ab4,c5]!4 [eb4,g4,ab4,c5]@3 ~@3", // Abmaj7
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.6)

// chords · flute
const flute = note("<~@51 A ~ B ~ C ~ B ~ A ~ B ~ A ~ D E ~@30 A ~ B ~ C ~ B ~ A ~ B ~ A ~ D E ~@36>".pickRestart({
  A: "[ab5,c6] ~@2 [f5,ab5] ~@2 [eb5,f5]@6 ~@4", B: "[eb5,g5] ~@2 [c5,eb5] ~@2 [bb4,c5]@6 ~@4",
  C: "[ab5,c6] ~@2 [f5,ab5] ~@2 [eb5,f5]@5 ~@5", D: "g5@5 f5 [eb5,e5] d5@9", E: "c5@3 ~",
})).s("gm_flute").gain(0.2).pan(0.2)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@53 A B C D@2 E@2 ~@3 F G@3 ~@9 H I J@2 K L ~@17 A B C D@2 E@2 ~@3 F M@3 ~@7 N O@2 P@2 Q@4 ~@8 R S T U@3 ~@6
>`.pickRestart({
  A: "~@6 eb5@4 g5 ~ c5@4", B: "eb5 ~ g4@4 bb4 ~ eb4 f4 g4 ~ c4 db4 eb4 ~",
  C: "f4 ~ ab4 bb4 ~ f4 ab4@3 ~ c5 db5 [bb4,c5] ab4 ~@2", // Bbsus2
  D: "[f5 ~ ab5 bb5 ~ f5 ab5 bb5 c6@2 db6 f6 ~@2 eb6@7 ~ c6 bb5 c6@8]/2",
  E: "[~@2 g5 ab5 g5@2 eb5 ~ c5@2 db5 ~ eb5 ~ f5@12 ~@6]/2", F: "~@10 eb5 ~ c5 ~ f5 ~",
  G: "[f5@3 ~ [g5,ab5]!3 g5 f5 g5 ab5 bb5 c6 d6 [eb6,f6] g6@33]/3", H: "[db4,f4,c5]", I: "[c4,g4,c5]",
  J: "[c4@16 c5@15 ~, [db4,f4,ab4]]/2", K: "[d4,g4,bb4]", L: "[c4,c5], g4 ~@15",
  M: "[f5@3 ~ [g5,ab5]!3 g5 f5 g5 ab5 bb5 c6 [d6,eb6] f6 g6@33]/3", N: "~@2 [ab4,c5,ab5] [g4,bb4,g5]",
  O: "[ab4@4 g4@2 [bb4,g5] [ab4,f5], f4@25 ~@7, f5@23 ~@9, ~@16 bb4@7 ~@9]/2", // Eb Db
  P: "[g4@15 f4@9 [ab4,f5]@4 [g4,eb5]@4, [eb4,eb5]@25 ~@7, ~@15 ab4@7 ~@10]/2", // Db Cm Eb
  Q: "[db5@11 c5@5 [d4,bb4]@16 [c4,g4,c5]@18 ~@14, f4 ~, db4@8 bb3@17 ~@7]/4", R: "bb5@15 ~", S: "bb5", T: "ab5",
  U: "[~@32 e5@15 ~, g5@5 ~@19, ~@4 f5@13 ~@7]/3",
})).s("gm_string_ensemble_1").gain(0.18)

// other · alto sax
const alto_sax = note("<~@88 A B C D E F@2 G ~@23 H I J K L@2 M N@2 O P@2 Q R S T U V W@3 X Y Z@2 ~@5>".pickRestart({
  A: "~@2 db5 c5 f5 ~ db5 ~ c5@3 ~@5", B: "~@2 c5 bb4 eb5 ~ c5 ~ bb4 ab4 ~ c5 g4@2 f4@2",
  C: "~@5 eb4 c4 db4 ~ f4@3 ~@2 g4 ab4", D: "~ g4 ab4 ~ c5 eb5 ~ g5@5 ~ ab5 g5 ab5, bb4 ~@7",
  E: "g5@5 f5 eb5 ~ c5@3 ~@5", F: "[~ g5@2 f5 eb5 c5 bb4 ~ ab4@2 bb4 c5 ~ eb5@10 db5 c5 ~ bb4@3 ~@3]/2",
  G: "~ c5 db5 eb5 ~@2 bb4 ~ ab4 g4@7, ~@5 c5@2 ~@9", H: "~@3 c4 f4 g4 ab4 ~ [f4,g4] ~ c4 bb3 c4@3 ~",
  I: "~@3 g3 bb3 ab3 g3 ab3 c4 ~ eb4 g4@2 g4@3", J: "~@5 c5 eb5 db5 c5 ~ db5 c5 bb4 ~ g4@2, ~@13 ab4@2 ~",
  K: "~@7 ab4 g4 f4 eb4 db4 c4@3 ~",
  L: "[~@7 c4 ~ db4 c4 ~ ab3 g3 f3@4 ~@5 c4 [eb4,g4] bb4 g4 c5 eb5 ~ gb5 f5, ~@8 eb4@2 ~ bb3@2 ~@16 g5@2 ~]/2", // Eb
  M: "~ eb5@6 db5 c5 db5 c5 ~ ab4 g4 ~ f4, ~@11 bb4@2 ~@3",
  N: "[g4@6 f4 [d4,eb4] c4 bb3 ab3 g3@3 f3 g3@6 ~ f4@2 ~ c5@3 ~ c5!3]/2", O: "~ c5@2 db5 c5@5 bb4 c5 ab4 bb4 ~ g4 ab4",
  P: "[f4 ~ g4 ab4 bb4 c5@2 c5@2 ~ g4 ~ f4 eb4 db4 c4@4 ~@8 c4 eb4 ~ bb4 ~, ~@9 ab4@2 ~@18 g4@2 ~]/2",
  Q: "g4 eb4 ~ c4@2 ~ [c4,eb4] ~@3 g4 ~ eb4 c4 f4 g4, ~@4 g4 ~@3, ~@9 bb4@2 ~@5", // Cm
  R: "ab4@2 bb4 g4 f4@2 c4 f4 g4 ab4@2 bb4 c5@2 db5 eb5", S: "c5@5 ~ bb4 c5 ~ eb5 ~ f5@2 f5!3, ~@4 db5 ~@3",
  T: "~ f5 f5@2 g5 eb5@3 f5 db5 ~ eb5 c5@4", U: "~@8 f4 ~ f4@2 g4@2 ab4@2",
  V: "c5 c5@2 bb4 db5 ~@2 c5 eb5 ~ eb5 db5 f5 ~ f5 eb5, ~@3 db5 ~@4",
  W: "[g5@2 ~ g5@5 ~@3 g5 ab5 g5 f5 ~ db5 c5 ~ db5 eb5@4 ~@5 db5 eb5 c5@2 bb4@4 ~@3 bb4 c5 db5 eb5 ~ db5 eb5 c5, ~@15 eb5@2 ~@11 c5@2 ~@14 f5@2 ~@2]/3",
  X: "db5 bb4 c5 ab4 bb4 g4 ab4 [bb4,c5] eb5 ~ ab5 ~ [f5,g5] eb5 ~ db5, ~@9 g5@2 ~@5", Y: "c5@7 ~ g5@6 f5@2",
  Z: "[~ c5@19 ~@12]/2",
})).s("gm_alto_sax").gain(0.45).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A@11 B C D@13 E C D@13 E A@15 E C D@13 E C D@13 E A@15 E C D@13 E C D@13 E ~@6
>`.pickRestart({
  A: "x!2", B: "x!2 ~@2", C: "x ~@3 x ~@6 x!2 ~@3", D: "~@4 x ~@6 x!2 ~@3", E: "x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~ A@19 B C@14 D C@14 E A@3 F A@3 F A@3 F A@2 G D C@14 D C@14 E A@3 F A@3 F A@3 F A@2 G D C@14 D C@14 ~@7
>`.pickRestart({
  A: "~ x ~ x", B: "~@12 x!3 ~", C: "~@7 x", D: "~@3 x", E: "~@7 x!2 ~@3 x ~@3", F: "~@4 x ~@4 x ~@2 x ~@3",
  G: "~@4 x ~@7 x ~ x!2",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@5 A@2 B ~@3 A C ~@41 C ~@3 C ~@3 C ~@37 C ~@3 C ~@3 C ~@40>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~ A@20 B@14 ~ B@14 ~ C@15 D B@14 ~ B@14 ~ C@15 D B@14 ~ B@14 ~@7>".pickRestart({
  A: "x!4", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", C: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", D: "~ x ~@2",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@50 [~@7 x] ~@98>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@20 [~@5 x ~@2] ~@29 [~@13 x ~@2] ~@45 [~@13 x!2 ~] ~@52>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~ A@20 ~@14 B ~@15 C@15 ~@15 B ~@15 C@15 ~@15 B ~@21>".pickRestart({
  A: "~@2 x ~@3 x!2 ~@2 x!2 ~@2 x!2", B: "~@7 x", C: "~ x ~ x ~ x ~ x",
})).gain(0.48)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~ [~@3 x ~@12]!20 ~@128>").gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@20 [~ x] ~@29 [~@5 x ~@2] ~@45 [~@5 x ~@2] ~@52>").gain(0.64)

// drums · splash
const splash = s("cr").struct("<~@35 A ~@14 A ~@15 A ~@14 A ~@14 A ~@15 A ~@14 A ~@14 A ~@6>".pickRestart({
  A: "x",
})).gain(0.64)

stack(
// … 3 more lines

More by Battisti