Strudelify
Amarsi un po' cover art

Io tu noi tutti

Amarsi un po'

Battisti

KeyB♭ minorTempo84 bpm
0:00/0:00
// Amarsi un po' — Battisti
// 84 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(84/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 · acoustic bass
const bass = note(`<
  ~@4 A B C D E B C D E B C D E B C F@2 B C D E B C D E B C D E G H I@2 J K L M J K L M J K L M J N O P B C D E G H Q@2
  R ~@5 S T@2 J K L M J K L M J K L M J U V@2 J K L M J K L W
>`.pickRestart({
  A: "~@8 g1@2 d1@2 g1@2 ~ f2", B: "f2 ~ g2!2 ~ a2 a2@2 g1@2 d1@2 g1@2 ~ f2",
  C: "f2 ~ g2!2 ~ a2 a2@2 f1@2 c1@2 f1@2 ~ e2", D: "e2@2 f2!2 ~ c2 c2@2 f1@2 c1@2 f1@2 ~ e2",
  E: "e2@2 f2!2 ~ c2 c2@2 g1@2 d1@2 g1@2 ~ f2", F: "[e2@2 f2!2 ~ c2 c2@2 d2@4 a2@2 d3@10 g1@2 d1@2 g1@2 ~ f2]/2",
  G: "f2 ~ g2!2 ~ a2 a2@2 bb1@2 f1@2 bb1@2 ~ ab2", H: "ab2 ~ bb2!2 ~ c3 c3@2 f1@2 c1@2 a1@2 ~ a2",
  I: "[a2@2 bb2!2 ~ c3 c3@2 d2 ~ d2@2 a2@2 d3@5 a2 d3!3 ~ ab1@2 eb1@2 ab1@2 ~ gb2]/2",
  J: "gb2 ~ ab2!2 ~ bb2 bb2@2 ab1@2 eb1@2 ab1@2 ~ gb2", K: "gb2 ~ ab2!2 ~ bb2 bb2@2 gb1@2 db1@2 gb1@2 ~ f2",
  L: "f2@2 gb2!2 ~ db2 db2@2 gb1@2 db1@2 gb1@2 ~ f2", M: "f2@2 gb2!2 ~ db2 db2@2 ab1@2 eb1@2 ab1@2 ~ gb2",
  N: "gb2 ~ ab2!2 ~ bb2 bb2@2 bb1@2 f1@2 bb1@2 ~ bb2", O: "bb2@2 c3!2 ~ db3 db3@2 e2@2 c2@2 e2@2 ~ e3",
  P: "e3 ~ f3!2 ~ g3!2 ~ g1@2 d1@2 g1@2 ~ f2",
  Q: "[a2@2 bb2!2 ~ c3 c3@2 d2 ~ d2@2 a2@2 ~@6 d2!3 ~ d3@8, ~@7 d3@5 ~@4]/2", R: "d2 ~", S: "~@15 a2",
  T: "[a2 ~ bb2!2 ~ c3!2 ~ d2 ~ d2@2 a2@2 d3@5 a2 d3!4 ab1@2 eb1@2 ab1@2 ~ gb2]/2",
  U: "gb2 ~ ab2!2 ~ bb2 bb2@2 gb1@2 db1@2 bb1@2 ~ bb2",
  V: "[bb2@2 b2!2 ~ db3 db3@2 eb2 ~ eb2@2 bb2@2 eb3@5 bb2 eb3!4 ab1@2 eb1@2 ab1@2 ~ gb2]/2",
  W: "f2@2 gb2!2 ~ db2 db2@2 ~@8",
})).s("gm_acoustic_bass").gain(0.56).pan(0.4)

