Strudelify

Un Altra Te

Eros Ramazzotti

KeyD♭ majorTempo89 bpm
0:00/0:00
// Un Altra Te — Eros Ramazzotti
// 89 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: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(89/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@3 A B C@2 D@2 E F G@2 H I J K E L G@2 H M J N E L G O P Q R S J T U V J W X Y Z AA AB AC AD AE AF AG AF AG AF AG AF
  AG AH AI AJ AK AL AM AN AO AL AM AP AQ AR AA AB AC AD AS AT AF AG AF AG AF AG AF AU AV AW AV AX AV AX AY AZ BA BB BC
  BD BE BF BG BH BI ~ BJ@3
>`.pickRestart({
  A: "~@7 g3", B: "c3@3 f3", C: "[gb3@7 ab2@9]/2", D: "[bb2@19 ~@13]/2", E: "gb1@4 ~@2 gb1 ~ gb1@4 ~@4",
  F: "gb1@5 ~ gb1 ~ gb1@4 ~@4", G: "f1@4 ~@2 f1 ~ f1@4 ~@4", H: "eb1@4 ~@2 eb1 ~ eb1@5 ~@3",
  I: "ab1@4 ~@2 ab1 ~ ab1@5 ~@3", J: "bb1@4 ~@2 bb1 ~ bb1@4 ~@4", K: "bb1@7 ~", L: "gb1@4 ~@2 gb1 ~ gb1@5 ~@3",
  M: "ab1@5 ~ ab1 ~ ab1@4 ~@4", N: "bb1@3 ~ c2 db2 ab1@2 bb1@4 ab1@4", O: "f1@4 ~@2 f1 ~ f1@6 ~@2",
  P: "eb1@4 ~@2 eb1 ~ eb1@6 ~@2", Q: "ab1@4 ~@2 ab1 ~ ab1@6 ~@2", R: "db2@4 ~@2 db2 ~ db2@4 f2 eb2 bb1@2", S: "db2 ~@3",
  T: "bb1@5 ~ bb1@2 eb2@2 f2@2 eb2@2 bb1@2", U: "db2@4 ~@2 db2 ~ db2@5 ~@3", V: "db2@4 ~@2 db2 ~ db2@4 c2@4",
  W: "bb1@2 ~ bb1 eb2 f2 eb2 bb1", X: "db2@4 ~@2 db2 ~ db2@4 ~@4", Y: "db2@5 ~ ab1 ~ bb1@4 db2@4",
  Z: "eb2@4 ~@2 eb2 ~ eb2@4 ~@4", AA: "eb2@5 ~ bb1 ~ eb2@4 f2@4", AB: "gb2@4 ~@2 gb2 ~ gb2@4 f2@4",
  AC: "eb2@4 ~@2 eb2 ~ eb2@8", AD: "eb2@3 eb2 f2 gb2 eb2 bb1", AE: "ab1@6 ab1 ~ ab1@4 ab1@4",
  AF: "db2@4 f2@2 ab2@2 ab1@4 ~@2 bb1 ~", AG: "eb2@3 f2 eb2@2 bb1 ab1", AH: "eb2@5 ~ f2@6 f1@4",
  AI: "bb1@5 ~ bb1 ~ c2@2 db2@2 bb1@2 f1@2", AJ: "eb1@3 ~ eb1 ~ ab1 ~ ab1@5 ~ ab1 ~", AK: "ab1@2 ~ f2 eb2 bb1 ab1@2",
  AL: "bb1@4 ~@2 bb1 ~ bb1@7 ~", AM: "bb1@6 db3 eb3 bb2@8", AN: "db2@4 ~@2 db2 ~ db2@7 ~", AO: "db2@2 ~ ab1 db2@2 c2@2",
  AP: "db2@4 ~@2 db2 ~ db2@8", AQ: "db2@5 ~ ab1 ~ bb1@2 db2@2 f2@4", AR: "eb2@4 ~@2 eb2 ~ eb2@7 ~",
  AS: "ab1@5 ~ ab1 ~ ab1@8", AT: "ab1@2 f2 ab2 bb2 f2 ab2@2", AU: "eb2@3 f2 eb2 bb2 eb3@2",
  AV: "eb2@4 g2@2 bb2@2 bb1@4 ~@2 c2 ~", AW: "f2@3 g2 f2@2 c2 bb1", AX: "f1@3 g2 f2@2 c2 bb1",
  AY: "eb2 ~ eb2@2 g2@2 bb2@2 bb1@4 ~@2 c2 ~", AZ: "f1@3 f2 c3 f3 c3 f2", BA: "f2@5 ~ g2@6 g2@4",
  BB: "c2@5 ~ c2 ~ d2@2 eb2@2 c2@2 g2@2", BC: "f2@5 ~ c2 ~ bb1@5 ~ bb1 ~", BD: "bb1@5 ~ bb1 ~ bb1@4 bb1@4",
  BE: "ab1@4 ~@2 ab1 ~ ab1@7 ~", BF: "g1@5 ~ g1 ~ g1@7 ~", BG: "f1@5 ~ f1 ~ f1@8", BH: "c2@3 bb1", BI: "ab1",
  BJ: "[~ f1@34 ~@13]/3",
})).s("gm_fretless_bass").gain(0.44)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@33 A@2 ~@2 A@2 B C D@2 ~@20 A@2 B C D@2 ~@12 E F@2 G@2 H@2 I@3 J@3 ~@9
>`.pickRestart({
  A: "~ [eb4,ab4] ~ [eb4,ab4]", B: "~@7 db5", C: "c5 ab4 eb4@2 gb5@2 db5@2", D: "[eb5@3 ~]/2", E: "~@14 bb4!2",
  F: "[g5@5 ~ g5 eb5 f5@3 g5 ~@2 c5@12 ~@2 bb4 c5 eb5 f5]/2",
  G: "[g5@4 ab5@2 g5@2 bb5@2 d5@4 eb5@10 f5 eb5 g5 eb5@2 c5 bb4 g4]/2",
  H: "[bb4@5 ~ [eb4,f4] eb4 d4@2 bb4@2 d4@2 c4@4 ab4@8 ~@2 c5@3 eb5]/2", // Ebsus2
  I: "[bb4@5 ~ c5 eb5 d5@2 bb4@2 g4@2 c5@24 d5@10]/3", J: "[eb5@11 f5@11 ~@2]/3",
})).s("gm_overdriven_guitar").gain(0.27).pan(0.2)

