Strudelify

Senza di Me

Anna Oxa

KeyA♭ majorTempo64 bpm
0:00/0:00
// Senza di Me — Anna Oxa
// 64 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 11, 4/4 at bar 11, 2/4 at bar 21, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 54 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(64/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
const bass = note("<~ A B C ~@17 D E F G H I J K L M N O P Q R S T@2 U V W X Y Z AA AB AC AD AE AF@3 ~>".pickRestart({
  A: "db2@5 ~ db2@6 db2@5 ~ db2@5 ~ db2@3 ~ db2@3 ~", B: "bb1@5 ~ bb1@5 ~ bb1@5 ~ bb1@5 ~ bb1@3 ~ bb1@3 ~", C: "ab1 ~",
  D: "ab1@13 ~ ab1@2 eb2@13 ~ eb2@2", E: "db2@4 db2@9 ~ db2@2 bb1@3 ~ bb1@3 ~@3 bb1@6",
  F: "ab1@13 ~ ab1@2 g1@10 g2@4 g1@2", G: "db2@6 db2@6 db2@5 ~ db2@5 ~ db2@8", H: "ab1", I: "db2", J: "f1@15 ~ eb1@16",
  K: "db2@15 ~ d2@15 ~", L: "ab1@3 ~ ab1@10 ab1 ~ c2@3 ~ c2@11 ~", M: "f1@3 ~ f1@9 ~ f1 ~ eb1@3 ~ eb1@9 ~ eb1@2",
  N: "db2@6 db2@5 ~ db2@6 db2@6 db2@8", O: "ab1 c2", P: "db2 ab1", Q: "f1 c2", R: "db2 eb2", S: "f1 db2",
  T: "[bb1@16 eb2@32 eb1@15 ~]/2", U: "eb1@3 ~ eb1@2 ~@10 ab1@12 ~@2 ab1@2",
  V: "eb2@3 ~ eb2@9 ~ eb2@2 db2@3 ~ db2@9 ~ db2@2", W: "bb1@3 ~ bb1 ~ bb1 ~ bb2@2 f2@2 bb1@4 ab1@3 ~ ab1@9 ~ ab1@2",
  X: "eb2@3 ~ eb2@9 ~ eb2 ~ db2@6 c2@6 bb1@4", Y: "~@2 eb2@5 ~ eb2@2 ~ eb2@2 ~ eb2@2 ab1@13 ~ ab1@2",
  Z: "eb2@4 eb2@9 ~ eb2@2 db2@3 ~ db2@9 ~ db2@2", AA: "bb1@3 ~ bb1@3 ~ bb2@2 bb1@6 ab1@3 ~ ab1@9 ~ ab1@2",
  AB: "g1@3 ~ g1@11 ~ db2@5 ~ db2@5 ~ db2@4", AC: "~@2 db2@5 ~ bb1@5 ~ bb1@5 ~ bb1@5 ~ bb1@6",
  AD: "eb2@5 ~ eb2@5 ~ eb2@5 ~ eb2@6 eb2@3 ~ eb2@4", AE: "ab1@2 db2 eb2",
  AF: "[~ ab1@16 db2@9 eb2@8 ab1@16 db2@9 ~ eb2@9 ab1@21 ~@6]/3",
})).s("gm_fretless_bass").gain(0.7)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A@2 B@2 ~@6 C@4 D@3 E@4 F G@4 H I@4 J@2 K@2 L M N@2 O P@2 Q@5 R@3 S T@2 ~
>`.pickRestart({
  A: "[~@38 [eb4,g4]@5 ~ ab4@5 ~ g4@6 [db4,f4]@4 [eb4,g4]@4, ~@31 [db4,f4]@7 ~@5 f4@6 eb4@6 ~@9, ~ db2]/2", // Eb Db Eb Db
  B: "[[db4,f4]@5 ~ eb4@5 [f4,ab4]@6 ~ eb4@6 [db4,f4]@4 g4@3 ab4@14 ~@19, bb1@30 ~ ab1@9 ~@24, ~@5 g4@5 ~@7 g4@6 ~@5 eb4@18 ~@18]/2", // Db Fm Db
  C: "[~@15 ab4@17 g4@16 f4@16 bb3@15 c4@7 ~@2 ab4@7 g4@8 ~ bb3@5 ~@3 f4@5 [eb4,g4]@6 [f4,ab4]@5, ~@15 eb4@32 ~ db4@31 eb4@32 db4@7 ~@10]/4", // Eb Fm
  D: "[~@2 [eb4,g4]@6 [db4,f4]@8 eb4@16 g3@15 db4@16 ~@25 ab3@8, ~@16 c4@31 ab3@31 ~@2 f3@15 ~, ~@64 c4@25 ~@7]/3", // Eb Db
  E: "[~@8 c4@7 [ab3,db4]@16 [bb3,eb4]@16 ~ c4@14 ~ db4@6 [eb4,g4]@6 ab4@4 ~ d4@15 ~ db4@32, g3@15 ~@33 f4@21 ~@6 f4@53]/4", // Db5 Eb5 Eb
  F: "ab4@15 g4@17, eb4",
  G: "[f4@15 bb3@16 ~ c4@8 ab4@7 g4@16 ~ db4@6 [eb4,g4]@5 [f4,ab4]@7 [eb4,g4]@5 [db4,f4]@4 ~ g4@3 ab4@32 ~, db4@31 eb4@32 f4@7 ~@22 eb4@36]/4", // Eb Fm Eb Db
  H: "db4",
  I: "[[c4,f4]@16 [bb3,eb4]@15 ~ db4@15 ~ d4@15 [eb4,ab4]@16 ~ e4@15 c4@8 ~ ab4@7 ~ eb4@16, ~@31 f4@32 ~@16 g4@16 f4@16 g4@16 ~]/4", // F5 Eb5 Ab5
  J: "[[db4,f4]@6 [eb4,g4]@5 ~ f4@6 [eb4,g4]@6 [db4,f4]@4 g4@4 ab4@16 g4@16, ~@11 ab4@6 ~@11 eb4@36]/2", // Db Eb Db
  K: "[[db4,f4]@7 ab3@24 f3@16 g3@9 c4@8]/2", L: "db4 eb4", M: "f4@11 g4@3 ab4@2",
  N: "[f4@16 db4@32 g4@11 ~@5, ~@8 f4@21 ~@3]/2", O: "~ [eb4,ab4]",
  P: "[[g4,bb4]@15 ~@16 db4@16 ~ c4@7 ~ ab4@8, ~@15 ab4@16 ~@33, ~@16 f4@31 ~ eb4@16]/2", // Gm
  Q: "[[g4,bb4]@14 ~ [db4,f4]@6 ~ [c4,eb4]@5 db4@12 f4@8 ~@25 bb4@7 ~@17 db4@16 ab4@15 g4@16 [db4,f4]@7 [eb4,g4]@6 [f4,ab4]@4, ~@27 bb3@8 ~@4 ab4@24 g4@16 ab4@16 ~@65, ~@48 eb4@23 ~@9 f4@32 eb4@31 ~@17]/5", // Gm Db Cm Db Eb Fm
  R: "[~@2 g4@5 ~ d4@5 ~ g4@5 [f4,ab4]@6 [eb4,g4]@6 [db4,f4]@6 [eb4,g4]@6 [f4,ab4]@6 [eb4,g4]@6 [db4,f4]@4 g4@4 ab4@16 ~ g4@8 [db4,f4]@8, ~ eb4@6 f4@6 eb4@6 ~@40 eb4@29 ~@8]/3", // Fm Eb Db Eb Fm Eb Db
  S: "~@17 g4@8 ~ f4@6, c4@16 ~@9 db4@7, ~ eb4@25 ~@6",
  T: "[~@2 c4@16 ~ g4@9 [db4,f4]@9 [eb4,ab4]@19 ~@8, ~@2 eb4@27 ~@35]/2", // Db Ab5
})).s("gm_string_ensemble_2").gain(0.3)

// other · harpsichord
const harpsichord = note(`<
  ~ A B C ~@9 D E ~@4 F ~ G H G I J ~@3 K L M N O P Q R S ~ T U V W X Y Z AA AB AC ~ AD ~ AE ~
