Strudelify

I Let a Song Go Out of My Heart

Ellington

KeyD♭ majorTempo108 bpm
0:00/0:00
// I Let a Song Go Out of My Heart — Ellington
// 108 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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 · piano
const piano = note(`<
  A B C D E F G H I J K L M@2 N O I P Q R S@2 T U V W X Y M@2 N O I P Z AA AB AC AD AE AF AG AH AI AB AC AD AE AF AG AJ
  AK AL AM AN@2 AO AP@3 AB AC AD AE AF AG AH AI AQ@2 AR AS AF AG AH AI AB AC AD AE AF AG AJ AK AT AU AV AW AX AY AZ BA
  BB BC BD BE BF BG BH BI@2 BJ@2 BK BL@2
>`.pickRestart({
  A: "~@4 [bb5,bb6] ~@5 f6@2 eb6@4 ~ eb6 [db5,db6]@3 ~@3, ~@10 f5 ~ eb5@6 ~@6, ~@8 f6 ~@3", // Bb Db
  B: "eb6@4 f6 eb6 [db5,db6]@2 ~@2 [eb5,eb6] ~@5 [gb4,a4,db5,f5]@8, eb5@3 ~@5 f6@3 ~", // Db Eb Gbm
  C: "~@4 [bb4,bb5] ~@5 [f4,f5] ~ eb5@4 f5 eb5 [db4,db5]@3 ~@3, ~@2 eb4 ~", // Bb F Db
  D: "eb5@4 f5 eb5 [db4,db5]@2 ~@2 [eb4,eb5] ~@5 [gb3,a3,db4,f4]@8, eb4@3 ~@5 f5@3 ~", // Db Eb Gbm
  E: "db3@6 ab2@4 [db4,eb4,ab4]@6 [db4,eb4,ab4] ~@5 db2 ~, [db4,eb4,bb4]@9 ~ db2@11 ~@3", // Dbsus2 Eb7
  F: "[f4,db5]@3 ~@3 [gb4,db5]@4 ~@2 [f4,db5]@3 ~ eb4 ~@5 d4 ~", // Db Gb5 Db
  G: "[bb2,ab3]@3 ~ [bb2,ab3] ~@5 [ab4,d5,f5,bb5] ~@5 [bb2,ab3]@5 ~ [bb2,ab3] ~", // Bb7
  H: "~@6 ab3@4 c4@2 ~@4 [ab3,b3,d4,f4]@7 ~, ~@10 b3 ~@13", // Abdim
  I: "[eb2,db4,gb4,bb4]@4 [db4,f4,ab4]@6 ~@2 [gb2,db4,gb4,bb4]@3 ~@3 [g2,db4,f4,g4]@3 ~ [db4,gb4,ab4] ~, ~@2 f2@4 ~@5 ab2", // Ebm7 Db Gb Gm7b5 Dbsus4
  J: "~@6 ab2@15 ~ ab2@2, ~@2 [ab3,gb4,ab4,bb4,db5]@9 ~", // Gb
  K: "db2@4 [bb3,eb4,f4,ab4] ~@7 [db2,ab3,bb3,eb4,f4,ab4]@6 [ab3,bb3,eb4,f4,ab4]@6", // Bbsus4 Bbm7 Absus2
  L: "[eb3,f4,bb4]@9 ~ [ab2,gb4,ab4,bb4,db5]@12 ~@2, db4@7 ~@17", // Ebsus2 Gb
  M: "[[db3,ab3,db4]@2 ~@8 [d4,eb4,a4] ~@7 db6 ab5 eb5 ~ ab5 [bb4,eb5] ~ eb5 bb4 f4 bb4 f4 c4 ~@9 db2 ~ ab4@6, ~@5 bb4 ~@2 db4@16, ~@16 ab4@25 ~@7, ~@11 db2@9 ~@4, ~@31 f4@17]/2", // Db5 D Eb5
  N: "~@6 g4@5 ~ [ab3,c4,d4,f4]@4 [bb2,ab3,c4,d4,f4] ~@7, bb2@2 ~, ~@4 [ab3,c4]@7 ~@13, ~@5 [d4,f4]@6 ~@13", // Dm7b5 Bb7 Ab Dm
  O: "g4@6 ~@6 bb4@4 [ab3,c4,d4,f4] ~@7, [ab3,c4,d4]@5 ~@3, ~@2 f4@3 ~@3", // Dm7b5
  P: "~@3 ab2@8 ab2, ~@2 [ab3,gb4,ab4,bb4,db5]@9 ~", Q: "db2@4 [bb3,eb4,f4,ab4] ~@7 [db4,e4,g4]@6 [db4,e4,bb4]@6, ~ g2",
  R: "db2@2 ab2@2 [db3,bb3,eb4,f4,ab4] ~@3 db3@2 ab2@2 [bb3,eb4,f4,ab4] ~ ab2@2 ~@2 [bb3,e4,g4]@3 ~ [db4,gb4]@2, ~@6 db2 ~ db3@4", // Bbm7 Bbsus4 Edim Gb5
  S: "[~ bb4 c5 db5@2 gb5@3 bb4 db5@2 ~@6 [c4,e4]@7, [eb2,bb3,db4,gb4]@8 ~@3 [ab3,c5,f5]@13]/2", // C Ebm7 Fm
  T: "~@4 ab2@7 ~@5 ab2@8, [ab3,db4,gb4,ab4]@11 ~ [ab3,db4,gb4,ab4]@12", // Dbsus4
  U: "ab4@4 db2@6 ~@2 [bb3,db4,f4,ab4]@3 ~ db3@2 [c3,c4,eb4,ab4]@3 ~@3, [db3,bb3,db4,f4] ~@3", // Bbm7 Ab Bbm
  V: "[bb2,bb3,f4,ab4]@4 [bb3,db4,f4,ab4] ~@5 [ab3,bb3,db4,f4,ab4]@13 ~, db4 ~@11", // Bb7 Bbm7
  W: "b2@4 [a4,d5,gb5] ~@5 [a4,d5,gb5]@2 ~@4 [ab4,db5,e5]@5 ~ [ab4,db5,e5] ~, ~@4 e2@3 ~", // D Dbm
  X: "~@3 ab4@8 ~, a2@5 e4@17 ~@2, ~ ab3@10 ~, ~@3 b3@20 ~, ~@2 db4@9 ~",
  Y: "[db4,f4,bb4]@4 [db4,f4,ab4] ~@5 [ab3,c4,f4] ~@5 [ab3,c4,eb4]@8, eb2@5 ab2@7", // Bbm Db Fm Ab
  Z: "db2@4 [bb3,eb4,f4,ab4] ~@7 [bb3,db4,eb4,gb4]@6 [bb3,db4,eb4,gb4]@6, ~ ab2", // Bbsus4 Ebm7
  AA: "db2@2 ab2@2 [db3,bb3,eb4,f4,ab4] ~@5 [ab2,bb3,db4,eb4,gb4]@13 ~", // Bbm7 Ebm7
  AB: "db3@4 [bb3,eb4,f4,ab4] ~@7 [b3,eb4,f4,bb4]@2 ~@4 [b3,eb4,f4]@4 db3@2, ~@12 db3 ~@5 bb4@3 ~@3", // Bbsus4 Bmaj7 Fm7b5
  AC: "[b3,eb4,f4,ab4]@4 [b3,eb4,f4,ab4] ~@11 [b3,eb4,f4,ab4] ~@7", // Fm7b5
  AD: "bb2@4 [d4,f4,ab4,bb4] ~@5 bb2 ~ [d4,ab4,c5] ~@5 [d4,f4,ab4,c5]@3 ~ bb2 ~, ~@6 f4 ~@5", // Bb7 Dm7b5
  AE: "[f4,bb4]@2 ~@4 [d4,f4,bb4]@4 bb2 ~ [d4,f4,ab4,c5]@3 ~ [d4,f4,bb4] ~@7, d4 ~@23", // Bb5 Bb Dm7b5 Bb
  AF: "eb3@4 [db4,f4,bb4] ~@7 bb2@4 eb2 ~ [db4,f4,bb4] ~@5", // Bbm
  AG: "ab2@4 [bb3,db4,eb4,gb4] ~@7 [ab2,bb3,eb4,gb4]@12, ~@6 db4@5 ~", // Ebm7 Ebm
  AH: "db3@4 [bb3,eb4,f4,ab4] ~@7 bb2@4 [d4,gb4,bb4] ~@7", // Bbsus4 Daug
  AI: "[eb3,db4,f4,bb4]@7 ~@3 [ab2,c4,d4]@14, ~@5 [gb3,e4]@6 ~", // Bbm Dm7b5 Gb7
  AJ: "db3@4 [bb3,eb4,f4,ab4] ~@7 [gb2,bb3,e4,ab4]@4 ~@2 [gb2,bb3,e4,ab4]@4 ~@2", // Bbsus4 Gb7
  AK: "db3@4 [bb3,eb4,f4,ab4] ~@7 [b3,eb4,f4,ab4,bb4]@4 [b3,eb4,f4,ab4,bb4] ~@7", // Bbsus4 Fm7b5
  AL: "~@4 [bb3,db4,gb4] ~@7 [bb3,db4,gb4]@3 ~@7 [bb3,db4,g4] ~", // Gb Gdim
  AM: "~@6 [bb3,db4,g4] ~@5 [bb3,db4,g4]@3 ~ [bb3,db4,g4] ~@7", // Gdim
  AN: "[[bb3,eb4,f4,ab4]@9 ~ [bb3,eb4,f4,ab4] ~@11 [b3,eb4,f4]@8 ~@4 [a3,eb4,f4,ab4,db5]@12 ~@2]/2", // Bbsus4 Fm7b5 Db
  AO: "~@4 [bb3,db4,gb4] ~@7 [bb3,db4,gb4] ~@5 [bb3,db4,gb4]@3 ~ [bb3,db4,g4] ~", // Gb Gdim
  AP: "[~@6 [bb3,db4,g4] ~@5 [bb3,db4,g4]@3 ~ [bb3,db4,g4] ~@5 [eb4,f4,ab4,c5]@12 [eb4,e4,ab4,b4]@10 ~@2 [db4,eb4,gb4,bb4]@11 ~ [bb3,db4,eb4,ab4]@13 ~]/3", // Gdim Fm7 Emaj7 Ebm7 Bbm7
  AQ: "[db3@4 [bb3,eb4,f4,ab4] ~@7 [eb4,f4,bb4]@2 ~@4 [a3,db4,eb4,bb4]@4 db3@2 ab4@3 ~@13 [b3,eb4,f4,ab4] ~@7, ~@12 a3@5 ~@5 [bb3,db4,eb4]@4 ~@22, ~@12 db3 ~@35]/2", // Bbsus4 Ebsus2 Eb7 Fm7b5 Eb7
  AR: "bb2@4 [d4,f4,ab4,bb4] ~@5 bb2 ~ a3@5 ~ [a3,f4,ab4]@3 ~ [f4,bb4]@2, ~@12 f4@2 ~@8 [bb2,d4] ~, ~@12 ab4 ~@11", // Bb7 Db Bb5 Bb
  AS: "~@6 [d4,f4,bb4]@4 bb2 ~ [d4,f4,ab4,c5]@3 ~ [d4,f4,bb4] ~@7", // Bb Dm7b5 Bb
  AT: "[ab3,bb3,db4,eb4]@2 ~@4 [ab3,bb3,db4,eb4]@3 ~@3 [ab3,bb3,db4,eb4]@3 ~ [ab3,bb3,db4,eb4] ~@7", // Absus4
  AU: "[g3,bb3,db4,f4]@3 ~@3 [g3,bb3,db4,f4]@3 ~ [g3,bb3,db4,eb4]@5 ~ [g3,bb3,db4,eb4] ~@7", // Gm7b5 Eb7
  AV: "~@4 [ab3,bb3,db4,f4] ~@7 [ab3,bb3,db4,f4]@3 ~@3 [ab3,bb3,db4,f4]@3 ~@3", // Bbm7
  AW: "~@4 [db3,f3,bb3,b3,e4] ~@7 [db3,f3,bb3,e4]@9 ~@3, ~@12 b3@7 ~@5", // Bbm
  AX: "[ab3,bb3,db4,eb4]@3 ~ [ab3,bb3,db4,eb4] ~@7 [ab3,bb3,db4,eb4]@4 [ab3,bb3,db4,eb4] ~@7", // Absus4
  AY: "[g3,bb3,db4,f4]@2 ~@4 [g3,bb3,db4,f4]@3 ~ [g3,bb3,db4,eb4]@5 ~ [g3,bb3,db4,eb4] ~@7", // Gm7b5 Eb7
  AZ: "~@4 [b3,eb4,f4,bb4]@7 ~ [b3,eb4,f4,bb4]@3 ~@3 [b3,eb4,f4,ab4]@3 ~@3", // Bmaj7 Fm7b5
  BA: "~@4 [b3,f4,bb4] ~@5 [b3,eb4,f4,ab4]@6 [b3,eb4,f4,ab4] ~@7, ~@2 eb4 ~@9", // Bb Fm7b5
  BB: "db2@2 ~@4 [db4,eb4,bb4]@2 ~@4 [db4,eb4,ab4]@3 ~ [db4,eb4,ab4] ~@5 db2@2", // Eb7 Dbsus2
  BC: "[db4,eb4,bb4]@3 ~@3 [db4,eb4,ab4]@4 [db4,eb4,ab4] ~@9 c3@2 b2@2", // Eb7 Dbsus2
  BD: "bb2@4 [d4,f4,c5] ~@7 [d4,f4,bb4]@3 ~ [d4,f4,bb4] ~@5 bb2@2", // Dm7 Bb
  BE: "[d4,f4,c5]@2 ~@4 [d4,f4,bb4]@3 ~ [d4,f4,bb4] ~@13", BF: "eb2@4 [db4,f4,g4,bb4] ~@7 [eb5,bb5,db6]@12",
  BG: "ab2@2 ~@2 [gb4,bb4,db5] ~@17 [db4,eb4,ab4]@2, ~ [gb5,bb5,db6]", BH: "db2@4 [db4,eb4,ab4] ~ f2@6 gb2@6 g2@6",
  BI: "[ab2@6 bb2@4 [bb2,db3] ~@7 [b3,eb4,f4,bb4]@30]/2", // Bbm Bmaj7
  BJ: "[[b3,eb4,f4,bb4]@8 ~@2 [b3,eb4,f4,bb4] ~@7 [bb3,f4,bb4]@9 ~ [b3,f4,bb4] ~@7 [c4,eb4,f4,bb4]@9 ~ [b3,eb4,f4,bb4] ~, ~@9 eb4@5 ~@10]/2", // Bmaj7 Bb5 Bb Cm7 Bmaj7
  BK: "~@6 [bb3,eb4,f4,bb4]@9 ~ [b3,eb4,f4,bb4] ~@7", BL: "[[b3,eb4,f4,bb4]@3 ~]/2",
})).s("gm_piano").gain(0.35)