// chords · synth brass 2
const synth_brass_2 = note("<~@20 A@8 B@6 C@8 D@3 ~@7 E@6 F@4 ~@7 G@8 H@8 I ~ J@7>".pickRestart({
  A: "[~ [d3,g3,bb3]@4 [f3,a3,c4]@4 [d3,g3,bb3]@4 [f3,a3,c4]@3]/8", // Gm F Gm F
  B: "[~@2 [d3,g3,bb3]@8 [f3,a3,c4]@8 [d3,g3,bb3]@4 [bb3,db4] [c4,eb4], ~@11 f3]/6", // Gm F Gm Bbm Cm
  C: "[[bb3,db4,f4]@8 [f3,a3,c4]@16 [gb3,a3,d4]@16 [ab3,b3,eb4]@32 [gb3,bb3,db4]@31 ~ [ab3,b3,eb4]@24]/8", // Bbm F D Abm Gb Abm
  D: "[~ gb3@4 ~, ~@7 [bb3,db4]@32 ~@9]/3", // Bbm
  E: "[~@8 [g3,bb3,d4]@31 ~ [f3,a3,c4]@32 [g3,d4]@15 ~ [f3,db4]@8, ~@3 bb3]/6", // Gm F G5 Db
  F: "[~ [a3,c4,e4]@2 [d3,gb3,a3,d4]@4 ~]/4", G: "[~ [ab3,b3,eb4]@4 [gb3,bb3,db4]@4 [ab3,b3,eb4]@4 [gb3,bb3,db4]@3]/8",
  H: "[~ [ab3,b3,eb4]@4 [gb3,bb3,db4]@4 [ab3,b3,eb4]@4 [gb3,bb3,db4]@2 [g3,eb4], ~@120 bb3 ~@7]/8", // Abm Gb Abm Gb Cm
  I: "~ [ab3,b3], ~@8 eb4 ~@7", J: "[~ [gb3,bb3,db4]@4 [ab3,b3,eb4]@4 [gb3,bb3,db4]@4 ~]/7",
})).s("gm_synth_brass_2").gain(0.15).pan(0.9)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@5 A ~ B ~ A ~ B ~ A ~ B ~ A ~ C@2 A B@2 D E B@2 A@5 ~ F G@2 H I@2 H@2 I@2 ~@8 A@2 J@2 A K@2 L@2 ~@7 M@2 N O@2 N@2
  O@2 N@2 O@2 N@2 ~@2 O N P O@2 N@2 O ~