>`.pickRestart({
  A: "[db5,f5]@3 ~@3 [eb5,g5]@3 ~@3 f5@4 ~@2 [eb5,g5]@4 ~@2 [db5,f5]@3 ~ eb5@3 ~, ~@12 ab5@2 ~@14 g5 ~@3", // Db Eb Db
  B: "[db5,f5]@4 ~@2 [eb5,g5]@3 ~@3 f5@5 ~ [eb5,g5]@4 ~@2 [db5,f5]@3 ~ [eb5,g5]@3 ~, ~@12 ab5@3 ~@17", // Db Eb Db Eb
  C: "[eb5,ab5]@3 ~@13", D: "~@16 db4@3 ~@3 eb4@4 ~@2 f4@4", E: "~@2 eb4@4 ~@2 db4@3 ~ eb4@2 ~@2 c4@4 ~@12",
  F: "db4 ~@5 eb4 ~@5 f4 ~@3 f4 ~@15", G: "c5 ~@15 bb4 ~@15", H: "ab4 ~@31",
  I: "db4 ~@5 eb4 ~@5 f4 ~@5 eb4 ~@5 db4@2 ~@2 eb4 ~@3", J: "f4 ~@31",
  K: "ab4 ~ c5@2 ab4 ~ eb5 ~@9 g4 ~ c5 ~ g4 ~ g5 ~@9", L: "ab4 ~ c5 ~ ab4 ~ f5 ~@9 g4 ~ bb4 ~ g4 ~ eb5 ~@9",
  M: "f4@2 ~@4 g4 ~@5 ab4 ~@5 g4 ~@5 f4 ~@3 g4 ~@3", N: "ab4 ~@15", O: "db6 ~@15 c6 ~@5 ab5 ~@9",
  P: "~@2 c6 ~ f5 ~ c6 ~@11 g5 ~ c5 ~ g5 ~@9", Q: "db5 ~ ab5 ~ db5 ~ ab5 ~@9 bb4 ~ eb5 ~ bb4 ~ eb5 ~@9",
  R: "f4 ~@15 db4 ~@5 eb4 ~@5 f4 ~@3", S: "d4 ~@31", T: "~@16 ab4 ~ eb5 ~ ab4 ~ eb5 ~@9",
  U: "bb4 ~@3 eb5 ~@11 ab4 ~ db5 ~ ab4 ~ db5 ~@9", V: "f4 ~@3 bb4 ~@11 ab4 ~ eb5 ~ ab4 ~ eb5 ~@9",
  W: "g4 ~@3 eb5 ~@11 db5 ~@5 c5 ~@5 bb4 ~@3", X: "~@2 eb5 ~@13 ab4 ~@7 eb5 ~@7", Y: "g4 ~@7 eb5 ~@7 ab4 ~@7 db5 ~@7",
  Z: "f4 ~@9 bb4 ~@5 ab4 ~@7 eb5 ~@7", AA: "g4 ~@7 eb5 ~@7 f4@2 ~@4 g4@2 ~@4 ab4 ~@3",
  AB: "~@2 g4@2 ~@4 f4@2 ~@4 g4@2 ~@4 ab4@2 ~@4 g4 ~@5", AC: "f4@2 ~@4 g4@2 ~@4 ab4 ~@5 g4@2 ~@4 f4 ~@3 g4 ~@3",
  AD: "~@7 ab6 ~@24", AE: "~@6 ab3@15 ~@11",
})).s("gm_harpsichord").gain(0.21).pan(0.3)

// other · harpsichord · soft notes
const harpsichord_soft = note("<~@33 A B ~@10 C ~@4 D E ~@2>".pickRestart({
  A: "~@18 ab5 ~ eb6 ~@11", B: "f5 ~@15 c5 ~@15", C: "~@6 f4 ~ f4 ~@3 f4 ~@19", D: "~@3 ab5 ~ eb6 ~@26",
  E: "~@4 ab4 ~@2 eb5 ~ ab5 ~@22",
})).s("gm_harpsichord").gain(0.11).pan(0.3)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~ A B C ~@17 D E D F G@2 H I J K L M ~@3 N O@2 P Q R S@2 T U V W L X ~@4
>`.pickRestart({
  A: "[db4,f4]@3 [eb4,g4]@3 [f4,ab4]@3 [eb4,g4]@3 [db4,f4]@2 [eb4,g4]@2", // Db Eb Fm Eb Db Eb
  B: "[db4,f4]@3 [eb4,g4]@3 [f4,ab4]@3 [eb4,g4]@3 [db4,f4]@2 [db4,g4]@2", C: "[eb4,ab4]@9 ~@7", D: "ab3 eb4 g3@2",
  E: "f3 db4 f3@2", F: "f3@6 g3@5 ~ ab3@6 g3@6 f3@4 g3@4", G: "[ab3@23 ~@9]/2", H: "[f3,c4] [eb3,bb3]",
  I: "[db3,ab3] [f3,bb3]", J: "ab3 g3", K: "f3@8 c4@9 bb3@15", L: "f4@3 g4@3 ab4@3 g4@3 f4@2 g4@2", M: "ab4@15 ~@17",
  N: "f3@8 f4@3 g4@3 ab4@2", O: "[bb4@63 ~]/2", P: "bb3 ~@3 bb3@2 ~@10 ab3@8 eb4@8", Q: "g3 eb4 f3@2",
  R: "bb3@6 ab3 bb3 c4@4 eb4@4", S: "[g3@16 db4@6 c4@6 bb3@12 eb4@2 ~ eb4@2 eb4@2 ~ ab3@8 eb4@8]/2", T: "g3 eb4 db4@2",
  U: "bb3@2 ab3 eb4", V: "g3@16 f4@5 ~ g4@5 ab4@5", W: "~@2 g4@5 f4@6 ~ g4@6 ab4@5 ~ g4@6", X: "ab4@13 ~@3",
})).s("gm_overdriven_guitar").gain(0.23).pan(0.6)

