Strudelify

Caravan

Ellington

KeyF majorTempo135 bpm
0:00/0:00
// Caravan — Ellington
// 135 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 119 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(135/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 · acoustic bass · "Bass ( BB"
const bass = note(`<
  A@2 B@2 A@2 B@2 ~@14 C D E F G@2 E H I G E H J K C L C M N O P Q R S T U V U W@2 X Y Z AA AB AC AB AD AB AE AA AD AA
  AF ~@2 AG AH C AI@2 AJ AK AL AM AN AO@2 AP AQ AR@2 AS AT AU AV ~@10 AW K C L C M A@10 AX@2 AY@2 ~
>`.pickRestart({
  A: "[f1 ~ c2 ~ f2@2 c2 f1@2 c2 f2 ~ gb2@2 c2 ~]/2",
  B: "[f1@2 ~@2 c2 ~@3 f2@4 c2@2 f1@4 c2@2 f2@2 ~@2 gb2@4 c2@2 ~@2]/2", C: "f1 c2 f2@2", D: "f1@2 c2 f2@2 f2 f2@2",
  E: "c2 g2 c3@2", F: "c2@2 g2 c3@2 c3 g2@2", G: "c2 ~ g1 ~", H: "c2@4 g2@2 c3@4 c3@2 g2@3 ~", I: "c2@3 ~@5 g1@4 ~@4",
  J: "c2 c3 b2 bb2", K: "a2 ab2 gb2 c2", L: "f1@4 c2@2 f2@3 ~ f2@2 c2@4", M: "f1@2 c2 f2@2 f2 c2@2",
  N: "f2@3 c3@3 f3@5 c3@2 c2 f2 ~", O: "c2@2 ~ c2 g2@2 c3@5 g2@3 c2 ~", P: "f2@3 c3@3 f3@5 c3@2 a2 f2 ~",
  Q: "f2@3 c3@3 f2 ~ f2@3 c3@3 f2 ~", R: "bb1@3 f2@3 bb2@5 f2@3 bb1 ~", S: "f2@3 c3@3 f3@5 c3@3 f2 ~",
  T: "bb1@3 f2@3 bb2@5 f2@2 f1 bb1 ~", U: "bb1@2 ~ bb1 f2@2 bb2@5 f2@3 bb1 ~", V: "eb2@3 a2 bb2@3 eb3@4 bb2@3 eb2 ~",
  W: "eb2@3 bb2@3 eb3@5 bb2@3 eb2 ~", X: "ab2@3 eb3@3 ab3@5 eb3@3 ab2@2", Y: "ab2@3 eb3@3 ab3@5 eb3@3 ab2 ~",
  Z: "g2@3 db3@3 g3@5 db3@2 db2 g2 ~", AA: "c2@3 g2@3 c3@3 c3 ~ g2 e2@2 c2 ~", AB: "c2@3 g2@3 c3@5 g2@3 c2 ~",
  AC: "c2@2 ~ g2@3 c3@5 g2@3 c2 c1", AD: "c2@3 g2@3 db2 ~ db2@3 ab2@3 db2 ~", AE: "c2@3 g1@3 c2@5 g1@3 c2 ~",
  AF: "c2@3 g2@3 c2 ~ c2@3 ~ c2@3 ~", AG: "f1@3 ~ c2@3 ~ f2@8", AH: "f1@4 c2@2 f2@4 f2@2 c2@3 ~",
  AI: "[c3@3 ~ c3@2 ~@2 c3@2 c3 ~@3 f2@6 g2@4 ab2@4 a2@3 f2]/2", AJ: "c2@4 d2@3 ~ eb2@4 g2@3 c2",
  AK: "f2@4 c3@4 f3@4 c3@3 db2", AL: "c2@3 c1 gb2@4 f2@3 f1 f2@4", AM: "bb1@4 ab1@4 g1@4 f1@3 bb1",
  AN: "f2@2 ~ f1 g2@4 ab2@4 c3@3 f2", AO: "[bb1@2 ~ bb0 ab1@3 ~ g1@4 f1@2 ~ bb1@5 bb1@4 a1@3 ~ bb1@3 bb0]/2",
  AP: "eb2@2 ~ eb1 db2@3 ~ c2@4 bb1@3 eb2", AQ: "bb1@2 ~ bb0 c2@4 db2@4 f2@3 bb1", AR: "eb2@4 f2@4 gb2@4 g2@3 eb2",
  AS: "ab2@4 bb2@3 ~ b2@4 c3@3 d2", AT: "db2@2 ~ db1 b1@4 bb1@4 ab1@3 ab2", AU: "g2@2 ~ g1 a2@4 bb2@4 d3@3 g2",
  AV: "c2@2 ~ c1 bb1@4 a1@4 g1@3 gb2", AW: "~ c3 b2 bb2", AX: "[f1 ~ c2 ~ f2@2 c2 f1@2 c2 f2 ~ gb2 ~@3]/2",
  AY: "[~ bb1@7]/2",
})).s("gm_acoustic_bass").gain(0.36).pan(0.4)

