Strudelify
Un giorno migliore cover art

...Squérez?

Un giorno migliore

Lunapop

KeyD♭ majorTempo85 bpm
0:00/0:00
// Un giorno migliore — Lunapop
// 85 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: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/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(`<
  ~@6 A B C D E B F G H G H G I J K G I L M N O ~ A B C D E B F P Q G H G H G I J K G I L M N R S T U V W X Y Z AA AB AC
  N O ~ A B C D E B F G H G H G I J K G I L M AD AE AF@3 ~
>`.pickRestart({
  A: "ab2 gb2", B: "e2@3 eb2", C: "db2 gb2", D: "b2@5 ~ b2@2 bb2@5 ~ bb2@2", E: "ab2@6 ab2@2 gb2@5 ~ gb2@2",
  F: "db2@4 gb1@3 b1", G: "db2@7 eb2", H: "f2@13 ~ f2@2", I: "f2@6 eb2 f2", J: "gb2@6 db2@2 gb1@6 db2 gb2",
  K: "ab2@6 eb2@2 ab1 ~ ab1@4 eb2 ab2", L: "gb2@10 f2 db2 bb1 ab1 f1 gb1", M: "ab1@3 eb2 ab2!4", N: "db2", O: "db1",
  P: "b1@13 ~ eb2 e2", Q: "gb2@15 ~", R: "gb2 ~ gb2@2 gb2 ~ gb2@2 gb2@2 gb2 ~ gb2@2 db2@2",
  S: "gb1@2 gb1@2 gb1@2 gb1@2 gb1@2 gb1@2 gb1 db2 gb2 ab2", T: "a2@2 a2@2 a2 ~ a2@2 a2 ~ a2 ~ a2@2 e2 ~",
  U: "a1@2 a1@2 a1@2 a1@2 a2@2 a2 ~ a2@2 ab2 gb2", V: "db2 ~ db2 ~ db2 ~ db2@2 db2 ~ db2 ~ db3 ~ db3 ab2",
  W: "db2 ~ db2@2 db2@2 db2@2 db2@2 db2 ~ db2@2 eb2@2", X: "gb2 ~ gb2@2 gb2 ~ gb2 ~ gb2 ~ gb2 ~ gb2 db2 bb1 db2",
  Y: "gb1@2 gb1@2 gb1 ~ gb1@2 gb1@2 gb1@2 gb1@2 gb1 db2", Z: "gb2 ~ gb2@2 gb2 ~ gb2@2 gb2@2 gb2@2 gb2 ~ gb2@2",
  AA: "ab2 ~ ab2 ~ ab2@2 eb2@2 ab1@2 ab1@2 ab1@2 ab1@2", AB: "b1@2 b1 ~ b1@2 b1 eb2 gb2 b2 gb2 eb2 b1 gb1 eb1 e1",
  AC: "gb1!4 db2 gb2 gb1 c2", AD: "b1", AE: "gb1", AF: "[db2@9 db1@14 ~]/3",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B C D E F G H I F G H I J K J K J K L M J K L M N@2 F G H I F G H I O@2 P Q P R P Q L M P R L M J S@2 T@2 U@2 S@3
  V@3 W@2 F G H I F G H I P Q P R P Q L M P R L M X Y Z@2 ~@2
>`.pickRestart({
  A: "~@14 gb4 [db4,eb4]", B: "b3 ~@5 gb4 [b3,eb4] bb3 ~@5 gb4 [b3,eb4]", C: "ab3 ~@5 gb4 [b3,eb4] gb3 ~@7",
  D: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~", E: "db3 ~ db3 ~ db3 ~ db3 ~ gb3 ~ gb3 ~@5",
  F: "[b2,b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [bb2,bb3,eb4,gb4] ~ [bb3,eb4,gb4] ~ [bb3,eb4,gb4] ~ [bb3,eb4,gb4] ~", // B Ebm
  G: "[ab2,ab3,eb4,gb4] ~ [ab3,eb4,gb4] ~ [ab3,eb4,gb4] ~ [ab3,eb4,gb4] ~ [gb2,gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] ~", // Ab7 Gb
  H: "[e2,ab3,b3,e4] ~ [ab3,b3,e4] ~ [ab3,b3,e4] ~ [ab3,b3,e4] ~ [ab3,b3,e4] ~ [ab3,b3,e4] ~ [eb2,gb3,b3,eb4] ~ [gb3,b3,eb4] ~", // E B
  I: "[db2,ab3,db4,e4] ~ [ab3,db4,e4] ~ [ab3,db4,e4] ~ [ab3,db4,e4] ~ [gb2,gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] ~ [gb3,bb3,db4,gb4] ~", // Dbm Gb
  J: "[db2,db3,ab3,db4,f4]", K: "[f2,f3,ab3,c4,f4]", L: "[gb2,gb3,bb3,db4,gb4]", M: "[ab2,ab3,c4,eb4,ab4]",
  N: "[db2,db3,ab3,db4,f4]/2", // Db
  O: "[b2,b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b2,b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b3,eb4,gb4] ~", // B
  P: "f4@2 ~ ab4, [db2,db3,ab3,db4], ~ f4", Q: "f4@2 ~ ab4, [f2,f3,ab3,c4], ~ f4",
  R: "~@3 ab4, [f2,f3,ab3,c4,f4], ~ c5", // Fm
  S: "[gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~", // Gb
  T: "[a3,db4,e4] ~ [a3,db4,e4] ~ [a3,db4,e4] ~ [a3,db4,e4] ~ [a3,db4,e4] ~ [a3,db4,e4] ~ [a3,db4,e4] ~ [a3,db4,e4] ~", // A
  U: "[ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~", // Db
  V: "[[ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,b3,eb4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3,db4] ~ [gb3,bb3] ~, eb5@16 ~@7 db4, [ab4,c5]@15 ~ gb4@32, ~ b4 [bb4,db5]]/3", // Ab B Gb Ab Bbm
  W: "[ab3,db4,f4]/2", X: "[b1,b2,eb3,gb3,b3]", Y: "[gb1,gb2,gb3,bb3,db4]", Z: "[db2,db3,f3,ab3,db4]/2",
})).s("gm_string_ensemble_1").gain(0.29).pan(0.3)

