Strudelify

Angeli negri (Angelitos negros)

Leali

KeyD minorTempo85 bpm
0:00/0:00
// Angeli negri (Angelitos negros) — Leali
// 85 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 65 bars on a 48-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.

// chords · rock organ
const rock_organ = note(`<
  ~@6 A B C D C E F G H I J K C D L M@2 N@2 O@2 P@2 Q@2 R@2 S@2 T U V E V E W X@2 Y@2 O@2 Z@2 Q@2 R@2 AA@2 AB@2 AC E
  AD@4 ~
>`.pickRestart({
  A: "[a4,d5,f5]", B: "[g4,c5,e5]", C: "[f4,bb4,d5]@47 ~", D: "[a4,db5,e5]", E: "[a4,db5,e5]@47 ~", F: "[f4,bb4,d5]",
  G: "[a4,db5,e5]@39 ~@2 e4@2 ~ b3@2 a3@2, ~@13 g4 ~@2, ~@40 f4@3 [c4,d4]@3 ~@2", H: "[a4,d5,f5]@23 ~",
  I: "[g4,c5,e5]@23 ~", J: "[f4,bb4,d5]@23 ~", K: "[a4,db5,e5]@23 ~",
  L: "[db5,e5]@2 ~@9 e3@3 ~@34, a4@4 g4@2 [d4,e4]@2 b3@2 f3@3 ~@35, ~@5 f4@2 c4@2 [g3,a3]@3 ~@36", // Dbm Dsus2 Gsus2
  M: "[[a4,d5,f5]@84 ~@11 c5, ~@42 c2 [g2,a2] [c3,d3] [g3,a3] [d4,e4] [a4,b4], ~@85 [d2,e2,f2]@2 b2@2 [e3,f3]@2 [b3,c4]@2 [f4,g4]@3]/2", // Dm Gsus2 Csus2 Gsus2 Dsus2 Asus2 Dm Fmaj7 …
  N: "[bb5@29 ~ a5@6 bb5@6 c6@5 ~ d6@35 ~ g5@5 ~ f5@5 ~, d5@47 ~, g5@27 ~@5]/2", O: "[[db5,e5,a5]@95 ~]/2",
  P: "[a4,d5,f5]/2", Q: "[[g4,c5,e5]@95 ~]/2", R: "[[bb4,d5,f5]@95 ~]/2",
  S: "[[a4,db5,e5]@83 ~ [db5,e5]@3 ~@3 g4 f4 e4 d4 ~@2, ~@14 a4 ~]/2", T: "[a4,d5,f5]@47 ~", U: "[g4,c5,e5]@47 ~",
  V: "[bb4,d5,f5]@47 ~", // Bb
  W: "[a4,db5,e5]@4 g4 f4 e4 d4 c4 b3 a3 g3 f3 e3 d3 ~@25 a2 [b2,c3,d3] [e3,f3] [g3,a3] [b3,c4] [d4,e4] f4 [g4,a4]", // A Bm Fmaj7 Gsus2 Cmaj7 Dsus2 Gsus2
  X: "[[d5,f5,a5]@83 ~ [d5,a5]@2 c5@2 [a4,b4] g4 f4 [d4,e4] c4 [a3,b3] g3 [e3,f3], ~@83 f5@2 ~@11]/2", // Dm D5 Asus2 Dsus2 Asus2 Fmaj7
  Y: "[bb5@29 ~ a5@6 bb5@6 c6@5 ~ d6@36 g5@5 ~ f5@6, d5@31 ~, g5@27 ~@5]/2", Z: "[[a4,d5,f5]@95 ~]/2",
  AA: "[[a4,db5,e5]@83 ~ [a4,db5,e5]@6 f4 e4 d4 c4 [a3,b3] g3]/2", AB: "[[a4,c5]@47 ~ [a4,d5]@48, f5]/2",
  AC: "[a4,c5,f5]@47 ~", AD: "[d5@24 c5@24 b4@25 ~ bb4@34 ~ gb5@83, f5@9 ~@7, a4@4 ~@5 [a4,d5]@7]/4",
})).s("gm_rock_organ").gain(0.28)