// bass · acoustic bass · "Bass ( BB" · soft notes
const bass_soft = note("<~@8 A B C@2 A D E C A D F G H I ~@66 A B C@2 A D E C A D J ~@20>".pickRestart({
  A: "c2 g2 c3@2", B: "c2@2 g2 c3@2 c3 g2@2", C: "c2 ~ g1 ~", D: "c2@4 g2@2 c3@4 c3@2 g2@3 ~", E: "c2@3 ~@5 g1@4 ~@4",
  F: "c2 c3 b2 bb2", G: "a2 ab2 gb2 c2", H: "f1 c2 f2@2", I: "f1@4 c2@2 f2@3 ~ f2@2 c2@4", J: "c2 ~@3",
})).s("gm_acoustic_bass").gain(0.2).pan(0.4)

// chords · piano · "Piano ( B"
const piano = note(`<
  A@2 B@2 A@2 B@2 C D E@2 F D E@2 C G H I J@2 K@2 L D M@2 F D M@2 C G H I J@2 K@2 N O P Q R S R T U V W X Y Z AA AB AC@3
  AD AE AF AC AG AE AH ~@2 AI@2 AJ AK@2 AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ C D E@2 F D E@2 C G BA I J@2 BB@2
  A@10 BC@2 BD@2 ~
>`.pickRestart({
  A: "[f2 ~@3 c3@2 ~@2 f3@4 c3@2 f2@4 c3@2 [f3,a3]@2 ~@2 gb3@4 c3@2 ~@2, ~@8 [a3,eb4,ab4]@8 ~@4 [eb4,ab4] ~@3 [bb3,e4,a4]@8]/2", // F Ab Ab5 A
  B: "[f2@2 ~@2 c3 ~@3 f3@4 c3@2 f2@4 c3@2 [f3,a3]@2 ~@2 gb3@4 c3@2 ~@2, ~@8 [a3,eb4,ab4]@8 ~@4 [eb4,ab4] ~@3 [bb3,e4,a4]@8]/2", // F Ab Ab5 A
  C: "c2@2 gb2@2 eb3@2 gb2 ~, ~@8 [bb3,db4,e4]@7 ~", D: "c2@2 gb2 eb3@3 gb2 ~, ~@3 [bb3,db4,e4]@5",
  E: "c2@3 ~@5 f1@3 ~@5", F: "c2@2 gb2@2 eb3@2 gb2 ~, ~ [bb3,db4,e4]", G: "c2@2 gb2 eb3@3 gb2 ~, ~@6 [bb3,db4,e4]@9 ~",
  H: "~ [bb3,db4,e4,a4,c5] [a3,c4,eb4,ab4,b4] [ab3,b3,d4,g4,bb4], c2", // A Ab G
  I: "[g3,bb3,db4,gb4,a4] [gb3,a3,c4,f4,ab4] [e3,g3,bb3,eb4,gb4] [db3,e3,g3,c4,e4]", // Gb F Eb C
  J: "[~@6 [ab3,c4]@2 [ab3,d4] ~@3 [ab3,c4]@2 ~@2 [ab3,eb4]@2 c4@2 ~@2 [ab3,d4]@9 ~, [f2,c3], ~@18 ab3 ~@13]/2", // Ab Abdim Ab Ab5 Abdim F5
  K: "[~@6 c4@2 [ab3,d4] ~@3 [ab3,c4]@2 ~@2 [ab3,eb4]@2 c4 ab3 ~@2 [ab3,d4]@10, [f2,c3], ~@6 ab3 ~@25]/2", // Abdim Ab Ab5 Abdim F5
  L: "~@2 gb2@2 eb3@2 gb2 ~, ~@8 [bb3,db4,e4]@7 ~", M: "c2@3 ~@13",
  N: "f3 [c4,eb4,g4,a4] ~ [c4,eb4,g4,a4] f3 ~ [c4,eb4,g4,a4] ~ f3@2 [c4,eb4,g4,a4] ~ f3 ~ [c4,eb4,g4,a4] ~", // Am7b5
  O: "c3 [c4,eb4,g4] ~ [c4,eb4,g4] c3 ~ [c4,eb4,g4] ~ c3 ~ [c4,eb4,g4] ~ c3@2 ~@2", // Cm
  P: "f3 [f4,a4,c5] ~ [f4,a4,c5] f3 ~ [f4,a4,c5] ~ f3 ~ [f4,a4,c5] ~ f3@2 ~@2", // F
  Q: "f3 [f4,a4,db5] ~ [f4,a4,db5] f3 ~ [f4,a4,db5] ~ f3 [f4,a4,db5] ~ [f4,a4,db5] f3 ~ [f4,a4,db5] ~", // Faug
  R: "bb2 [bb3,d4,f4] ~ [bb3,d4,f4] bb2 ~ [bb3,d4,f4] ~ bb2 ~ [bb3,d4,f4] ~ bb2@2 ~@2", // Bb
  S: "f3 [f4,ab4,c5] ~ [f4,ab4,c5] f3 ~ [f4,ab4,c5] ~ f3 ~ [f4,ab4,c5] ~ f3@2 ~@2", T: "bb2@15 ~",
  U: "eb3 [eb4,g4,bb4] ~ [eb4,g4,bb4] eb3 ~ [eb4,g4,bb4] ~ eb3 ~ [eb4,g4,bb4] ~ eb3@2 ~@2", // Eb
  V: "bb2 [bb3,db4,f4] ~ [bb3,db4,f4] bb2 ~ [bb3,db4,f4] ~ bb2 ~ [bb3,db4,f4] ~ bb2@2 ~@2", // Bbm
  W: "eb3 [bb3,db4,f4,g4] ~ [bb3,db4,f4,g4] eb3 ~ [bb3,db4,f4,g4] ~ eb3@2 [bb3,db4,f4,g4] ~ eb3 ~ [bb3,db4,f4,g4] ~", // Gm7b5
  X: "eb3 [eb4,g4,b4] ~ [eb4,g4,b4] eb3 ~ [eb4,g4,b4] ~ eb3 ~ [eb4,g4,b4] ~ eb3@2 ~@2", // Ebaug
  Y: "ab2 [ab3,c4,eb4] ~ [ab3,c4,eb4] ab2 ~ [ab3,c4,eb4] ~ ab2 ~ [ab3,c4,eb4] ~ ab2@2 ~@2", // Ab
  Z: "ab2 [ab3,c4,eb4] ~ [ab3,c4,eb4] ab2 ~ [ab3,c4,eb4] ~ ab2 ~ [ab3,c4,eb4] ~ ab2 ~@3", // Ab
  AA: "g2 [bb3,db4,f4,g4] ~ [bb3,db4,f4,g4] g2 ~ [bb3,db4,f4,g4] ~ g2 ~ [bb3,db4,f4,g4] ~ g2 ~ g2 ~", // Gm7b5
  AB: "c3 [bb3,db4,e4,g4] ~ [bb3,db4,e4,g4] c3 ~ [bb3,db4,e4,g4] ~ c3@2 [bb3,db4,e4,g4] ~ c3 ~ [bb3,db4,e4,g4] ~", // Bbdim
  AC: "c3 [bb3,db4,e4,g4] ~ [bb3,db4,e4,g4] c3 ~ [bb3,db4,e4,g4] ~ c3 ~ [bb3,db4,e4,g4] ~ c3 ~ c3 ~", // Bbdim
  AD: "c3 [c4,e4,g4] ~ [c4,e4,g4] c3 ~ [c4,e4,g4] ~ db3 [db4,f4,ab4] ~ [db4,f4,ab4] db3 ~ [db4,f4,ab4] ~", // C Db
  AE: "c3 [c4,e4,g4] ~ [c4,e4,g4] c3 ~ [c4,e4,g4] ~ c3 ~ [c4,e4,g4] ~ c3@2 ~@2", // C
  AF: "c3 [c4,e4,g4] ~ [c4,e4,g4] c3 ~ [c4,e4,g4] ~ c3 ~ [c4,e4,g4] ~ c3 ~@3", // C
  AG: "c3 [bb3,db4,e4,g4] ~ [bb3,db4,e4,g4] c3 ~ [bb3,db4,e4,g4] ~ db3 [b3,e4,f4,ab4] ~ [b3,e4,f4,ab4] db3 ~ [b3,e4,f4,ab4] ~", // Bbdim E
  AH: "c3 [bb3,db4,e4,g4] ~ [bb3,db4,e4,g4] c3 ~ [bb3,db4,e4,g4] ~ c3 [bb3,db4,e4,g4] ~ [bb3,db4,e4,g4] c3 ~@3", // Bbdim
  AI: "[~@6 c4@2 [ab3,d4]@2 ~@2 [ab3,c4]@2 ~@2 [ab3,eb4]@3 [ab3,c4] ~@3 ab3@9, [f2,c3], ~@6 ab3 ~@15 d4@9 ~]/2", // Abdim Ab Ab5 Ab F5
  AJ: "~@6 [ab3,c4] ~ [ab3,d4]@2 ~@2 [ab3,c4]@2 ~@2, [f2,c3]", // Ab Abdim Ab F5
  AK: "[[c3,g3,bb3,eb4]@2 ~@2 [c3,g3,bb3,eb4]@2 ~@2 [c3,g3,bb3,e4]@2 ~ [g3,e4]@2 ~ [a3,eb4,g4]@9 f3 [a3,c4,eb4,g4]@2 ~ f3 [a3,c4,eb4,g4]@2 ~@2, ~@5 c3 ~ f2@3 ~@6, ~@11 bb3 ~@20]/2", // Cm7 C7 C Am7b5
  AL: "[bb3,eb4,g4,c5]@11 ~@5", AM: "~@7 f3 [a3,d4,eb4,g4]@2 ~ f3 [a3,d4,eb4,g4]@2 ~@2",
  AN: "[bb3,eb4,g4,c5]@2 ~@6 [a3,eb4,f4,db5]@4 a3 eb4 ~ f4", AO: "[ab3,d4,g4,c5]@6 ~ [ab3,d4,g4,c5] ~@8",
  AP: "[ab3,c4,eb4,g4]@13 ~@3", AQ: "[ab3,d4,f4,c5]@13 ~@3",
  AR: "~@3 [ab3,d4,g4,c5]@4 ~ [g3,db4,gb4,b4]@4 [ab3,c4,d4,g4]@4", // Abmaj7 Gmaj7 Abmaj7
  AS: "~@7 eb3 [g3,db4,f4,c5]@2 ~ eb3 [g3,db4,f4,c5]@2 ~@2", AT: "[ab3,c4,db4,f4]@6 ~ [ab3,c4,db4,f4] ~@8",
  AU: "[g3,c4,db4,f4]@13 ~@3", AV: "[g3,db4,f4,c5]@6 ~ [g3,db4,f4,c5] ~@8", AW: "[ab3,c4,eb4]@11 ~@5, c-1 ~@3",
  AX: "[f3,b3,eb4,bb4]@7 ~ [f3,b3,eb4,bb4]@2 ~ db3 [f3,b3,eb4,bb4] ~@3", AY: "[f3,a3,bb3,d4]@13 ~@3",
  AZ: "~@7 c3 [e3,bb3,db4,ab4]@2 ~ c3 [e3,bb3,db4,ab4]@2 ~@2", // Bbm7b5
  BA: "~ [bb3,db4,e4,a4] [a3,c4,eb4,ab4,b4] [ab3,b3,d4,g4,bb4], c2", // A Ab G
  BB: "[~@6 c4@2 [ab3,d4] ~@3 [ab3,c4]@2 ~@2 [ab3,eb4]@2 [ab3,c4] ~@3 [ab3,d4]@10, [f2,c3], ~@6 ab3 ~@25]/2", // Abdim Ab Ab5 Ab Abdim F5
  BC: "[f2 ~@3 c3@2 ~@2 f3@4 c3@2 f2@4 c3@2 [f3,a3]@2 ~@2 [gb3,bb3,a4]@2 ~@6, ~@8 [a3,eb4,ab4]@8 ~@4 [eb4,ab4] ~@3 e4 ~@7]/2", // F Gb Ab Ab5
  BD: "[~ [bb2,ab3,g4,c5,e5,g5]@7]/2", // C7
})).s("gm_piano").gain(0.3).pan(0.6)