>`.pickRestart({
  A: "~@8 [bb4,c5,f5]!3 [bb4,c5,e5] ~ [bb4,c5,e5] ~ [bb4,c5,d5]", // Bbsus2 C7 Bb
  B: "~@8 [g4,c5,f5]!3 [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,d5]", // Csus4 C Gsus4
  C: "[~@14 [g4,a4,d5]@10 [bb4,c5,f5]!3 [bb4,c5,e5] ~ [bb4,c5,e5] ~ [bb4,c5,d5]]/2", // Gsus2 Bbsus2 C7 Bb
  D: "~@5 [g4,c5,f5] ~@2 [bb4,c5,f5]!3 [bb4,c5,e5] ~ [bb4,c5,e5] ~ [bb4,c5,d5]", // Csus4 Bbsus2 C7 Bb
  E: "~@5 [g4,c5,d5] ~@2 [bb4,c5,f5]!3 [bb4,c5,e5] ~ [bb4,c5,e5] ~ [bb4,c5,d5]", // Gsus4 Bbsus2 C7 Bb
  F: "~@8 [f4,a4,e5]!3 [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,c5]", // Fmaj7 Dm F
  G: "[~@8 [g4,a4,d5]@13 ~@3 [ab4,eb5,gb5]!3 [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,eb5]]/2", // Gsus2 Ab7 Db Absus4
  H: "~@8 [ab4,eb5,gb5]!3 [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,eb5]", // Ab7 Db Absus4
  I: "~@8 [ab4,db5,gb5]!3 [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,eb5]", // Dbsus4 Db Absus4
  J: "~@8 [a4,c5,f5]!3 [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,d5]", K: "[~@9 [db5,f5]@15 ~@8, ~ [f4,bb4]@2 ~]/2",
  L: "[~ [a4,d5]@2 ~, ~@7 [d4,gb4]@17 ~@8]/2", // D5 D
  M: "[~@12 [g4,a4,d5]@11 ~ [b4,db5,gb5]!3 [b4,db5,f5] ~ [b4,db5,f5] ~ [b4,db5,eb5]]/2", // Gsus2 Bsus2 Db7 B
  N: "~@8 [b4,db5,gb5]!3 [b4,db5,f5] ~ [b4,db5,f5] ~ [b4,db5,eb5]", // Bsus2 Db7 B
  O: "~@8 [bb4,db5,gb5]!3 [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,eb5]", // Gb Bbm Eb7
  P: "~@8 [bb4,b4,db5,gb5]!3 [bb4,b4,db5,f5] ~ [bb4,b4,db5,f5] ~ [bb4,b4,db5,eb5]", // Gb Bbm Eb7
})).s("gm_electric_guitar_clean").gain(0.14).pan(0)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~@12 A@3 B@2 ~@11 C@6 D ~ E@4 F@7 G@4 ~@5 H@4 ~@17 I@2 J@2 K L M N@2 ~ O@7
>`.pickRestart({
  A: "[~@4 [f4,g4,c5,f5]@13 ~@7]/3", B: "[~@8 [c5,f5,g5]@15 [a4,d5,e5]@4 ~@5, ~@8 f6@11 ~@13]/2",
  C: "[a6@10 g6@12 [bb4,db5] [c5,eb5]]/6", D: "[db5,f5] [c5,e5]", E: "[~@2 [eb6,ab6,eb7]@8 ~ [db6,gb6,db7]@5]/4",
  F: "[~@8 [eb6,ab6]@32 [db6,gb6,db7]@31 ~@2 [ab4,ab6]@39, ~@4 eb7@15 ~@37]/7", G: "[~ [ab4,ab6]@6 ~]/4",
  H: "[~@30 db7@6 f7@4 e7@11 ~@13, ~@13 f5@23 ~@28, ~@13 c6@11 db6@12 ~@28, ~@7 c7@8 ~@17]/4",
  I: "[bb3 b3 db4 eb4 f4 gb4 bb4@22 ~@4]/2", J: "[bb4 b4 bb4 b4 bb4 ab4 f4@15 ~@11]/2",
  K: "bb3 b3 db4 eb4 f4 gb4 bb4@8 b4 bb4", L: "~@8 bb4 b4 bb4 ~@5", M: "bb4 b4 bb4 b4 bb4 ab4 f4@10",
  N: "[~@2 db4@2 eb4@8 ~ bb6@3]/2", O: "[~@7 ab6@31 ~@2 bb6@31 ab6@31 ~@10]/7",
})).s("gm_string_ensemble_2").gain(0.11).pan(0.8)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@31 A@3 B ~ C@2 D@2 E@5 ~@7 F@3 G@2 ~@2 H@2 I ~@7 J@2 K@12 L@3 M K@4 N@3
>`.pickRestart({
  A: "[c5@10 [bb3,db4] [c4,eb4]]/3", B: "[db4,f4] ~",
  C: "[~@4 [a3,d4]@3 ~ [b3,eb4]@2 [bb3,db4] ~@2 [bb3,db4] ~ [b3,eb4]@3 [bb3,db4] ~@2 [bb3,db4] ~ [b3,eb4]@3 [bb3,db4] ~@2 [bb3,db4] ~@2]/2", // D5 B Bbm B Bbm B Bbm
  D: "[[bb3,db4] [b3,eb4]!3 ~@4 [bb3,eb4]@2 [ab3,db4] ~@2 [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~@2]/2", // Bbm B Eb5 Db5 Eb5 Db5 Eb5 Db5
  E: "[~@5 [bb3,eb4] ~@2 [b3,eb4]!2 ~ [b3,eb4] ~ [bb3,db4] ~ [b3,eb4]@3 [bb3,db4] ~@2 [bb3,db4] ~ [b3,eb4]@3 [bb3,db4] ~@2 [bb3,db4] ~ [b3,eb4]@3 [bb3,db4] ~@2 [bb3,db4] ~@2 [ab3,db4] [bb3,eb4]!2 ~@2 [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~ [e3,b3]@3 ~@9]/5", // Eb5 B Bbm B Bbm B Bbm B …
  F: "[~@7 d5@15 ~@2]/3", G: "[~@8 bb3@3 c4 g4@12 ~@8, ~@7 g3@2 ~@3 eb4 ~@19]/2", H: "[~ [d3,a3]@3]/2", I: "[d2,a2] ~",
  J: "[~@8 [bb3,db4] [b3,eb4]!3 ~ [bb3,db4] ~ [b3,eb4]@3 [bb3,db4] ~@2 [bb3,db4] ~ [b3,eb4]@3 [bb3,db4] ~@2 [bb3,db4] ~@2]/2", // Bbm B Bbm B Bbm B Bbm
  K: "[[bb3,db4] [b3,eb4]!3 ~@4 [ab3,db4] [bb3,eb4]!3 ~ [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~@2 [bb3,db4] [b3,eb4]!3 ~ [bb3,db4] ~ [b3,eb4]@3 [bb3,db4] ~@2 [bb3,db4] ~ [b3,eb4]@3 [bb3,db4] ~@2 [bb3,db4] ~@2]/4", // Bbm B Db5 Eb5 Db5 Eb5 Db5 Eb5 …
  L: "[[bb3,db4] [b3,eb4]!3 ~@4 [ab3,db4] [bb3,eb4]!3 ~ [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~ [bb3,eb4]@17 [bb3,db4] [b3,eb4]!3 ~ [bb3,db4] ~ [b3,eb4]]/3", // Bbm B Db5 Eb5 Db5 Eb5 Db5 Eb5 …
  M: "~@2 [bb3,db4] ~@2 [bb3,db4] ~ [b3,eb4]@3 [bb3,db4] ~@2 [bb3,db4] ~@2", // Bbm B Bbm
  N: "[[bb3,db4] [b3,eb4]!3 ~@4 [ab3,db4] [bb3,eb4]!3 ~ [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~ [bb3,eb4]@3 [ab3,db4] ~@2 [ab3,db4] ~@10]/3", // Bbm B Db5 Eb5 Db5 Eb5 Db5 Eb5 …
})).s("gm_overdriven_guitar").gain(0.16)

// other · piano
const piano = note("<~@5 A B C D E F C G H I J K L M N ~@24 O P Q R S T@4 ~@41>".pickRestart({
  A: "~ d3 ~@14", B: "d2 d3 ~@13 c3", C: "~ c3!3 ~@11 c3", D: "~@2 c3!2 ~ c3 ~@10", E: "~ d3 ~@11 d2 d3 ~",
  F: "~@15 c3", G: "~@2 c3!2 ~ c3 ~@7 d3 ~@2", H: "~@11 d3 ~@4", I: "~ d3 ~@2 d3 ~@11", J: "~ c3 ~ c3 ~ f2 ~ c3 ~@8",
  K: "~ c3 ~@2 c3!2 f2 ~@9", L: "~ d3 ~@2 d3!2 ~@10", M: "~ d3 ~ g2 d3 ~@11", N: "~ c3 f2!2 c3!2 f2 ~@9",
  O: "~ [gb4,gb5]", P: "eb4@6 [b3,b4] [db4,db5], eb5@5 ~@3", Q: "[eb4,eb5] [gb4,gb5] [db4,db5]@2", R: "[bb3,bb4] ~",
  S: "~@6 [eb4,eb5] [f4,f5]", // Eb F
  T: "[[gb4,gb5]@2 [bb4,bb5]@6 [eb4,eb5]@2 [f4,f5]@2 [gb4,gb5]@2 [bb4,bb5]@6 [gb4,gb5]@4 [f4,ab5]@6 [f4,f5]@6 [db4,f4,db5]@4 [e4,g5]@6 e5@6 c5@3 ~@9, ~@12 [bb3,db4,ab4]@6 ~@2 [a3,g4]@7 ~@5, ~@40 c4@12 c4 ~@11, ~@40 b4 ~@5 e4 ~@17]/4", // Gb Bb Eb F Gb Bb Gb Fm …
})).s("gm_piano").gain(0.24).pan(0.6)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@4 A B C D E B C D E B C D E B C F@2 B C D E B C D E B C D E G H I@2 J K L M J K L M J K L M J N O P B C D E G H Q@3
  ~@5 R S T@8 M J K L M J U V@2 J K L M J K L W
>`.pickRestart({
  A: "~@8 g2@2 d2@2 g2@2 ~ f3", B: "f3 ~ g3!2 ~ a3 a3@2 g2@2 d2@2 g2@2 ~ f3",
  C: "f3 ~ g3!2 ~ a3 a3@2 f2@2 c2@2 f2@2 ~ e3", D: "e3@2 f3!2 ~ c3 c3@2 f2@2 c2@2 f2@2 ~ e3",
  E: "e3@2 f3!2 ~ c3 c3@2 g2@2 d2@2 g2@2 ~ f3", F: "[e3@2 f3!2 ~ c3 c3@2 d3@4 a3@2 d4@10 g2@2 d2@2 g2@2 ~ f3]/2",
  G: "f3 ~ g3!2 ~ a3 a3@2 bb2@2 f2@2 bb2@2 ~ ab3", H: "ab3 ~ bb3!2 ~ c4 c4@2 f2@2 c2@2 a2@2 ~ a3",
  I: "[a3@2 bb3!2 ~ c4 c4@2 d3 ~ d3@2 a3@2 d4@5 a3 d4!3 ~ ab2@2 eb2@2 ab2@2 ~ gb3]/2",
  J: "gb3 ~ ab3!2 ~ bb3 bb3@2 ab2@2 eb2@2 ab2@2 ~ gb3", K: "gb3 ~ ab3!2 ~ bb3 bb3@2 gb2@2 db2@2 gb2@2 ~ f3",
  L: "f3@2 gb3!2 ~ db3 db3@2 gb2@2 db2@2 gb2@2 ~ f3", M: "f3@2 gb3!2 ~ db3 db3@2 ab2@2 eb2@2 ab2@2 ~ gb3",
  N: "gb3 ~ ab3!2 ~ bb3 bb3@2 bb2@2 f2@2 bb2@2 ~ bb3", O: "bb3@2 c4!2 ~ db4 db4@2 e3@2 c3@2 e3@2 ~ e4",
  P: "e4 ~ f4!2 ~ g4!2 ~ g2@2 d2@2 g2@2 ~ f3",
  Q: "[a3@2 bb3!2 ~ c4 c4@2 d3 ~ d3@2 a3@2 ~@6 d3!3 ~@25, ~@14 d4@25 ~@9]/3", R: "~@15 a3",
  S: "a3 ~ bb3!2 ~ c4!2 ~ d3 ~ d3@2 a3@2 d4@2",
  T: "[~@3 a3 d4!3 ~ ab2@2 eb2@2 ab2@2 ~ gb3 gb3 ~ ab3!2 ~ bb3 bb3@2 ab2@2 eb2@2 ab2@2 ~ gb3 gb3 ~ ab3!2 ~ bb3 bb3@2 gb2@2 db2@2 gb2@2 ~ f3 f3@2 gb3!2 ~ db3 db3@2 gb2@2 db2@2 gb2@2 ~ f3 f3@2 gb3!2 ~ db3 db3@2 ab2@2 eb2@2 ab2@2 ~ gb3 gb3 ~ ab3!2 ~ bb3 bb3@2 ab2@2 eb2@2 ab2@2 ~ gb3 gb3 ~ ab3!2 ~ bb3 bb3@2 gb2@2 db2@2 gb2@2 ~ f3 f3@2 gb3!2 ~ db3 db3@2 gb2@2 db2@2 gb2@2 ~ f3, ~@7 d4@121]/8",
  U: "gb3 ~ ab3!2 ~ bb3 bb3@2 gb2@2 db2@2 bb2@2 ~ bb3",
  V: "[bb3@2 b3!2 ~ db4 db4@2 eb3 ~ eb3@2 bb3@2 eb4@5 bb3 eb4!4 ab2@2 eb2@2 ab2@2 ~ gb3]/2",
  W: "f3@2 gb3!2 ~ db3 db3@2 ~@8",
})).s("gm_electric_guitar_muted").gain(0.24).pan(0.7)