// bass · electric bass finger
const bass = note(`<
  ~@6 A B C D E D F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF C AG AH AI AJ AK AL AM AN AO AP AQ AR AS
  AT AU AV AW AX AY AZ BA BB@4
>`.pickRestart({
  A: "d2@17 ~ a1@6 d2@5 ~ d2@11 ~ d2@5 ~", B: "c2@18 g1@6 c2@12 g1@6 c2@5 ~",
  C: "bb1@17 ~ bb1@5 ~ bb1@11 ~ f1@6 bb1@5 ~", D: "a1@18 e1@5 ~ a1@6 db2@6 e2@6 a1@6",
  E: "bb1@17 ~ f1@6 bb1@5 ~ bb1@11 ~ bb1@6", F: "bb1@17 ~ f1@5 ~ bb1@5 ~ bb1@11 ~ bb1@5 ~",
  G: "a1@8 ~ a1@2 ~ a1@3 db2@3 e2@3 a1@3", H: "d2@17 ~ a1@6 d1@4 ~@2 d1@12 d2@3 d1@3",
  I: "c2@16 ~@2 g1@6 c2@11 ~ g1@6 c2@6", J: "bb1@17 ~ g1@5 ~ bb1@5 ~ f1@5 ~ bb1@10 ~@2",
  K: "a1@15 ~@3 e1@5 ~ a1@12 e1@6 a1@5 ~", L: "bb1@17 ~ f1@6 bb1@5 ~ bb1@11 ~ f1@6",
  M: "a1@17 ~ e1@6 a1@12 e1@5 ~ a1@5 ~", N: "a1 ~@7", O: "d2@18 a1@5 ~ d2@4 ~@2 d2@11 ~ a1@6",
  P: "d1@18 a1@5 ~ d2@6 a1@6 d1@12", Q: "g1@17 ~ d1@6 g1@17 ~ bb1@6", R: "g1@17 ~ d1@5 ~ g1@9 d2@9 g1@5 ~",
  S: "a1@17 ~ e1@6 a1@17 ~ g2@6", T: "a1@3 a2 a1@2 e1 a1", U: "d2@17 ~ a1@6 d1@16 ~@2 d1@4 ~@2",
  V: "d1@18 d2@11 ~ d1@12 d2@6", W: "c2@17 ~ g1@5 ~ c2@16 ~@2 c2@5 ~", X: "c2@18 g1@6 c2@17 ~ g1@6",
  Y: "bb1@18 bb1@5 ~ bb1@18 f1@6", Z: "bb1@26 ~@4 bb1@6 f1@5 ~ f2@6", AA: "a1@17 ~ e1@5 ~ a1@18 a2@6",
  AB: "a1@18 e1@5 ~ a1@12 e1@11 ~", AC: "d1@17 ~ a1@6 d2@18 a1@5 ~", AD: "c2@17 ~ c2@5 ~ c2@12 g1@6 c2@6",
  AE: "bb1@17 ~ bb1@4 ~@2 bb1@12 f1@6 bb1@5 ~", AF: "a1@18 e1@6 a1@11 ~ a2@3 a1@9", AG: "a1@18 e1@6 a1@17 ~ e1@5 ~",
  AH: "a1@3 ~@13", AI: "d2@17 ~ a1@5 ~ d2@12 a1@11 ~", AJ: "d1@18 a1@5 ~ d2@5 ~ a1@6 d1@11 ~",
  AK: "g1@16 ~@2 g1@6 gb1@17 ~ gb1@6", AL: "f1@17 ~ f1@5 ~ e1@16 ~@2 e1@5 ~", AM: "a1@18 a1@5 ~ a1@18 e1@6",
  AN: "a1@18 a2@6 a1@17 ~ a1@6", AO: "d2@17 ~ a1@5 ~ d2@17 ~ a2@5 ~", AP: "d2@17 ~ a1@6 d2@12 a1@6 d2@6",
  AQ: "c2@17 ~ g1@5 ~ c2@17 ~ c2@5 ~", AR: "c2@17 ~ g1@6 c2@17 ~ c2@5 ~", AS: "bb1@17 ~ f1@5 ~ bb1@17 ~ bb1@5 ~",
  AT: "bb1@17 ~ f1@5 ~ bb1@12 d2@6 f1@6", AU: "a1@15 ~@3 a1@4 ~@2 a1@17 ~ e1@5 ~",
  AV: "a1@17 ~ a1@4 ~@2 a1@12 g1@5 ~ e1@4 ~@2", AW: "f1@17 ~ f1@5 ~ f1@17 ~ f1@5 ~", AX: "d2@15 ~@3 d2@4 ~@2 d2@20 ~@4",
  AY: "c2@15 ~@3 c2@4 ~@2 c2@17 ~ c2@4 ~@2", AZ: "db2@15 ~@3 db2@4 ~@2 db2@23 ~", BA: "d2@23 ~ c2@24",
  BB: "[b1@26 bb1@33 ~ d1@85 ~@47]/4",
})).s("gm_electric_bass_finger").gain(0.46)