// other · alto sax
const alto_sax = note(`<
  A B A B ~@4 C@3 D E@3 F G@2 H I J@2 ~@2 C@3 D E@3 F G@2 H I J@2 ~ K L M N@2 O P Q R S T U@2 V W X Y Z@2 AA D E@3 F
  AB@2 AC I J@2 AD AE@3 AF AG V AH AI AJ AK@4 AL@2 ~@2 C@3 D E@3 F G@2 H I J@2 ~@2 A B A B A B A B A B A AM AN@2 ~
>`.pickRestart({
  A: "~ ab4", B: "~@2 ab4 ~ a4@4", C: "[c5@9 db5 c5 g4]/3", D: "bb4 c5 e5 g4", E: "[bb4@33 ~@3 c5@4 db5@4 c5@4]/3",
  F: "db5 c5 b4 e4", G: "bb4/2", H: "~ c5 b4 bb4", I: "a4 ab4 gb4 e4", J: "f4/2", K: "~@8 f4@7 [g4,ab4,bb4]",
  L: "[c5,d5] ~@15, f5", M: "d5@8 c5@7 bb4", N: "[g4@3 f4, ab4 ~@31]/2", O: "c5@15 [d5,eb5]", P: "g5 f5", Q: "c5",
  R: "~ bb4 a4 bb4 b4 c5 db5 d5", S: "eb5", T: "c5@8 bb4@7 ab4", U: "[f4, g4 ~@31]/2", V: "~@8 c5@7 [ab4,bb4]",
  W: "eb4, g4 ~@15", X: "~@2 f4@4 f4 ~", Y: "gb4@3 gb4@3 gb4 ~", Z: "[~@4 g4@26 g4 ~]/2", AA: "~ db5 c5 g4",
  AB: "[bb4@14 gb4 ~]/2", AC: "~@4 c5@3 b4@4 bb4@5", AD: "c4 d4", AE: "[eb4@4 e4@3 g4@17]/3",
  AF: "~@4 g4@2 ~ g4@2 ~ g4 ~ g4@2 ~@2", AG: "d5 db5", AH: "g4 f4", AI: "c4", AJ: "~@3 g4@5 gb4@2 ~@2 g4@3 ~",
  AK: "[~ f4@7]/2", AL: "[~@8 eb4@6 ~ ab4@16 ~]/2", AM: "~@2 ab4 ~ a4 ~@3", AN: "[~ c5@7]/2",
})).s("gm_alto_sax").gain(0.35)

