Strudelify

When You Tell Me That You Love Me

Ross

KeyA♭ majorTempo80 bpm
0:00/0:00
// When You Tell Me That You Love Me — Ross
// 80 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 7, 4/4 at bar 7, 2/4 at bar 33, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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@2 B C@2 D E F G H I J K@2 L M@2 N O P Q@3 R S@3 T@2 U V@2 W X Y Z AA AB AC AD AE AF AG AD AE AF AH AI AJ AK AL AM AN
  AO AP AQ AR AS AT AU AV AW AX AY AV AW AZ BA BB BC BD BE@3 ~ BF@2 ~
>`.pickRestart({
  A: "[~ eb5 ~ eb5 ~ eb5 g5 ~@3 g4 ab4 ab5 g5 f5 eb5, ab4@23 ~ [c4,bb4]@7 ~ f3@21 ~@3 [eb3,eb4,ab4]@7 ~, c6@7 ~ bb5@7 ~ ab5@7 ~@5 ab5@15 ~@21, ~@36 c4@11 ~ [f4,c5]@7 ~@9]/2", // C7 Ab5 F5
  B: "~@4 bb3@4 c4@2 ~@2 bb4@15 ~ g4@2 ab4@2, d3@31 ~, [bb4,f5]@10 f4@19 ~@3", // Bb5
  C: "[[bb3,eb4] bb3 ~ ab4 [bb3,eb4]@8 [bb3,eb4] ab3 [bb3,eb4] ab3, eb3@63 ~, ab4@11 ~@5 g4@47 ~, ~@8 eb4@7 ~@49]/2", // Eb5
  D: "[bb3,eb4] ab3 [bb3,eb4] ab3 [bb3,eb4] ab3 [bb3,eb4] ab3", // Eb5
  E: "[bb3,eb4] ab3 [bb3,eb4] ab3 [eb4,f4] ab3 [eb4,f4] ab3", F: "[db4,f4]@4 ab3@4 [ab3,db4]@4 c4@4 [g3,bb3]@15 ~",
  G: "g3@4 bb3@4 eb4@4 f4@4 [f4,g4]@7 ~ [f4,g4]@4 bb3@4", H: "[e4,g4]@15 ~@9 g3@2 ab3@2 c4@4",
  I: "f3@4 ab3@4 g4@7 ~ [ab3,eb4,f4]@15 ~", J: "[ab3,db4,f4]@15 ~ [g3,bb3,eb4]@15 ~",
  K: "[[bb3,g4]@4 [c4,ab4]@4 [db4,bb4]@4 [f4,db5]@4 [eb4,c5]@19 ~ eb4@4 ab4@4 g4@4 [c4,ab4]@7 ~ g3@4 ab3@4]/2", // Eb Fm Gb Db Cm Fm
  L: "c4@4 ab4@4 g4@5 ~@3 [ab3,eb4,f4]@13 ~@3", // Fm7
  M: "[[ab3,eb4,f4]@4 c4@4 bb3@4 ab3@4 [g3,bb3,eb4]@19 ~ bb3@4 eb4@4 f4@4 [bb3,f4,g4]@15 ~]/2", // Fm7 Eb Gm7
  N: "[bb3,e4,g4]@15 ~ [c4,f4,ab4]@4 c4@4 g3@2 ab3@2 c4@2 f4@2", // Edim Fm
  O: "[bb3,eb4,g4]@7 ~ [g3,bb3,eb4]@7 ~ [ab3,eb4,f4]@7 ~ [ab3,eb4,f4]@7 ~", // Eb Fm7
  P: "[ab3,db4,f4]@11 ~ [ab3,c4,f4]@4 [g3,bb3,eb4]@15 ~", // Db Fm Eb
  Q: "[[db4,f4,ab4]@7 ~ [eb4,g4,bb4]@7 ~ [eb4,ab4,c5]@23 ~ [eb4,ab4,c5]@4 [eb4,g4,bb4]@4 [c4,f4,ab4]@23 ~ [c4,f4,ab4]@4 [bb3,eb4,g4]@4 [ab3,db4,f4]@15 ~]/3", // Db Eb Ab Eb Fm Eb Db
  R: "[ab3,db4,f4]@15 ~ [bb3,eb4,g4]@15 ~", // Db Eb
  S: "[[db4,f4,ab4]@7 ~ [eb4,g4,bb4]@7 ~ [eb4,ab4,c5]@19 ~ [eb4,ab4,c5]@4 [eb4,g4,bb4]@4 [c4,f4,ab4]@4 [c4,f4,ab4]@19 ~ [c4,f4,ab4]@4 [bb3,eb4,g4]@4 [ab3,db4,f4]@4 [ab3,db4,f4]@15 ~]/3", // Db Eb Ab Eb Fm Eb Db
  T: "[[ab3,db4,f4]@15 ~ [bb3,eb4,g4]@23 ~ [bb3,eb4,g4]@7 ~ bb4@11 ~ ab4@4]/2", U: "ab4@11 ~ g4@4 f4@11 ~ bb4@4",
  V: "[~@33 [ab3,bb3]@17 ~@2 eb4@7 ~ ab3@4, g4@47 ~@17, ~@32 [c4,eb4]@17 ~@15]/2", W: "eb4@19 ~ eb4@7 ~ ab3@4",
  X: "[ab3,eb4]@13 ~@3 g3@2 ab3@2 f4@7 ~ [f3,ab3,db4]@4", Y: "[g3,bb3,eb4]@19 ~ bb3@4 eb4@4 f4@4",
  Z: "[bb3,f4,g4]@11 ~ g4@4 [bb3,e4,g4]@15 ~", AA: "[c4,f4,ab4]@19 ~ ab3@4 [bb3,eb4,g4]@7 ~",
  AB: "[ab3,db4,f4]@11 ~ [ab3,db4,f4]@4 [ab3,db4,f4]@15 ~", AC: "[g3,bb3,eb4]@15 ~ [f3,ab3,db4]@7 ~ [g3,bb3,eb4]@7 ~",
  AD: "[eb4,ab4,c5]@19 ~ [eb4,ab4,c5]@4 [eb4,g4,bb4]@4 [c4,f4,ab4]@4", // Ab Eb Fm
  AE: "[c4,f4,ab4]@19 ~ [c4,f4,ab4]@4 [bb3,eb4,g4]@4 [ab3,db4,f4]@4", AF: "[ab3,db4,f4]@15 ~ [ab3,db4,f4]@15 ~",
  AG: "[bb3,eb4,g4]@15 ~ [db4,f4,ab4]@7 ~ [eb4,g4,bb4]@7 ~", AH: "[bb3,eb4,g4]@15 ~ g4@4 g4@4 ab4@4 bb4@4",
  AI: "[c4,eb4,bb4]@15 ~ [c4,eb4,ab4]@15 ~", AJ: "[b3,e4,ab4]@31 ~",
  AK: "[c4,eb4,ab4]@7 ~ ab3@4 bb3@4 c4@4 eb4@4 ab4@2 bb4@2 ab4@4", // Ab
  AL: "[b3,e4,ab4]@15 ~ [b3,e4,ab4]@7 ~ [b3,e4,ab4]@7 ~", AM: "[db4,gb4,bb4] db4 gb4 bb4 [e4,ab4,b4]@2 [gb4,bb4,db5]@2",
  AN: "[gb4,b4,eb5]@15 ~ [eb4,gb4,db5]@4 [eb4,gb4,b4]@4 [eb4,gb4,b4]@4 [eb4,gb4,bb4]@4", // B Ebm7 B Ebm
  AO: "[b3,eb4,ab4]@15 ~ [b3,eb4,bb4]@4 [b3,eb4,ab4]@4 [b3,eb4,ab4]@4 [b3,eb4,gb4]@4", // Abm Bmaj7 Abm B
  AP: "[ab3,b3,e4]@15 ~ [ab3,b3,e4]@7 ~ [ab3,b3,e4]@7 ~", // E
  AQ: "[b3,e4,ab4]@11 ~ [b3,e4,ab4]@7 ~ [b3,e4,ab4]@7 ~ [b3,e4,ab4]@4", // E
  AR: "[eb4,ab4,c5]@19 ~ [ab4,c5]@4 [g4,bb4]@4 [f4,ab4]@4", AS: "[c4,f4,ab4]@19 ~ [f4,ab4]@4 [eb4,g4]@4 [db4,f4]@4",
  AT: "[ab3,db4,f4]@23 ~ [db4,f4,ab4]@7 ~", AU: "[bb3,eb4,g4]@15 ~ [g3,bb3,eb4]@8 [bb3,eb4,g4]@8",
  AV: "~ [gb4,b4,eb5]@19 ~ [b4,eb5]@4 [bb4,db5]@4 [ab4,b4]@3", // B Bbm Abm
  AW: "~ [eb4,ab4,b4]@19 ~ [ab4,b4]@4 [gb4,bb4]@4 [e4,ab4]@3", AX: "~ [b3,e4,ab4]@15 ~ [b3,e4,ab4]@15",
  AY: "~ [db4,gb4,bb4]@15 ~ [b3,e4,ab4]@7 ~ [db4,gb4,bb4]@7", AZ: "~ [b3,e4,ab4]@15 ~ [e4,ab4,b4]@15",
  BA: "~ [db4,gb4,bb4]@15 ~ [db4,gb4,bb4]@7 ~ [gb4,bb4,db5]@7", // Gb
  BB: "~ [eb4,gb4,b4]@19 ~ [b4,eb5]@4 [bb4,db5]@4 [ab4,b4]@3", BC: "~ [eb4,ab4,b4]@23 ~ [db4,gb4,bb4]@7",
  BD: "~ [b3,e4,ab4]@19 ~ e4@4 gb4@4 ab4@3", // E
  BE: "[~@53 [db4,gb4]@4 gb3@4 ~ db4@4 eb4@4 ~ b3@18 ~@7, db4@52 ~ b2@36 ~@7, ~ gb4@52 ~@43, ~ bb4@34 ~@13]/3", // Gb5
  BF: "[~@3 b3@60 ~, ~ [eb4,gb4]@61 ~@2, ~@2 db4@61 ~]/2", // Ebm
})).s("gm_piano").gain(0.35).pan(0.7)

// bass · synth bass 2
const bass = note(`<
  ~@12 A B C D E F G H I J K L M J N O P Q R@2 S T U V W X Y Z AA AB AC AD AE AF AC AG AH AI AJ AK AL AM AN AO AP AQ AR
  AS AT AU AV AW AX AU AY@2 AZ BA BB BC@3 BD BE@2 ~