// chords · pad halo · "HALO PAD"
const pad_halo = note("<A B@2 C@2 D@2 E@2 ~@24 F G@2 H F G@2 H I J@4 K ~@18 L M I N O N P Q R ~@29>".pickRestart({
  A: "~@3 [eb3,c4], [f3,ab3,db4]@3 ~, ~@5 ab1@3", B: "[gb1,db3,gb3,bb3,db4]/2", C: "[f1,f3,ab3,eb4]/2",
  D: "[eb1 ab1, [eb3,ab3,bb3,db4]]/2", E: "[[f3,bb3,db4]@13 ~@3, bb1@5 ~@3]/2", F: "bb3 c4", G: "db4 eb4", H: "f4",
  I: "[eb4,gb4] [f4,ab4]", J: "[gb4 db4 eb4@2, bb4]/4", K: "db4 eb4, ab4", L: "db3 eb3", M: "f3", N: "[gb4,bb4]",
  O: "[db4,gb4]", P: "[eb4,gb4]", Q: "[gb4,ab4]", R: "[eb4,ab4]",
})).s("gm_pad_halo").gain(0.26).pan(0.4)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@40 A B@2 C@2 D@2 E F G F E F G H I J K@2 ~@2 L M@2 ~@2 A B@2 C@2 N O@2 E F G F E F G H P Q R Q S Q R T U V W@2 X Y Z
  AA AB AA AC@3