// other · pad sweep
const pad_sweep = note(`<
  ~@13 A@2 B C D@3 ~ E@2 F@4 ~@7 G@2 B C H@3 ~ E@2 I J@3 K@2 L@2 M@2 N@2 O@2 P Q R S@3 ~
>`.pickRestart({
  A: "[~@47 d5@49]/2", B: "c5@47 ~", C: "bb4@23 ~", D: "[a4@46 ~ bb4@46 ~@2 a4@49]/3", E: "[~@23 d6@71 ~@2, d5@31 ~]/2",
  F: "[g4@22 ~ gb4@23 ~ f4@22 ~@2 e4@23 ~@49 a5@46 ~@3, ~@95 a4@91 ~@6]/4", G: "[~@47 d5@47 ~@2]/2",
  H: "[a4@46 ~ bb4@46 ~@2 a4@48 ~]/3", I: "g4@24 gb4@23 ~", J: "[f4@23 ~ e4@59 ~ e5@59 ~]/3", K: "[d4@95 ~]/2",
  L: "[c5@47 ~]/2", M: "[bb4@31 ~]/2", N: "[a4@91 ~@5]/2", O: "[f5@31 ~]/2", P: "f5@23 ~", Q: "e5@47 ~",
  R: "d5@23 ~ c5@23 ~", S: "[b4@25 ~ bb4@33 ~@3 d5@81 ~]/3",
})).s("gm_pad_sweep").gain(0.29).pan(0.4)