// bass · acoustic bass
const bass = note(`<
  ~@3 A B C D E F G H I J K D L M N O P Q R S T U V W X J K D L M N O Y Z AA AB AC AD AE AF AG Z AA AB AC AD AE AH AI AJ
  AK AL AM AN AO AP AQ Z AA AB AC AD AE AF AG Z AA AB AC AD AE AF AG Z AA AB AC AD AE AH AR AS AT AU AV AW AX AY AZ BA
  BB D BC BD BE BF BG@2 BH@3 BI@2
>`.pickRestart({
  A: "~@11 ab1", B: "db2 c2 bb1 ab1", C: "db2@3 ab1@3 f1@3 db2@2 f1", D: "bb1 c2 d2 bb1", E: "ab2 f2 d2 bb1",
  F: "eb2@4 f2@8 gb2@3 ~@3 g2@4 ab2 ~", G: "~@2 ab1@4 bb1@3 eb2@2 ab1", H: "db2@6 ab1@6 ab2@5 ~ db2@6",
  I: "eb2 ab2 gb2 f2", J: "db2@3 c2@3 bb1@3 ab1@2 ab1", K: "db2 ab1 f1 ab1", L: "f2@3 bb1@3 d2@3 ab2@2 d2",
  M: "eb2@4 f2@8 gb2@4 ~@2 g2@3 ~ ab2 ~", N: "~@4 ab1@7 ~ bb1@6 eb2@4 bb1@2", O: "db2 c2 bb1 g1",
  P: "db2@5 ~ eb2@6 f2@6 e2@6", Q: "eb2@3 f2@3 gb2@3 bb2@2 db2", R: "ab2!2 eb2 d2", S: "db2 ab1!2 bb1",
  T: "db2 ab1 db2 f1", U: "bb1@5 ~ bb1@5 ~ ab1@6 ab1@5 ~", V: "b1@5 ~ b1@5 ~ e1@6 e1@6", W: "a1 e2 db2 a1",
  X: "eb2@6 eb2@5 ~ ab1@6 ab1@5 ~", Y: "db2@5 ~ db2@4 ab1@14", Z: "db2@3 ab1@3 b1@3 c2@2 ab1",
  AA: "db2@6 eb2@5 ~ f2@6 db2@6", AB: "bb1@6 d2@6 f2@6 ab2@4 f2 ~", AC: "bb2@6 ab2@6 f2@6 d2@5 ~",
  AD: "eb2@6 f2@5 ~ gb2@6 g2@4 eb2@2", AE: "ab2 gb2 f2 eb2", AF: "db2@3 b1@3 bb1@3 e2@2 bb1", AG: "eb2 a2 ab2 d2",
  AH: "db2@6 ab1@5 ~ gb1@6 ab1@4 gb1@2", AI: "db2 eb2 b1 g1", AJ: "gb2@3 db2@3 gb1@3 gb2@2 gb1",
  AK: "g1@6 bb1@6 db2@5 ~ g2@4 ab1@2", AL: "db2@3 bb1@3 ab1@3 bb1@2 ab1", AM: "b1 eb2 db2 ab2",
  AN: "gb2@3 db2@3 gb1@3 db2@2 gb1", AO: "g1@3 bb1@3 db2@3 g2@2 bb1", AP: "c2@5 ~ c2@6 e2@6 e2@6", AQ: "eb2!2 ab2 ab1",
  AR: "db2@6 eb2@6 b1@6 g1@5 ~", AS: "gb2@2 db2 gb1@3 db2@3 gb2@2 gb1", AT: "g2@2 eb2 db2@3 bb1@3 g1@3",
  AU: "db2@3 eb2@2 ab1 f2@3 db2@2 ab1", AV: "b1@6 bb1@6 ab1@6 db2@5 ~", AW: "gb2@5 ~ db2@6 gb1@6 db2@4 gb1@2",
  AX: "g2@6 db2@6 g1@6 bb1@5 ~", AY: "b1@3 bb1@3 ab1@3 bb1@2 ab1", AZ: "db2@6 eb2@5 ~ ab2@6 ab1@5 ~",
  BA: "db2@2 ab1 bb1@3 ab1@3 bb1@2 ab1", BB: "db2 eb2 f2 db2", BC: "f2 d2 ab2 f2", BD: "eb2 f2 g2 bb2",
  BE: "ab2 gb2 f2 ab2", BF: "db2 f1 gb1 g1", BG: "[ab1@5 ~ eb2@4 db2@6 ~@2 db2@9 ~ db2@5 ~@3 db2@10 ~@2]/2",
  BH: "[db2@9 ~ db2@2 ~@6 db2@10 db2@8 db2@10 db2@6 ~@2 db2@10 db2@8]/3", BI: "[db2@3 ~]/2",
})).s("gm_acoustic_bass").gain(0.4)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@4 A@2 B@2 C D E F A@2 B@2 G@2 H@2 C I A@2 J K L M A@2 B@2 N O P Q A@2 R@2 C S T U V@2 W X Y Z P AA AB AC E AD AB AC
  AE AF AG@2 AH@2 AI S AJ AK AL AM AN AO AI AP AQ AR AS@2 AT X AI AU AV AW C AX E AY C AX AD@2 A@2 AZ@2 BA BB BC ~@7