>`.pickRestart({
  A: "~@13 [f4,g4] [a4,b4,c5,d5] [e5,f5,g5,a5]", B: "[gb6 [f6,ab6] [gb6,bb6]@2, eb6, b5 ~@31]/2",
  C: "[[db6,bb6] [bb5,eb6], gb6]/2", D: "[[eb6,gb6,bb6]@3 [bb5,db6]@3 [c6,eb6]@2, ~@3 ab5@5]/2",
  E: "[f5,db6] [eb5,c6], ab5", F: "[db5,gb5,bb5]", G: "[f5,ab5,db6] [eb5,ab5,c6]",
  H: "[db5,gb5,bb5]@12 [ab5,bb5] [db5,eb5,gb5] [gb4,ab4,bb4] [db4,eb4]", I: "[db5,gb5,bb5]@3 [c5,f5,a5]@5, bb3 ~@15",
  J: "[db5,f5,bb5]", K: "[[bb4,eb5,gb5]@3 [c5,eb5,ab5]@9 [db5,gb5,bb5]@2 [c5,eb5,ab5]@2]/2",
  L: "~@3 db6@2 bb5@2 ab5, ~@6 c6 ~@9", M: "[bb5 ab5 f5@4 eb5@2 f5@2 ab5@2 f5 eb5 db5@8 ~@10]/2", N: "[eb6,gb6,bb6]",
  O: "[[bb5,db6] [c6,eb6], ab5]/2", P: "[g5,eb6] [f5,d6], bb5, bb3 ~@15", Q: "[eb5,ab5,c6]",
  R: "[g5,bb5,eb6] [f5,bb5,d6]", S: "[g5,eb6] [f5,d6], bb5",
  T: "[eb5,ab5,c6]@12 [bb5,c6] [eb5,f5,ab5] [ab4,bb4,c5] [eb4,f4]", U: "[eb5,ab5,c6]@3 [d5,g5,b5]@5, c4 ~@15",
  V: "[eb5,g5,c6]", W: "[[c5,f5,ab5]@3 [d5,f5,bb5]@9 [c5,eb5,ab5]@2 [d5,f5,bb5]@2]/2", X: "[c5,eb5,ab5]",
  Y: "[bb4,d5,f5]", Z: "[ab4,c5,eb5]", AA: "[g4,bb4,d5,f5]", AB: "[ab4,bb4,c5,eb5]",
  AC: "[~ [f4,ab4,c5,eb5]@34 ~@13]/3", // Fm7
})).s("gm_rock_organ").gain(0.21).pan(0.4)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@8 A@2 B@5 C D@2 E F@2 G@2 H@3 E F@2 G@2 I@2 J@8 K@7 L M@3 L N@2 O P Q@3 R@3 S@7 T@3 U@2 L M@3 L V@3 W X@3 W Y@2 Z AA
  AB AC AD AE AF ~@6
>`.pickRestart({
  A: "[~@15 gb3, ~@14 db4@7 ~ db4@4 ~@2 db4@4, ~@14 gb4@5 ~ gb4@5 ~ gb4@5 ~, ~@15 [gb3,bb3]@7 ~@2 gb3@4 ~@4, ~@4 gb2@3 ~]/2", // Gb
  B: "[~@10 gb4@2 db4@2 ~@16 eb4@15 ~@3 db3@2 ~@4 db4@4 eb4@4 ~@8 eb4@8 ~@2, db4@4 gb4@4 gb3@6 ~ [f3,ab3]@5 ab3@7 ~ ab3@13 ~@6 [gb3,bb3]@5 ab3@14 ~@2 ab3@10 ~@2, ~@2 bb3@4 db4@5 ~@3 [c4,eb4]@6 ~@4 bb3@18 ~@4 [db4,eb4]@6 ~@10 db4@8 ~@10, ~@8 f2@3 ~@13 gb2@2 ~@6 ab2@7 ~, ~@25 db3@7 ~ eb3@6 ~]/5", // Fm Gb Cm Dbsus2
  C: "~@2 db4 ~@2 ab3 ~ bb3, bb2 ~, ~ f3@4 ~ f3@2, ~@3 c4@3 ~@2",
  D: "[bb3@7 ~@23 gb3@2, ~@15 [bb3,db4]@7 db4@4 ~@2 db4@4, ~@15 gb4@5 gb4@5 ~ gb4@5 ~, ~@4 gb2@3 ~, ~@16 gb3@7 ~ gb3@4 ~@4]/2", // Bbm
  E: "~@5 gb4 db4 ~, db4@2 gb4@2 gb3@3 ~, ~@2 bb3@4 db4@5 ~@5",
  F: "[~@14 eb4@15 ~@3, f2@3 ~ bb3@9 ~@3, ~@4 ab3@7 ~ ab3@13 ~@7]/2",
  G: "[~@3 db4@2 eb4@2 ~@4 eb4@4 ~, gb2@2 ab3@7 eb3@6 ~, ~ db3@7 ab2@7 ~, ~@7 db4@4 ~@5, ~@10 ab3@5 ~]/2",
  H: "[~@4 db4@2 ~@4 ab3@2 ~@2 bb3@9 ~@23 gb3@2, bb2@8 ~@23 [gb3,bb3]@7 ~@2 gb3@4 ~@4, ~@2 f3@8 ~@2 f3@8 ~@10 gb4@5 ~ gb4@5 ~ gb4@5 ~, ~@6 c4@6 ~@18 db4@7 ~ db4@4 ~@2 db4@4, ~@8 gb2@3 ~]/3", // Gb
  I: "[~@4 db4@2 ~@4 ab3@2 ~@2 db4@17 ~, db3 ~@3, ~ ab3@4 ~ f3@10, ~@3 eb4@3 ~@10]/2",
  J: "[~@31 f3, bb3@6 ~@2 c4@8 db4@8 eb4@8 db4@7 ~ eb4@8 f4@8 f4@7 ~ bb3@8 c4@8 db4@8 eb4@8 db4@7 ~ eb4@8 f4@8 f4@7 ~, ~@2 f3@4 f3@4 f3@4 f3@4 f3@4 f3@4 f3@4 f3@6 f3@7 ~ f3@8 f3@8 f3@6 f3@4 f3@4 f3@4 f3@4 f3@4 f3@4 f3@4 f3@6 f3@7 ~ f3@8 f3@8 ~@4, ~@4 bb2@8 bb2@8 bb2@7 ~ bb2@4 ~@2 ab3@4 ab3@4 ab3@4 ab3@4 ab3@4 ab3@4 ab3@7 ~@3 bb2@8 bb2@8 bb2@7 ~ bb2@4 ~@2 ab3@4 ab3@4 ab3@4 ab3@4 ab3@4 ab3@4 ab3@6]/8",
  K: "[~@46 ab4 ~@6 c3 ~ c3, eb3@4 eb4@4 gb3@4 eb4@7 ~ eb4@5 ~@3 eb4@4 ~@4 gb4@5 ~@3 gb4@4 ~@4 eb4@6 ~@2 eb4@5 ~@3 eb4@5 ~@3 eb4@4 ~@2 db4@4 ~@2 c4@4 ~@3 [db4,f4]@9 ~@8, ~ bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 db4@2 bb3@2 db4@2 bb3@2 db4@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 ~ eb4@2 ~@4 [ab2,db3]@4 ab2@4, ~@16 gb3@4 ~@4 gb3@6 ~@2 gb3@4 ~@4 gb3@4 ~@4 gb3@4 ~@4 gb3@4 ~@4 gb3@4 ~@4 gb3@6 ~@2 ab3@4 ~@2 ab3@4 ab3@4 ~ ab3@5 f3@5 ~@3 eb3@4, ~@51 ab3@3 ~@2]/7", // Db Db5
  L: "~@3 db4@4 ~, eb2@15 ~, ~ f3@3 ~@4, ~@2 gb3@5 ~",
  M: "[db3@2 f3 ~@8 db4@3 ~@7 c3 ~ c3, ~@6 ab3@4 c4@4 eb3@15 ~@3 [ab2,db3]@8 ab2@8, ~@8 ab2@4 ab3@4 ~@2 f3@4 ~@9 ab3@5 f3@5 ~@3 eb3@4, ~@20 gb3@9 ~@2 [db4,f4]@9 ~@8, ~@19 ab3@3 ~@2]/3", // Db5 Db
  N: "[db3@2 f3 ~@8 db4@4 ~, ~@6 ab3@4 c4@4 eb3@15 ~@3, ~@4 ab2@2 ab3@2 ~ db3@6 ~, ~@20 gb3@9 ~@3]/2",
  O: "[gb3,db4]@6 [f3,c4]@9 ~", P: "~ f3 ~ f3 ~@2 bb3@2, bb2@7 ~, ~ db4 c4 ~, ~@5 f3@3",
  Q: "[~@3 bb3@2 ~@6 eb3 [eb3,gb3,bb3]@2 ~@2 bb2@8, ~@2 eb3@5 ~@5 ab3@4 eb4@4 ~@10 f4@18, ~@4 gb3@5 ~ c4@4 eb3@6 ab3@4 ~@4 [eb3,ab3,c4]@3 eb4@15 ~@2, ~@18 c4@5 ~@8 [bb3,db4]@17]/3", // Ebm Ab Bbm
  R: "[~@16 [db3,ab3]@21 ~@11, ~@15 [db4,eb4,f4]@22 ~@11]/3", // Db5 Db
  S: "[~@55 db4, bb3@8 c4@8 db4@8 eb4@8 db4@7 ~ eb4@8 f4@8 f4@7 ~ eb3@4 ~@4 gb3@4 ~@4 gb3@4 ~@4 gb3@6 ~@2 gb3@4 ~@4 gb3@4 ~@4, ~@2 f3@4 f3@4 f3@4 f3@4 f3@4 f3@4 f3@4 f3@6 f3@7 ~ f3@8 f3@8 f3@6 ~@2 eb4@4 ~@4 eb4@7 ~ eb4@5 ~@3 eb4@4 ~@4 gb4@5 ~@3 gb4@4, ~@4 bb2@8 bb2@8 bb2@7 ~ bb2@4 ~@2 ab3@4 ab3@4 ab3@4 ab3@4 ab3@4 ab3@4 ab3@7 ~ bb3@4 bb3@4 bb3@4 bb3@4 bb3@4 bb3@4 bb3@4 db4@4 bb3@4 db4@4 bb3@4 ~@2]/7",
  T: "[~@23 ab3, gb3@4 eb4@6 ~@2 eb4@5 ~@3 eb4@5 ~@3 eb4@4 ~@4 ab3@4 ~@4 gb3@4, ~ bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 gb3@2 db4@2 db4@2 ~, ~@4 gb3@2 ~@2 gb3@2 ~@2 gb3@3 ~ db3@2 ~@2 db3@2 ~@2]/3",
  U: "[~@12 eb3@3 ~@11 c3@2 ~@2 c3@2, eb3@4 ab3@4 c4@4 ~@3 [db4,f4]@9 ~@8, ~@2 c4@4 eb3@4 ab3@4 ~ ab3@5 f3@5 ~@3 eb3@4, ~@2 [ab2,db3] ab2, ~@11 ab3@3 ~@2]/2", // Db Db5
  V: "[db3@2 f3 ~@8 db4@3 ~@7 d3 ~ d3, ~@6 ab3@4 c4@4 eb3@15 ~@3 [bb2,eb3]@8 bb2@8, ~@8 ab2@4 ab3@4 ~@2 f3@4 ~@9 bb3@5 g3@5 ~@3 f3@4, ~@20 gb3@9 ~@2 [eb4,g4]@9 ~@8, ~@19 bb3@3 ~@2]/3", // Eb5 Eb
  W: "~@3 eb4@4 ~, f2@15 ~, ~ g3@3 ~@4, ~@2 ab3@5 ~",
  X: "[eb3@2 g3 ~@8 eb4@3 ~@7 d3 ~ d3, ~@6 bb3@4 d4@4 f3@15 ~@3 [bb2,eb3]@8 bb2@8, ~@8 bb2@4 bb3@4 ~@2 g3@4 ~@9 bb3@5 g3@5 ~@3 f3@4, ~@20 ab3@9 ~@2 [eb4,g4]@9 ~@8, ~@19 bb3@3 ~@2]/3", // Eb5 Eb
  Y: "[eb3@2 g3 ~@8 eb4@3 ~@2, ~@6 bb3@4 d4@4 f3@15 ~@3, ~@4 bb2@2 bb3@2 ~ g3@2 ~@5, ~@20 ab3@9 ~@3]/2",
  Z: "[ab3,eb4]@6 [g3,d4]@9 ~", AA: "~ g3 eb4 g3 ~@2 c4@2, c3, ~@2 d4 ~, ~@5 g3@3", AB: "[ab3,eb4]@5 ~ [bb3,f4]@10",
  AC: "~@2 bb3 ~@2 eb3 f3 g3, ~ f4@2 ab3@3 ~@2, ~@2 eb4 ~", AD: "c3@5 eb3@2 eb3", AE: "eb3 f3 bb2@8 eb3@2 d3@2 bb2@2",
  AF: "c3@4 g3@2 g3@9 ~",
})).s("gm_electric_guitar_clean").gain(0.26).pan(0.8)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@8 A B@8 C@8 D@8 E@4 F@4 G@2 H G@2 I J K L@2 J K L@2 M N O P ~@2 Q@2 F@4 G@2 H G@2 R S J K L@2 J K L@2 T U V@2 T U
  V@2 W X Y Z AA@5 AB@4
