Strudelify

Senza luce

Dik Dik

KeyF majorTempo77 bpm
0:00/0:00
// Senza luce — Dik Dik
// 77 bpm, 4/4, key F major. 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 70 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(77/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 · "FINGERDBAS"
const bass = note(`<
  ~@5 A B C D E F@2 G H I J K L M N@3 O P B C D E Q@2 R H I J K L M N@3 O P B C S E Q@2 R T U V W X Y Z@2 AA AB V W X Y
  Z@2 AA AC AD@3
>`.pickRestart({
  A: "~@4 f1@2 ~ f1 g1 f1 c2 a1@3 a1@2", B: "~ a1@2 ab1 g1 ~ g1@2 a1 bb1 c2 c1@3 c2 ~",
  C: "c2 c1 d1 f1@4 ~ f1 g1 a1@2 e1@2 b1 e2", D: "a1@4 bb1@3 bb1 g1 ~ g1@2 c2 c2@2 c1",
  E: "~ c1@2 c2 a1@2 c2 a1 g1 a1 c2 a1 d2@2 d2@2",
  F: "[a1 c2 d2 e2 a1 ~ a1 ~ a1 g1 a1 c2 d2 d1@2 d1@4 g1 a1@4 a1@2 g1 a1 bb1@2 a1@2]/2",
  G: "g1@3 g1 c2@2 c1 c1@2 c2@2 c2 c2@4", H: "g2 a2 c2 d2 bb1@2 ~ bb0 ~ bb0 bb1@6",
  I: "c2@4 d1@2 ~ d1 ~ d1 f1 g1 a1 c2 d2 f2", J: "c2 d2 a1 c2 d1@6 d2 c2@5", K: "c1@4 bb1@5 a1 g1 a1@3 a0@2",
  L: "a0@4 d1@6 ~ d1 a1@3 a1", M: "g1@2 ~ g1 gb1@6 ~ gb1 f1 a1 c2 d2",
  N: "[c2 d2 f2 d2 f1@2 ~ f1@2 g1 a1 c2 e1@6 ~ e1 a1 ~ a1 g1 a1@3 a1 ~ ab1@5 ~ ab1 ~ a1@2 a1 g1@2 ~ g1 d1@2 g1 a1]/3",
  O: "c2 d2 d1@2 db1@2 db2@3 db1@2 db2 c2@2 c1 d1", P: "f1 g1 a1 c2 f1@2 ~ f1 g1 f1 c2 a1@2 ~ a1@2",
  Q: "[a1 c2 d2 e2 a1 ~ a1 ~ a1 g1 a1 c2 d2 d1 ~ d1@4 g1 a1@4 a1@2 g1 a1 bb1@2 a1@2]/2",
  R: "g1@2 ~ g1 c2@2 c1 c1@2 c2@2 c2 c2@4", S: "a1@4 bb1@3 bb1 g1@2 g1@2 c2 c2@2 c1", T: "g2 a2 c2 d2 c2 c1 c2@4 bb1@6",
  U: "a1@4 g1@2 ~ g1 a1 g1 d2 b1@2 ~ b1@2", V: "~ b1@2 bb1 c2@2 b1@2 a1@2 g1 ~ d1!2 e1 d1",
  W: "d2 d1 e1 g1@4 ~ g1 a1 b1@2 gb1@2 db2 gb2", X: "b1@4 c2@3 c2 a1@2 a1@2 d2 d2@2 d1",
  Y: "~ d1@2 d2 b1@2 d2 b1 a1 b1 d2 b1 e2@2 e2@2",
  Z: "[b1 d2 e2 gb2 b1@2 b1 ~ b1 a1 b1 d2 e2 e1 ~ e1@4 a1 b1@4 b1@2 a1 b1 c2@2 b1@2]/2",
  AA: "a1@2 ~ a1 d2@2 d1 d1@2 d2@2 d2 d2@4", AB: "a2 b2 d2 e2 g1@2 ~ g1 a1 g1 d2 b1@3 b1@2",
  AC: "a2 b2 g1 ab1 a1 ~ a1 g1 a1!2 c2 db2 d2!2 c2 d2", AD: "[a1 g1 a1 g1@38 ~@7]/3",
})).s("gm_electric_bass_finger").gain(0.59)