// chords · pad metallic
const pad_metallic = note("<~@20 A ~@23 B@5 ~@45>".pickRestart({
  A: "[g4,a4,d5]@9 ~@7", B: "[~@15 ab4@39 [db5,ab5,db6]@20 ~@6, ~@15 eb4@52 ~@13, ~@54 ab4 ~@25]/5",
})).s("gm_pad_metallic").gain(0.05).pan(1)

// other · glockenspiel
const glockenspiel = note("<~@44 A B C D E F G H I ~@41>".pickRestart({
  A: "~@8 gb6 ~@7", B: "eb6 ~@11 b5 ~ db6 ~", C: "eb6 ~@3 gb6 ~@3 db6 ~@7", D: "bb5 ~@15", E: "~@12 eb6 ~ f6 ~",
  F: "gb6 ~ bb6 ~@5 eb6 ~ f6 ~ gb6 ~ bb6 ~", G: "~@4 gb6 ~@3 ab6 ~@5 f6 ~", H: "~@4 db6 ~@3 g6 ~@5 e6 ~",
  I: "~@4 c6 ~@11",
})).s("gm_glockenspiel").gain(0.37)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@23 A B ~@22 C@2 ~@10 D@3 ~@32>".pickRestart({
  A: "~@8 bb3@2 d4 f4 d4@2 bb3 g3", B: "bb3@3 ~@5", C: "[~@14 db5@6 gb4@4 gb4@5 ~@3, ~@2 gb4@3 ~@3]/2",
  D: "[~@8 [d3,a3]@31 ~@9]/3", // D5
})).s("gm_electric_guitar_jazz").gain(0.4).pan(0.9)