>`.pickRestart({
  A: "~@15 [db3,gb3]", // Gb5
  B: "[[bb3,db4,gb4]@4 [db3,gb3]@2 [db3,gb3]@2 [gb3,bb3]@2 gb3@2 gb3@2 gb3@2 ~@2 db3@2 [gb3,bb3]@2 gb3@2 [db3,gb3]@2 gb3@2 gb3@2 db3@2 c3@2 [c3,f3]@2 [c3,f3]@2 [c3,f3]@2 [c3,f3]@2 c3@2 ~@4 c3@2 [c3,f3]@2 f3@2 f3@2 [c3,f3]@2 [c3,f3]@2 [c3,f3]@2 [c3,f3,f4]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,eb3,bb3]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,bb3,db4]@2 c3@2 c3@2 [eb3,ab3]@2 ~@2 c3@2 [c3,eb3,ab3]@4 [c3,eb3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3,bb3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3,bb3]@2 bb2@2 bb2 ~ [f3,bb3,db4,f4]@15 [db3,gb3], ~@2 [db4,gb4]@3 [bb3,db4,gb4]@2 [bb3,db4,gb4]@3 [db4,gb4]@3 ~@10 f3@2 ~@10 bb3@2 [bb3,db4,gb4]@2 ~@3 c4@3 c4@5 [db4,f4]@3 [db4,f4]@3 ~@8, ~@2 bb3@2 db3@3 db3@2 ~ db3@2 ~ [db3,bb3,db4,gb4]@2 gb3@2 ~ [ab3,eb4,f4]@3 [f3,ab3,eb4,f4]@2 [ab3,eb4,f4]@3 [ab3,eb4,f4]@3 [ab3,eb4,f4]@2 [ab3,eb4]@3 [db4,gb4]@3 ~@5 gb4@8 ~@14, ~@8 gb3@2 ~ bb3@2 ~@2 [bb3,db4,gb4]@3 ~@4 c3@2 ~@2 c3@2 ~@11 [eb3,gb4]@3 c3@2 ~@10 [f3,bb3]@2 ~@8, ~@86 [eb3,ab3]@4 ~@4 ab3@6 ~@2 bb3@4 ~@5 bb2@15 ~@2]/8", // Gb Gb5 Gb Gb5 F5 Eb5 Bbm Ab5 …
  C: "[[bb3,db4,gb4]@4 [db3,gb3]@2 [db3,gb3]@2 [gb3,bb3]@2 gb3@2 gb3@2 gb3@2 ~@2 db3@2 [gb3,bb3]@2 gb3@2 [db3,gb3]@2 gb3@2 gb3@2 db3@2 c3@2 [c3,f3]@2 [c3,f3]@2 [c3,f3]@2 [c3,f3]@2 c3@2 ~@4 c3@2 [c3,f3]@2 f3@2 f3@2 [c3,f3]@2 [c3,f3]@2 [c3,f3]@2 [c3,f3,f4]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,eb3,bb3]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,bb3,db4]@2 c3@2 c3@2 [eb3,ab3]@2 ~@2 c3@2 [c3,eb3,ab3]@4 [c3,eb3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3,bb3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3,bb3]@2 bb2@2 bb2 ~ [f3,bb3,db4,f4]@8 [bb2,f3,bb3]@4 [c3,eb3,ab3,c4]@3 [db3,gb3], ~@4 [db4,gb4]@6 [bb3,db4,gb4]@4 [bb3,db4,gb4]@6 [db4,gb4]@6 ~@20 f3@4 ~@20 bb3@4 [bb3,db4,gb4]@4 ~@6 c4@6 c4@10 [db4,f4]@6 [db4,f4]@6 ~@8 db4 ~@7, ~@2 bb3@2 db3@3 db3@2 ~ db3@2 ~ [db3,bb3,db4,gb4]@2 gb3@2 ~ [ab3,eb4,f4]@3 [f3,ab3,eb4,f4]@2 [ab3,eb4,f4]@3 [ab3,eb4,f4]@3 [ab3,eb4,f4]@2 [ab3,eb4]@3 [db4,gb4]@3 ~@5 gb4@8 ~@14, ~@8 gb3@2 ~ bb3@2 ~@2 [bb3,db4,gb4]@3 ~@4 c3@2 ~@2 c3@2 ~@11 [eb3,gb4]@3 c3@2 ~@10 [f3,bb3]@2 ~@8, ~@86 [eb3,ab3]@4 ~@4 ab3@6 ~@2 bb3@4 ~@5 bb2@8 ~@9]/8", // Gb Gb5 Gb Gb5 F5 Eb5 Bbm Ab5 …
  D: "[[bb3,db4,gb4]@4 [db3,gb3]@2 [db3,gb3]@2 [gb3,bb3]@2 gb3@2 gb3@2 gb3@2 ~@2 db3@2 [gb3,bb3]@2 gb3@2 [db3,gb3]@2 gb3@2 gb3@2 db3@2 c3@2 [c3,f3]@2 [c3,f3]@2 [c3,f3]@2 [c3,f3]@2 c3@2 ~@4 c3@2 [c3,f3]@2 f3@2 f3@2 [c3,f3]@2 [c3,f3]@2 [c3,f3]@2 [c3,f3,f4]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,eb3,bb3]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,eb3]@2 [bb2,bb3,db4]@2 c3@2 c3@2 [eb3,ab3]@2 ~@2 c3@2 [c3,eb3,ab3]@4 [c3,eb3]@2 [db3,f3]@2 [db3,f3]@2 [db3,f3,ab3]@2 [db3,f3]@2 [db3,f3]@2 [db3,f3,ab3]@2 db3@2 db3 ~ [f3,ab3,db4,f4]@15 ~, ~@2 [db4,gb4]@3 [bb3,db4,gb4]@2 [bb3,db4,gb4]@3 [db4,gb4]@3 ~@10 f3@2 ~@10 bb3@2 [bb3,db4,gb4]@2 ~@3 c4@3 c4@3 ~@2 [db4,f4]@3 [db4,f4]@3 ~@8, ~@2 bb3@2 db3@3 db3@2 ~ db3@2 ~ [db3,bb3,db4,gb4]@2 gb3@2 ~ [ab3,eb4,f4]@3 [f3,ab3,eb4,f4]@2 [ab3,eb4,f4]@3 [ab3,eb4,f4]@3 [ab3,eb4,f4]@2 [ab3,eb4]@3 [db4,gb4]@3 ~@5 gb4@6 ~@16, ~@16 gb3@4 ~@2 bb3@4 ~@4 [bb3,db4,gb4]@6 ~@8 c3@4 ~@4 c3@4 ~@22 [eb3,gb4]@6 c3@4 ~@23 db3@15 ~@2, ~@43 [eb3,ab3]@2 ~@2 ab3@3 ~ ab3@2 ~ [f3,ab3]@2 ~@8]/8", // Gb Gb5 Gb Gb5 F5 Eb5 Bbm Ab5 …
  E: "[[bb3,db4]!2 [f3,bb3,db4]!2 [f3,bb3]!2 [f3,bb3,db4]!2 [f3,bb3]!2 [f3,bb3,db4]!2 [f3,bb3]!4 [f3,ab3]!8 [f3,ab3,db4]!2 [f3,ab3]!2 [f3,ab3,db4]!2 [f3,ab3,db4,f4]!2, [f3,f4] f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 ~, ~@2 db4 ~ db4 ~ db4!2 db4!4 ~ db4 ~@2]/4", // Bbm Bb5 Bbm Bb5 Bbm Bb5 Fm Db …
  F: "[[bb3,db4]@2 [bb3,db4]@2 [f3,bb3,db4]@2 [f3,bb3,db4]@2 [f3,bb3]@2 [f3,bb3]@2 [f3,bb3,db4]@2 [f3,bb3,db4]@2 [f3,bb3]@2 [f3,bb3]@2 [f3,bb3,db4]@2 [f3,bb3,db4]@2 [f3,bb3]@2 [f3,bb3]@2 [f3,bb3]@2 [f3,bb3]@2 [f3,ab3]@2 [f3,ab3]@2 [f3,ab3]@2 [f3,ab3]@2 [f3,ab3]@2 [f3,ab3]@2 [f3,ab3]@2 [f3,ab3]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3]@2 [f3,ab3]@2 [f3,ab3,db4]@2 [f3,ab3,db4]@2 [f3,ab3,db4,f4]@2 [f3,ab3,db4,f4] ~, [f3,f4] f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 f4@2 ~, ~@2 db4 ~ db4 ~ db4!2 db4!4 ~ db4 ~@2]/4", // Bbm Bb5 Bbm Bb5 Bbm Bb5 Fm Db …
  G: "[bb3,eb4]!2 [eb3,bb3,eb4]!2 [eb3,bb3]!2 [eb3,bb3,eb4]!2, [eb3,gb4] gb4@2 gb4, ~@2 eb4 ~", // Eb5 Ebm
  H: "[bb3,db4]!2 [gb3,bb3,db4]!2 [gb3,bb3]!2 [gb3,bb3,db4]!2, [gb3,gb4] gb4@2 gb4, ~@2 db4 ~", // Bbm Gb
  I: "[ab3,db4]!2 [eb3,ab3,db4]!2 [eb3,ab3]!2 [eb3,ab3,c4]!2, [eb3,ab4] ab4@2 ab4, ~@2 db4 ~", // Db5 Dbsus2 Ab5 Ab Ab5
  J: "[ab3,db4,f4]!2 [ab3,db4]!2 [eb3,ab3,c4,ab4]!4, f3 [f3,f4] ~@2", // Db Db5 Ab F
  K: "[eb3,bb3,eb4]!2 [bb3,eb4,gb4]!2 [eb3,bb3,eb4,gb4]!4, gb4 eb3 ~@2", // Eb5 Ebm
  L: "[[f3,ab3,db4]!2 [ab3,db4,f4]!2 [eb3,ab3,c4]!2 [ab3,c4,ab4]!2 [bb3,eb4,gb4]!8, f4 f3 ab4 eb3@2 eb3!3]/2", // Db Ab Ebm
  M: "[gb3,bb3,db4,gb4]@2 [bb3,db4] [gb3,bb3,db4,gb4]@3 [f3,a3,c4,f4]@3 [a3,c4,f4] [a3,c4,f4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2, ~@9 f3@3 f4@4", // Gb Bbm Gb F
  N: "[bb3,db4]!4 [f3,bb3]!2 [bb3,db4]!2, [f3,f4] f4@2 ~, ~ f3 db4 [f3,f4]", // Bbm Bb5 Bbm F
  O: "[bb3,eb4]!2 [eb3,bb3,eb4]@2 [eb3,ab3]!2 ab3!2, [eb3,gb4] gb4@2 ~, ~@2 c4 [eb3,c4,ab4]", // Eb5 Ab5 Ebm Ab
  P: "ab3!2 [eb3,ab3,c4,ab4]@2 [gb3,bb3,db4,gb4]@2 [eb3,ab3,c4,ab4]@2, [eb3,c4,ab4] ~@3", // Ab Gb Ab
  Q: "[~ [ab3,db4]!2 [ab3,db4,f4] [ab3,db4,f4]!2 [f3,ab3,db4,f4] [f3,ab3,c4,f4], ~ f3@5 ~@2, ~ f4@2 ~@5]/2", // Db5 Db Fm
  R: "[ab3,db4]!2 [eb3,ab3,db4]!2 [eb3,ab3]!2 [eb3,ab3,db4]!2, [eb3,ab4] ab4@2 ab4, ~@2 db4 ~", // Db5 Dbsus2 Ab5 Dbsus2 Ab5
  S: "[ab3,c4]!2 [eb3,ab3,c4]!2 [eb3,ab3]!2 [eb3,ab3,c4]!2, [eb3,ab4] ab4@2 ab4, ~@2 c4 ~", // Ab Ab5 Ab Ab5
  T: "[bb3,eb4,g4]!2 [bb3,eb4]!2 [f3,bb3,d4,bb4]!4, g3 [g3,g4] ~@2", // Eb Eb5 Bb G
  U: "[f3,c4,f4]!2 [c4,f4,ab4]!2 [f3,c4,f4,ab4]!4, ab4 f3 ~@2", // F5 Fm
  V: "[[g3,bb3,eb4]!2 [bb3,eb4,g4]!2 [f3,bb3,d4]!2 [bb3,d4,bb4]!2 [c4,f4,ab4]!8, g4 g3 bb4 f3@2 f3!3]/2", // Eb Bb Fm
  W: "[ab3,c4,eb4,ab4]@2 [c4,eb4] [ab3,c4,eb4,ab4]@3 [g3,b3,d4,g4]@3 [b3,d4,g4] [b3,d4,g4]@2 [g3,b3,d4]@2 [g3,b3,d4]@2, ~@9 g3@3 g4@4", // Ab Cm Ab G
  X: "[c4,eb4]!4 [g3,c4]!2 [c4,eb4]!2, [g3,g4] g4@2 ~, ~ g3 eb4 [g3,g4]", // Cm C5 Cm G
  Y: "[c4,f4]!2 [f3,c4,f4]@2 [f3,bb3]!2 bb3!2, [f3,ab4] ab4@2 ~, ~@2 d4 [f3,d4,bb4]", // F5 Bb5 Fm Bb
  Z: "bb3!2 [f3,bb3,d4,bb4]@2 [ab3,c4,eb4,ab4]@2 [f3,bb3,d4,bb4]@2, [f3,d4,bb4] ~@3", // Bb Ab Bb
  AA: "[[ab3,c4]@2 ~@4 eb4@12 ~@4 f4@12 ~@6 eb4@20 ~@4 bb3@13 ~@3, ~@2 bb3@14 ~@2 bb3@13 ~@3 eb3@21 ~@25, ~@4 c4@15 ~ c4@13 ~@3 f3@21 ~@23, ~@38 ab3@21 ~ c4@13 ~@7]/5", // Ab
  AB: "[~@7 [bb3,d4,f4]@10 ~@18 bb4@20 ~@9, bb2@16 ~ f2@15 g4@23 ~@9, ~@2 f3@15 ~@2 eb3@7 g3@19 ~@19, ~@4 g3@13 ~@5 g3@4 c4@21 ~@17, ~@24 ab3@5 f4@24 ~@11]/4", // Bb
})).s("gm_acoustic_guitar_steel").gain(0.17).pan(0.2)

// other · vibraphone
const vibraphone = note("<~@59 A@3 ~@41>".pickRestart({
  A: "[~@2 [bb4,bb5]!3 [db5,db6]@3 [ab4,ab5]!3 [bb4,bb5]@3 [f4,f5]@4 [f4,f5]!3 [ab4,ab5]@3 [eb4,eb5]!3 [f4,f5]@3 [db4,db5]@13 ~@5]/3", // Bb Db Ab Bb F Ab Eb F …
})).s("gm_vibraphone").gain(0.26).pan(0.7)

// other · timpani
const timpani = note("<~ [a1@9 ~@7] ~@3 [a1 ~] ~ [a1 ~@3] ~@95>").s("gm_timpani").gain(0.42)

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

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@9 A ~@10 B ~@8 B ~@11 B ~ B@2 ~ C A B ~ D E B@3 A E ~ B ~@8 B ~ B@2 ~@3 A B ~@2 E B@3 A B ~ D E B@3 A E ~ B ~ F ~@7
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6", C: "~@2 x!2 ~@4", D: "~@7 x", E: "~ x ~@3 x ~@2", F: "x!2 ~@6",
})).gain(0.18)

// drums · low tom
const low_tom = s("lt").struct("<~@46 [~@7 x] ~@26 [~@5 x ~@10] ~@29>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@15 A@2 ~@7 A ~@7 A ~@3 A ~@3 A ~@5 B ~@11 C ~@7 A ~@6 D ~@7 E ~@11 C ~@3 C ~@5
>`.pickRestart({
  A: "~@7 x", B: "~@13 x ~@2", C: "~@13 x!2 ~", D: "~ x!2 ~@2 x ~ x", E: "~@14 x!2",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@24 A ~@16 B ~@2 B ~@3 B ~@2 B@2 ~@3 B ~ C ~@3 D ~@4 B ~@2 B ~@4 B ~ B@3 ~ E ~ B ~@2 B@2 ~@3 B ~ C ~@9
>`.pickRestart({
// … 44 more lines

More by Eros Ramazzotti