// chords · french horn · "PRG.CHANGE"
const french_horn = note("<A B@7 C D@5 E@8 ~ F G@2 H@5 I@8 ~@2 J@7 ~@22>".pickRestart({
  A: "~@3 a3",
  B: "[c4@6 f4@2 c5@4 d5@4 c5@12 g5@5 ~ [f4,a4]@4 [c4,g4]@4 f4@4 g3@4 [f3,a3]@4 [g3,b3]@2, ~@6 a4@6 bb4@21 ~@9 bb3@8 ~@6]/7", // F C5 F G
  C: "[a3,db4] bb3 ~ a4, ~ d4@2 ~, ~ f4", // A
  D: "[g4 a4@2 [f4,d5]@2 c5 e4 [d4,f4]@2 [c4,e4]@2 [d4,f4]@2 [g3,c4]@4 f3@2 a3, c5@3 ~@2 g4@2 ~@10 d4@3]/5", // Dm C Dm C5
  E: "[e4 [d4,f4]@31]/8", F: "~ a4@2 [c4,g4], ~ f4@3",
  G: "[~ bb3@2 ~ e4 ~@2 [g3,b3], ~ f4@7, ~@12 c4@17 ~@3, ~@5 a3@3]/2", // G
  H: "[db4 ~@2 [g3,c4]@4 ~@2 e4 g3 f3@2 g3@2 ~@3 g3@2, a3@7 a3@4 a3@9, ~ d4@6 d4@8 d4@5, ~@2 f4@3, ~@9 c4@2 ~@4 bb3@2 c4@3]/5", // C5
  I: "[~ f3@2 ~ [c4,e4] ~@3 a3@24, ~ d4@31, ~@3 a3@5 ~@24, ~@3 f4@2 f4@27]/8", // C
  J: "[~@3 [c4,g4]@2 ~@3 e4 c4@2 [g3,b3] db4 ~@15, ~ a4@26 ~, ~ f4@20 ~@7, ~@5 bb3@4 ~@19]/7", // C5 G
})).s("gm_french_horn").gain(0.4)

// chords · string ensemble 1 · "PRG.CHANGE"
const string_ensemble_1 = note("<~@15 A@8 B@8 ~@2 C@8 D@6 E@8 F@3 G@8 ~@4>".pickRestart({
  A: "[~@12 [c4,e4]@8 f4@8 ~@4 db4@4 d4@4 e4@2 ~@6 db4@4 e4@4 ~@10 e4@2 [a3,f4]@8 g3@8 d4@4 c4@4 b3@2 c4@2 d4@4 a3@4 ~@8 gb3@4 [f3,bb3,c4]@6 [bb3,bb4] [a3,a4] [bb3,bb4] [a3,a4] [bb3,bb4] [c4,c5], ~ a3@16 ~@4 a3@2 ab3@2 ~ g3@2 ~@4, ~@4 f4@16 d4@12 ~@4 f3@8 g3@8 gb3@8 bb3@8 ~@40 [a3,d4]@9 ~@11, ~@14 e4@4 ~@3 d4@3 ~@4 d4@4 c4@10 ~@8 c4@4 ~@10, ~@30 f4@3 ~@5 e4@16 ~@10]/8", // C Dm Fsus4 Bb A Bb A Bb …
  B: "[[bb3,bb4] ~ [a3,a4] [g3,g4]@125]/8", // Bb A G
  C: "[~@4 [d4,f4]@8 [c4,e4]@8 f4@8 ~@4 db4@4 d4@4 e4@2 ~@6 db4@4 e4@4 ~@10 e4@2 [a3,f4]@8 ~@8 d4@4 c4@4 b3@2 c4@2 d4@4 a3@4 ~@8 gb3@4 [f3,bb3,c4]@6 [bb3,bb4] [a3,a4] [bb3,bb4] [a3,a4] [bb3,bb4] [c4,c5], ~@2 a3@12 e4@4 ~@3 d4@3 ~@2 gb3@4 bb3@4 ~@8 a3@4 ab3@4 ~@4 [a3,d4]@4 ~@6, ~@5 d4@3 ~ f3@2 g3@8 g3@7 g3@6, ~@14 d4@2 c4@5 ~@4 c4@2 ~@5, ~@30 f4@3 ~@5 e4@16 ~@10]/8", // Dm C Dm Fsus4 Bb A Bb A …
  D: "[[bb3,bb4] ~ [a3,a4] g3@73 d4@4 e4@2 d4@2 [g3,c4,e4]@8 ~@2 e4@2, ~ g4@31, ~@19 f4@4 ~, ~@19 a3@2 ~@2 [a3,d4,f4]]/6", // Bb A C Dm
  E: "[~@2 [c4,e4]@4 d4@4 ~@4 e4@4 [a3,gb4]@3 bb3@3 c4@2 ~@5 gb4@3 [c4,e4] [b3,d4] [a3,c4] [g3,b3] ~@2 gb4@2 ~@3 d4 [a3,db4,e4]@2 [b3,eb4,gb4]@2 e4@4 ~@8 [b3,g4]@2, f4@7 ~@2 d4@8 ~@2 d4@3 gb4 ~@4 d4@4 ~, ~ a4@55 gb4@8, ~@6 bb4@12 ~@3 g4@13 g4@8 g4@8 g4@12 ~@2, ~@5 c5@4 ~@4 b3@4 ~@2 a3@2 b3@2 ~@2 c4@4 a4@3]/8", // C D C Bm Am G A B …
  F: "[e4@4 gb4@8 b4@8 gb4@8 e4@8 ~@8 gb4@3 g4, ~ d4@6 [c4,g4]@5, ~ a4@4 a4@7, ~@3 g4@4 ~@2 d4@3]/3", // C5
  G: "[~@16 gb4@4 [c4,e4]@2 [b3,d4]@2 [a3,c4]@2 [g3,b3]@2 ~@4 gb4@4 ~@4 gb4@4 [a3,db4,e4]@4 [b3,eb4,gb4]@4 e4@8 ~@20 e4@4 gb4@8 b4@8 gb4@8 e4@8 ~@8 gb4@3 ~, ~ a4@31 gb4@8 ~@18 d4@6, ~ [b3,d4,g4]@4 g4@4 g4@4 g4@6 g4@4 g4@9, ~@7 d4@4 ~@4 d4@4 b3@2 d4@6 c4@5, ~@7 a3@2 b3@2 ~@2 c4@4 a4@4 a4@4 a4@7]/8", // C Bm Am G A B G
})).s("gm_string_ensemble_1").gain(0.32)