>`.pickRestart({
  A: "[db4,f4,ab4]/2", B: "[d4,f4,ab4]/2", C: "[db4,gb4,bb4]", D: "[bb3,db4,gb4,ab4]", E: "[db4,f4,ab4]",
  F: "[db4,gb4,bb4] [bb3,db4,gb4,ab4]", G: "[[db4,gb4,bb4]@27 ~ [bb3,db4,ab4]@20]/2",
  H: "[~@6 ab4@6 g4@5 ~ gb4@6 f4@24, db3@43 ~@5]/2", I: "[c4,eb4,ab4] [c4,e4,ab4]", J: "[bb3,db4,f4]",
  K: "[b3,d4,gb4] [e4,ab4,b4]", L: "[a3,db4,e4]", M: "[db4,gb4,bb4] [c4,eb4,ab4]", N: "[db4,bb4]@11 ~, gb4",
  O: "~ [bb3,db4,ab4]@5", P: "[db4,f4,ab4] [db4,gb4]", Q: "[db4,f4,ab4] [c4,eb4,ab4]", R: "[d4,f4,ab4,bb4]/2",
  S: "[c4,eb4,ab4,bb4]", T: "[db4,f4,ab4] [bb3,e4]", U: "[eb4,gb4] [db4,ab4]", V: "[[db4,f4]@3 [b3,f4]]/2",
  W: "[bb3,d4]", X: "[d4,f4,ab4]", Y: "[db4,gb4,bb4]@11 ~", Z: "[c4,eb4,ab4]", AA: "[db4,f4] [b3,f4]", AB: "[db4,gb4]",
  AC: "[db4,g4]", AD: "[b3,ab4]", AE: "[f4,ab4,c5] [e4,ab4,b4]", AF: "[db4,gb4,bb4]@6 ~ ab4@5, ~@12 [c4,eb4]@11 ~",
  AG: "[[db4,f4,ab4]@3 [b3,f4]]/2", AH: "[~ f4, [bb3,d4]@11 ~]/2", AI: "[eb4,gb4,bb4]",
  AJ: "[db4,f4,ab4] [db4,gb4,bb4]", AK: "[eb4,gb4,bb4] [c4,e4,ab4]", AL: "[db4,f4,ab4] [a3,f4,ab4]",
  AM: "bb3 ab3, [f4,ab4]@11 ~", AN: "bb3 a3, [d4,f4]", AO: "[bb3,d4,f4] [ab3,d4,f4]", AP: "a3 ab3, [db4,gb4]@11 ~",
  AQ: "[db4,f4,ab4] [bb3,db4,f4]", AR: "[eb4,gb4,bb4] [ab3,gb4,bb4]", AS: "[[f4,ab4]@6 [eb4,ab4]@5 [f4,ab4]@13]/2",
  AT: "[d4,f4,ab4] [eb4,ab4]", AU: "a3 ab3, [eb4,ab4]@11 ~, f4 ~@11", AV: "[db4,f4,ab4] [gb3,c4,e4]",
  AW: "[db4,f4,ab4] [b3,f4,ab4]", AX: "[db4,g4,bb4]", AY: "[ab4,db5]", AZ: "[bb3,d4,f4]/2", BA: "[eb4,g4]",
  BB: "gb4 eb4, bb3@23 ~", BC: "[db4,f4] [db4,gb4]",
})).s("gm_synth_strings_1").gain(0.17).pan(0.4)

// other · brass section
const brass_section = note(`<
  ~@36 A ~ B ~ C ~ D E A ~ F ~ C ~ G ~@9 A ~ B ~ C ~ D E H ~ I ~ J K L ~ M N O P J K Q R S T U V W T X Y Z@2 AA@2 AB ~
  AC AD@7