>`.pickRestart({
  A: "~@3 eb1 ab1@3 ab1", B: "ab1@4 f1@3 f1", C: "f2@8 eb2@8 db2@11 ~ db2@4", D: "db2@4 eb2@3 eb2",
  E: "eb2@2 db2@2 c2@3 c2", F: "c2@4 f1@3 f1", G: "eb1@4 db1@3 db1", H: "db1@4 eb1@3 eb1", I: "eb1@2 eb1@2 ab1@3 ab1",
  J: "ab1@3 g1 f1@3 f1", K: "f2@2 eb2@2 db2@3 db2", L: "bb1@8 eb1@5 ~ eb1@2", M: "eb1@3 bb1 eb2@2 bb1@2 ab1@6 ab1@2",
  N: "f2@2 eb2@2 db2@3 ab1", O: "bb1@4 eb1@3 eb1", P: "eb1@2 eb2@2 ab1@3 ab1", Q: "ab1 d2",
  R: "[~@8 ab1@3 ab1 ab1@2 g1@2, eb2@3 ~]/2", S: "f1@4 c2@2 f2 g2 f2@4 eb2@4", T: "db2@3 db2 db2@4",
  U: "eb2@3 bb1 eb1@2 db1@2", V: "c1@3 c1 c1@4", W: "f1@3 f1 f1@2 eb1@2", X: "db1@3 db2 bb1@4",
  Y: "eb1@6 eb1@2 eb1@2 eb1@2 eb1!3 g1", Z: "ab1@3 ab1 ab1@3 g1", AA: "f1@3 f1 f1@4", AB: "db2@3 db2 bb1@4",
  AC: "eb1@6 eb1@2 eb1@3 bb1 eb2@2 bb1@2", AD: "ab1@12 ab1@4 ab1@4 eb1@2 f1@2 ab1@7 ~", AE: "f1@3 f1 f1@3 eb1",
  AF: "db1@6 f1 ab1 bb1@8", AG: "ab1@6 ab1@2 ab1@3 eb1 ab1@2 gb1@2", AH: "e1@3 e1 e1@4", AI: "ab1@3 ab1 ab1@2 ab1 gb1",
  AJ: "e1@3 e1 e1@2 e1!2", AK: "gb1@4 gb1@2 gb1@2 gb1@2 gb1@2 gb1!4", AL: "b1@3 b1 b1@2 b1 bb1", AM: "ab1@3 ab1!4 gb1",
  AN: "e1@2 e1!6", AO: "db1@2 db1@2 db1@2 db1@2 db1@2 db1@2 db1@2 db1!2", AP: "ab1@3 ab1!4 g1", AQ: "f1@2 f1!5 eb1",
  AR: "db1@2 db1!6", AS: "eb1@4 eb1@4 eb1@4 eb1@4 eb1@4 eb1@4 eb1@4 ~ eb1@3", AT: "~ b1@12 b1@4 b1@12 gb1@3",
  AU: "~ ab1@12 ab1@4 ab1@12 gb1@3", AV: "~ e1@12 e1@4 db1@12 db1@3",
  AW: "~ gb1@12 db1@2 db1@2 gb1@2 ab1@2 gb1@4 gb1@4 gb1@3", AX: "~ b1@12 b1@4 b1@4 gb1@2 ab1@2 b1@4 gb1@3",
  AY: "[~ e1@12 e1@4 db1@12 db2@2 ab1@2 gb1@12 gb1@4 gb1@8 gb1@7]/2", AZ: "~ b1@12 b1@4 b1@8 bb1@7",
  BA: "~ ab1@12 ab1@4 ab1@8 gb1@7", BB: "~ e1@31", BC: "[~ gb1@70 ~@25]/3", BD: "~@11 gb1@5", BE: "[~ b1@63]/2",
})).s("gm_synth_bass_2").gain(0.49).pan(0.3)

// chords · distortion guitar
const distortion_guitar = note("<~@48 A B A C D E A F E G H I J K L M J K L M J K ~@8>".pickRestart({
  A: "[e2,b2,e3]@31 ~", B: "[eb2,ab2,eb3]@31 ~", C: "[gb2,db3,gb3]", D: "[gb2,b2,gb3]@31 ~", E: "[ab2,eb3,ab3]@31 ~",
  F: "[ab2,db3,ab3]@31 ~", G: "[f2,c3,f3]@31 ~", H: "[db2,ab2,db3]@31 ~", I: "[eb2,bb2,eb3]", J: "~ [gb2,b2,gb3]@31",
  K: "~ [ab2,eb3,ab3]@31", L: "~ [ab2,e3,ab3]@15 ~ [ab2,db3,ab3]@15", M: "~ [gb2,db3,gb3]@31",
})).s("gm_distortion_guitar").gain(0.4)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  ~@12 A@5 B@3 C D@2 E F D@2 E G H I@2 J K L M N K O P@2 Q R P@2 Q S T ~@23 U@3 ~ V@2 ~
>`.pickRestart({
  A: "[~@20 ab3@4 eb4@4 ab3@19 ~@5 ab3@4 eb4@4 ab3@19 ~@5 ab3@4 eb4@4 ab3@19 ~@5 bb3@4 eb4@23 ~@5 c4@4 f4@7 ~]/5",
  B: "[e4@17 ~@3 c4@4 f4@25 ~@3 ab3@4 eb4@4 ab3@19 ~@5 bb3@4 eb4@7 ~]/3", C: "f4@7 ~ g4@7 ~@5 eb4@4 ab4@4 eb4@4",
  D: "bb4@4 eb4@4 ab4@7 ~@5 eb4@4 ab4@4 eb4@4", E: "bb4 eb4 ab4 eb4 ~ eb4 bb4 eb4", F: "ab4 eb4 bb4 eb4 ~ eb4 ab4 eb4",
  G: "ab4@7 ~ bb4@7 ~ bb4@4 eb4@4 bb4@4 eb4@4", H: "ab4@15 ~ f4@15 ~", I: "[~@36 ab3@4 eb4@7 ~ ab3@15 ~, g4@47 ~@17]/2",
  J: "~@4 c4@4 bb3@7 ~ eb4@16", K: "~@4 ab3@4 eb4@7 ~ ab3@15 ~", L: "~@4 bb3@4 eb4@7 ~ bb3@15 ~",
  M: "~@4 c4@4 f4@7 ~ e4@15 ~", N: "~@4 c4@4 f4@15 ~ eb4@7 ~", O: "~@4 eb4@4 bb4@7 ~ ab4@7 ~ bb4@7 ~",
  P: "~@4 eb4@4 ab4@4 eb4@4 bb4@4 eb4@4 ab4@7 ~", Q: "~ eb4 ab4 eb4 bb4 eb4 ab4 eb4",
  R: "~ eb4 bb4 eb4 ab4 eb4 bb4 eb4", S: "~@4 eb4@4 bb4@4 eb4@4 ab4@7 ~ bb4@7 ~", T: "bb4@4 eb4@4 bb4@4 eb4@4 ab4@15 ~",
  U: "[~ [bb3,db4,gb4]@69 ~@26]/3", V: "[~ b3@30 ~, ~ [db4,gb4]@62 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.3)

// other · overdriven guitar
const overdriven_guitar = note("<~@55 A B C D E F ~@2 G@2 ~@3 H I ~@8>".pickRestart({
  A: "~@20 ab4@7 ~ c5@4", B: "c5@7 ~ eb5@6 g5 ab5", C: "ab5!2", D: "f5@16 ~@4 eb5@4 ab5@2 ~ bb5@2 ~ c6@2",
  E: "bb5@13 ~ ab5 bb5 c6@5 ~ bb5 c6 db6@6 ~ c6", F: "db6 eb6@29 ~@2",
  G: "[~@5 ab5@4 ab5@8 ab5@2 gb5@2 e5@2 eb5@2 b4@2 ab4@2 b4@2 db5@2 eb5@24 ~@7]/2", H: "~@21 db6@8 b5@3",
  I: "~ b5@24 ~@7",
})).s("gm_overdriven_guitar").gain(0.64).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@4 A@3 B@7 C@4 D@5 E@4 F@3 G@2 H I J K L M N O P Q R S P Q T U V W V X Y U V Z AA AB AC N AD AE AF AG AD AE AH AG AI
  AJ AK AL@2 ~ AM AN@2 ~
>`.pickRestart({
  A: "[~ [ab2,ab3]@2 [f2,f3]@2 [db3,db4]]/3", // Ab F Db
  B: "[[db3,db4] [bb2,bb3] [eb2,eb3]@3 [db3,db4] [c3,c4]@4 [f2,f3]@3 [eb2,eb3] [db2,db3]@4 [eb2,eb3]@4 ab3@4 f3@2]/7", // Db Bb Eb Db C F Eb Db …
  C: "[~@8 eb3@8 db3@31 ~ eb3@24 db3@8 c3@32 f3@16]/4", D: "[eb3@2 db3@4 eb3@4 ab3@3 g3 f3@3 eb3 db3@2]/5",
  E: "[bb2@2 eb3@4 ab3@3 g3 f3@3 eb3 db3@2]/4", F: "[bb2 eb3@2 ab3@2 d3]/3", G: "[~@4 ab2@3 g2, eb3@3 ~]/2",
  H: "f2@3 eb3", I: "db3", J: "eb3@3 db3", K: "c3", L: "f3@3 eb3", M: "db3 bb2", N: "eb3", O: "[ab2,ab3]@3 [g2,g3]",
  P: "[f2,f3]", Q: "[db3,db4] [bb2,bb3]", R: "[eb3,eb4]@15 ~", S: "[ab2,ab3]", T: "[eb2,eb3]",
  U: "[ab2,ab3]@6 [ab2,ab3] [gb2,gb3]", V: "[e2,e3]", W: "[ab2,ab3]@11 ~ [ab2,ab3]@2 [gb2,gb3]@2", X: "[gb2,gb3]@15 ~",
  Y: "[b2,b3]@6 [b2,b3] [bb2,bb3]", Z: "[db3,db4]", AA: "ab3@11 ~ ab3@2 g3@2", AB: "f3@11 ~ f3@2 eb3@2", AC: "db3@15 ~",
  AD: "~ [b2,b3]@30 ~", AE: "~ [ab2,ab3]@30 ~", AF: "~ [e2,e3]@16 [db2,db3]@15", AG: "~ [gb2,gb3]@30 ~",
  AH: "~ [e2,e3]@16 [db2,db3]@14 ~", AI: "~ [b2,b3]@16 [b2,b3]@8 [bb2,bb3]@7",
  AJ: "~ [ab2,ab3]@16 [ab2,ab3]@8 [gb2,gb3]@7", AK: "~ [e2,e3]@31", AL: "[~ [gb2,gb3]@52 ~@11]/2", AM: "~@11 gb3@5",
  AN: "[~ b2@63]/2",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@4 A@5 B@8 C@7 D@6 E@2 F G H I J K L M N O P Q N R S M T M T U V W T X M N O Y Z AA AB AC Z AA AB AD Z AE AF AG@4
  AH@2 ~
>`.pickRestart({
  A: "[~ [ab3,c4,eb4]@4 [ab3,db4,f4]@2 [bb3,eb4,g4]@2 [bb3,f4,g4]]/5", // Ab Db Eb Gm7
  B: "[e4@16 [ab3,c4,f4]@30 ~@2 [ab3,db4,f4]@32 [g3,bb3,eb4]@32 [ab3,c4,eb4]@64 [ab3,db4,f4]@31 ~ [bb3,eb4,g4]@32 [bb3,g4]@16]/8", // Fm Db Eb Ab Db Eb
  C: "[~ [ab3,c4,f4]@2 [ab3,db4,f4]@2 [g3,bb3,eb4]@2 [eb4,ab4,c5]@2 [eb4,ab4,c5]@2 [f4,ab4,db5]@2 [eb4,g4,bb4]]/7", // Fm Db Eb Ab Db Eb
  D: "[[f4,ab4,db5] [g4,bb4,eb5] [ab4,c5,eb5]@4 [ab4,c5,eb5]@4 [f4,ab4,db5]@4 [eb4,g4,bb4]@4 [ab3,c4,eb4]@4 [ab3,d4,f4]@2]/6", // Db Eb Ab Db Eb Ab Ddim
  E: "[bb3 [c4,eb4], g4@3 ~, ~@2 bb3 ~]/2", F: "[ab3,c4,f4]", G: "[ab3,db4,f4]", H: "[bb3,eb4,g4]",
  I: "f4 e4, [g4,bb4]", J: "[c4,f4,ab4]@3 [eb4,g4,bb4]", K: "[db4,f4,ab4]",
  L: "[eb4,g4,bb4]@2 [db4,f4,ab4] [eb4,g4,bb4]", M: "[eb4,ab4,c5]", N: "[f4,ab4,c5]", O: "[f4,ab4,db5]",
  P: "[g4,bb4,eb5]@2 [f4,ab4,db5] [g4,bb4,eb5]", Q: "[ab4,c5,eb5]", R: "[f4,ab4,db5] [db4,f4,ab4]", S: "[eb4,g4,bb4]",
  T: "[e4,ab4,b4]", U: "[gb4,bb4,db5]@2 [e4,ab4,b4] [gb4,bb4,db5]", V: "[gb4,b4,eb5]", W: "[b4,eb5] ~@15, ab4",
  X: "[ab4,b4,db5]", Y: "[g4,bb4,eb5]", Z: "~ [gb4,b4,eb5]@31", AA: "~ [ab4,b4,eb5]@31",
  AB: "~ [e4,ab4,b4]@16 [e4,ab4,b4]@15", AC: "~ [db4,gb4,bb4]@16 [e4,ab4,b4]@8 [gb4,bb4,db5]@7",
  AD: "~ [db4,gb4,bb4]@30 ~", AE: "~ [ab4,b4,eb5]@24 [gb4,bb4,db5]@7", AF: "~ [e4,ab4,b4]@31",
  AG: "[~ [db4,gb4,bb4]@52 [b3,db4,eb4,gb4]@36 [ab3,ab4,b4]@4 ~ [gb3,gb4,bb4]@4 ~ [gb3,gb4,bb4]@4 [e3,e4,ab4]@4 ~ [e3,e4,ab4]@4 ~ [eb3,eb4,gb4]@4 ~ [eb4,gb4]@5 [b3,e4]@5, ~@59 eb3@5]/4", // Gb B Abm Gb E Ebm E5
  AH: "[~ [b3,db4,eb4,gb4]@63]/2", // B
})).s("gm_string_ensemble_2").gain(0.3).pan(0.7)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@12 A B@2 C D@2 E@2 F G H I J@2 K L@2 ~@2 M N@2 O P Q R S T@3 U V@3 W X Y Z AA AB AC AD AE AF AG@2 AH AI AJ AK AL AM
  AN AO AL AP AQ AR AS AT@2 ~@5
>`.pickRestart({
  A: "~@3 ab4", B: "[bb4@2 ab4 g4 f4@6 bb4@6]/2", C: "ab4 g4", D: "[ab4 bb4@4 c5@3]/2", E: "[g4 f4@2 bb4]/2",
  F: "c5 db5 ~ eb5", G: "ab5@4 bb5@5 ~@3 eb5@4", H: "bb5@4 ab5@5 ~@3 eb5@4", I: "bb5 ab5 g5@2", J: "ab5 bb5 ~ eb5",
  K: "ab5@2 eb6@5 ab5", L: "[db6@4 eb6@3 ~ eb6@16 ~@8]/2", M: "eb4", N: "f4", O: "g4", P: "bb4", Q: "c5@3 bb4",
  R: "db5", S: "eb5@2 [ab4,ab5] [bb4,bb5]", T: "[[c5,c6]@6 [eb5,eb6]@7 [ab4,ab5] [g4,g5] [f4,f5]@5 [ab4,ab5]@4]/3",
  U: "[bb4,bb5]@2 [ab4,ab5] [bb4,bb5]", // Bb Ab Bb
  V: "[[c5,c6]@4 [f5,f6]@2 [eb5,eb6]@5 [c5,c6] [bb4,bb5] [ab4,ab5] [g4,g5] [f4,f5]@5 [ab4,ab5]@3 [bb4,bb5]]/3", // C F Eb C Bb Ab G F …
  W: "[bb4,bb5]@4 [g4,g5]@2 [ab4,ab5] [bb4,bb5]", // Bb G Ab Bb
  X: "[bb4,bb5]@6 [ab4,ab5]@2 [ab4,ab5]@4 [eb4,eb5] [ab4,ab5] [bb4,bb5] [eb5,eb6]", Y: "[e5,e6]@2 [gb5,gb6] [ab5,ab6]",
  Z: "[ab5,ab6]@12 [ab4,ab5] [bb4,bb5] [c5,c6] [eb5,eb6]", AA: "[e5,e6] [eb5,eb6] [db5,db6] [b4,b5]",
  AB: "[bb4,bb5] [db4,db5] [gb4,gb5] [bb4,bb5] [b4,b5]@2 [db5,db6]@2", // Bb Db Gb Bb B Db
  AC: "[eb5,eb6]@3 [db5,db6]!2 [b4,b5]!2 [bb4,bb5]", AD: "[b4,b5]@3 [bb4,bb5]!2 [ab4,ab5]!2 [gb4,gb5]",
  AE: "[ab4,ab5] [e5,e6]!2 [eb5,eb6]!2 [db5,db6]!2 [b4,b5]", // Ab E Eb Db B
  AF: "[b4,b5] [ab5,ab6]!2 [gb5,gb6] [e5,e6] [eb5,eb6]!2 [db5,db6]", AG: "[c5,c6]", AH: "[db5,db6]", AI: "[eb5,eb6]",
  AJ: "~ [eb5,eb6]@18 ~@2 [eb5,eb6]@4 [db5,db6]@4 [b4,b5]@3", // Eb Db B
  AK: "~ [b4,b5]@4 [bb4,bb5]@4 [bb4,bb5]@12 [b4,b5]@4 [bb4,bb5]@4 [ab4,ab5]@3", // B Bb B Bb Ab
  AL: "~ [ab4,ab5]@16 [e5,e6]@4 [eb5,eb6]@4 [eb5,eb6]@4 [db5,db6]@3", // Ab E Eb Db
  AM: "~ [db5,db6]@12 [bb4,bb5]@4 [b4,b5]@8 [db5,db6]@7", AN: "~ [eb5,eb6]@20 [eb5,eb6]@4 [db5,db6]@4 [b4,b5]@3",
  AO: "~ [b4,b5]@12 [bb4,bb5]@4 [bb4,bb5]@4 [b4,b5]@4 [bb4,bb5]@4 [ab4,ab5]@3", // B Bb B Bb Ab
  AP: "~ [db5,db6]@4 [b4,b5]@4 [b4,b5]@4 [bb4,bb5]@4 [bb4,bb5]@4 [ab4,ab5]@4 [gb4,gb5]@4 [e4,e5]@3", // Db B Bb Ab Gb E
  AQ: "~ [eb4,eb5]@31", AR: "~ [eb4,eb5]@24 [gb4,gb5]@7", AS: "~ [e4,e5]@31", AT: "[~ [gb4,gb5]@51 ~@12]/2",
})).s("gm_string_ensemble_1").gain(0.35)

// other · celesta
const celesta = note("<~ A B C@2 ~@47 D E F G H ~@3 I J K L I M K N O ~@9>".pickRestart({
  A: "~@16 [ab6,ab7]@3 ~ [g6,g7]@3 ~ [f6,f7]@3 ~ [eb6,eb7]@3 ~", B: "[f6,f7]@3 [bb5,bb6]@4 ~",
  C: "[[ab5,ab6]@3 ~ [g5,g6]@11 ~]/2", D: "eb6@12 db6@3 ~ db6@3 ~ b5@3 ~ b5@3 ~ bb5@3 ~",
  E: "b5@12 bb5@3 ~ bb5@3 ~ ab5@3 ~ ab5@3 ~ gb5@3 ~", F: "ab5@3 ~ e6@3 ~ e6@3 ~ eb6@3 ~ eb6@3 ~ db6@3 ~ db6@3 ~ b5@3 ~",
  G: "b5@3 ~ ab6@3 ~ ab6@3 ~ gb6@3 ~ e6@3 ~ eb6@3 ~ eb6@3 ~ db6@3 ~", H: "c6", I: "~ eb6@18 ~@2 eb6@3 ~ db6@3 ~ b5@3",
  J: "~ b5@3 ~ bb5@3 ~ bb5@12 b5@3 ~ bb5@3 ~ ab5@3", K: "~ ab5@16 e6@3 ~ eb6@3 ~ eb6@3 ~ db6@3",
  L: "~ db6@12 bb5@3 ~ b5@8 db6@7", M: "~ b5@12 bb5@3 ~ bb5@3 ~ b5@3 ~ bb5@3 ~ ab5@3",
  N: "~ db6@3 ~ b5@3 ~ b5@3 ~ bb5@3 ~ bb5@3 ~ ab5@3 ~ gb5@3 ~ e5@3", O: "~ eb5@31",
})).s("gm_celesta").gain(0.2)

// chords · pad poly
const pad_poly = note("<~@2 A B@2 ~@73>".pickRestart({
  A: "[d4,f4,bb4]", B: "[ab4 g4@2 ~, [bb3,eb4]@3 ~]/2",
})).s("gm_pad_poly").gain(0.3)

// other · english horn
const english_horn = note("<~@29 [~@16 f4@15 ~] [g4@31 ~] ~@47>").s("gm_english_horn").gain(0.4)

// drums · rim
// … 60 more lines

More by Ross