// other · pad bowed
const pad_bowed = note("<~@24 A B ~ C@3 ~@64>".pickRestart({
  A: "~@15 db5", B: "c5 d5@6 ~@9", C: "[g5 d6 a5@4 ~@9 a6@23 ~@10]/3",
})).s("gm_pad_bowed").gain(0.21).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  A B A B C D E D E D E D E D E D E D E F E D E D E D E D E D E D G D E D E D E D H D E D E D E D E D E D E D E D E D E
  D E I E D E D E D E@2 J K E L D E D G D E D E D E D@3 E D E D E D M
>`.pickRestart({
  A: "x!4 ~@3 x ~@2 x ~@5", B: "x!4 ~@3 x ~@2 x ~@4 x", C: "x!4 ~@3 x!5 ~@3 x", D: "~@2 x ~@5 x!4 ~@3 x",
  E: "~@2 x ~@4 x!5 ~@3 x", F: "~@2 x ~@5 x!4 ~@2 x ~", G: "~@2 x!2 ~@4 x!4 ~@3 x", H: "~@2 x!2 ~@3 x!5 ~@3 x",
  I: "~@2 x ~@3 x ~ x!4 ~@3 x", J: "~@2 x ~@4 x ~ x!3 ~@3 x", K: "~@2 x ~@2 x ~ x ~ x!3 ~@3 x",
  L: "~@2 x ~@2 x ~ x!5 ~@3 x", M: "~ x ~@6",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<~ A ~ A ~ B@54 ~ B ~ B@15 ~ B@7 ~ B@7 ~>".pickRestart({
  A: "~@15 x", B: "~@7 x ~@8",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  A@4 B A@23 C A@3 D A@2 E F A@3 G A@3 G A@8 G A G A G A H ~ I A@6 E J A@7 K A@6 E F A G A G A G A L
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x!2 ~@2 x ~", C: "~@4 x!2 ~@6 x ~@3", D: "~ x ~@2 x ~@2 x ~@4 x ~@3", E: "~@2 x ~@3 x!2",
  F: "~ x ~ x ~@2 x!2 ~@4 x ~@3", G: "~ x ~@2 x ~@7 x ~@3", H: "~ x ~@2", I: "~@3 x", J: "~ x ~@3 x!3 ~@4 x ~@3",
  K: "~ x ~@2 x ~ x!2 ~@4 x ~@3", L: "~ x ~@2 x ~@11",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~@20 [~@7 x ~@8] ~@73>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  A B A B C D A D A D A D A D A D A D A E C D F D A D A D G D A D A D A H A D A D A D A D A D A D A D C D A D A D A D A
  C A I D A D A D A E J D A D A D A D A D A D A D A H A D A D A D A D K
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!4 ~ x!3", D: "x!3 ~ x!4", E: "x!3 ~@2 x!2 ~", F: "x!6 ~ x", G: "x!2 ~ x ~ x!3",
  H: "x!3 ~ x!3 ~", I: "x!3 ~@2 x!3", J: "~ x ~ x!5", K: "x!3 ~@5",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@20 [~ x ~@6] ~@19 [~@5 x ~@10] ~@28 [~@3 x ~ x!3 ~@8] ~@24>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B C B ~ B ~ B ~ B C B ~ B ~ B ~ B D B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B
  ~@4 B ~ B ~ B ~ E D B ~ B ~ B ~ B ~ B ~ B ~ B ~ B D B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~ x", D: "~@5 x ~@10", E: "~@3 x!2 ~@2 x",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@19 [~@15 x] x ~@73>").gain(0.56)

// … 24 more lines

More by Battisti