// other · lead 2 sawtooth · "PRG.CHANGE"
const lead_2_sawtooth = note("<~@66 A B@3>".pickRestart({
  A: "~@4 c6 e5 ~ a5 c6 d6 a5 c6 ~ d5 g5 a5", B: "[g5 a5 b5 d6 [b5,d6,g6]@34 ~@10]/3",
})).s("gm_lead_2_sawtooth").gain(0.26)

// chords · acoustic guitar steel · "PRG.CHANGE"
const acoustic_guitar_steel = note("<~@5 A B C D E F G H I J K ~@7 L@7 M@2 N@8 ~ O B C D K ~@24>".pickRestart({
  A: "~@4 [a2,c3,f3] ~@2 [a2,c3,f3] ~@2 [a2,c3,f3] ~ [a2,c3,f3] ~@2 [a2,c3,f3]", // F
  B: "~@2 [a2,c3,f3] ~ [g2,c3,f3] ~@2 [g2,c3,f3] ~@2 [g2,c3,f3] ~ [g2,c3,f3] ~@2 [g2,c3,f3]", // F Csus4
  C: "~@2 [g2,c3,f3] ~ [a2,c3,f3] ~@2 [a2,c3,f3] ~@2 [a2,c3,f3] ~ [g2,b2,e3] ~@2 [a2,db3,e3]", // Csus4 F Em A
  D: "~@2 [a2,db3,e3] ~ [bb2,d3,f3] ~@2 [bb2,d3,f3] ~@2 [bb2,d3,f3] ~ [g2,c3,f3] ~@2 [g2,c3,e3]", // A Bb Csus4 C
  E: "~@2 [g2,c3,e3] ~ [a2,c3,e3] ~@2 [a2,c3,e3] ~@2 [a2,c3,e3] ~ [a2,d3,f3] ~@2 [a2,d3,f3]", // C Am Dm
  F: "~@2 [a2,d3,f3] ~ [a2,c3,e3] ~@2 [a2,c3,e3] ~@2 [a2,c3,e3] ~ [a2,d3,f3] ~@2 [a2,d3,f3]", // Dm Am Dm
  G: "~@2 [a2,d3,f3] ~ [a2,c3,e3] ~@2 [a2,c3,e3] ~@2 [a2,c3,e3] ~ [bb2,c3,f3] ~@2 [bb2,c3,f3]", // Dm Am Bbsus2
  H: "~@2 [bb2,c3,f3] ~ [bb2,c3,f3] ~@2 [bb2,c3,f3] ~@2 [bb2,c3,f3] ~ [bb2,c3,e3] ~@2 [bb2,c3,e3]", // Bbsus2 C7
  I: "~@2 [bb2,c3,e3] ~ [a2,d3,f3] ~@2 [a2,d3,f3] ~@2 [a2,d3,f3] ~ [a2,d3,f3] ~@2 [a2,d3,f3]", // C7 Dm
  J: "~@2 [g2,c3,e3] ~ [a2,d3,f3] ~@2 [a2,d3,f3] ~@2 [a2,d3,f3] ~ [a2,d3,f3] ~@2 [a2,d3,f3]", K: "~@2 [g2,c3,e3] ~@13",
  L: "[~@4 [a2,c3] ~@2 [a2,c3] ~@2 [a2,c3,f3] ~ [a2,c3] ~@2 [a2,c3] ~@2 [a2,c3,f3] ~ [g2,c3] ~@2 [g2,c3] ~@2 [g2,c3,f3] ~ [g2,c3] ~@2 [g2,c3] ~@2 [g2,c3,f3] ~ [a2,c3] ~@2 [a2,c3] ~@2 [a2,c3] ~ [g2,b2,e3] ~@2 [a2,db3,e3] ~@2 [a2,db3,e3] ~ [bb2,d3] ~@2 [bb2,d3] ~@2 [bb2,d3,f3] ~ [g2,c3] ~@2 [g2,c3,e3] ~@2 [g2,c3,e3] ~ [a2,c3,e3] ~@2 [a2,c3,e3] ~@2 [a2,c3,e3] ~ [a2,d3] ~@2 [a2,d3] ~@2 [a2,d3] ~ [a2,c3,e3] ~@2 [a2,c3,e3] ~@2 [a2,c3,e3] ~ [a2,d3] ~@2 [a2,d3] ~@2 [a2,d3] ~ [a2,c3,e3] ~@2 [a2,c3,e3] ~@2 [a2,c3,e3] ~ [bb2,c3] ~@2 [bb2,c3,f3], ~@4 f3@3 f3@3 ~@2 f3@3 f3@3 ~@2 f3@3 f3@3 ~@2 f3@3 f3@3 ~@2 f3@3 f3@3 f3@10 f3@3 f3@3 ~@2 f3@16 f3@3 f3@3 f3@10 f3@3 f3@3 f3@10 f3@3 ~]/7", // Am F Am F C5 Csus4 C5 Csus4 …
  M: "[~@2 [bb2,c3,f3] ~ [bb2,c3] ~@2 [bb2,c3] ~@2 [bb2,c3] ~ [bb2,c3,e3] ~@2 [bb2,c3,e3] ~@2 [bb2,c3,e3] ~ [a2,d3] ~@2 [a2,d3] ~@2 [a2,d3,f3] ~ [a2,d3] ~@2 [a2,d3,f3], ~@4 f3@3 f3@3 f3@10 f3@3 f3@3 ~@2 f3@3 ~]/2", // Bbsus2 C7 D5 Dm D5 Dm
  N: "[~@2 [g2,c3,e3] ~ [a2,d3] ~@2 [a2,d3] ~@2 [a2,d3,f3] ~ [a2,d3] ~@2 [a2,d3] ~@2 [g2,c3,e3] ~@109, ~@4 f3@3 f3@3 ~@2 f3@3 f3@113]/8", // C D5 Dm D5 C
  O: "~@4 f3@3 [a2,c3,f3] ~@2 [a2,c3,f3] ~ [a2,c3,f3] ~@2 [a2,c3,f3]", // F
})).s("gm_acoustic_guitar_steel").gain(0.36)

