Strudelify

Touch Me in the Morning

Ross

KeyD majorTempo64 bpm
0:00/0:00
// Touch Me in the Morning — Ross
// 64 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 69 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(64/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@4 B@2 C@5 ~@58>".pickRestart({
  A: "[~@40 [g3,a3,b3,d4,e4]@12 [g3,a3,b3,d4,e4]@12 ~ [g3,a3,b3,d4,e4]@13 ~@6 a2@6 ~ a3@6 a3@6 a3@7 ~@3 a2@3 [d3,a3]@6 ~@3 d3@3 ~ a3@6 a3@6 ~@7 g3@6 [d3,a3,b3,d4]@6 ~ g3@6 [g2,d3,g3,b3]@6 g3@4 g2@3 [a2,g3]@6 g3@4 c2@2, ~@40 a2@44 ~@7 d2@19 a3@6 ~@6 a3@6 ~@14 [d3,a3,b3,d4]@12 ~@26 [d3,b3]@10 ~@2, ~@78 [g3,a3,b3,d4,e4]@13 [f#3,c#4,e4]@12 [f#3,c#4,e4]@12 ~ [f#3,d4]@13 [d3,f#3,c#4,d4]@13 g2@25 ~@19 b1@3 ~@3]/4", // Em7 D5 Bm7 G A7 Bm7 G Em7 …
  B: "[~ a3@6 a3@6 ~ a3@6 a3@6 a3@6 a3@4 d2@3 a3@7 a3@6 c#4@6 [g3,b3]@6 ~ g3@6 g3@6 [e3,g3,b3,d4]@7 e3@3 [g2,e3,g3,b3,d4]@3 [g1,e3,g3,b3,d4]@3 [a1,e3,g3,b3,d4]@3, ~ d2@34 ~@17 [g2,d3,f#3]@12 ~ g2@22 ~@9, ~ [d3,f#3,d4]@12 ~ [d3,f#3,e4]@12 [d3,f#3,e4]@13 [d3,f#3,d4]@13 ~@13 [d3,b3,d4]@12 ~@19]/2", // G Em7 Gmaj7 D G
  C: "[[b1,e3,g3,b3,d4]@3 [c2,e3,g3,b3,d4]@3 a3@6 a3@6 a3@7 a3@6 [d2,a3]@6 a3@6 ~ c4@3 e4@3 g3@4 c4@3 ~@6 d3@6 ~ [g3,a3,d4]@6 [d3,g3,a3,d4]@6 ~@6 [g2,d3]@6 ~ g2@6 g2@6 ~ g3@6 g3@6 ~@7 g3@6 ~@7 g3@6 g3@7 g3@6 [g3,b3,e4]@6 [e3,g3,b3,e4]@6 [e3,g3,b3,d4]@6 [e3,g3,b3,e4]@6 [a2,e3,g3,b3,d4]@6 [a2,e3,g3,b3,e4]@6 [a2,e3,g3,b3,d4]@6 [a2,e3,g3,b3,e4]@6 ~@33, ~@6 d2@25 ~@13 [d2,e3]@13 g2@31 ~@13 d3@3 ~@4 c3@51 a2@24 ~@57, ~@6 [d3,f#3,d4]@12 [d3,f#3,e4]@12 ~ [d3,f#3,d4]@13 g3@6 b3@3 ~@4 [g3,b3,d4]@12 ~@13 [g3,a3,d4]@13 [g3,b3,d4]@13 [c4,e4]@12 ~ [c4,e4,g4]@12 [c4,e4,g4]@13 [c4,e4,g4]@13 e3@3 ~@78]/5", // Em7 Cmaj7 D5 Gsus2 Dsus4 G5 Em Em7 …
})).s("gm_piano").gain(0.25)