// other · drawbar organ
const drawbar_organ = note(`<
  A@3 B C@2 D E F G ~@4 H E I J ~@5 K L M N O@2 P@2 Q@2 R@2 S T U V ~@5 W L X Y Z@2 AA@2 AB@2 AC@2 AD@2 AE B AF@4 ~
>`.pickRestart({
  A: "[[c4,c5]@4 ~@2 e5 f5 [c4,c5,a5]@4, [f4,a4], f5 ~, ~ [d4,b4] ~]/3", B: "[db4,e4,g4,db5,g5]",
  C: "[d4,f4,a4,d5,f5]/2", D: "f4@29 ~ e4@6 f4@5 ~ g4@5 ~", E: "a4@41 ~ f4@3 e4@3",
  F: "f4@21 ~@3 f4@5 ~ e4@6 f4@6 g4@6", G: "e4@43 ~@5", H: "f4@29 ~ e4@6 f4@5 ~ g4@6",
  I: "f4@22 ~@2 f4@6 e4@5 ~ f4@5 ~ g4@6", J: "e4@23 ~", K: "bb4@29 ~ a4@5 ~ bb4@6 c5@5 ~", L: "d5@36 g4@5 ~ f4@6",
  M: "e4@17 ~ db5@3 d5@3", N: "e5@23 ~ a4@21 ~@3", O: "[f4@59 ~ e4@11 ~ f4@12 g4@11 ~]/2",
  P: "[a4@83 ~ f4@5 ~ e4@5 ~]/2", Q: "[f4@60 e4@11 ~ f4@11 ~ g4@11 ~]/2", R: "[e4@85 ~@11]/2",
  S: "f4@30 e4@6 f4@6 g4@5 ~", T: "a4@14 f4 e4", U: "f4@29 ~ e4@4 ~@2 f4@5 ~ g4@5 ~", V: "e4@5 ~",
  W: "bb4@29 ~ a4@6 bb4@6 c5@5 ~", X: "e4@23 ~ a4@11 ~ db5@6 d5@6", Y: "e5@43 ~@5",
  Z: "[f4@58 ~@2 e4@12 f4@11 ~ g4@11 ~]/2", AA: "[a4@71 ~ f4@12 e4@11 ~]/2", AB: "[f4@59 ~ e4@12 f4@11 ~ g4@11 ~]/2",
  AC: "[e4@7 ~]/2", AD: "[[c4,f4,a4,c5]@48 ~@24 e5@11 ~ f5@11 ~, f5@71 ~@25, ~ [f4,a4,d5]]/2", AE: "[c4,f4,a4,c5,a5]",
  AF: "[d4@24 c4@23 ~ b3@26 ~@34 [a3,d4,gb4]@84, [a3,f4]@107 ~@85]/4", // D Dm
})).s("gm_drawbar_organ").gain(0.44)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@4 A B ~@11 C@2 D E F@2 G H I J ~@8 K L@2 M N O ~ P Q R S T U@3 ~@6 V@4 W X@3 ~
>`.pickRestart({
  A: "~@5 d4@3 ~@3 f4@4 ~@3 d4@4 ~@8 c4@3 ~@3 f4@3 ~@2 c4@3 ~@4, d3 c3",
  B: "~@5 b3@3 ~@3 f4@3 ~@3 b3@3 ~@9 bb3@3 ~@3 f4@3 ~@3 bb3@4 ~@3, b2@23 bb2@24 ~",
  C: "[~@47 d4@2 ~@4 bb3@6 ~@12 bb4@23 ~@2, ~@59 d4@33 ~@4, ~@65 f4@27 ~@4]/2", D: "e4@2 ~@4 db4 ~@5 [db4,e4,a4]@35 ~",
  E: "[a3,e4,a4] ~@23", // A5
  F: "[~@6 [a2,a3]@5 ~ f3@6 [a2,a3]@6 [g3,g4]@5 ~ a2@5 ~ f3@16 ~ [a2,a3]@6 [f3,f4]@6 ~ a2@5 ~ g3@5 ~ a2@6 [f3,f4]@5 ~ a2@6, d4@95 ~, ~ d3@93 ~@2, ~@11 f4@6 ~@12 a3@6 f4@16 ~@14 a3@6 g4@6 a3@6 ~@6 a3@6 ~]/2", // A G A F
  G: "~@3 [d3,d4] ~@2 [g3,g4] ~@2 d3 ~@2 [gb3,gb4]@12, ~@17 d4@2 ~@29", // D G Gb
  H: "~@3 [d3,d4] ~@2 [f3,f4] ~@2 d3 ~@2 [e3,e4]@12, ~@17 d4@2 ~@29", // D F E
  I: "~@6 db4@2 ~@4 e3@2 ~@3 [db3,db4]@2 ~@5 [a2,a3]@24, ~@5 db3@2 ~@4 e4@2 ~@35", // Db A
  J: "~@5 [db3,db4]@2 ~@5 e3@2 ~@4 db3@2 ~@4 [a3,a4]@24, ~@11 e4@2 ~@4 db4@2 ~@29", K: "~@12 a4@11 ~ d5@16 a4@8",
  L: "[c5@23 g4@29 ~@9 bb4@10 d5@12 f5@13]/2", M: "e5 a4", N: "~@11 d5@12 c5@16 ~ bb4@8", O: "a4@14 ~ a4@4 g4@4 a4@25",
  P: "~@6 a3@5 ~ f3@5 ~ a2@6 [g3,g4]@6 [a2,a3]@5 ~ f3@5 [a2,a3]@7, ~@5 a2@6 f4@5 ~ a3@5 ~@13 f4@6 ~@7", // G A
  Q: "~@5 [a2,a3]@6 [f3,f4]@6 ~ a2@5 ~ g3@5 ~ a2@5 [f3,f4]@6 [a2,a3]@6 ~, ~@17 a3@6 g4@6 a3@6 ~@13", // A F A
  R: "~@6 d4@3 ~@3 g4@3 ~@3 d3@5 ~ gb3@24, ~@5 d3@5 ~ g3@6 d4@3 ~@3 gb4@25",
  S: "~@6 d4@2 ~@4 f3@5 d3@4 ~@3 e4@23 ~, ~@5 d3@5 ~@2 f4@2 ~@3 d4@2 ~@4 e3@24 ~",
  T: "~@6 db3@2 ~@3 [e3,e4]@2 ~@4 db3@2 ~@4 [a2,a3]@22 ~@3, ~@5 db4@2 ~@10 db4 ~@30", // E A
  U: "[~@6 [db3,db4]@2 ~@4 e4@2 ~@3 [db3,db4]@2 ~@5 a3@48 [g3,g4]@23 ~ f4@42 ~@6, ~@12 e3 ~@10 a4@49 ~@23 f3@44 ~@5]/3", // Db G
  V: "[[f3,f4]@4 ~@2 [a3,a4]@4 ~@2 c4@3 ~@3 a3@3 ~@3 f3@3 ~@3 a3@3 ~@3 c4@3 ~@3 a3@3 ~@3 d3@4 ~ [a3,a4]@3 ~@3 [d4,d5]@3 ~@4 a4@3 ~@3 d4@4 ~@2 [a3,a4]@4 ~@2 d5@3 ~@2 [a3,a4]@4 ~@2 [f3,f4]@4 ~@2 [a3,a4]@4 ~@3 c5@4 ~ [a3,a4]@4 ~@2 [f3,f4]@4 ~@2 [a3,a4]@4 ~@3 c5@4 ~ [a3,a4]@4 ~@3 e3@3 ~@2 [a3,a4]@4 ~@3 db5@4 ~@2 a4@5 ~ e4@4 ~ [a3,a4]@4 ~@3 db5@4 ~ [a3,a4]@4 ~@3, ~@11 c5@4 ~@2 a4@4 ~@2 f4@4 ~@2 a4@4 ~@2 c5@4 ~@2 a4@4 ~@2 d4@3 ~@15 a3@3 ~@3 d3@3 ~@9 d4@3 ~@21 c4@4 ~@20 c4@3 ~@9 e4@4 ~@8 db4@3 ~@3 a3@3 ~@3 e3@4 ~@8 db4@3 ~@10]/4", // F A D A F A F A
  W: "~@5 d4@3 ~@4 f4@4 ~ d4@4 ~@8 c4@3 ~@3 f4@3 ~@4 c4@3 ~@3, ~ c3",
  X: "[~@6 b3@4 ~@2 f4@4 ~@3 b3@4 ~@10 bb3@4 ~@4 f4@5 ~@5 bb3@9 ~ [d3,gb4]@83, b2@26 ~ bb2@33 [a3,d4]@84]/3", // D D5
})).s("gm_string_ensemble_1").gain(0.46)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~@6 A B C D E F C G H I J K L M ~ N O P Q R S T U V@2 W X Y Z AA AB AC AD AE AF AG N O P Q R S T AH V AI W AJ Y Z AK
  AL AM AN ~@5
>`.pickRestart({
  A: "~@3 d4 ~@2 f4 ~@2 d5 ~@14", B: "~@3 c4 ~@2 e4 ~@2 c5 ~@14", C: "~@3 bb3 ~@2 d4 ~@2 bb4 ~@14",
  D: "~@6 a3@2 ~@4 db4@2 ~@4 a4@2 ~@10 db4@2 ~@4 a3@2 ~@4 db4 ~@5", E: "~@6 bb3@3 ~@3 d4@2 ~@4 bb4@2 ~@28",
  F: "~@6 a3@2 ~@4 db4 ~@5 a4@2 ~@4 g4@2 ~@4 e4 ~@5 db4 ~@5 a3@2 ~@4",
  G: "~@3 a4 ~@2 g4 ~@2 e4 ~@2 d4 ~@2 db4 ~@2 d4 ~@2 e4 ~@2", H: "~@3 d4 ~@2 f4 ~@2 d5 ~@2 a4 ~@2 f4 ~@2 d4 ~@2 f4 ~@2",
  I: "~@3 c4 ~@2 e4 ~@2 c5 ~@2 g4 ~@2 e4 ~@8",
  J: "~@6 bb3@3 ~@3 d4@3 ~@3 bb4@3 ~@3 f4@4 ~@2 d4@2 ~@4 bb3@3 ~@3 d4@2 ~@4",
  K: "~@3 a3 ~@2 db4 ~@2 a4@2 ~ g4 ~@2 e4 ~@2 d4 ~@2 e4 ~@2",
  L: "~@6 [d4,bb4]@3 ~@9 [d4,bb4]@3 ~@9 [d4,bb4]@2 ~@10 [d4,bb4]@5 ~", // Gm
  M: "~@6 [a3,e4] ~@11 e4@2 ~@10 e4@2 ~@10 a4@2 ~@4, ~@18 a3 ~@11 a3 ~@11 e4 ~@5", // A5
  N: "~@6 [d4,a4]@2 ~@10 [d4,a4] ~@11 a4@2 ~@10 [d4,a4] ~@5, ~@30 d4 ~@17", // D5
  O: "~@6 [d4,a4] ~@11 [d4,a4] ~@11 [d4,a4] ~@2 [d4,a4] ~@8 [d4,a4] ~@5", // D5
  P: "~@6 g5@2 ~@10 [g4,g5]@2 ~@10 gb4@2 ~@10 [gb4,gb5] ~@5, ~@6 g4 ~@23 gb5 ~@17", // G Gb
  Q: "~@6 [f4,f5] ~@11 [f4,f5] ~@11 [e4,e5] ~@11 [e4,e5]@2 ~@4", // F E
  R: "~@6 [db4,d5] ~@5 [e4,e5] ~@5 [db4,db5] ~@5 [a3,a4] ~@23", // Dmaj7 E Db A
  S: "~@6 [db4,d5] ~@5 [e4,e5] ~@5 [db4,db5] ~@5 [a3,a4]@13 ~@11", // Dmaj7 E Db A
  T: "~@6 d4@2 ~@4 f4@2 ~@4 d4@3 ~@3 a4@2 ~@4 d4@3 ~@3 f4@2 ~@4 d4@2 ~@4",
  U: "~@3 d4 ~@2 f4 ~@2 d4 ~@2 a4 ~@2 d4 ~@2 f4 ~@2 d4 ~@2", V: "~@3 c4 ~@2 e4 ~@2 c4 ~@2 g4 ~@2 c4 ~@2 e4 ~@2 c4 ~@2",
  W: "~@6 bb3@2 ~@4 d4@3 ~@3 bb3@2 ~@4 f4@3 ~@3 bb3@3 ~@3 d4@3 ~@3 bb3@2 ~@4",
  X: "~@6 bb3@2 ~@4 d4@3 ~@3 bb3@3 ~@3 f4@2 ~@4 bb3@4 ~@2 d4@3 ~@3 bb3@2 ~@4",
  Y: "~@3 a3 ~@2 db4 ~@2 a3 ~@2 e4 ~@2 a3 ~@2 g4 ~@2 a3 ~@2",
  Z: "a4@2 ~@4 a3@2 ~@4 g4@2 ~@4 a3@2 ~@4 e4@3 ~@3 a3@2 ~@4 d4@4 ~@2 db4@2 ~@4",
  AA: "~@3 d4 ~@2 f4 ~@2 a4 ~@2 d5 ~@2 a4 ~@2 f4 ~@2 d4 ~@2",
  AB: "~@6 c4@2 ~@4 e4@2 ~@4 g4 ~@5 c5@2 ~@4 g4@2 ~@4 e4@2 ~@4 c4 ~@5",
  AC: "~@6 bb3@3 ~@3 d4@3 ~@3 f4@2 ~@4 bb4@4 ~@2 f4@3 ~@3 d4@3 ~@3 bb3 ~@5",
  AD: "~@3 a3 ~@2 db4 ~@2 e4 ~@2 a4 ~@2 g4 ~@2 e4 ~@2 db4 ~@2",
  AE: "~@6 bb3@3 ~@3 d4@2 ~@4 f4@2 ~@4 bb4@4 ~@2 f4@2 ~@4 d4@2 ~@4 bb3@2 ~@4",
  AF: "~@6 a3@3 ~@3 db4@3 ~@3 e4@2 ~@4 a4@2 ~@4 g4@2 ~@4 e4@2 ~@4 db4@2 ~@4", AG: "a3 ~@15",
  AH: "~@3 d4 ~@2 e4 ~@2 d4 ~@2 a4 ~@2 d4 ~@2 g4 ~@2 d4 ~@2",
  AI: "~@3 c4 ~@2 e4 ~@2 c4 ~@2 f4 ~@2 c4 ~@2 e4 ~@2 c4 ~@2",
  AJ: "~@6 bb3@2 ~@4 e4@3 ~@3 bb3@3 ~@3 f4@2 ~@4 bb3@4 ~@2 d4@3 ~@3 bb3@2 ~@4",
  AK: "f4@3 ~@3 a4@2 ~@4 c5@2 ~@4 a4@2 ~@4 f4@2 ~@4 a4@2 ~@4 c5@2 ~@4 a4@2 ~@4",
  AL: "d4@2 ~@4 a4@2 ~@4 d5@2 ~@4 a4@2 ~@4 d4@3 ~@3 a4@2 ~@4 d5@3 ~@3 a4@2 ~@4",
  AM: "f4@3 ~@3 a4@2 ~@4 c5@3 ~@3 a4@3 ~@3 f4@3 ~@3 a4@2 ~@4 c5@3 ~@3 a4@2 ~@4",
  AN: "a4@3 ~@3 db5@2 ~@4 e5@2 ~@4 db5@2 ~@4 a4@2 ~@4 db5@2 ~@4 e5@3 ~@3 db5@2 ~@4",
})).s("gm_pizzicato_strings").gain(0.36).pan(0.3)