>`.pickRestart({
  A: "~@2 c3 db3@2 bb3@3 db3 a3@2 ab3", B: "~@4 db3@2 d3@4 c4@6 d3 ~ b3@4 bb3@2",
  C: "~@9 [ab2,bb3,db4]@2 [ab2,bb3,db4]", D: "~@2 [e3,e4]@4 [db3,db4]@2 [eb3,eb4] [db3,db4]@2 [bb2,bb3]",
  E: "[db3,db4] ~@11", F: "~@2 db3 d3@2 c4@3 d3 b3@2 bb3", G: "~@4 e3@2 f3@4 ab3@2 ~@4 e3@2 f3@4 db4 ~",
  H: "[db3,ab3]@2 ~@10 [a3,eb4]@5 ~ [a3,eb4]@4 [bb3,f4] ~", // Db5 Adim Bb5
  I: "[d3,ab3]@2 ~@10 [a3,eb4]@5 ~ [a3,eb4]@4 [c4,f4] ~, ~@11 d4", J: "[gb3,bb3,db4,f4] [ab3,c4,bb4]",
  K: "[e3,b3,a4] [eb3,bb3,ab4]", // Esus4 Ebsus4
  L: "[db3,ab3,f4]@3 ~ [ab3,e4]@2 [bb3,f4]@4 [db4,ab4] ~@5 [ab3,e4]@2 [bb3,f4]@4 [db4,ab4] ~", // Db Dbm Bb5 Db5 Dbm Bb5 Db5
  M: "[f3,f4]@12 [eb3,eb4]@6 [ab2,ab3]@4 [db3,db4] ~", N: "~@11 [db3,db4]",
  O: "[d3,d4]@4 [bb2,bb3]@2 [c3,c4]@6 [bb2,bb3]@4 [d3,d4] ~@5 [bb2,bb3]@2", P: "[c3,c4]@3 [bb2,bb3]@2 [d3,d4] ~@6",
  Q: "[db3,ab3,f4]@3 ~ [ab3,e4]@2 [bb3,f4]@4 [db4,ab4] ~@5 [ab3,e4]@2 [bb3,f4]@4 [db4,ab4]@2", R: "[db4,db5] ~@2",
  S: "[db3,db4]@3 [d3,d4]@3 [eb3,eb4] ~@5", T: "[db3,db4]@6 [d3,d4]@4 [eb3,eb4] ~@13",
  U: "[db3,db4]@6 [d3,d4]@6 [eb3,eb4] ~@11", V: "[db3,db4]@3 [d3,d4]@2 eb4 ~@6, ~@10 eb3 ~@13",
  W: "[db3,db4]@2 [d3,d4]@2 [eb3,eb4] ~@3", X: "[b2,b3]@2 [c3,c4]@2 [db3,db4] ~@3",
  Y: "[eb3,eb4]@3 [e3,e4]@2 [f3,f4] ~@6", Z: "[~@10 [bb2,bb3]@2 [b2,b3]@4 [c3,c4]@6 [db3,db4]@15 ~@11]/2",
  AA: "[~@5 [b2,b3] [c3,c4]@2 [db3,db4]@3 [d3,d4]@10 ~@3]/2", AB: "~@18 [ab3,f4,bb4]@3 ~ [ab3,f4,bb4]@2",
  AC: "~@3 [f3,f4]@3 [gb3,gb4]@2 [f3,f4] [db3,db4]@2 [bb2,bb3]", // F Gb F Db Bb
  AD: "[[db3,db4]@3 ~@3 [bb3,bb4]@3 ~ [ab3,ab4]@4 ~@4 [db2,ab3,b3,eb4]@138 ~@12]/7", // Db Bb Ab Abm
})).s("gm_brass_section").gain(0.4).pan(0.6)

// other · alto sax
const alto_sax = note(`<
  ~@37 A B C D E@2 F B G B H I@2 J K L@2 M N O P Q R S T U V@2 W X Y Z AA AB@2 AC AD@2 AE AF AG AH AI@2 AJ@2 AK AL@2 AM
  AN AO AP AQ AR AS AT AU AV AW AX@2 AY AZ@2 BA@2 ~@2