// chords · string ensemble 2 · "PRG.CHANGE"
const string_ensemble_2 = note("<~@15 A@8 B ~@9 C@2 D@2 E@2 F G B ~@3 H I@4 J@8 K@2 L@7 ~@3>".pickRestart({
  A: "[~@12 [g3,c4]@8 a3@8 f4@4 [db4,e4]@4 f4@8 ~@4 db4@4 d4@6 e4@2 a4@2 bb4@2 c5 bb4 a4 g4 a4@8 g4@12 c5@2 d5@2 e5@4 d5@4 c5@4 b4@2 a4 b4 a4@4 gb4 g4 a4 b4 c5@6 bb4 a4 bb4 a4 bb4 c5, ~ f3@31, ~@5 d4@3 ~ d4@3 ~@20, ~@11 e4@3 ~@18]/8", // C5 Dbm
  B: "bb4 ~ a4 g4 ~@12", C: "[~ [f3,a3]@2 [g3,c4]@2 a3@2 f4, ~@5 d4@3]/2",
  D: "[[db4,e4]@2 f4@4 ~@2 db4@2 d4@3 e4 a4 bb4, ~ d4@3 ~@4, ~@3 e4@3 ~@2]/2", // Dbm
  E: "[c5 bb4 a4 g4 a4@8 g4@12 c5@2 d5@2 e5@4]/2", F: "d5@4 c5@4 b4@2 a4 b4 a4@4",
  G: "gb4 g4 a4 b4 c5@6 bb4 a4 bb4 a4 bb4 c5", H: "~@3 d4",
  I: "[[a3,f4]@4 [g3,e4]@6 [c4,g4]@2 a4@2 g4@2 f4@2 ~@2 c4@8 [d4,f4]@6 [e4,g4] a4 ~@8 e4@7 ~@13, ~@12 d4@8 ~@16 g4@15 ~@13, ~@18 e4@10 ~@7 f4@9 ~@20]/4", // Dm C C5 Dm Em
  J: "[~@12 gb4@8 [e4,c5]@2 [d4,b4]@2 c4@2 b3@2 ~@4 gb4@4 [b3,d4]@8 [db4,e4]@4 [eb4,gb4]@4 g4@6 ~ b4 ~@2 g4@2 gb4@4 ~@4 g4@2 gb4@2 [e4,g4]@8 [d4,gb4]@8 g4@6 gb4 e4 d4@8 c4@4 ~@4 d4@8 [gb3,gb4] [e3,e4] [gb3,gb4] ~, ~@4 g4@22 g4@6 ~@20 e4@8 ~@8 e4@7 ~@33 e4@8 ~@12, ~@2 b4@9 ~@3 a3@4 ~@28 b3@8 ~@2 g4@6 ~@2, ~@6 a4@6 a4@17 a4 a4@34]/8", // C G Bm Dbm Ebm Em D Gb …
  K: "[[g3,g4] [gb3,gb4] [g3,g4] a3 [b3,b4]@16 [c4,c5]@10 [d3,d4]@2, ~@3 a4@29]/2", // G Gb G B C D
  L: "[[e3,e4] [gb3,gb4] [g3,g4] a3 [b3,b4]@8 db5@4 [b4,eb5]@4 e5@8 d5@8 gb5@8 [b4,g5]@8 gb5@12 [b4,g5]@4 [d5,gb5]@8 e5@2 d5@2 ~@12 gb5@4 [g4,e5]@2 gb5@2 ~@12, ~@3 a4@9 a4@24 a4@16 a4@48 ~@12, ~@5 c5@4 ~@10 g5@4 ~@5, ~@5 c5 ~, ~@21 d5@3 ~@4]/7", // E Gb G B Em D C
})).s("gm_string_ensemble_2").gain(0.28)