// chords · piano
const piano = note(`<
  ~ A B C D E F G H E F G H I J K L M L N O P Q R S T U V F G H E F G H W X I J K L M L N O P Q R S T Y@2 Z@2 AA@2 AB@3
  AC AD AE@4 F G H E F G H I J K L M L N O P Q R S AF AG AH@4
>`.pickRestart({
  A: "[b3,eb4,gb4]!4 [bb3,eb4,gb4]!4", B: "[ab3,eb4,gb4]!4 [gb3,bb3,db4,gb4]!4",
  C: "[ab3,b3,e4]!6 [gb3,b3,eb4]!2, [e1,e2]@3 [eb1,eb2]", // E B E Eb
  D: "[ab3,db4,e4]@2 [ab3,db4,e4]@2 [ab3,db4,e4]@2 [ab3,db4,e4]@2 [gb3,bb3,db4,gb4]@2 [gb3,bb3,db4,gb4]@2 ~ [ab1,ab2] [bb1,bb2]@2, [db1,db2]@4 [gb1,gb2]@2 [gb1,gb2,gb3,bb3,db4,gb4] ~", // Dbm Gb Ab Bb Db Gb
  E: "[b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [b3,eb4,gb4] ~ [bb3,eb4,gb4]@2 [bb3,eb4,gb4]@2 [bb3,eb4,gb4]@2 [bb3,eb4,gb4]@2, b2 ~@3 bb2@4", // B Ebm
  F: "[ab3,eb4,gb4]!4 [gb3,bb3,db4,gb4]!4, ab2 gb2", G: "[ab3,b3,e4]!6 [gb3,b3,eb4]!2, e2@3 eb2",
  H: "[ab3,db4,e4]!4 [gb3,bb3,db4,gb4]!4, db2 gb2", I: "~ [ab3,db4,f4]!7",
  J: "[ab3,c4,f4] ~ [ab3,c4,f4]@2 [ab3,c4,f4]@2 [ab3,c4,f4]@2 [ab3,c4,f4]@2 [ab3,c4,f4]@2 [ab3,c4,f4]@2 [ab3,c4,f4]@2, [f1,f2]", // Fm F
  K: "[ab3,db4,f4] ~ [ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,db4,f4]@2, [db2,db3]", // Db
  L: "[ab3,c4,f4]!8, [f1,f2]", M: "[ab3,db4,f4]!8, [db2,db3]", N: "[bb3,db4]!2 [bb3,db4,gb4]!6, [gb1,gb2], gb4 ~@3",
  O: "[ab3,eb4] [ab3,c4,eb4,ab4]!7, [ab1,ab2], [c4,ab4] ~@15", // Ab5 Ab Fm
  P: "db4 [ab3,db4] [ab3,db4,f4]!6, [db2,db3], f4 ~@3, ab3 ~@15", // Db5 Db
  Q: "[ab3,c4,f4]!2 [ab3,f4]!2 [ab3,c4,f4]!4, [f1,f2], ~ c4 ~@2", // Fm Db Fm F
  R: "[ab3,bb3] ~ [gb3,db4]@2 [gb3,bb3,db4,gb4]@2 [gb3,bb3,db4,gb4]@2 [gb3,bb3,db4,gb4]@2 [gb3,bb3,db4,gb4]@2 [gb3,bb3,db4,gb4]@2 [gb3,bb3,db4,gb4]@2, [gb1,gb2], gb4 ~@3, db4 ~@7", // Absus2 Gb5 Gb
  S: "[ab3,c4,eb4]!2 [ab3,c4,eb4,ab4]!6, [ab1,ab2], ab4 ~@3", // Ab
  T: "[db4,f4] [ab3,db4,f4]!5 [ab3,f4]!2, [db2,db3], ab3 ~@11 db4@4", U: "[db2,db3,ab3,db4,f4]",
  V: "[b3,eb4,gb4]!4 [bb3,eb4,gb4]!4, b2 bb2", W: "[b3,eb4,gb4]!8, [b1,b2]",
  X: "[a3,eb4,gb4] ~ [a3,eb4,gb4]@2 [a3,eb4,gb4]@2 [a3,eb4,gb4]@2 [a3,eb4,gb4]@2 [a3,eb4,gb4]@2 [a3,eb4,gb4]@2 [a3,eb4,gb4]@2", // Ebdim
  Y: "[~@31 db5, [gb2,db3,db4]!2 [gb2,db3,db4,gb4]!2 [gb2,db3,db4,gb4]!4, [gb4,bb4]!4 bb4!4 bb4!8, ~ db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 ~]/2", // Gb5 Gb
  Z: "[db5 ~@30 db5, [a2,e3]!4 [a2,e3]!4, [e4,a4]!8 [e4,a4]!8, ~ db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 ~]/2", // A5
  AA: "[[db4,f4] ~ db5 db4 ~@25 db5 [db4,f4,ab4,db5]@2, [db3,ab3]@3 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 ~@3, ~ ab4@3 f4@2 f4@2 [f4,ab4]@2 [f4,ab4]@2 [f4,ab4]@2 [f4,ab4]@2 [db4,f4,ab4]@2 [db4,f4,ab4]@2 [db4,f4,ab4]@2 [db4,f4,ab4]@2 [db4,f4,ab4]@2 [db4,f4,ab4]@2 [db4,f4,ab4]@2 ~@2, ~ f4 [db3,ab3,db4,ab4]@2 [db3,ab3,db4]@2 [db3,ab3,db4]@2 [db3,ab3]@2 [db3,ab3]@2 [db3,ab3]@2 [db3,ab3]@2]/2", // Db Db5 Fm Db Db5
  AB: "[~@47 db5, [gb2,db3] [gb2,db3,db4]!2 [gb2,db3] [gb2,db3]!4 [gb2,db3] [gb2,db3,db4,bb4] [gb2,db3] [gb2,db3,db4], [db4,gb4,bb4]!2 [gb4,bb4]!4 [db4,gb4,bb4]!2 [db4,gb4,bb4]!8 [db4,gb4,bb4] gb4@2 gb4 ~@2 [gb4,bb4]!2, ~ db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 ~, ~@17 [db4,bb4] ~@2 [db4,gb4,bb4]!2 ~@2]/3", // Gb5 Gb Gb5 Gb
  AC: "[eb4,ab4,c5] ~@2 eb4 eb5 c5 ~@2 [ab4,c5] ~@5 [eb4,ab4,c5]@2, [ab2,eb3] [ab2,eb3,ab4] [ab2,eb3]!2, ~ c5@4 eb5@2 eb5@2 ~@2 eb5@2 eb5@3, ~ ab4 eb4@3 eb4 [eb4,ab4,c5] ~, ~@6 c5@2 ~ [ab4,c5,eb5]@3 ~@4", // Ab Ab5 Ab
  AD: "[gb3,eb4,gb4] ~@6 b4 ~@6 [eb4,gb4]@2, b3@3 b4@2 b4@2 ~@2 b4@2 b4@2 b4@3, ~ [b2,b4]@3 [b2,gb3]@4 [b2,gb3]@4 [b2,gb3,b3]@4, ~ [eb4,gb4] [b3,eb4,gb4]!4 [eb4,gb4] ~", // Ebm B B5 Ebm B Ebm
  AE: "[gb4 ~@11 [gb4,bb4] [gb4,bb4,db5]@2 db4 ~@10 db4@2 db4@2 ~@18 [b3,eb4,gb4]@2 [b3,eb4,gb4]@2 [b3,eb4,gb4]@2 [b3,eb4,gb4]@2 [bb3,eb4,gb4]@2 [bb3,eb4,gb4]@2 [bb3,eb4,gb4]@2 [bb3,eb4,gb4]@2, [gb2,db3]!4 [db2,db3]@8 b2@2 bb2@2, [db4,bb4]@2 [db4,gb4,bb4]@2 [db4,gb4,bb4]@2 [db4,gb4,bb4]@2 [db4,gb4,bb4]@2 db4@5 ~@16 db4@25 ~@8, ~ db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 ~@51, ~@10 [gb4,bb4]@2 ~@3 gb4@2 ~@13 f4@2 [f4,ab4,db5]@24 ~@8]/4", // Gb B Ebm Gb5 Db Gb Db
  AF: "b3 ~@4 b3@2 ~@7 eb4@2, [b1,b2,gb3], eb4@3 eb4@6 gb4@7, ~ b3@4 gb4@2 b3@4 eb4 b3@4, ~@7 b4@9", // B5
  AG: "[bb3,db4,gb4] ~@13 db4@2, [gb2,gb3], ~ db4@6 bb4@4 gb4@5, ~@3 gb4@6 db4@3 bb4@4, ~@5 db5@11", // Gb
  AH: "[[ab3,db4,f4] ~@6 db5@10 ~ [f5,ab5,db6]@32 ~@14, [db2,db3]@17 db5@32 ~@15, ~ db4@6 db4@11 [db2,db3]@2 ~@44, ~@3 f4@17 ~@44, ~@5 ab4@15 ~@44]/4", // Db
})).s("gm_piano").gain(0.29).pan(0.6)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@13 A B C B C B C D C B C D E F ~@10 A B C B C B C D C B C D A G H I J K L M N O P Q R@2 ~ S T@8 B C B C B C D C B C
  D U V@3 ~@2