// other · orchestra hit
const orchestra_hit = note("<~@39 [eb4@3 ~ eb4@3 ~@25] ~@14>").s("gm_orchestra_hit").gain(0.71)

// chords · piano
const piano = note(`<
  ~ A B C D E F G H I@2 J K L M N O P Q R S T U V W X@2 Y Z AA AB AC AD AE AF AG AH AI@2 AJ AK AL AM@2 AN AO AP AQ AR AS
  AT AU@3
>`.pickRestart({
  A: "[db2,db3,ab3,db4,f4]@6 ~@6 [db4,f4,ab4]@4 db3@2 [bb3,eb4,g4]@4 ~@6 [db3,bb3,eb4,g4]@3 ~, ~@3 [db3,bb3,eb4,g4]@2 db3@2 ~@4 db3@3 ~@2, ~@8 db2@16 [db2,ab3,db4,f4]@7 ~", // Db Eb Eb7 Db
  B: "[bb2,ab3,db4,f4]@4 bb2@2 [bb2,bb3,eb4,g4]@5 ~ [bb2,db4,f4,ab4]@4 bb2@2 bb2 ~ bb2@2 bb2@2 [bb2,ab3,db4,f4]@3 ~ [bb2,bb3,eb4,g4]@4, ~@9 [bb3,eb4,g4]@3 ~@4", // Bbm7 Eb Bbm7 Eb
  C: "[c4,eb4,ab4]@16 ~@4 bb4@4 db4 ~@3 db4@4, ab2@3 ~ [db2,db3,bb3,eb4,g4]@2 [eb2,eb3,ab4]@2, ab3@4 ~@5 ab4@3 ~ f4@3", // Ab Eb7 Ab5
  D: "c4@3 c4@2 ~ ab2@2 ~@6 c3@2, [ab2,eb4,ab4]@5 [c4,eb4,ab4]@3 c2@8, ~@2 [c4,eb4,g4]!2, ~@5 c3@2 ~", // Ab5 Ab Cm
  E: "[ab3,db4]@4 ab3@2 ~@6 db3@3 ~ [ab2,c4]@4 ~@8 ab2@4, db2@15 ~@5 ab2@4 ab2@4 ~@4, [db3,f4]@4 db3@2 ~@2 eb4@5 ~@3, ~@6 [ab3,db4]@4 [ab3,db4,f4]@5 ~ ab3@16, ~@11 c4@2 [c4,eb4,ab4]@3", // Db5 Ab Db Db5 Db Ab
  F: "~@3 f3 c4 c3 ~ c3, f2 c2, [c4,f4,ab4]@4 [c4,f4,ab4]@4 [eb4,g4]@5 [c4,eb4,g4]@3, ~ f3@2 ~@3 c3 ~", // Fm Eb Cm
  G: "[db2,ab3,db4]@2 ~@5 bb3 eb2 ~@2 bb3@2 ~ eb3@2, [db3,f4]@2 db3!2 bb3 eb3 ~@2, ~@2 db2@6 ~ eb2@7, ~@3 ab3@2 [ab3,db4,f4]@3 [eb4,g4]@5 [bb3,eb4,g4]@3", // Db5 Db Eb
  H: "~@6 f2@2 [db2,db3,ab3,db4,f4]@2 db3 ~@3 [db4,f4,ab4]@2, f2@6 ~@5 [db2,bb3,eb4,g4]@5, [c4,f4,ab4]!2 ~@2, ~@2 f3@6 ~@5 db3@3", // Db Eb7 Fm
  I: "[[bb2,bb3,d4]@2 ~@5 eb3 eb3@6 ~@8 eb3@2 [ab2,c4]@2 ~ c4@2 ~@2 eb3, f4@5 ~@11 db6@8 ~@8, ~ bb2!3 [eb2,f4,ab4]@8 ~ ab2@2 ab2, ~@3 bb3@2 [bb3,d4,f4]@3 db4@4 ~@12 [ab3,eb4,ab4]@5 [c4,eb4,ab4]@3]/2", // Bb Ab Fm7 Bb Ab5 Ab
  J: "bb3 ~@2 [eb2,bb3,eb4,g4] [db2,ab3] ~@2 db3, [eb2,eb4,g4]@3 ~@2 db2@3, ~@2 eb3@2 eb3@4 ~@3 ab3@2 [ab3,db4,f4]@3, ~@3 bb3@2 ~@3 [db4,f4]@4 db3@2 ~@2", // Eb Db5 Eb Db
  K: "[bb2,db4,f4] ~@2 bb2 ab2 ~@2 ab2, bb3 ~@3 bb2@4 bb2@4 ~@8 ab2@8 ~@4, ~@3 [bb3,db4]@2 [bb3,db4,f4]@3 [ab3,c4,eb4,ab4]@4 [ab3,c4,eb4,ab4]@4", // Bbm Ab
  L: "~@4 eb3@4 ~@4 eb3@2 bb3 ~ [ab3,db4,f4]@4 db3@2 [db3,bb3,eb4,g4]@4 ~@2 [db3,db4,f4,ab4]@4, eb2@15 ~ db2@10 db2@6, [bb3,eb4,g4]@10 [bb3,eb4,g4]@5 ~@17", // Db Eb7 Db Eb
  M: "~@4 db2@2 db3 ~@5 db3@4 [ab2,ab3]@10 ab3@6, db2 ~ [db2,ab3,db4,f4]@2 ~@4, ~@2 [db3,bb3,eb4,g4]@5 ~@9 [c4,eb4]@16", // Ab Db Eb7 Cm
  N: "eb4@3 ~@2 [eb4,g4,c5]@2 db4 ~@7 c4, [c2,c4] [db2,f4,ab4], g4@2 c3@2 ~ db3!3, ~@3 eb4@2 ~@3 db4@5 db4@3, ~@11 db5@5", // Cm C Db
  O: "c4@2 ~@2 eb4 [ab2,c4,eb4,ab4] [c4,eb4] f3 ~ f3 c4 ~@3 f2 c3, [ab2,eb4,ab4]@5 ~@3 f2@6 ~@2, ~@4 ab3@4 ab3@4 [g3,g4]@4 ~@6 c4@4 c4@4 c4 ~, ~@6 c4@4 ~@6 f4@6 [f4,ab4]@9 ~, ~@24 f3@7 ~", // Ab Cm Ab5 G Fm
  P: "~@2 c4 ~@2 c4 [g3,c4,eb4,g4]@2 [db2,ab3]@2 ~@5 [eb2,bb3], c2@4 ~ db2@3, g4@3 ~@3 db3!2, [c4,eb4]@3 ~@8 ab3@2 [ab3,db4,f4]@3, ~ c3@3 c3@4 [db3,db4,f4]@5 ~@3", // Cm Db5 Eb5 Cm Db
  Q: "~@2 bb3 ~@4 c4 c4@2 ~@5 ab3, [eb3,eb4,g4]@2 eb3!2 ~ f3 f3@2, bb3@2 ~ [bb3,eb4,g4]@2 [bb3,eb4,g4]@3 ~@3 c4@2 [c4,f4,ab4]@3, ~ eb2@7 [f2,f4,ab4]@6 f2@2", // Eb Fm
  R: "[db2,ab3] ~@3 db3@2 ~@6 [db3,db4,f4,ab4]@4 [bb2,bb3,d4]@4 ~@10 [eb3,db4]@2, [db3,db4,f4]@3 [bb3,eb4,g4]@5 f4@5 ~@3, ~ db2@2 db2@2 db2@3 ~@3 bb3@2 [bb3,d4,f4]@3, ~@2 db3 ~@2 bb2!3", // Db5 Db Bb Eb7 Db Eb Bb
  S: "ab4@2 ~ eb3, f4, eb3@3 ~@5, db4 ~ db5@2, eb2 ~@7",
  T: "[ab2,c4]@2 ~@3 [c4,eb4,ab4]@2 eb3 bb3@2 ~@5 db3, [ab3,eb4,ab4]@2 ab3@2 ~ eb3 eb3@2, ~ ab2@2 ~ [eb2,eb4,g4]@3 eb2, ~@3 c4@2 ~@6 bb3@2 [bb3,eb4,g4]@3", // Ab Ab5 Eb
  U: "[ab3,db4,f4]@2 ~@5 db4 [bb2,db4]@2 ~@5 c4, db2@8 ~@3 db4@2 [db4,f4,ab4]@3, ~ db3!3 ~ bb2!3, ~@3 [ab3,db4]@2 [ab3,db4,f4]@3 [f4,ab4]@5 ~@3", // Db Bbm Db Db5 Db Fm
  V: "c4@2 ~@3 [c4,eb4,ab4]@3 [g2,bb3,eb4]@2 ~@4 g2@2, ab2@4 ~ g2!2 ~, [eb4,ab4]@5 ~@3 g4@5 ~@3, ~@2 ab3@2 ab3@4 ~@3 bb3@2 [bb3,eb4,g4]@3, ~@3 c4@2 ~@11", // Ab Eb Ab5 Eb
  W: "[db2,db3,ab3,db4,f4]@2 ~ [db3,bb3,eb4,g4]@2 ~@3 db2 [db3,bb3,eb4,g4]@2 db2 db3@2 [db3,bb3,eb4,g4]@2, ~@2 db2@3 db2@3 ~@4 [db2,ab3,db4,f4]@4, ~@12 [db3,db4,f4,ab4]@7 ~@13", // Db Eb7 Db
  X: "[[ab2,ab3]@2 ~@4 ab2!3 ab2@2 ~@5 db4@3 db4@2 ~ db3@2 db3@3 ~@4 c4, c4@13 ab4 ab2@2 db2@7 ~@4 db5@3 db3@2, eb4@5 eb4@10 db3@3 ~@3 db4@7 db3 db4@3, ~@2 ab2@2 ab2@2 ~@2 [bb4,c5]@3 [bb4,c5]@5 [f4,ab4]@5 ab4@11, ~@3 ab3@2 ~@3 eb5@8 ~@8 db6@8]/2", // Ab Bbsus2 Fm
  Y: "f2@3 ~@5 f3@8 [eb2,bb3]@4 eb2@6 ~@4 db3@2, [f4,ab4]@8 ~@5 [bb3,eb4,g4]@3, [f3,c4]@4 c4@2 ~@2 [eb3,eb4,g4]@5 ~@3, ~ f2@3 ~@3 eb2", // Eb5 Fm Eb F5 Eb
  Z: "ab3@4 ~@8 db3@4 ~@4 d3@4 ~@4 d3@3 ~, [db2,db4,f4]@8 db2@8 d2@15 ~, ~@4 db3@6 [ab3,db4,f4]@6 [bb3,d4,f4]@8 [bb3,d4,f4]@7 ~", // Db Bb
  AA: "[ab2,c4]@4 ab2@4 ab2@4 ~@2 c4@2 c2 ~ c2@2 ~@2 c4@2 c2@2 c2@2 c4@2 c4@2, [eb4,ab4] [c4,eb4,ab4] [c4,e4,g4] [e4,g4], ~@3 ab2 ~ c2 c4 c2", // Ab Ab5 Ab C Em
  AB: "f2@2 ~@4 f2@2 [eb2,bb3]@2 ~@5 [db3,ab3], [c4,f4,ab4]@4 [c4,f4,ab4]@4 [eb4,g4]@5 ~@3, ~ f2@2 ~@2 eb2!3, ~@11 bb3@2 [bb3,eb4,g4]@3", // Eb5 Db5 Fm Eb
  AC: "[db2,ab3,db4,f4]@2 db3 [db2,bb3,eb4,g4]@2 db3 [db2,db4,f4,ab4]@2 db3 ~ db3 ~ db3@2 [db2,db3,bb3,eb4,g4]@2, ~@9 [db2,bb3,eb4,g4]@2 db2@3 ~@2, ~@3 [ab3,db4,f4]", // Db Eb7 Db Eb7 Db
  AD: "[ab2,c4]@2 ~@3 [c4,eb4,ab4]@2 c4 c4@2 ~ c4@2 ~ c3@2, [eb4,ab4]@5 ~@3 [eb4,g4]@5 [c4,eb4,g4]@3, ~ ab2!2 ~ c2@4, ~@3 c4@2 ~@5 c3@2 ~@4", // Ab Ab5 Eb Cm
  AE: "db2 ~@13 c4@2 ~@8 eb4@2 ~@4 c4@2, [f4,ab4]@3 db3 [ab2,ab4]@3 ab2, db3@3 db5@5 ~@2 ab3@2 ab3@4, db4@2 db4@3 db4@3 [c4,eb4]@4 ~ [c4,eb4,ab4]@3, ~ db2@7 ~@3 c4@2 ~@3", // Fm Ab Cm Ab
  AF: "c4@4 ~@2 c4@4 [c4,f4,ab4]@4 c4@2 c4@4 ~@2 c4@4 ~@2 c3@2 ab3 ~, [f2,f4,ab4]@10 ~@6 c2@15 ~, ~@4 f3@12 [eb4,g4]@10 [c4,eb4,g4]@5 ~, ~@5 c3 ~@2", // Fm Eb Cm
  AG: "~@2 ab3 ~@4 bb3 eb2 ~@5 eb3 ~, db2@8 ~ eb2@6 ~, [ab3,db4,f4]@3 [ab3,db4,f4]@2 [ab3,db4,f4]@3 g4@5 ~@3, ~ db3@3 db3@2 db3@2 [eb3,bb3,eb4]@2 eb3@2 eb3@2 ~@2, ~@11 [bb3,eb4]@2 [bb3,eb4,g4]@2 ~", // Db Eb5 Eb
  AH: "c4@3 c4@2 [c4,f4,ab4]@2 ab3 [db2,db4]@2 db2 db2@2 ~ [db4,f4,ab4]@2, [f2,f4,ab4]@5 ~@3 f4 ~@4 db2@3, ~@16 ab3 ~@5 [bb3,eb4,g4]@10", // Fm Db Fm Eb
  AI: "[[bb3,d4,f4]@4 bb2@2 ~@6 bb2@4 [eb2,eb3,db4,f4,ab4]@32 [eb2,eb3,bb3,eb4,g4]@15 ~, bb2@3 ~@3 bb3@8 ~@50, ~@2 bb2 ~@13, ~@5 [d4,f4]@3 ~@24]/2", // Bb Db Eb Dm
  AJ: "[eb2,eb3,db4,f4,ab4]@2 ~@2 [eb2,eb3,db4,f4,ab4]@2 ~@10 ab3@4 ~@2 ab3 ~@3 [c4,eb4,ab4]@5 ~, ~@16 [c4,eb4,ab4]@9 ~@7, ~@16 ab2@3 ~ ab2@7 ~@5", // Db Ab
  AK: "bb3@4 ~@4 bb3 ~@3 eb2 ~@3 db2@3 ~ db2@3 ~ db2@2 ab3@2 db2 ~ ab3 ~, [eb4,g4]@9 ~ [bb3,eb4,g4]@6 [ab3,db4,f4]@9 ~ [db4,f4]@5 ~, eb2@3 ~ eb2@7 ~@21", // Eb Db
  AL: "bb3@4 bb2@2 bb3@2 bb2@2 ~@2 bb2@3 ~ ab2@4 ab2@4 [c4,eb4,ab4]@4 ab2@2 c4 ~, [db4,f4]@9 ~ [bb3,db4,f4]@4 ~@2 [c4,eb4,ab4]@7 ~@9, bb2@3 ~@29", // Ab Db Bbm Ab
  AM: "[eb2@3 ~ eb2@6 [bb3,eb4]@2 eb2 ~@3 [db3,db4,ab4]@5 ~ [c3,eb4,ab4]@5 ~ [bb2,db4,f4]@11 ~ [eb3,db4,f4,ab4]@2 ~ [eb3,db4]@2 [eb3,db4,f4]@2 ~@5 ab2@4 ~@2 c4@2 ab2@3 ~, [bb3,eb4,g4]@8 ~@2 g4 ~@5 f4@3 ~@3 c4@3 ~@3 bb3@7 ~@8 ab4 ~ ab4 ~@2 [c4,eb4]@9 ~ [eb4,ab4]@5 ~]/2", // Eb5 Db5 Ab Bbm Db Eb7 Db Eb …
  AN: "eb2@3 ~ eb2@3 ~ eb2@3 ~ eb2@4 db3@3 ~ db3@3 ~ db3@2 db4@2 db3@3 ~, [bb3,eb4,g4]@11 ~ bb3@2 ~@2 [db4,f4,ab4]@9 ~ [f4,ab4]@5 ~", // Eb Db Fm
  AO: "db4@4 bb2@3 ~ bb2@2 db4@2 bb2 ~ db4 ~@5 ab2@3 ~ ab2@2 c4@2 ab2@2 c4 ~, [f4,ab4]@9 ~ [f4,ab4]@5 ~ [eb4,ab4]@9 ~ [eb4,ab4]@5 ~, bb2@3 ~@29", // Fm Ab5
  AP: "bb3@4 g2@3 ~ g2@2 bb3@2 g2 ~@3 [db2,db4,f4]@5 ~ [db2,eb4,g4]@5 ~ [db2,f4,ab4]@4, [eb4,g4]@9 ~ [eb4,g4]@5 ~@17, g2@3 ~@29", // Db Eb7 Db Eb
  AQ: "~@2 [db2,eb4,g4]@5 ~ [bb2,d4,f4]@5 ~ [c3,eb4,g4]@5 ~ [bb2,f4,ab4]@5 ~ [c3,eb4,g4]@5 ~", // Eb7 Bb Cm Bb7 Cm
  AR: "[eb2,db4,f4]@5 ~ [eb2,eb4,g4]@5 ~ [eb2,f4,ab4]@5 ~ [eb2,eb4,g4]@5 ~ [eb2,db4,f4]@3 ~ [eb4,g4]@4, ~@14 eb2 ~", // Db Eb Fm7 Eb Db Eb
  AS: "~@13 c4@4 bb3@2 ~@2 [eb4,bb4]@4 ~@4 db4@3, ab2@16 ~ [db2,g4]@8 [eb2,eb3,ab4]@7, [eb4,ab4]@7 ~ eb4@8 ~ eb4@4 ~@4 db4@4 ~@3, ~@4 c4@8 ~@7 ab4@6 ~@2 f4@5", // Eb5 Dbdim Ab5
  AT: "~ c4@4 ~@8 c4@4 ~ eb4@2 bb3@2 [bb3,eb4,bb4]@4 db4 ~@3 db4@2, ~ [ab2,ab4]@17 ~@14, ~ eb4@8 eb4@8 bb3@2 ~ ab4@6 ~@2 f4@4, ~@5 c4@8 ~@4 [db2,db3,g4]@8 ~ [eb2,eb3,ab4]@6", // Eb5 Ab Dbdim Ab5
  AU: "[~@2 c4@4 ~@9 c4@3 ~ bb3@2 bb3@2 ~ [bb3,bb4]@4 ~@6 db4@4 ab4@10 ab4@30 ~@18, ~@2 [ab2,ab4]@16 ~ [db2,db3,eb4,g4]@9 [eb2,eb3,ab4]@9 ~ [ab2,eb4]@40 ~@18, ~@2 eb4@8 ~ eb4@7 ~@3 ab4@7 ~@3 f4@7 ~@58, ~@6 c4@8 ~@14 db4@5 ~@5 c4@5 ~@53]/3", // Bb Ab Eb7 Ab5
})).s("gm_piano").gain(0.56)