// chords · piano
const piano = note("<A@5 B@8 C@7 D@4 E@8 F@7 G@6 E@8 H@7 I@5>".pickRestart({
  A: "[[f4,a4,c5,f5]@47 [b3,d4,f4,b4]@47 ~ [f4,a4,c5,f5]@47 ~ [a3,db4,e4,g4]@47 ~ [d4,f4,a4,d5]@23 ~ [d4,f4,a4,c5]@23 ~ [d4,f4,a4,b4]]/5", // F Bdim F A7 Dm Dm7 Bm7b5
  B: "[~@23 [d4,f4,a4,bb4]@23 ~ [d4,f4,a4,d5]@47 ~ [c4,e4,g4,c5]@47 ~ [bb3,d4,f4,bb4]@47 ~ [a3,db4,e4,a4]@47 ~ [bb3,d4,f4,bb4]@47 ~ [a3,db4,e4,a4]@47 ~ [bb3,d4,f4,bb4]@47 ~ [a3,db4,e4,a4]]/8", // Bbmaj7 Dm C Bb A Bb A Bb …
  C: "[~@47 [d4,f4,a4,d5]@47 ~ [c4,e4,g4,c5]@47 ~ [bb3,d4,f4,bb4]@47 ~ [a3,db4,e4,a4]@47 ~ [bb3,d4,f4,bb4]@47 ~ [a3,db4,e4,a4]@49]/7", // Dm C Bb A Bb A
  D: "[~@47 [d4,f4,a4,d5]@95 ~ [g4,bb4,d5,g5]@23 ~ [g4,bb4,d5,gb5]@23 ~ [g4,bb4,d5,f5]]/4", // Dm Gm Gm7
  E: "[~@23 [g4,bb4,d5,e5]@23 ~ [a3,db4,e4,a4]@95 ~ [d4,f4,a4,d5]@95 ~ [c4,e4,g4,c5]@95 ~ [bb3,d4,f4,bb4]@49]/8", // Em7b5 A Dm C Bb
  F: "[~@47 [a3,db4,e4,a4]@95 ~ [d4,f4,a4,d5]@47 ~ [c4,e4,g4,c5]@47 ~ [bb3,d4,f4,bb4]@47 ~ [a3,db4,e4,a4]@47 ~ [bb3,d4,f4,bb4]]/7", // A Dm C Bb A Bb
  G: "[~@47 [a3,db4,e4,a4]@95 ~ [d4,f4,a4,d5]@95 ~ [g4,bb4,d5,g5]@23 ~ [g4,bb4,d5,gb5]@23 ~ [g4,bb4,d5,f5]]/6", // A Dm Gm Gm7
  H: "[~@47 [a3,db4,e4,a4]@95 ~ [f4,a4,c5,f5]@47 ~ [d4,f4,a4,d5]@47 ~ [f4,a4,c5,f5]@47 ~ [a3,db4,e4,g4]@47 ~ [d4,f4,a4,d5]]/7", // A F Dm F A7 Dm
  I: "[~@23 [d4,f4,a4,c5]@24 [d4,f4,a4,b4]@25 ~ [d4,f4,a4,bb4]@33 ~ [d4,gb4,a4,d5]@94 ~@39]/5", // Dm7 Bm7b5 Bbmaj7 D
})).s("gm_piano").gain(0.41)

// drums · kick
const kick = s("bd").struct("<~@6 A@2 B@2 A@2 B A@7 C A D A@11 E A@6 C A@18 C ~@4>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!3 ~@2", C: "x", D: "x!2", E: "x ~@3 x!2 ~@2",
})).gain(0.61)

// drums · rim
const rim = s("rim").struct("<~@6 [~ x ~ x]!14 ~@45>").gain(0.55)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@20 A ~ B ~@3 A ~@7 A ~@6 C ~ D ~@3 A ~@17>".pickRestart({
  A: "~@7 x", B: "~@13 x ~@2", C: "~@15 x", D: "~@10 x ~ x!2 ~@2",
})).gain(0.49)

// … 54 more lines

More by Leali