// bass · electric bass finger
const bass = note(`<
  A@6 B@6 C@4 D@4 E F@5 G@4 H I@2 J K L M N O P O Q R S R T U V W X Y Z AA AB AC AD AE AF Y Z AA AB AC AD AE AG AH@3
>`.pickRestart({
  A: "[~@40 a2@51 d2@51 g2@51 d3@51 g2@37 ~@7]/6",
  B: "[~@6 d2@47 ~@4 g2@31 g2@13 g2@6 ~ c2@51 a2@6 a2@6 a2@6 a2@6 a2@6 a2@6 a2@6 a2@6 d2@2 ~ b1@2 ~ a1@2 ~ d2@12 a2@2 ~ d3@2 ~@4 d3@9 b2@2 ~ a2@6 g2@21 g2@2 ~ e2@9]/6",
  C: "[~@3 a2@2 ~ e2@2 ~ a2@6 d2@18 a2@2 ~ b2@2 ~ d3@2 ~ e3@2 ~ d3@9 b2@2 ~ a2@6 g2@18 ~ g2@2 ~ f#2@2 ~ e2@15 ~@3 e2@2 ~ d2@2 ~ c#2@9 c#2@2 ~ c#2@9 c#2@2 ~ c#2@6 c#2@9 c#2@2 ~ c#2@5 c2@2 ~ c2@6 g1@2 ~ c2@2 ~ c2@6 g1@2 ~ c2@2 ~ c2@6]/4",
  D: "[g1@2 ~ c2@2 ~ c2@6 c2@2 ~ c#2@9 c#2@2 c#2@9 c#2@2 ~ c#2@9 c#2@2 ~ c#2@9 c#2@2 ~ c2@2 ~ c2@6 g1@2 ~ c2@2 ~ c2@6 c2@2 ~ c2@5 c2@2 ~ c2@6 c2@2 ~ c2@6 g1@20 ~ d2@2 g2@20 ~ g2@2 ~ f#2@20 f#2@2 ~ b2@2 ~ f#2@6 d2@4]/4",
  E: "~@2 d2@2 b1@2 ~ a1@2 ~ g1@20 ~ d2@2 ~ g2@14",
  F: "[d2@2 ~ g2@6 f#2@20 f#2@2 ~ b2@2 ~ f#2@6 b2@6 f#2@2 ~ b1@5 g2@2 ~@4 g2@6 f#2@9 b1@27 g2@6 g2@6 f#2@9 b1@27 g1@9 g1@2 ~ g1@9 d2@2 ~ g2@9 g2@2 ~ g2@9 d2@2 ~ g2@9 g2@2 g2@6 g2@2 ~ g#2@2 ~ a2@9 a2@2 ~ a2@6]/5",
  G: "[~@3 c#2@2 ~ d2@6 d2@6 d2@2 ~ b1@2 ~ a1@2 ~ d2@11 a2@2 ~ d3@2 ~ b2@2 ~ a2@6 g2@20 ~ f#2@2 ~ e2@2 ~ f#2@6 g2@6 g#2@2 ~ a2@2 a1@2 ~ d2@17 ~ a2@2 ~ b2@2 ~ d3@6 d3@9 b2@2 ~ a2@6 g2@14 e2@2 ~ g2@2 ~ f#2@2 ~ e2@9 e2@2 ~ a2@6 a1@2 ~]/4",
  H: "b1@2 ~ d2@17 ~ b2@2 ~ a2@6 f#2@2 e2@2 ~ d2@6 b1@2 ~ a1@4",
  I: "[~@2 g1@20 ~ g1@2 ~ e2@6 e2@12 e2@2 ~ d2@2 c2@6 c2@15 g1@2 ~ c2@6 c2@2 ~ c2@6 c2@2 ~ c2@2 ~ b1@2]/2",
  J: "~ a1@6 a2@11 a1@6 a2@12 a1@12", K: "d2@2 ~ b1@2 ~ a1@2 ~ d2@12 a2@2 ~ d3@2 ~@4 d3@9 b2@2 ~ a2@6",
  L: "g2@6 g2@6 g2@6 g2@2 ~ f#2@2 ~ e2@9 e2@2 ~ a2@6 a1@2 ~ b1@2 ~",
  M: "d2@18 f#3@2 ~ e3@2 ~ d3@2 ~ b2@2 ~ a2@2 ~ f#2@2 ~ e2@2 ~ d2@2 ~ b1@2 ~ a1@2 ~",
  N: "g1@21 g1@2 ~ e2@9 e2@2 ~ e2@6 e2@2 ~ d2@2 ~", O: "c#2@9 c#2@2 ~ c#2@9 c#2@2 ~ c#2@9 c#2@2 ~ c#2@9 c#2@2 ~",
  P: "c2@2 ~ c2@6 g1@2 ~ c2@2 ~ c2@6 g1@2 ~ c2@2 ~ c2@6 g1@2 ~ c2@2 ~ c2@6 c2@2 ~",
  Q: "c2@2 ~ c2@6 g1@2 ~ c2@2 ~ c2@6 g1@2 ~ c2@6 c2@2 ~ c2@6 c2@2 ~ c2@6", R: "g1@21 d2@2 ~ g2@21 g2@2 ~",
  S: "f#2@21 f#2@2 ~ b2@2 ~ f#2@6 d2@6 d2@2 ~ b1@2 ~ a1@2 ~", T: "f#2@21 f#2@2 ~ b2@2 ~ f#2@6 b1@6 d2@2 ~ b1@6",
  U: "g2@5 ~ g2@5 ~ f#2@9 b1@27", V: "g2@4 ~@2 g2@5 ~ f#2@9 b1@27", W: "g1@21 d2@3 g2@17 ~ g2@3 d2@3",
  X: "g2@5 ~ g2@4 ~@2 g2@5 ~ g2@2 ~ g#2@3 a2@5 ~ a2@5 ~ a2@5 ~ a2@3 c#2@3",
  Y: "d2@6 d2@2 ~@4 d2@2 ~ b1@2 ~ a1@2 ~ d2@9 d2@6 d2@2 ~ b1@2 ~ a1@6",
  Z: "g1@6 g1@6 g2@6 g2@2 ~ f#2@2 ~ e2@2 ~ f#2@2 ~@4 g2@6 g#2@2 ~ a2@2 ~ a1@2 ~",
  AA: "d2@9 ~@3 d2@2 ~ b1@2 ~ a1@2 ~ d2@9 a1@2 ~ a1@2 ~ d2@2 ~ a1@2 ~ d2@2 ~ f#2@2 ~",
  AB: "g2@6 g2@6 g2@6 g2@2 ~ f#2@2 ~ e2@9 e2@2 ~ a2@6 a2@6",
  AC: "d2@12 d2@9 b1@2 ~ a1@2 ~ b1@2 ~ d2@6 d2@2 ~ e2@2 ~ f#2@2 ~ d2@2 ~",
  AD: "g2@6 g2@6 g2@6 g2@2 ~ f#2@2 ~ e2@9 e2@2 ~ e2@2 ~ d2@2 ~ g1@6",
  AE: "c2@2 ~ c2@6 g1@2 ~ c2@2 ~ c2@6 g1@2 ~ c2@2 ~ c2@6 g1@2 ~ c2@2 ~ c2@6 g1@2 ~",
  AF: "a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~",
  AG: "a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@3 a1@3 a1@3 ~ a1@3 a1@3 a1@3 a1@3 ~ a1@3 a1@3 a1@3 ~ a1@3",
  AH: "[a1 d2@37 ~@10]/3",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@10 A@3 B C@4 D@5 ~@6 E F ~@2 G H@3 I J K L M N O P Q ~@4 R S ~ T U ~ V ~ R S ~ T U ~ V ~ W@3
>`.pickRestart({
  A: "[~@13 e4@2 f#4@54 ~@24 [a4,d5]@12 [e4,a4]@39]/3", B: "~@23 b4",
  C: "[~ b4@3 ~@6 b3@3 g3@3 a3@47 ~@6 [g3,c4]@3 [g3,c4]@3 [g3,c4]@6 [g3,c4]@3 [g3,c4]@6 [g3,c4]@3 [g3,c4]@6 [g3,c4]@3 [g3,c4]@3 [g3,c4]@3 ~@32 e4@6 e4@6 e4@6 ~@15 [c4,e4]@3 ~@6 [c4,e4]@3 ~@5 [c4,e4]@2, ~ [g4,b4]@3 ~@44, ~@7 d4@9 ~@95 c#4@47 ~@34]/4", // C5 C G
  D: "[~@7 [c4,e4]@3 ~@3 [b3,d4]@20 ~@3 [a3,c#4]@20 ~@4 [c#4,e4]@20 ~@3 d4@17 e4@6 [d4,f#4]@23 ~ [c#4,e4]@23 [c#4,f#4]@23 [d4,f#4]@23 ~@41, ~@83 b3@23 ~@134]/5", // C Bm A C#m D C#m F#5 D
  E: "~@30 d5 ~@2 d5@4 ~@5 d5 ~@2 d5@3", F: "~@24 [d5,f#5] ~@23", G: "~@23 e4",
  H: "[f#4@9 ~@2 [a4,d5]@4 [e4,a4]@7 ~@2]/3", I: "~@4 [d5,f#5] b4@2 ~", J: "a3",
  K: "~@2 [g3,c4]!2 [g3,c4]@2 [g3,c4] [g3,c4]@2 [g3,c4] [g3,c4]@2 [g3,c4]!3 ~", L: "~@5 e4!3, c#4",
  M: "~@5 [c4,e4] ~@2 [c4,e4] ~@2 [c4,e4] ~@2 [c4,e4] ~", N: "[b3,d4]@7 ~ [a3,c#4]@7 ~",
  O: "[c#4,e4]@7 ~ d4@6 e4@2, ~ b3", P: "[d4,f#4] [c#4,e4]", Q: "[c#4,f#4] [d4,f#4]", R: "e5 f#5@12 ~@3",
  S: "~@8 [d5,f#5] [d5,f#5]@2 [d5,f#5]@5", T: "~@6 [b4,d5] ~@3 [b4,e5] ~@5", U: "e5 f#5@11 ~@4", V: "~@5 [e5,g5]@3",
  W: "[~ [f#3,a3,c#4]@37 ~@10]/3", // F#m
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@9 A@2 B C D@2 E@8 F@2 G H@4 I J K L M N M O P Q R Q S T U V W@2 X Y M N M O M N Z AA M N M O M N Z AB AC@3
>`.pickRestart({
  A: "[~@7 a4@2 a3@2 a4@2 a5@2 a4@2 a5@2 a4@2 [a3,d4,f#4]@11]/2", B: "~ [a3,d4,f#4]@4 [b3,d4,f#4]@11",
  C: "~ [b3,d4,e4]@4 [a3,d4,f#4]@11", D: "[~@3 [a3,d4,f#4]@12 [b3,d4,f#4]@24 ~ [b3,d4,e4]@24 [a3,c#4,e4]@32]/2",
  E: "[~@4 [a3,c#4,e4]@11 [g3,c4,e4]@23 ~ [g3,c4,e4]@23 ~ [a3,c#4,e4]@23 [a3,c#4,e4]@23 ~ [g3,c4,e4]@23 ~ [g3,c4,e4]@23 [g3,a3,d4]@23 [a3,c#4,e4]@23 ~ [a3,c#4,f#4]@23 [a3,d4,f#4]@23 [b3,d4,f#4]@23 ~ [a3,c#4,e4]@23 [a3,c#4,e4]@11 [a3,c#4,e4]@11 ~ [a3,d4,f#4]@23 [g3,b3,d4]@3 ~@3 [g3,b3,d4]@3 ~@3 [f#3,a#3,c#4]@6 ~@3 [f#3,b3,d4]@20]/8", // A C A C Gsus2 A F#m D …
  F: "[~@7 [g3,b3,d4]@3 ~@3 [g3,b3,d4]@3 ~@3 [f#3,a#3,c#4]@6 ~@3 [f#3,b3,d4]@24 ~@9 [g4,b4,d5] ~@11 [g4,b4,d5] ~@11 [a4,c#5,e5] ~@10]/2", // G F# Bm G A
  G: "~ [a4,c#5,e5] ~@11 [g4,b4,d5] ~@10 [g4,b4,d5] ~@11 [g4,b4,e5] ~@11", // A G Em
  H: "[[g4,b4,e5] ~@5 [a3,d4,f#4]@35 [a3,d4,f#4]@12 [b3,d4,f#4]@35 ~ [b3,d4,e4]@11 [a3,d4,f#4]@35 ~ [a3,d4,f#4]@12 [b3,d4,f#4]@23 [b3,d4,e4]@21]/4", // Em D Bm E7 D Bm E7
  I: "~@3 [a3,d4,f#4]@35 [a3,d4,f#4]@10", J: "~@2 [b3,d4,f#4]@23 ~ [b3,d4,e4]@22", K: "~ [g3,c4,e4]@23 ~ [g3,c4,e4]@23",
  L: "~ [b3,d4,e4]@23 [b3,d4,e4]@23 ~", M: "[a3,d4,f#4]@3 [a3,d4,f#4]", N: "[b3,d4,f#4]@3 [b3,d4,e4]",
  O: "[b3,d4,f#4] [b3,d4,e4]", P: "[a3,c#4,e4]@3 [a3,c#4,e4]", Q: "[g3,c4,e4]!2", R: "[a3,c#4,e4]!2",
  S: "[g3,a3,d4] [a3,c#4,e4]", T: "[a3,c#4,f#4] [a3,d4,f#4]", U: "[b3,d4,f#4] [a3,c#4,e4]",
  V: "[a3,c#4,e4]!2 [a3,d4,f#4]@2", W: "[g3,b3,d4] ~ [g3,b3,d4] ~ [f#3,a#3,c#4]@2 ~ [f#3,b3,d4]@8 ~",
  X: "~@6 [g4,b4,d5] ~@11 [g4,b4,d5] ~@11 [a4,c#5,e5] ~@11 [a4,c#5,e5] ~@5", // G A
  Y: "~@6 [g4,b4,d5] ~@11 [g4,b4,d5] ~@11 [g4,b4,e5] ~@11 [g4,b4,e5] ~@5", Z: "[g3,c4,e4]@3 [g3,c4,e4]",
  AA: "[g3,b3,d4]!2", AB: "[g3,b3,d4]@25 [g3,b3,d4]@23", AC: "[~ [d3,a3,d4]@37 ~@10]/3",
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.7)

// other · orchestral harp
const orchestral_harp = note("<~@33 A@2 ~@31 B@3>".pickRestart({
  A: "[~@25 a3 [b3,c#4] d4 e4 f#4 g4 a4 b4 ~ d5 e5 [f#4,f#5] g4 a4 b4 c#5 d5 e5 f#5 g5 a5 b5 a5@27 ~@22, ~@33 c#5@2 ~@61]/2", // Bsus2 F#
  B: "[~@29 d6@6 ~@2 c#6@6 ~@2 a5@8 ~ f#5@11 d5@14 c#5@36 ~@29]/3",
})).s("gm_orchestral_harp").gain(0.25)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@9 A@2 ~@3 B C D E F@4 G@7 H I J K@2 ~@4 L M L N O P Q@2 R@2 S T@2 U V U V U W@2 V U V U V U X@5
>`.pickRestart({
  A: "[~@7 a4@2 a5@2 a4@2 a5@2 d5@2 e5@2 ~@13]/2", B: "~ e4@2", C: "~@4 a4@11 g4@33", D: "~ f#4@4 e4@11",
  E: "~ a4@6 g4@17",
  F: "[~ a4 ~ b4 c#5 ~ d5 e5 ~ f#5 g5 ~ a5 b5@23 c#6@17 ~ d6@6 e6@23 d6@17 e6@6 f#6@17 ~ g6@3 f#6@3 e6@11 a5@6 a6@23 b6@6 d6@16]/4",
  G: "[~@2 c#6@5 [d4,g4,b4]@12 [a#4,c#5,e5]@9 [b4,d5,f#5]@27 [d4,g4,b4]@12 [a#4,c#5,e5]@9 [b4,d5,f#5]@27 [d4,b4]@23 ~ [e4,a4]@24 ~@6 b4@5 c#5@6 b4@6 d5@6 e5@5 ~ d5@6 b4@6 d5@23 ~ c5@23 d5@23 ~ e5@23 d5@23 ~ c5@20, ~@103 g4@48 d4@94 ~@91, ~@151 g4@47 [f#4,a4,f#5]@47 b4@47 [a4,f#5]@44]/7", // G A#dim Bm G A#dim Bm G A5 …
  H: "~@4 d5@23 e5@21, ~ b4@11", I: "~@3 d5@23 ~ c5@21, ~ [a4,f#5]@15", J: "~@2 d5@23 ~ e5@22, ~ b4@23",
  K: "[~ c5@47 ~ b4@47, ~ [g4,e5]@94 ~]/2", L: "e4@3 a4", M: "g4@3 f#4", N: "g4@36 a4 b4 ~ c#5 d5 ~ e5 f#5 ~ g5 a5 ~",
  O: "b5@4 c#6@3 d6", P: "e6@4 d6@3 e6", Q: "[f#6@6 g6 f#6 e6@4 a5@2 a6@8 b6@2 d6@6 c#6@2]/2",
  R: "[d4,g4,b4]@4 [a#4,c#5,e5]@3 [b4,d5,f#5]@9", S: "[d4,b4] [e4,a4], g4",
  T: "[~@6 b4@6 c#5@6 b4@6 d5@6 e5@5 ~ d5@6 b4@6 d5@24 c5@24, d4, g4 [f#4,a4,f#5]]/2", U: "d5 e5, b4",
  V: "d5 c5, [f#4,a4,f#5]", W: "[c5 b4, [g4,e5]]/2", X: "[c5@16 b4@17 [f#4,a4,c#5]@37 ~@10, [g4,e5]@33 ~@47]/5",
})).s("gm_string_ensemble_1").gain(0.3)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~@14 A B C D E@4 F G H@6 I@2 J K ~@4 L M L N O P Q@2 R S T U V W V W V W X Y V W V W V W X Y Z@3
>`.pickRestart({
  A: "~ e3@2", B: "~@4 a3@11 g3@33", C: "~ f#3@4 e3@11", D: "~ a3@6 g3@17",
  E: "[~ a3 ~ b3 c#4 ~ d4 e4 ~ f#4 g4 ~ a4 b4@23 c#5@17 ~ d5@6 e5@23 d5@17 e5@6 f#5@17 ~ g5@3 f#5@3 e5@11 a4@6 a5@23 b5@6 d5@16]/4",
  F: "~@2 c#5@5 b3@12 e4@9 f#4@12 f#4@3 f#4@3 e4@2", G: "~ e4@3 f#4@3 b3@12 e4@9 f#4@12 f#4@3 f#4@5",
  H: "[~ e4@6 b3@23 ~ a3@23 ~ g3@47 f#4@47 d4@23 ~ e4@23 d4@71 e4@21]/6", I: "[~@3 d4@71 e4@22]/2", J: "~ c4@47",
  K: "~ a3@47", L: "e3@3 a3", M: "g3@3 f#3", N: "g3@36 a3 b3 ~ c#4 d4 ~ e4 f#4 ~ g4 a4 ~", O: "b4@4 c#5@3 d5",
  P: "e5@4 d5@3 e5", Q: "[f#5@6 g5 f#5 e5@4 a4@2 a5@8 b5@2 d5@6 c#5@2]/2", R: "b3@4 e4@3 f#4@4 f#4!2 e4!2 f#4",
  S: "b3@4 e4@3 f#4@4 f#4 f#4@2 e4@2", T: "b3 a3", U: "g3", V: "f#4@47 ~", W: "d4 e4", X: "c4", Y: "a3",
  Z: "[~ [d3,c#4]@37 ~@10]/3", // Dmaj7
})).s("gm_string_ensemble_2").gain(0.3).pan(0.3)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@50 A B C D E@2 F@2 A B C D E@2 G@5>".pickRestart({
  A: "~@7 e6", B: "f#6@3 g6", C: "a6", D: "d6@3 e6", E: "d6/2", F: "e6/2", G: "[e6@33 a6@37 ~@10]/5",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.7)

// other · french horn
const french_horn = note(`<
  ~@8 A@3 ~@3 B C D E@2 ~@6 F G@2 ~@10 H I H J K ~@6 L M N M N M N O N M N M N M N O N P@3
>`.pickRestart({
  A: "[~@12 c4@51 b3@47 ~@34]/3", B: "~ e4@2", C: "~@4 a4@11 g4@33", D: "~ f#4@4 e4@11",
  E: "[~@2 a4@12 g4@23 ~ c5@23 b4@23 ~@12]/2", F: "~@13 b4@5 c#5@6 b4@6 d5@6 e5@6 d5@6", G: "[b4@6 a4@47 ~@43]/2",
  H: "e4@3 a4", I: "g4@3 f#4", J: "g4 c5", K: "b4 ~", L: "~ b4 c#5 b4 d5 e5 d5 b4", M: "a4", N: "b4", O: "~ c5@3, g4",
  P: "[~ f#4@37 ~@10]/3",
})).s("gm_french_horn").gain(0.3)

// other · trumpet
const trumpet = note("<~@26 A@3 B C@2 D E ~@22 F ~@7 F ~@4>".pickRestart({
  A: "[~@33 f#4 ~@5 f#4@5 e4@2 ~ f#4@3 e4@2 ~ f#4@5 ~ d4@2 ~ b3@3 d4@6 b3@3 d4 ~@5 e4@20 ~@12 f#4@3 e4@3 f#4@3 a4@2 ~@4 f#4 ~@5 f#4@6 e4@2 ~ f#4@2]/3",
  B: "~ e4@2 f#4@6 d4@3 b3@3 d4@6 ~ b3@3 d4 ~@4 e4@18",
  C: "[~@15 f#4@3 e4@2 f#4@3 a4@2 ~@4 f#4 ~@5 f#4@7 e4@2 ~ f#4@2 e4@2 ~ f#4@6 d4@3 b3@3 d4@6 b3@3 d4@2 ~@4 e4@19]/2",
  D: "~@13 e4@2 ~ e4@2 ~ f#4@3 g4@2 ~@4 e4@2 ~@4 e4@13 ~", E: "~ e4 ~@4 e4 ~@5 e4@7 ~@3 e4 ~@5 a4@20", F: "~ c5@3",
})).s("gm_trumpet").gain(0.7)

// other · celesta
const celesta = note("<~@10 A B C D@2 E F G@3 H ~ I J K@3 ~@7 L M N O P Q R S T ~ U V W X Y Z ~@19>".pickRestart({
  A: "~@5 [a6,d7]@11", B: "~@3 [f#6,b6]@10 ~@2 [d6,f#6]@33", C: "~@5 [f#6,a6]@11",
  D: "[~@3 [f#6,b6]@10 ~@2 [b6,f#7]@42 ~@7 e7@32]/2", E: "~@4 a7@11 g7@32 ~", F: "~ f#7@4 e7@11",
  G: "[~@2 a7@12 g7@17 ~ f#7@6 e7@5 g7@15 ~@3 b7@23 c#8@23 ~@37]/3", H: "~@10 f#7@17 ~@21",
  I: "~@2 c#8@5 b7@11 ~ c#8@8 ~ d8@19 ~", J: "~ c#8@5 ~ b7@10 ~@2 c#8@8 ~ d8@19 ~",
  K: "[~ c#8@5 ~ b7@29 ~@7 a6@4 c#7@4 e7@4 d7@5 ~ b6@5 c#7@4 d7@4 b6@4 d7@23 ~@43]/3", L: "[a6,d7]@17 ~ [f#6,b6]@5 ~",
  M: "[d6,f#6]@11 ~@5", N: "[f#6,a6]@33 ~@3 [f#6,b6]@10 ~@2", O: "[b6,f#7]@41 ~@7", P: "e7@11 ~ a7@4",
  Q: "g7@11 ~ f#7@4", R: "e7@3 a7", S: "g7@6 f#7@2 e7@2 g7@5 ~", T: "b7 c#8", U: "f#7@3 ~@5", V: "~@12 c#8@3 ~",
  W: "b7@11 ~ c#8@8 ~ d8@19 ~@2 c#8@5 ~", X: "b7@10 ~@2 c#8@8 ~ d8@19 ~@2 c#8@5 ~", Y: "b7@15 ~@3 a6@2 c#7@2 e7@2",
  Z: "d7@6 b6@5 ~ c#7@4 d7@4 b6@4 d7@23 ~",
})).s("gm_celesta").gain(0.35).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A B C D E 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 AG AH AI AJ AK AL AM AN AO AP AQ AR AS AD AT
  AD AU AP AQ AR AS AD AT AD AV AW ~@2
>`.pickRestart({
  A: "~@5 x ~@3 x ~@3 x ~ x", B: "~ x ~ x ~ x ~@5 x!2 ~@2 x", C: "~@5 x ~ x ~@4 x ~@3", D: "~@3 x ~ x ~ x ~@4 x ~@2 x",
  E: "~@9 x ~@5 x ~@5 x ~@24 x ~", F: "~@2 x ~@2 x ~@2 x ~@2 x ~@8 x ~@3", G: "~ x ~@13 x ~@8 x ~@23",
  H: "x ~@14 x ~@8 x ~@13 x ~@8 x", I: "~@11 x ~@2 x ~@5 x ~@2 x ~@8 x ~@5 x ~@9", J: "~ x ~@11 x ~@20 x ~ x ~@8 x ~@2",
  K: "x ~@8 x ~@2 x ~@10 x ~@11 x ~@11 x", L: "~@7 x ~@2 x ~@8 x ~@2 x ~@11 x ~@7 x ~@2 x ~@2",
  M: "~@6 x ~@2 x ~@8 x ~ x ~@8 x ~@2 x ~@11 x ~@2 x", N: "~@4 x ~@2 x ~@23 x ~@16", O: "~@7 x ~@23 x ~@16",
  P: "~@4 x ~@2 x ~@11 x ~@8 x ~@2 x ~@11 x ~@4", Q: "~@4 x ~@2 x ~@10 x ~@11 x ~@11 x ~@5",
  R: "x ~@5 x ~@5 x ~@17 x ~@4 x ~@2 x ~@9", S: "~@2 x ~@2 x ~@5 x ~@17 x ~@11 x ~@6",
  T: "~@4 x ~@5 x ~@17 x ~@5 x ~@2 x ~@8 x ~", U: "~ x ~@2 x ~@5 x ~@5 x ~@10 x ~@20",
  V: "~@3 x ~@5 x ~@17 x ~@7 x ~@12", W: "~ x ~@2 x ~@8 x ~@10", X: "~ x ~@5 x ~@17 x ~@8 x ~@13",
  Y: "~ x ~@5 x ~@5 x ~@4 x ~@5 x ~@23", Z: "x ~@5 x!2 ~@2 x ~@5", AA: "x ~ x ~@4 x ~@6 x ~",
  AB: "x ~ x ~@4 x ~@2 x ~@3 x ~", AC: "x!2 ~@3 x!3", AD: "x ~ x ~@5 x ~@2 x ~@4", AE: "x ~@2 x ~@7 x ~@4",
  AF: "x ~@2 x ~@4 x ~@2 x ~@3 x", AG: "x ~ x!2 ~@2 x ~ x ~@3 x ~@3", AH: "x ~@6 x!2 ~@2 x!2 ~@2 x",
  AI: "x ~@3 x ~@3 x ~@3 x ~@2 x", AJ: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@2 x", AK: "x ~@2 x!2 ~@2 x!2 ~@3 x!2 ~ x", AL: "x!2",
  AM: "x ~@7 x ~@6 x", AN: "x ~@3 x ~@2 x!2 ~@3 x ~@2 x", AO: "x ~ x ~ x ~ x!2", AP: "x ~ x ~@5 x ~ x!2 ~@3 x",
  AQ: "x!2 ~@2 x ~ x ~", AR: "x ~ x ~@5 x ~ x!2 ~@2 x!2", AS: "x!3 ~ x ~@3", AT: "x!2 ~@2 x ~@3", AU: "x!5 ~@3",
  AV: "x ~@5 x ~@5 x ~@5 x ~@6 x ~@22", AW: "~ x ~@14",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct("<~@10 [~@9 x ~@6] [~ x ~@7 x ~@6]!2 [~@3 x ~@24 x ~@19] [~ x ~@10] ~@19 [~ x ~ x]!4 ~@31>")
  .gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  ~@14 A B C D E F G H I J K L M N O P Q R S T ~@3 U V@3 W X@4 Y Z X AA V AB V AB V AB V AC V AB V AB V AB V AD AE ~@2
>`.pickRestart({
  A: "~@7 x ~@4", B: "~@4 x ~@22 x ~@20", C: "~@3 x ~@22 x ~@21", D: "~@2 x ~@23 x ~@14 x ~ x ~@2 x ~",
  E: "~ x ~@17 x ~@11 x ~@10 x ~@5", F: "~@6 x ~@11 x ~@10 x ~@11 x ~@6", G: "~@4 x ~@11 x ~@11 x ~@10 x ~@8",
  H: "~@3 x ~@11 x ~@10 x ~@11 x ~@9", I: "~@2 x ~@4 x ~@5 x ~@5 x ~@2 x ~@11 x ~@2 x ~@2 x ~@2 x ~@4",
  J: "~@7 x ~@5 x ~@5 x ~@2 x ~@11 x ~@2 x ~@2 x ~@2 x ~@4", K: "~@13 x ~@11 x ~@11 x ~@10",
  L: "~ x ~@11 x ~@10 x ~@11 x ~@2 x ~@2 x ~@2 x ~@2", M: "~@18 x ~@22 x ~@6", N: "~@17 x ~@20 x ~@9", O: "~@2 x ~@2 x",
  P: "~@4 x ~@4 x ~@2", Q: "~@15 x ~@22 x ~@9", R: "~@14 x ~@20 x ~@12", S: "~@13 x ~@23 x ~@10",
  T: "~@13 x ~@16 x ~@17", U: "~@12 x!2 ~@2", V: "~ x ~ x", W: "~@4 x ~@4 x!4 ~@3", X: "~ x ~ x ~ x ~ x",
  Y: "x ~ x ~ x!3 ~@2 x!4 ~@3", Z: "x ~ x ~ x!2 ~ x ~ x!4 ~@3", AA: "~@2 x ~@3 x ~@3 x!6", AB: "~@4 x ~@6 x ~@4",
  AC: "~@2 x ~@2 x ~@2", AD: "~@12 x ~@18 x ~@16", AE: "~ x ~@14",
// … 71 more lines

More by Ross