// chords · lead 3 calliope · "PRG.CHANGE"
const lead_3_calliope = note("<~@49 A B ~@15 C D@3>".pickRestart({
  A: "~@5 [e4,e5] [c4,c5] [a4,a5] ~ [a3,a4] [bb3,bb4]@2 [f4,f5] ~ [e4,e5] [d4,d5], ~@4 a4@3 ~@9", // E C A Bb F E D
  B: "[e4,e5] [gb4,gb5] [g4,g5] [a4,a5] ~@12", C: "~@4 c5 e4 ~ a4 c5 d5 a4 c5 ~ d4 ~ a4, ~@7 g4",
  D: "[~ a4 ~ d5 ~@44, g4@41 ~@7]/3",
})).s("gm_lead_3_calliope").gain(0.41)

// chords · epiano1 · "E.PIANO"
const epiano1 = note(`<
  A B C D E@3 F G H@2 I J@2 K@4 L M@4 N@2 O P@2 Q@2 R@6 S T@3 U@3 V W X@3 Y@2 Z@3 AA AB@3 AC@4 AD AE AF AG AH@4 ~
>`.pickRestart({
  A: "~@3 d5 a4 ~ d5 [a4,d5,f5]@2 [a4,f5]@2 a4 ~@2 d5 ~, ~ bb3@6 bb2@8 ~, ~@2 a4@2 [d5,e5]@3 ~@2 d5@4 e5@2 ~, ~@5 a4@2 ~@5 [bb3,a4,f5]@3 ~", // Dm Dsus2 Bbmaj7
  B: "~@3 g4!2 ~ c5 [g4,c5,e5]@2 [g4,e5]@2 g4 ~@3 g4, [a2,e5]@5 g4@2 ~@5 [a3,g4,e5]@2 c5@2, [g4,c5]@4 [c5,d5]@2 ~@3 c5@4 d5@2 ~, ~@2 a3@5 a2@8 ~", // C A5 A7 C5 Csus2
  C: "~@3 bb4 f4 ~ bb4 [f4,bb4,d5]@2 [f4,d5]@2 ~@4 f4, [g2,d5]@7 g2@7 bb4@2, [f4,bb4]@2 f4@2 [bb4,c5]@3 ~@2 bb4@4 c5@2 ~, ~ g3@6 ~@5 [g3,d5]@3 ~, ~@5 f4@2 ~@4 f4@4 ~", // Bb Dm G5 Bb5 Bbsus2 G5
  D: "~@6 bb4@2 ~@6 d5 e5, c2@11 a4 bb4 c5@2 ~, c5 c3@3, ~ f4@2 f4 c5@4 c5@2 g4@5 ~, ~@2 bb4@3 f4@3 ~ e4@6 ~",
  E: "[~@7 bb4 ~@5 e5@2 ~ [e5,g5]@3 ~ [c5,f5]@5 [c5,f5,a5]@2 [g4,c5,f5]@8 ~ [bb4,c5,f5]@7 ~ [bb4,c5]@2 [a4,f5] ~, c2@5 ~@7, f5 c3@4 ~@7, ~ bb4@2 bb4 f5@4 e5 a4 [g4,bb4] [a4,c5] [bb4,d5] c5@2 [d5,f5]@5 ~@24 f5 ~@3, ~@2 c5@3 bb4 c5@2 ~ f4@11 a4@7 ~@19 c5@2]/3", // Em F5 F Csus4 Bbsus2 Dm Gm Am …
  F: "[g4,c5,f5]@3 ~ [a4,c5,f5]@4 ~ g4 ~ c5 [g4,b4,d5]@3 ~, ~@4 f4 a4 ~@2", // Csus4 F G
  G: "[g4,db5,e5]@4 [c5,d5,f5]@3 ~ [bb4,c5,f5]@3 g4 [bb4,c5,f5]@3 ~", // Dbdim Dm7 Bbsus2
  H: "[[bb4,c5,e5]@3 ~ [g4,c5,e5]@8 [a4,d5,f5]@8 [a4,c5,e5]@7 [a4,d5,f5] ~ [a4,d5,f5] [a4,d5,e5] ~]/2", // C7 C Dm Am Dm Asus4
  I: "[a4,d5,f5] [a4,c5,e5]@2 [c5,d5,f5]", // Dm Am Dm7
  J: "[[g4,bb4,d5,f5]@3 ~ [bb4,c5,f5]@8 [bb4,c5,e5]@6 ~@2 [a4,d5] a4 d5 [a4,d5,e5]@2 [a4,d5,f5]@2 [a4,d5,f5]@5, ~@10 f5 ~@5]/2", // Gm7 Bbsus2 C7 D5 Asus4 Dm
  K: "[[g4,c5,e5]@3 ~ [a4,d5]@3 [a4,d5]@2 [a4,d5,f5]@2 a4@2 a4@2 ~@3 [d5,f5] ~ [a4,d5,f5]@7 ~ [f5,a5]@5 [f5,a5,c6]@2 f5@6 [f5,c6]@2 bb5 ~@4 g5@3 ~@8 a4 [a4,d5,e5]@4, ~@4 f5@5 ~@2 f5@4 [a4,f5,a5]@4 ~@38 a4@2 ~@5, ~@7 e5@4 d5@7 ~@10 c5@7 ~@9 [e5,a5]@7 ~ [d5,f5]@7 ~@5, ~@13 [e5,g5]@4 [e5,g5]@2 ~@16 [a5,d6]@8 ~@15 d5@2 ~@4]/4", // C D5 Dm F F5 Asus4 Dm A5 …
  L: "[a4,db5,e5]@3 ~ [d5,a5]@3 ~@2 [gb4,e5]@2 ~@3 f4 bb4, ~@4 e5@5 ~@7, ~@7 [a4,d5,a5]@4 [bb4,d5,f5,a5]@5", // A D5 Gb7 D5 Bbmaj7
  M: "[[bb4,d5,f5,a5]@2 g5 f5 c5@4 ~ [c5,g5]@2 f5 ~@4 e4@3 ~ [c5,e5,a5]@8 ~@4 [ab4,b4]@3 ~ [a4,c5,e5]@3 ~ [c5,d5]@4 [c5,d5]@4 [d4,c5,d5,gb5]@3 c5 ~@6 bb4 ~ [bb4,c5,f5] ~ [bb4,c5,f5]@2, ~@4 [f5,a5]@7 ~ g5@8 ~@8 e5@7 ~@9 g5@7 ~@6 f4@2 ~@5, ~@8 f4@3 ~ c5@6 ~@22 a4@2 ~@10 [db4,c5,f5]@7 ~@5]/4", // Bbmaj7 C5 Am Abm Am Csus2 D7 Bbsus2 …
  N: "[~ [c5,e5]@2 ~ a4@4 ~@2 c5 g4@6 g4@2 ~ [bb4,c5,f5]@6 ~ [c4,bb4,c5]@2 [bb4,c5,f5] [a4,f5] ~, c4@2 ~@6 g4@3 ~@21, ~ bb4 ~@2 [c5,f5]@7 c5@8 ~@8 f5 ~@4, ~@9 a4@2 ~@19 c5@2]/2", // C Bbsus2 C7 Bbsus2 Dm F5
  O: "g4@2 ~ g4 [a4,c5,f5]@7 ~ [g4,b4,d5]@3 g4, [c5,f5] ~@3, ~ c4 ~@6", // F G F5
  P: "[[g4,db5]@3 g4 [bb4,d5]@4 [f4,bb4,c5]@3 [bb4,c5]@2 [bb4,c5,f5]@2 [bb4,c5,e5]@4 ~@4 a4@2 [a4,e5]@2 [a4,f5] ~ [a4,d5] d5@2, ~@11 f5 ~@8 [c5,e5]@5 ~@2 d5@2 f5@3]/2", // Gdim Bb Fsus4 Bbsus2 C7 A5 Dm D5 …
  Q: "[[d4,a4,d5,f5]@3 d5 [c5,e5]@4 [c5,e5]@2 a4 f5@2 a4 ~ [a4,d5]@2 [d4,a4,d5,f5]@2 ~@7 c5 ~ [bb4,d5,f5]@3 [d4,g4], ~@4 a4@2 ~@5 d5@3 d4@3 ~@8 a4@2 ~@5, ~@11 a4 ~ f5@4 ~@3 [c5,e5]@7 ~@5, ~@15 a5@4 ~@13]/2", // Dm C D5 Dm Bb G5 C
  R: "[[g4,bb4,d5,f5]@3 g4 [bb4,c5,f5]@5 [bb4,c5,f5]@2 ~ [bb4,e5]@2 ~ bb4@2 [bb4,c5]@2 ~ [a4,d5]@2 [a4,d5]@2 a4 [a4,d5]@2 [a4,d5]@2 [a4,d5,f5]@2 [a4,d5,f5]@2 [c5,e5]@3 [d5,f5]@2 [a4,d5,f5]@3 [a4,d5,e5]@2 [d5,f5]@2 [a4,d5,f5] [d5,f5] a4@2 [a4,e5,g5]@2 ~ [a4,d5,f5]@5 [a4,d5,f5]@2 ~ [c5,f5]@3 [c5,f5]@2 [c5,f5,c6]@2 ~ a5@5 [a5,c6]@2 bb5 [g5,a5]@7 ~@6 [d5,f5]@3 [d5,e5,a5]@4, ~@12 c5@5 ~@5 e5@5 e5@6 ~@3 a4 ~@6 a4 ~@19 bb5@4 ~@17 a5@7 ~@5, ~@15 d5@4 ~ f5@5 f5@4 ~@18 [d5,f5]@4 ~@9 a5@7 ~ [f5,d6]@7 ~@9 f5@5 ~@7, ~@87 [e5,g5]@4 ~@5]/6", // Gm7 Bbsus2 Bbdim Bbsus2 D5 Dm C Dm …
  S: "[db5,e5,a5]@4 d5@3 [a4,d5]@2 [d5,e5]@2 d5 [d5,f5]@2 bb4 ~, ~@4 a5 ~@2 a5@4 ~ [bb4,a5] ~@3", // A D5 Dsus2 Dm Bbmaj7
  T: "[[d5,f5]@2 [bb4,d5,f5,a5] ~ [c5,f5,a5]@4 ~ [c5,g5]@2 f5 ~@4 e4@4 e5@5 [a4,e5]@3 [b4,e5]@7 ~ [c5,e5]@4 [c5,d5]@4 [c5,d5,g5]@3 ~, [bb4,a5] ~@7 f4@4 [d5,g5]@8 c5@7 ~@21]/3", // Dm Bbmaj7 F C5 A5 E5 C Csus2 …
  U: "[[c5,d5,gb5]@3 ~ [bb4,c5]@2 [bb4,c5,f5]@3 [bb4,c5,f5]@2 bb4 [bb4,c5,f5] ~ [bb4,c5,f5]@5 ~ c5@4 [f4,c5]@3 ~ [g4,c5]@3 [g4,c5]@5 [f4,bb4,c5]@4 [bb4,c5]@3 [f4,bb4,c5]@2 [f4,c5] [f4,a4,c5]@2, ~@4 f5 ~@15 a4@6 ~@19 bb4@3]/3", // D7 Bbsus2 F5 C5 Fsus4 Bbsus2 Fsus4 F5 …
  V: "[c4,g4,c5]@3 g4 [a4,c5]@4 ~@2 a4 ~ [g4,b4,d5]@4, f4 ~@3 f4@7 ~@5, ~@8 [a4,f5]@3 ~@5, ~@9 c5@2 ~@5", // C5 Am G Dm
  W: "[g4,db5,e5]@3 ~ [f4,bb4,c5]@3 ~ [bb4,c5,f5]@3 f4 [bb4,c5,f5]@3 bb4", // Dbdim Fsus4 Bbsus2
  X: "[[c4,bb4,c5,e5]@4 [g4,c5,e5]@3 [g4,c5,e5]@3 ~ c5 [a4,c5,f5]@3 ~@3 c5@2 [g4,c5]@3 [g4,c5,d5]@3 e5 ~ [a4,d5]@3 ~@2 [a4,d5,g5]@2 f5 [c5,e5]@3 [a4,c5,e5]@4 a4 [c5,f5]@3 ~, ~@4 a4 ~@5 d5@2 ~@3 [c5,f5]@4 ~ e5@6 ~@2 f5@7 ~@13, ~@15 a4@2 a4@2 ~@12 a5@4 ~@13, ~@16 d4@3 ~@12 [a4,d5]@2 ~@11 bb4 ~@3, ~@32 d4@3 ~@13]/3", // C7 C F C5 Gsus4 D5 Dsus4 C …
  Y: "[[bb4,c5,f5]@3 ~ [bb4,c5,f5]@3 g4@2 ~ bb4 ~ [g4,bb4,c5,e5]@3 [g4,bb4,e5]@2 ~ e5@2 [a4,d5]@3 [a4,d5]@2 gb5 [bb4,d5,g5]@5 ~, ~@7 [bb4,c5,f5]@4 ~@4 c5@5 gb5@5 ~@7, ~@9 g4@2 ~@6 [g4,bb4,f5]@3 ~@12]/2", // Bbsus2 C7 Edim D5 Gm Bbsus2 Gm7
  Z: "[[c5,d5,g5]@3 ~ a4@4 ~@2 d5 b4 [a4,d5]@3 [a4,d5]@4 ~ [c4,e5]@2 [b3,d5]@2 [a3,c5,g5]@2 [b4,g5] ~ [d5,g5]@3 c5 [d5,gb5]@3 d5 [b4,d5,g5]@5 [b4,d5] b4 ~ [a4,db5,e5]@4, ~@4 [b4,d5]@5 b4@2 ~@9 g5 ~ g5 ~@9 c5 ~@8 g5@2 ~@5, ~@8 [a4,g5]@3 ~@15 g3@2 d3@8 ~@12]/3", // Csus2 D5 C Bm Am7 Em G5 D …
  AA: "[a4,b4,eb5]@3 ~ [g4,c5,e5]@3 [g4,e5] [c5,e5]@3 c5 [c5,d5,g5]@3 ~, ~@8 g4 ~@7", // B7 C Csus2
  AB: "[[c5,d5,gb5]@3 ~ [d5,gb5]@2 [a4,d5,gb5]@3 [a4,d5] ~ d5 [d5,g5]@2 b4 [b4,d5,g5]@3 [b4,g5] d5 [a4,d5,gb5] ~ [d5,gb5]@3 [a4,a5]@2 d5 [d5,g5]@2 ~ [d5,g5]@3 b4 d5 [d5,gb5]@2 ~ [d5,gb5]@3 a4 d5 e5@3 [c5,g5], ~@4 a4 ~@4 gb5@2 ~ b4 ~@9 a4 ~@2 d5 ~@2 b4 ~@2 b4@2 ~@6 a4@2 ~@3 g5@2 ~@2]/3", // D7 D D5 G5 G Em D A …
  AC: "[[c5,g5]@2 ~ c5 [c5,d5,g5]@3 [c5,d5,g5]@3 [c5,g5] c5 [c5,d5,gb5]@2 ~ [d5,gb5]@2 c5 ~ c5 [b4,d5,g5]@5 [b4,g5] ~ b4 [a4,d5]@2 ~ d5@3 a4@2 [c4,e5]@2 [b3,d5]@2 [a3,c5,g5]@2 [g3,b4]@2 [c5,d5,g5]@3 [c5,g5] [d5,gb5]@2 c5 ~ [b4,g5] ~@2 d5@2 b4 d5 ~ [db5,e5]@3 a4, e5@3 ~@7 d5@2 ~@3 c5 ~@2 d5@2 ~@6 d5@2 ~@3 a4@2 ~@3 g5 ~ g5 ~@5 d3@7 ~@4 b4 ~@4 a4 ~@3, ~@48 c5 ~@3 d5@3 g5@4 ~@5]/4", // C5 Csus2 C5 D7 D G Em D5 …
  AD: "[a4,b4,eb5]@3 ~ g4@2 ~ g4@2 g4 c5@2 [d5,g5]@4, ~@4 [c5,e5]@5 ~ e5 ~ c5@2 ~@2", // B7 G5 C
  AE: "[d5,gb5]@4 [b4,d5,gb5] ~ [d5,gb5]@2 b4 [b4,d5] ~ d5 [b4,g5] ~@2 [e5,g5,b5], c5@2 ~@4 b4 ~@2 gb5@2 ~ e5@2 ~@2", // D Bm D Bm Em
  AF: "~ [gb5,a5]@2 [e5,g5,b5] gb5 [d5,gb5,a5]!2 ~ [gb5,a5]@2 d5 [b4,e5,g5] ~ [b4,g5] ~ b4, ~ e5 ~@6 d5 ~@4 e5@2 ~", // Gbm Em D Gbm Em
  AG: "[e5,g5]@3 ~ [b4,d5,gb5]@2 ~ [d5,gb5]@4 ~ [e5,g5]@2 ~ [e5,g5], b4 ~@6 b4 ~@8", // Em Bm D Em
  AH: "[[c5,g5]@2 ~ c5 [c5,d5,g5]@3 [c5,d5,g5]@3 [c5,d5,g5] ~ [c5,d5,gb5]@3 ~ d4@2 g3 ab3 [a3,g4,c5,d5,g5]@2 ~@4 c4 db4 ~@6 [a4,c5,e5]@2 [g2,a4,b4,d5]@28, e5@3 ~@12 [c5,d5,gb5]@4 ~@3 a2@4 ~@4 d3@2 d3@4 ~@28, ~@23 [g4,c5,d5,g5]@2 [g4,c5,d5,g5]@2 ~ g5@8 ~@28, ~@24 a3@2 ~@2 [d4,c5,e5]@5 d4@3 ~@28, ~@31 [b4,d5,gb5]@5 ~@28]/4", // C5 Csus2 D7 Am7 Am G D7 Gsus4 …
})).s("gm_epiano1").gain(0.19)