>`.pickRestart({
  A: "~@7 ab3, db3, ~ ab3@2 ab3@2 ab3@2 ~, ~ db4!3", B: "ab3 ~@6 ab3, f2, ~ c3@7, ~@2 c4@3 ab3 c4@2, ~@3 ab3 db4@4",
  C: "~@7 ab3, db3, ~ ab3@2 ab3@2 ab3@2 ~, ~ db4@2 db4, ~ eb4",
  D: "ab3 ~@6 ab3, ab2, ~ c3@7, ~@2 c4@3 ab3 c4@2, ~@3 ab3 db4@4",
  E: "~@7 ab3, db3@15 ~, ~ ab3@2 ab3@2 ab3@2 ~, ~ db4@2 db4, ~ eb4", F: "[f3,ab3,db4]",
  G: "[gb2,db3] ~ gb2 ~ [gb2,db3] ~@3 [gb2,db3] ~@3 [gb2,db3] ~ db3 ~", // Gb5
  H: "[gb2,db3] ~@3 [gb2,db3] ~@3 [gb2,db3] ~ db3 ~ [gb2,db3] ~@3", // Gb5
  I: "[a2,e3] ~ [a2,e3] ~ [a2,e3] ~ a2 ~ [a2,e3] ~@3 [a2,e3] ~@3", // A5
  J: "[a2,e3] ~@3 [a2,e3] ~@3 [a2,e3] ~@3 [a2,e3] ~ [a2,e3] ~", // A5
  K: "[db3,ab3] ~@3 [db3,ab3] ~ ab3 ~ [db3,ab3] ~@3 [db3,ab3] ~@3", // Db5
  L: "[db3,ab3] ~@3 [db3,ab3] ~ ab3 ~ [db3,ab3] ~ [db3,ab3] ~ [db3,ab3] ~ ab3 ~", // Db5
  M: "[gb2,db3] ~ db3 ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ [gb2,db3] ~ db3 ~", // Gb5
  N: "[gb2,db3] ~@3 [gb2,db3] ~@3 [gb2,db3] ~ db3 ~ [gb2,db3] ~ db3 ~", // Gb5
  O: "[gb2,db3] ~@3 [gb2,db3] ~@3 [gb2,db3] ~ gb2 ~ [gb2,db3] ~ [gb2,db3] ~", // Gb5
  P: "[ab2,eb3] ~@3 [ab2,eb3] ~ ab2 ~ [ab2,eb3] ~@3 [ab2,eb3] ~ ab2 ~", // Ab5
  Q: "[b2,gb3] ~ gb3 ~ [b2,gb3] ~ b2 ~ [b2,gb3] ~@3 [b2,gb3] ~@3", // B5
  R: "[[gb2,db3] ~ db3 ~ [gb2,db3] ~@3 [gb2,db3] ~@3 [gb2,db3] ~ [gb2,db3] ~ [ab3,db4]@16, ~@15 f3@17]/2", // Gb5 Db5
  S: "~@7 eb4, b2 bb2, ~ gb3@3 ~ gb3@3, ~ b3 ~ bb3, ~@3 eb4@4 ~",
  T: "[~@13 ab3 [eb3,e4]@2 ~@3 db4 ~@3 bb3 ~@3 eb4 ~@3 eb4 ~@3 eb4 ~@3 db4 ~@5 b3 ~ b3 ~@3 e4 ~@3 db4 ~@7 ab3, ab2 gb2 f2@14, ~ gb3@3 ~ gb3@3 e2@2 ab3 b3 ab4@2 ~@4 e4@2 ~ gb4@3 ~@2 b3@2 ~@2 bb3@2 ~@2 ab3@2 ~@2 bb3@2 ~@2 ab3 b3 e4@2 eb4@2 ~ ab3@3 ~ gb3@3 db3@8, ~@2 ab3@2 ~@2 bb3@2 ~ e3@5 ~@2 db3@4 ~@2 db4@2 ~ gb3@3 ~ gb3@3 ~ gb3@3 ~ gb3@3 ~ e3@5 ~@2 db3@4 [gb2,gb4]@4 ~@2 db4@2 db4@2 db4@2, ~@3 eb4@2 ~@2 db4@7 ~@3 ab3@3 gb3@4 b2@4 bb2@4 ab2@4 gb2@4 e2@6 ~@4 db4@2 ~@2 bb3@2 ~ ab3@2 ab3@2 ab3@2 ~]/8", // Emaj7 Gb
  U: "~@7 gb3, b2, ~@2 gb3@7 gb4@7, ~@3 b3@4 b3@4 gb3 b3@4, ~@5 eb4@11",
  V: "[~@12 db4@3 ~ [f3,ab3,db4]@32, gb2@15 db3@32 ~, ~@2 db3@9 bb3@5 ~@32, ~@3 gb3@4 db4@2 gb3@7 ~@32, ~@5 gb4@11 ~@32]/3", // Db
})).s("gm_electric_guitar_clean").gain(0.27).pan(0.8)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@25 A@2 ~@23 B C D E F G H I J K L M@2 ~@2 N O P ~@2 Q ~@19>".pickRestart({
  A: "[~@15 db3@16 ~]/2", B: "~@2 db3 ~@3 [gb2,db3] ~@3 [gb2,db3] ~@3 gb2 ~",
  C: "~@2 [gb2,db3] ~@3 [gb2,db3] ~@3 gb2 ~@3 [gb2,db3] ~", D: "~@6 e3 ~@3 [a2,e3] ~@3 [a2,e3] ~",
  E: "~@2 [a2,e3] ~@3 [a2,e3] ~@3 [a2,e3] ~@5", F: "~@2 [db3,ab3] ~@3 db3 ~@3 [db3,ab3] ~@3 [db3,ab3] ~",
  G: "~@2 [db3,ab3] ~@3 db3 ~@7 db3 ~", H: "~@2 gb2 ~@11 gb2 ~", I: "~@2 [gb2,db3] ~@3 [gb2,db3] ~@3 gb2 ~@3 gb2 ~",
  J: "~@2 [gb2,db3] ~@3 [gb2,db3] ~@3 db3 ~@5", K: "~@2 [ab2,eb3] ~@3 eb3 ~@3 [ab2,eb3] ~@3 eb3 ~",
  L: "~@2 b2 ~@3 gb3 ~@3 [b2,gb3] ~@3 [b2,gb3] ~", M: "[~@2 gb2 ~@3 [gb2,db3] ~@3 [gb2,db3] ~@4 db3@17]/2",
  N: "~@3 gb2 ~@4", O: "~@7 ab3", P: "~ gb2", Q: "~@3 eb3",
})).s("gm_electric_guitar_clean").gain(0.16).pan(0.8)

// chords · epiano2
const epiano2 = note(`<
  ~@2 A B C D E B F D E B F G H G H G H I J K H I L G ~ D E B F D E B F M N G H G H G H I J K H I L O@2 P Q@2 R@2 S@3 T
  U V W ~ D E B F D E B F G H G H G H I J K H I L X Y Z@2 ~@2