// other · alto sax
const alto_sax_2 = note(`<
  A B A B ~@4 C@3 D E@2 F G E@2 H I J@2 ~@2 C@3 D E@2 F G E@2 H I J@2 ~@2 K L M N O P Q R S T U V W X Y Z AA@2 ~@7 AB AC
  AD@3 AE AF@3 AG AH AI AJ AK AL AM@4 AN@2 ~@2 C@3 D E@2 F G E@2 H I J@2 ~@2 A B A B A B A B A B A AO AP@2 ~
>`.pickRestart({
  A: "~ eb4", B: "~@2 eb4 ~ e4@4", C: "[a4@35 ~ bb4@4 a4@4 e4@4]/3", D: "g4 a4 db5 e4", E: "gb4/2", F: "~ a4 bb4 a4",
  G: "bb4 a4 ab4 db4", H: "~ a4 ab4 g4", I: "gb4 f4 eb4 c4", J: "c4/2", K: "d5", L: "g4@8 g4@7 [eb4,f4]", M: "d4",
  N: "db4!2", O: "g4@15 [ab4,bb4]", P: "c5!2", Q: "g4", R: "~ g4 gb4 g4 ab4 a4 bb4 b4", S: "c5",
  T: "f4@8 f4@7 [d4,eb4]", U: "c4", V: "b3", W: "~@8 g4@7 [eb4,f4]", X: "bb3, d4 ~@15", Y: "~@2 db4@4 db4 ~",
  Z: "db4@6 db4@5 ~ db4@2 ~@2", AA: "[~@2 e4@13 e4]/2", AB: "~@6 db4 ~", AC: "~@4 a4@4 ab4@3 g4@4 ~",
  AD: "[gb4 f4 eb4 c4@9]/3", AE: "ab3 c4", AF: "[bb3@4 d4@3 eb4@17]/3", AG: "~@4 eb4@2 ~ eb4@2 ~ eb4 ~ eb4@2 ~@2",
  AH: "eb4", AI: "~@8 d4@7 db4", AJ: "c4!2", AK: "ab3@15 ~", AL: "~@2 d4@5 ~ db4@2 ~@2 d4@2 ~@2", AM: "[~ db4@7]/2",
  AN: "[~@4 c4@3 eb4@8 ~]/2", AO: "~@2 eb4 ~ e4 ~@3", AP: "[~ g4@7]/2",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax
const tenor_sax = note(`<
  A B A C ~@4 D@3 E F@2 G H F@2 I J K@2 ~@2 D@3 E F@2 G H F@2 I J K@2 ~ L M N O@2 P Q P R S T U@2 V W X Y Z@2 AA AB AC@2
  AD AE AF@2 I J K@2 AG AH@2 AI AJ AK AL AM AN AO AP AQ AR@2 AS@2 ~@2 D@3 E F@2 G H F@2 I J K@2 ~@2 A B A B A B A B A B
  A AT AU@2 ~
>`.pickRestart({
  A: "~ a3", B: "~@4 a3 ~@3 bb3@8", C: "~@2 a3 ~ bb3@4", D: "[e4@9 f4 e4 b3]/3", E: "d4 e4 ab4 b3", F: "db4/2",
  G: "~ e4 f4 e4", H: "f4 e4 eb4 ab3", I: "~ e4 eb4 d4", J: "db4 c4 bb3 g3", K: "ab3/2", L: "~@8 f3@7 [bb3,c4,eb4]",
  M: "a4, f4 ~@15", N: "eb4@8 eb4@7 [c4,d4]", O: "[a3@3 a3]/2", P: "d4", Q: "[eb4,f4,g4] ~@7 ab4@8, ab4@7 ~@9",
  R: "~ d4 db4 d4 eb4 e4 f4 gb4", S: "g4", T: "db4@15 [bb3,c4]", U: "[g3, a3 ~@31]/2", V: "~@8 eb4@7 [c4,d4]",
  W: "f3, bb3 ~@15", X: "~@2 bb3@4 bb3 ~", Y: "bb3@6 bb3@5 ~ bb3@2 ~@2", Z: "[~@2 bb3@13 bb3]/2", AA: "~ db4 c4 g3",
  AB: "bb3 c4 e4 g3", AC: "bb3/2", AD: "~ c4 db4 c4", AE: "db4 c4 b3 e3", AF: "[bb3@14 e3 ~]/2", AG: "d3 ab3",
  AH: "[g3@4 bb3@3 a3@9]/2", AI: "bb3", AJ: "~@4 a3@3 a3@2 ~@2 a3 a3@2 ~@2", AK: "bb3 a3", AL: "~@8 ab3@7 [f3,g3]",
  AM: "eb3!2", AN: "d3@15 ~", AO: "~@2 ab3@5 ~ g3@2 ~@2 ab3@2 ~@2", AP: "~ g3@3", AQ: "ab3", AR: "[~ g3@7]/2",
  AS: "[~@8 bb3@7 b3@16 ~]/2", AT: "~@4 a3 ~@3 bb3 ~@7", AU: "[~ d4@7]/2",
})).s("gm_tenor_sax").gain(0.35).pan(0.4)

// other · tenor sax
const tenor_sax_2 = note(`<
  A B A B ~@4 C@3 D E@2 F G E@2 H I J@2 ~@2 C@3 D E@2 F G E@2 H I J@2 ~@2 K L M@2 N O P Q R S T@2 U V W X Y@2 ~@7 Z H I
  J@2 AA AB@2 AC AD K AE AF AG AH AI AG AJ@2 AK@2 ~@2 C@3 D E@2 F G E@2 H I J@2 ~@2 A B A B A B A B A B A AL AM@2 ~
>`.pickRestart({
  A: "~ c4", B: "~@2 c4 ~ db4@4", C: "[db4@9 d4 db4 ab3]/3", D: "b3 db4 f4 ab3", E: "bb3/2", F: "~ db4 d4 db4",
  G: "d4 db4 c4 f3", H: "~ db4 c4 b3", I: "bb3 a3 g3 e3", J: "g3/2", K: "g4", L: "d4@8 c4@7 [ab3,bb3]",
  M: "[g3@3 g3]/2", N: "c4@15 eb4", O: "g4 f4", P: "c4", Q: "~ c4 b3 c4 db4 d4 eb4 e4", R: "f4", S: "c4@8 bb3@6 ab3 g3",
  T: "f3/2", U: "~@8 c4@7 [f3,g3]", V: "c3", W: "~@2 g3@4 g3 ~", X: "gb3@3 gb3@3 gb3 ~", Y: "[~@2 g3@13 g3]/2",
  Z: "~@6 bb3 ~", AA: "c3 d3", AB: "[eb3@7 e3@6 ~ c3@18]/2", AC: "g3", AD: "~@4 c4@3 c4 ~@3 c4 c4@2 ~@2",
  AE: "~@8 f4@7 [d4,eb4]", AF: "ab3@7 ~ ab3@8, c4 ~@15", AG: "f3", AH: "~@2 c4@5 ~ b3@2 ~@2 c4@2 ~@2", AI: "~ bb2@3",
  AJ: "[~@4 bb2@11 b3@16 ~]/2", AK: "[~@4 eb3@3 f3@8 ~]/2", AL: "~@2 c4 ~ db4 ~@3", AM: "[~ ab3@7]/2",
})).s("gm_tenor_sax").gain(0.3).pan(0.4)

// chords · muted trumpet · "Trumpet"
const muted_trumpet = note("<~@2 A B ~@16 C D E@2 ~@95>".pickRestart({
  A: "~ [eb4,ab4,a4,c5]", B: "~@2 [eb4,ab4,a4,c5] ~ [e4,a4,bb4,db5]@4", C: "~@3 c4 d4 ~ c4 ~", D: "eb4@3 c4@2 ~ d4@9 ~",
  E: "[d4@8 eb4@3 d4@5, [g4,ab4,c5]]/2", // Abmaj7
})).s("gm_muted_trumpet").gain(0.4)

// other · trumpet
const trumpet = note(`<
  ~@36 A B C D E ~ F G H ~@3 I J ~ K L M N@2 O@3 ~ P@3 ~ Q R ~@2 A S C T@2 U V@2 W X Y Z AA AB AC K L AD N@2 ~@12 A AE C
  AF AG AH AG AH AG AH AG AH AG AH AG AI AJ@2 ~
>`.pickRestart({
  A: "~@3 c4 d4 ~ c4 ~", B: "eb4@3 c4@2 ~ d4@10", C: "~@3 c5 d5 ~ c5 ~", D: "eb5 c5 ~ d5@5", E: "~@4 f5 ~@3",
  F: "~ c5@3", G: "~ db5@3", H: "c5 ~@7", I: "~@8 eb5@3 eb5@2 ~@3", J: "~@2 eb5 ~@5", K: "~@2 eb4@4 f4 ~", L: "ab4",
  M: "~@2 ab4 bb4 ~ ab4 bb4 ~", N: "c5/2", O: "[~@2 c5@13 c5@5 ~@4]/3",
  P: "[~@8 gb5@3 gb5 ~@2 gb5@6 gb5@2 ~@2 gb5@2 ~@2 gb5@20]/3", Q: "~@4 bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~@3",
  R: "db5 ~ db5 ~ db5 ~ db5 ~ db5@2 ~@2 gb5@2 ~@2", S: "eb4@3 c4 ~@2 d4@10", T: "[eb5 ~ c5 ~ e5 c5 ~ f5@9]/2",
  U: "~@4 d5@6 eb5 d5 c5@2 ~@2", V: "[g4@24 ~@4 f4@3 ~]/2", W: "c5", X: "g5 f5", Y: "c5@15 ~",
  Z: "~@2 bb4@5 ~ a4@2 ~@2 bb4@2 ~@2", AA: "eb5", AB: "c5 bb4", AC: "f4", AD: "~@4 ab4@3 bb4@2 ~ ab4 ~ bb4@2 ~@2",
  AE: "eb4@3 c4@2 ~ d4@9 ~", AF: "eb5@3 c5@2 ~ d5@9 ~", AG: "~ c5", AH: "~@2 c5 ~ db5@4", AI: "~@2 c5 ~ db5 ~@3",
  AJ: "[~ g5@7]/2",
})).s("gm_trumpet").gain(0.64)

// other · trumpet
const trumpet_2 = note(`<
  ~@38 A B C ~ D E F ~@3 G H ~@6 I@3 ~ J@3 ~ K L ~@4 M N@2 ~@4 O P Q ~@6 R P ~@14 A S T U T U T U T U T U T V W@2 ~
>`.pickRestart({
  A: "~@3 c4 d4 ~ c4 ~", B: "eb4@2 ~ c4@2 ~ d4@10", C: "~@4 d5 ~@3", D: "~ g4@3", E: "~ a4@3", F: "ab4 ~@7",
  G: "~@8 c5@3 c5@2 ~@3", H: "~@2 c5 ~@5", I: "[~@2 bb4@13 bb4@5 ~@4]/3",
  J: "[~@8 db5@3 db5 ~@2 db5@6 db5@2 ~@2 db5@2 ~@2 db5@20]/3", K: "~@4 g4 ~ g4 ~ g4 ~ g4 ~ g4 ~@3",
  L: "bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4@2 ~@2 db5@2 ~@2", M: "~@3 ab4 c5 ~ ab4 ~",
  N: "[c5@2 ~@2 bb4@2 ~@2 c5@2 ~ bb4@2 ~ d5@18]/2", O: "eb5 c5", P: "ab4", Q: "~@2 g4@5 ~ gb4@2 ~@2 g4@2 ~@2", R: "a4",
  S: "eb4@3 c4@2 ~ d4@9 ~", T: "~ ab4", U: "~@2 ab4 ~ a4@4", V: "~@2 ab4 ~ a4 ~@3", W: "[~ e5@7]/2",
})).s("gm_trumpet").gain(0.56)

// other · trumpet
const trumpet_3 = note(`<
  ~@40 A ~ B@2 C ~@3 D E ~@6 F@3 ~ G@3 ~ H I ~@4 J K@2 ~@4 L M N ~@6 M O ~@28 P@2 ~
>`.pickRestart({
  A: "~@4 a4 ~@3", B: "~ eb4@3", C: "d4 ~@7", D: "~@8 g4@3 g4 ~@4", E: "~@2 ab4 ~@5", F: "[~@2 e4@13 e4@5 ~@4]/3",
  G: "[~@8 bb4@3 bb4 ~@2 bb4@6 bb4@2 ~@2 bb4@2 ~@2 bb4@20]/3", H: "~@4 e4 ~ e4 ~ e4 ~ e4 ~ e4 ~@3",
  I: "g4 ~ g4 ~ g4 ~ g4 ~ g4@2 ~@2 bb4@2 ~@2", J: "~@3 f4 ab4 ~ f4 ~", K: "[bb4@2 ~@2 g4@2 ~@2 bb4@2 ~ g4@2 ~ a4@18]/2",
  L: "c5 ab4", M: "f4", N: "~@2 d4@5 ~ db4@2 ~@2 d4@2 ~@2", O: "e4", P: "[~ c5@7]/2",
})).s("gm_trumpet").gain(0.56).pan(0.6)

// other · trumpet
const trumpet_4 = note(`<
// … 164 more lines

More by Ellington