// chords · piano · soft notes
const piano_soft = note(`<
  ~ A B C D E@2 F G H@2 I J K L M N O P Q R S T U ~ V W X Y Z AA AB AC AD AE AF AG AH ~ AI AJ AK ~ AL AM AN AO ~@2 AP AQ
  ~ AR@2
>`.pickRestart({
  A: "~@2 db2@2 ~@3 db3 ~@2 db3 ~@5", B: "~@10 bb2 ~@21", C: "~@6 ab2@2 ~@7 eb3, ~ ab3 ~@2",
  D: "~@2 ab3@2 ab3@3 c3@3 ~ c4 ~@4, ~@7 c4 ~@8",
  E: "[~@14 ab3 ~@15 f3@6 ~@10 [c3,c4]@2 ~@2 c3@2 ~@2 c4@4 ~@6, ~@15 c4 ~@16]/2", // C
  F: "~@3 db4@2 ~@2 eb2 eb3@2 ~@2 eb3@2 ~ [f3,c4]", G: "~@7 [db2,db3] ~@8",
  H: "[~@3 d4@2 ~@2 db4 ~@6 eb3 eb3@3 eb3@2 eb3@2 ~@6 ab3@3 c4, ~@3 db4@3 ~@2]/2", I: "~@5 bb3 ~@2 db3@2 db3@2 ~@4",
  J: "~@3 f4@2 ~@2 c4 ~@7 eb3", K: "~@2 eb3 ~ db3 ~@3, ~@4 bb3 ~@11", L: "~@15 [c3,c4], ~@7 ab2",
  M: "~@2 c3@2 ~@2 g3@2 db3 ~@7", N: "ab3 ~@13 [c4,eb4]@2 ~@4 f3@4 ~@8", O: "~@3 [c4,eb4]@3 ~@10",
  P: "eb2 ~@13 f3@2 ~@2 f3@2 ~@12", Q: "~@11 d4@2 ~@3",
  R: "~@4 db4@2 ~ db4 ~ eb3@3 ~@2 eb2@2, ~ eb2@6 ~, ~@3 eb3 [db4,ab4]@4", S: "~@6 ab2@2 ~@7 ab3", T: "~@3 f4@2 ~@11",
  U: "~@11 eb4@2 ~@3", V: "~@10 bb4 ~ ab2@2 ~ db4, ~@5 ab3@11, ~@7 ab4@6 ~@3",
  W: "~@2 db3@2 ~@3 db5@2 ~ ab5@5 f3, ~@4 db3@2 ~ db2@9, ~@5 f4@11, ~@9 db5@2 ~@5",
  X: "~@6 c4@2 ~@4 eb3@3 ab3, ~@11 bb3@2 ~@3", Y: "db3@2 ~ ab3@2 ~@2 [d3,bb3] d3@2 ~@2 d3@2 ~@2", Z: "~ c4 ~@6",
  AA: "~@7 c4 ~@8", AB: "db3 ~@7", AC: "~@6 ab2@2 ~@4 c3@2 ~ [c4,f4]", AD: "~@4 db3@2 ~@3 ab3 ~@6",
  AE: "~@8 f2@4 ~@2 c3@3 ~@7 c3@4 ~@2 db3 ~, ~@3 f2 ~@4", AF: "db3 ~@29 f3@2, ~@30 c4 ~", AG: "~@2 f2!2 ~@4",
  AH: "~@7 bb3 ~@8", AI: "~@24 ab3@4 ab2 ~@3", AJ: "~@7 eb2 ~@8", AK: "~@14 bb3 ~@17",
  AL: "~@11 f4@2 ~@11 ab2@2 ~@4 c4 ~", AM: "~@12 [eb4,g4]@3 ~@15 db4 ~", AN: "~@6 db4@3 ~@21 eb4 ~",
  AO: "~@8 bb3 ~@5 db4 ~@17", AP: "~@19 bb3@2 bb3@4 ~@7, ~@17 db3@8 ~@7", AQ: "~@10 eb4 ~@5",
  AR: "[~@27 ab6@9 ab6@10 ~@18, ~@11 c4@35 ~@18]/2",
})).s("gm_piano").gain(0.28)