// chords · epiano1 · "E.PIANO" · soft notes
const epiano1_soft = note(`<
  A ~ B ~@17 C D E ~@2 F G H I J ~@2 K ~@2 L M ~@3 N O P Q R S T@2 U V W X Y Z AA AB ~ AC ~ AD AE AF AG ~ AH ~@5
>`.pickRestart({
  A: "~@4 bb2@3 ~@8 [a4,c5]", B: "~@12 c5 ~@3", C: "~@2 c5!2 ~@12", D: "~@3 [e4,b4,d5] ~@7 a4 ~@4", E: "~@11 c5 ~@4",
  F: "~@10 c5!2 ~@4", G: "~@7 f4 ~@8", H: "~@3 bb4 ~@5 c5@2 ~@5", I: "~@2 a4 ~@3 a4@4 ~@4 a4 ~",
  J: "~@3 d5 ~@7 [a4,e5] ~@3 bb4", K: "~@3 g4 ~@4 f5@3 ~@3 a4 ~, ~@8 a4 ~@7", L: "db5@3 ~@13", M: "~@9 [gb4,a4]@2 ~@5",
  N: "~@3 d5 ~@12", O: "~@10 a4 [f4,c5] ~@4", P: "~@8 f4@2 f4 ~@5", Q: "~@2 f4@2 ~@11 g4", R: "~@7 f4 ~@2 f4 ~@5",
  S: "~@11 g4 ~@4", T: "~@3 a4 ~@12", U: "~@3 [g4,bb4] ~@7 [g4,c5] ~@4", V: "~@3 g4 ~@12", W: "~@3 c5 ~@12",
  X: "~@2 a4 ~@13", Y: "~@2 c5 ~@8 d5 ~@4", Z: "~@3 a4 ~@6 g4 ~@4 c5", AA: "~@3 c5 ~@6 a4 ~@5",
  AB: "~@8 [a4,gb5] ~@5 b4 ~", AC: "~@9 c5 ~@6", AD: "~@10 g5 ~@5", AE: "~@3 d5 ~@2 b4 ~@4 b4 ~@2 a4 ~",
  AF: "~@3 a4 ~@11 c5", AG: "~@3 c5 ~ gb5 ~@2 gb5 ~ b4 ~@5", AH: "~@2 b4 d5 ~@7 d5 ~@4",
})).s("gm_epiano1").gain(0.12)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C B A B A B A B A B A B
  A B A B D E ~@2
>`.pickRestart({
  A: "~@4 x!2 ~@4 x!2 ~ x ~@2", B: "x ~@2 x ~@3 x ~ x ~@2 x ~ x ~", C: "x ~@2 x!3 ~@4 x!2 ~ x ~@2",
  D: "~@4 x ~@2 x ~@2 x ~@2 x ~@2", E: "x ~@3 x ~ x!2 ~@8",
})).gain(0.41)

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

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

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

stack(
  bass, french_horn, string_ensemble_1, lead_2_sawtooth, acoustic_guitar_steel, string_ensemble_2, lead_3_calliope,
  epiano1, epiano1_soft, kick, snare, hihat, open_hat
)