>`.pickRestart({
  A: "[ab3,eb4,gb4] [gb3,gb4], ~@4 db4 ~@3, ~@8 bb3 ~@7", B: "[ab3,b3,e4]", C: "[ab3,db4,e4] [gb3,bb3,db4,gb4]",
  D: "[b3,eb4,gb4] [bb3,eb4,gb4]", E: "[ab3,eb4,gb4] [gb3,bb3,db4,gb4]", F: "[ab3,db4,e4]@8 [gb3,bb3,db4,gb4]@7 ~",
  G: "[ab3,db4,f4]", H: "[ab3,c4,f4]", I: "[bb3,db4,gb4]", J: "[c4,eb4,ab4]", K: "[ab3,f4] ~@15, db4",
  L: "[eb4,ab4], c4 ~@15", M: "[b3,eb4,gb4]", N: "[a3,eb4,gb4]", O: "[db4@4 [gb2,gb3,bb3,db4]!4, [ab3,f4]@5 ~@3]/2",
  P: "[gb2,gb3,bb3,db4]!4", Q: "[a2,a3,db4,e4]!4", R: "[db3,ab3,db4,f4]!4", S: "[gb2,db3,gb3,bb3,db4]!4",
  T: "[ab2,eb3,ab3,c4,eb4]!4", U: "[b2,gb3,b3,eb4,gb4]!4", V: "[gb2,db3,gb3,bb3,db4,gb4]!4",
  W: "[ab2,db3,f3,ab3,db4,f4]", X: "[b2,gb3,b3,eb4]", Y: "[db3,gb3,bb3] ~@15, [gb2,db4]",
  Z: "[[db3,f3,ab3,db4]@19 ~@13]/2", // Db
})).s("gm_epiano2").gain(0.45).pan(0.2)

// other · piano
const piano_2 = note("<~@13 A@3 B@3 ~@18 C@7 D@7 E@5 ~@2 F@4 G@2 ~@8 C@7 H@6 I J@2 ~@2>".pickRestart({
  A: "[~@2 db4@5 f4@6 db4@11]/3", B: "[f4@5 c4@2 db4@16 ~]/3",
  C: "[~@7 f3@7 db4@9 ab3@2 f3@4 ab3@2 db4@8 ab3@7 c4 gb4@4 db4@4 f4]/7",
  D: "[~ eb4@4 db4@10 f4@8 gb4@4 db4@4 f4@2 eb4@5 f4@18]/7", E: "[~ bb3@6 a3@16 ab3@11 ~@6]/5",
  F: "[bb3@2 ab3 bb3@10 eb4@4 gb4@15]/4", G: "[eb4 db4@14 ~]/2",
  H: "[~ eb4@4 db4@10 f4@8 gb4@4 db4@4 f4@2 eb4@5 f4@10]/6", I: "gb4", J: "[f4@11 ~@5]/2",
})).s("gm_piano").gain(0.05)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@36 A ~@12 B ~@8 B ~@3 B ~@22 B ~ C ~@2>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "x",
})).gain(0.56)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@7 A B A B A B ~@16 C B A ~ C B C ~@28 D ~ C B C B C B ~@18>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@3 x ~@4", C: "~@7 x", D: "~@3 x",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A ~@3 A ~@7 A ~@3 A ~@5 A ~@3 A ~ B ~@7 A ~@3 A C ~@3 D ~@4 E ~ F G H ~@4 A ~@3 A ~@7 A ~@3 A I J K ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@8 x ~@2 x ~@2 x ~", C: "~@10 x ~@2 x ~@2", D: "~@14 x!2", E: "~@13 x ~@2", F: "~@5 x ~@10",
  G: "~@5 x ~ x", H: "~@7 x ~@4 x ~@3", I: "~@7 x ~@4 x ~ x ~", J: "~@3 x", K: "~@6 x!2 ~ x!2 ~ x!2 ~@2",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@7 A@2 ~@20 A@2 ~ A ~ B C D ~ E F G F A F E F A F E H I@13 ~ C ~ A@2 ~ A ~ B ~ E F G F A F E F A F E ~@6
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@2 x!2", C: "~@3 x", D: "x!4 ~ x ~ x", E: "~@5 x ~ x", F: "~@7 x", G: "~@6 x!2",
// … 38 more lines

More by Lunapop