// drums · kick
const kick = s("bd").struct("<~@21 A@17 B C D@2 E F D@2 E G A ~@5>".pickRestart({
  A: "x ~@6 x!2 ~@7", B: "~ x", C: "~@8 x ~@6 x", D: "x ~@7 x ~@6 x", E: "x ~@7 x ~@2 x ~@2 x ~", F: "~ x ~@6 x ~@6 x",
  G: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2",
})).gain(0.6)

// drums · snare
const snare = s("sd").struct("<~@21 A@4 ~@4 A@3 ~@7 B A@2 C D A E C ~ A ~@5>".pickRestart({
  A: "~ x ~ x", B: "x!2 ~@4 x ~", C: "~ x ~@2", D: "~@8 x ~@2 x ~ x ~@10 x ~@7", E: "~ x ~@2 x ~@7 x ~@3",
})).gain(0.68)

// drums · low tom
const low_tom = s("lt").struct("<A B C ~@17 D ~@3 D ~ D ~ C ~ D@2 ~@3 D ~@3 E ~@3 F ~ G ~ H ~@6>".pickRestart({
  A: "~@31 x", B: "x ~@6 x", C: "~@14 x!2", D: "~@7 x", E: "x!2 ~@6", F: "~@11 x ~ x ~@18", G: "~@6 x!2 ~@8",
  H: "~ x!3 ~@9 x!3",
})).gain(0.68)

// drums · hihat
const hihat = s("hh").struct("<~@16 A ~ A ~@2 B@4 C@4 B@3 C@7 D B@2 E D B@2 E ~ B ~@5>".pickRestart({
  A: "~ x ~@2", B: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", C: "~ x ~ x", D: "~@8 x!3 ~ x!3 ~", E: "x!3 ~ x!3 ~@9",
})).gain(0.38)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@21 A@4 ~@4 A@3 ~@7 B A@2 C B A@2 C ~ A ~@5>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~@11 x ~@3 x", C: "~@3 x ~@3 x ~@8",
})).gain(0.23)

// … 40 more lines

More by Anna Oxa