>`.pickRestart({
  A: "~@5 eb5@3 db5 bb4 ab4 gb4", B: "f4 ~@7", C: "~@16 f4@2 ab4@3 ~@3", D: "db5@5 bb4@6 ~",
  E: "[~@12 f4@4 ab4@2 bb4@4 ab4@12 e4 ~@13]/2", F: "~@10 eb5@5 ~ db5@2 bb4@2 ~ gb4@3, ~@10 ab4 ~",
  G: "~@2 f4 ab4@2 eb5@3 db5 bb4 ab4 gb4", H: "~@4 f4@8 ab4@3 ~@3 bb4@3 ~@3",
  I: "[db5@10 bb4 ~@7 db5@4 ab4@14 ~@4 f4@4 ab4@4]/2", J: "db4@5 ~@10 f4@2 gb4@2 g4 ab4@2 bb4 ~", K: "db5@11 ~ eb5@12",
  L: "[db5@2 gb4 ~@8 bb4@3 db5 eb5 db5 bb4 ab4 g4 eb4 db4 bb3 a3]/2", M: "ab3@4 f4@4 ~@4 gb4@5 ~ g4@5 ~",
  N: "ab4@12 bb4@3 ~ db5@4 eb5@2 db5@2", O: "eb5@4 db5@2 eb5@4 bb4 ~ db5@7 ~@5",
  P: "~@3 db5@5 bb4@2 db5@2 ab4@4 g4@4 f4@2 g4 ~", Q: "ab4@8 ab4@2 bb4@2 g4@7 ~@5", R: "~@2 eb5@7 db5 bb4 ab4",
  S: "f4 ~@11", T: "~@3 ab4@2 ~@2 f5@2 ~@4 ab5@2 ~ f5@2 db5@2 bb4 ~@2 f4, ~@16 e5 ~@7",
  U: "~ db5@2 ~ f4@2 b4 c5@2 f4@2 ~ bb4@12", V: "[~@9 bb4@2 bb4@4 db5@3 ~@6]/2",
  W: "~@3 f4 gb4 g4 ab4 ab3 bb3 db4 eb4 bb3", X: "db4 ~@7", Y: "~@6 bb3@4 ab3 ~ db4@2 ~@4 e4@4 db4@2",
  Z: "e4@6 db4@3 ~ db4 ~@13", AA: "~@2 f4@3 e4 f4@2 bb4 f4@3", AB: "[d4@2 bb3 ~@8 c5@7 bb4@2 ~ bb4@2 ~]/2",
  AC: "f4@4 db4@5 ~@7 e4@2 f4@2 ab4@2 bb4@2", AD: "[db4@2 bb3 db4@2 ~@3 db4 f4 ab4@5 bb4@2 db4@3 ~@4]/2",
  AE: "~@4 db5@13 ~ e5 ~ db5@2 f5@2, ~@19 f5@2 ~ e5 ~", AF: "db5@5 bb4@3 ~@4", AG: "~@3 ab4@6 f4@2 db4",
  AH: "ab4@4 ~@2 gb4@3 ~@3 f4@4 ab4 ~@5 f4@2, g4 ~@23",
  AI: "[gb4@4 d4@2 f4@4 bb4@2 ~@4 ab4@2 bb4@4 db5 db5@11 bb4@5 ~@9]/2",
  AJ: "[~@16 e4@2 f4@2 ~ bb4@2 db4@6 ~@19, ~@10 ab4 ~@13]/2", AK: "~@2 db5@7 db5@3",
  AL: "[bb4@4 db5@2 ~@13 bb4@4 db5@2 ~@14 eb5@8 ~]/2", AM: "db5@3 bb4@2 ~ ab4@3 bb4@3",
  AN: "eb4@5 ~ e4@3 ~ f4@6 ab4@2 bb4@3 ~@3", AO: "db5@5 ab4 bb4@4 ~@2 ab4@4 bb4@2 f4@4 ab4@2",
  AP: "eb4@10 ~@2 bb3@3 ~ eb4@4 ~@4", AQ: "~@4 ab4@2 bb4@3 ~@3 ab4@6 bb4@3 ~@3", AR: "db5@3 bb4@3 ~@5 db4",
  AS: "gb4@3 ~ ab4@2 db4@4 ~@14", AT: "~@5 ab4@4 f4@2 d4, ~@10 g4 ~@13", AU: "a4 bb4@3 f4 ~ bb4@3 ~@15",
  AV: "~@9 bb4@2 ~@2 a4@2 ~ ab4@2 ~ g4@2 ~ eb4@2", AW: "~ db4@2 bb3@2 db4@2 ~ eb4@5 ~@11",
  AX: "[~@3 f4@3 ~ gb4 ~ g4 ~@2 ab4@6 e4@4 db4@5 ~@15 bb3@4 ab3 ~]/2", AY: "db4@2 ~ e4@2 db4 ~@6",
  AZ: "[bb4@5 ~@7 bb4@5 ~@5 bb4@5 ~@3 bb4@5 ~@7 a3 bb3@3 ab3@2]/2", BA: "[db4@3 ~@7 e4@8 db4@18 ~@12]/2",
})).s("gm_alto_sax").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~@4 A@5 B A@7 B A@15 B A@65 C D E F G H ~>".pickRestart({
  A: "x!4", B: "x ~ x ~@3 x ~@2 x ~@2", C: "x ~@2 x ~ x ~@3 x ~@2", D: "~ x ~ x ~@2", E: "x ~@4 x ~@3 x ~@2",
  F: "~@2 x ~@3 x ~@4 x", G: "~@3 x ~@4 x ~@3", H: "x",
})).gain(0.38)

// drums · rim
const rim = s("rim").struct("<~@4 A@5 B A@7 B A@15 C A@65 D ~@6>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~@2 x ~@6 x ~@2", D: "~ x ~@2",
})).gain(0.38)

// drums · snare
const snare = s("sd").struct("<~@105 [~ x]>").gain(0.27)

// drums · low tom
const low_tom = s("lt").struct("<~@105 [~ x]>").gain(0.22)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@4 A@5 B A@7 B A@15 B A@65 C ~@6>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~@2",
// … 20 more lines

More by Ellington