Strudelify

Loving You

Chris Rea

KeyE♭ majorTempo115 bpm
0:00/0:00
// Loving You — Chris Rea
// 115 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 149 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · "Ac.Piano"
const piano = note(`<
  A@2 B@4 C@4 D@3 E F E F G@4 H@4 I J K ~ L@2 M N O@2 P@6 Q@8 R@3 E F E F G@4 S@2 ~@5 T@8 Q@16 R@3 ~@8 T@8 Q@36 U ~@2
>`.pickRestart({
  A: "[~@20 [d2,bb3,d4,f4]@8 [bb3,eb4,g4]@19 ~@9 bb4@8, ~@7 [eb2,eb3]@9, ~@47 [bb3,eb4,g4]@17, ~@51 a4@13]/2", // Bb Eb
  B: "[[g4,bb4,d5]@4 [g4,bb4,d5]@8 ~ a3@7 [d3,f3,a3,d4,f4,a4]@8 [eb2,eb3,bb3,eb4,g4]@44 ~@12 [d2,d3,bb3,d4,f4]@8 eb3@12 ~@4 bb3@3 ~@9 [eb3,bb4]@8, [g3,bb3,d4]@3 [f3,f4,a4,c5]@2 ~@18 eb2@9, ~@12 c4@2 ~@6 c4 ~@71 [eb4,g4]@19 ~@5 a4@12, ~@92 bb3@16 ~@3 [bb3,eb4,g4]@17, ~@13 eb3@2 ~]/4", // Gm Dm Eb Bb Eb5 Gm F Eb
  C: "[[g4,bb4,d5]@4 [g4,bb4,d5]@8 [f3,a3,c4,f4,a4,c5]@7 ~ [f3,d4]@7 [eb2,eb3,bb3,eb4,g4]@56 ~ [d2,d4,f4]@8 eb3@12 ~@4 bb3@4 ~@12 eb3@4, [g3,bb3,d4]@12 ~@7 [d3,a3,f4,a4]@8 ~@57 bb3@2 ~@6 eb2@36, ~@23 [eb4,g4]@5 ~ a4@3, ~@23 bb3@4 ~ [bb3,eb4,g4]@4, ~@13 eb3@2 bb4]/4", // Gm F Dm Eb Dm Gm Dm Eb
  D: "[[g4,bb4,d5]@3 ~ [g4,bb4,d5]@8 [f3,a3,c4,f4,a4,c5]@8 [d3,f3,a3,d4,f4,a4]@8 [eb2,eb3,bb3,eb4,g4]@64 ~@4, [g3,bb3,d4]@11 ~@85]/3", // Gm F Dm Eb Gm
  E: "[bb3,d4,f4]", F: "[bb3,eb4,g4]",
  G: "[[bb3,d4,f4]@19 ~ a3@8 [g3,bb3,d4]@35 ~ g4@31 [g3,bb3,d4]@17 [f3,a3,c4]@16, ~@63 [eb4,bb4]@33 ~@32]/4", // Bb Gm F Eb5
  H: "[bb3@32 [bb3,eb4,g4]@31 ~ [c4,f4,a4]@31 [d4,f4,bb4]@17 [d4,f4,a4]@16, [d4,f4]@63 eb4@33 ~@32]/4", // Eb F Bb Dm
  I: "[g3,bb3,d4]", J: "[eb4,g4,bb4] [eb3,g3,bb3]", K: "[g4,bb4,d5]@16 [f4,a4,c5]@15 ~",
  L: "[~@8 bb4@3 ~@13 eb2@3 ~ [eb4,g4]@3 ~@8 eb4@4 ~@8 eb4@4 ~ eb4@4 [gb2,eb4,bb4]@4, eb5@32 g4@11 g4@13 g4@8, g4@16 eb2@8 ~@3 eb2@4 ~ c2@32, eb2@11 eb4@8 [eb4,g4]@8 ~@4 bb4@12 bb4@17 ~@4, eb4@4 eb3@3 eb4@4 [eb3,bb4]@20 eb4@4 c3@8 eb4@4 c3@17]/2", // Eb Ebm Eb Eb5
  M: "~@8 c4@4 ~@7 d2@4 d2@4 ~ b3@3 ~, d2@19 ~@8 d2@5, [f4,a4]@3 [f4,a4]@5, c4@8 ~@4 c4@7 c4@12 ~, ~@4 d3@11 d3@16 ~", // F
  N: "b3@3 ~@5 d4@4 ~ g4@4 ~@11 g1@3 ~, [g1,f4,a4]@9 ~@7, g2@12 g2@19 ~, d4@8 ~@4 d4@8 [d4,g4]@11 ~, ~@5 b3@7 b3@5 b3@6 ~ b3@8", // Dm G5
  O: "[[eb2,eb3,eb4,g4,bb4]@11 ~@5 [eb4,g4,bb4]@2 ~@2 [eb4,g4,bb4]@5 ~@3 [c2,eb4,g4,bb4]@31 ~@5, ~@4 [d2,d3]@2 ~ c3@7 ~@2]/2", // Eb Cm7 D
  P: "[[eb2,eb3,eb4,g4,bb4]@12 ~@4 [eb4,g4,bb4]@2 ~@2 [eb4,g4,bb4]@5 ~@3 [c2,c3,eb4,g4,bb4]@31 ~@5 [eb3,g4,bb4]@12 ~@4 [eb4,g4,bb4]@2 ~@2 [eb4,g4,bb4]@6 ~@2 [eb4,g4,bb4]@31 ~@4 [eb2,eb3,eb4,g4,bb4]@14 ~@7 [d2,bb3,d4,f4]@8 eb3@12 ~@16 bb4@8, ~@16 [d2,d3]@8 ~@39 [eb2,eb4]@11 ~@6 [d2,d3]@9 ~@3 [c2,c3]@28 ~@36 [eb2,bb3,eb4]@36, ~@39 g4@5 g4@4, ~@7 eb3, ~@15 a4]/6", // Eb Cm7 Eb Bb D Eb D C …
  Q: "[[g4,bb4,d5]@4 [g4,bb4,d5]@7 ~ [f3,a3,c4,f4,a4,c5]@8 [d3,f3,a3,d4,f4,a4]@8 bb3@56 [d2,bb3,d4,f4]@8 eb3@12 ~@16 bb4@8, [g3,bb3,d4]@11 ~@17 [eb2,eb3,eb4,g4]@64 [eb2,bb3,eb4]@36, ~@23 g4@5 g4@4, ~@13 eb3@3, ~@29 a4@3]/4", // Gm F Dm Bb Gm Eb Eb5
  R: "[[g4,bb4,d5]@4 [g4,bb4,d5]@7 ~ [f3,a3,c4,f4,a4,c5]@8 [d3,f3,a3,d4,f4,a4]@8 [eb2,eb3,bb3,eb4,g4]@64 ~@4, [g3,bb3,d4]@11 ~@85]/3", // Gm F Dm Eb Gm
  S: "[bb3,d4,f4]/2", // Bb
  T: "[~ [eb4,g4,bb4]@15 [eb4,g4,bb4]@5 [eb4,g4,bb4]@8 [eb4,g4,bb4]@35 ~ [g4,bb4]@15 ~ [g4,bb4]@4 [eb4,g4,bb4]@7 ~@36 [eb4,g4,bb4]@16 [eb4,g4,bb4]@4 ~ [eb4,g4,bb4]@8 [eb4,g4,bb4]@35 ~@20 [d2,bb3,d4,f4]@8 eb3@12 ~@16 bb4@8, ~ [eb2,eb3]@63 [eb2,eb3]@64 [eb2,eb3]@64 [eb2,eb3,eb4,g4,bb4]@29 ~@11 eb3@24, ~@4 [d2,d3]@16 [d2,d3]@16 [d2,d3]@16 ~@3 [eb2,bb3,eb4]@9, ~@29 [c2,c3]@64 [c2,c3]@64 [c2,c3]@64 ~@23 a4@12, ~@16 eb4@4 eb4 ~@2 [eb4,g4,bb4]@9 ~@23 g4@5 g4@4]/8", // Eb Gm Eb Bb Eb D Eb5 C …
  U: "[g4,bb4,d5]@4 [g4,bb4,d5]@7 ~ [f3,a3,c4,f4,a4,c5]@8 [d3,f3,a3,d4,f4,a4]@8 ~@4, [g3,bb3,d4]@11 ~@21", // Gm F Dm Gm
})).s("gm_piano").gain(0.64)

// bass · fretless bass · "Bass"
const bass = note(`<
  A@2 B@4 C@2 D@2 E@2 F G@2 H@2 I J K L G@2 M N O P Q@2 R S T U V@2 W@2 X@2 Y@2 Z@2 Y@2 Z@2 Y@2 Z@2 AA G@2 H@2 I J K L
  G@2 M N O P Q AB@2 AC@2 AD@2 Y@2 Z@2 Y@2 Z@2 Y@2 Z@2 Y@2 Z@2 Y@2 Z@2 AA AE@4 AF@4 AB@2 AC@2 AD@2 Y@2 Z@2 Y@2 Z@2 Y@2
  Z@2 Y@2 Z@2 Y@2 Z@2 Y@2 Z@2 Y@2 Z@2 Y@2 Z@2 Y@2 Z@2 Y@2 AG ~@2
>`.pickRestart({
  A: "[~@21 d2@7 eb2@35 ~]/2", B: "[g2@12 f2@8 d2@7 eb2@57 d2@8 eb2@36]/4", C: "[g2@12 f2@8 d2@7 eb2@37]/2",
  D: "[eb3@19 ~ d2@7 eb2@36 ~]/2", E: "[g2@3 f2@2 d2@2 eb2@9]/2", F: "eb3@11 ~@21",
  G: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~",
  H: "[bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2 bb2 ~@2 bb2@2 ~@3 bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2 bb2@2 ~@2]/2",
  I: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ a2 ~ g2 ~",
  J: "g2@2 ~@2 g2@2 ~@2 g2@2 ~@2 g2 ~@3 g2@2 ~@2 g2@2 ~@2 g2@2 ~@2 g2@2 ~@2",
  K: "~ c3@2 ~ c3@2 ~@3 c3@2 ~@2 c3 ~@2 c3@2 ~@2 c3@2 ~@2 c3@2 ~@2 c3@2 ~@2",
  L: "f3 ~ f3 ~ f3 ~ f2 ~ f3 ~ f3 ~ f3 ~ f3 ~",
  M: "bb2@2 ~@2 bb2@2 ~@2 bb2 ~@3 bb2@2 ~@2 bb2 ~@3 bb2 ~@3 bb2@2 ~@2 bb2 ~@3",
  N: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  O: "g2@2 ~@2 g2@2 ~@3 g2@2 ~@2 g2@2 ~@2 g2@2 ~@2 g2@2 ~@2 f2@2 ~@2 f2@2 ~",
  P: "~ eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~@2 eb2@2 ~ eb2@2 ~@3 eb2@2 ~",
  Q: "~ f2@2 ~ f2@2 ~@3 f2@2 ~@2 f2@2 ~@2 f2@2 ~@2 f2@2 ~ f2@2 ~@3 f2@2 ~",
  R: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~", S: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  T: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~", U: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~",
  V: "[eb3@13 ~@3 d3 ~@3 d3@5 ~@3 c3@34 ~@2]/2", W: "[eb3@15 ~ d3@2 ~@2 d3@6 ~@2 c3@34 ~@2]/2",
  X: "[eb3@15 ~ d3@2 ~@2 d3@6 ~@2 c3@33 ~@3]/2", Y: "[eb3@13 ~@7 d3@7 ~ eb3@34 ~@2]/2",
  Z: "[g2@10 ~@2 f2@7 ~ d2@7 eb2@32 eb3@2 ~@3]/2", AA: "eb3@13 ~@19", AB: "[~ eb3@13 ~@3 d3 ~@3 d3@5 ~@3 c3@34 ~]/2",
  AC: "[~ eb3@15 d3@2 ~@3 d3@6 ~@2 c3@34 ~]/2", AD: "[eb3@15 ~@2 d3@2 ~@2 d3@6 ~@2 c3@33 ~@2]/2",
  AE: "[eb3@31 eb2@32 eb3@31 eb2@34]/4", AF: "[eb3@31 eb2@29 db3@2 d3@22 d2@3 a2@5 g2@20 g3@9 ~@7]/4",
  AG: "g2@10 ~@2 f2@7 ~ d2@7 ~@5",
})).s("gm_fretless_bass").gain(0.45)

// chords · string ensemble 1 · "Jp.Strings"
const string_ensemble_1 = note(`<
  ~@13 A B@3 C@4 D@8 E@4 ~@6 F@2 G@8 H@3 A B@3 C@4 I@7 ~@6 J@6 K@4 L@8 M@3 N@2 ~@3 O@3 ~@47
>`.pickRestart({
  A: "[bb3,d4,f4]", B: "[[bb3,eb4,g4]@31 [bb3,d4,f4]@32 [bb3,eb4,g4]@33]/3",
  C: "[[bb3,d4]@19 ~ a3@8 [g3,bb3,d4]@35 [eb4,g4,bb4]@33 [g4,bb4,d5]@15 ~ a4@16, f4@28 ~@83 [f4,c5]@17]/4", // Bb Gm Eb Gm F5
  D: "[[bb3,d4,f4]@31 [bb3,eb4,g4]@32 ~ c4@31 [d4,f4,bb4]@32 ~ f4@31 [eb4,g4,bb4]@32 ~ d5@15 [f4,a4,c5]@49, ~@63 [eb4,f4,a4]@33 ~@31 [bb3,d4]@33 ~@31 [g4,bb4]@17 ~@48]/8", // Bb Eb Bb Eb F F7 Bb Gm
  E: "[[eb4,g4,bb4]@63 [c4,f4,a4]@32 [b3,d4,f4,a4]@19 ~@14]/4", F: "[~@5 [bb3,d4,f4]@2 [bb3,eb4,g4]@9]/2",
  G: "[[d4,g4,bb4]@11 ~ a4@7 [d4,f4,a4]@8 [bb3,eb4,g4]@57 [bb3,d4,f4]@8 [bb3,eb4,g4]@35 [d4,g4,bb4]@12 [c4,f4,a4]@7 [d4,f4,a4]@8 ~ [eb4,g4]@56 ~ f4@7 ~ [bb3,g4]@35 [d4,g4,bb4], ~@11 [c4,f4]@8 ~@135 bb3@57 [bb3,d4]@8 eb4@36 ~]/8", // Gm Dm Eb Bb Eb Gm F Dm …
  H: "[~@11 [c4,f4,a4]@7 [d4,f4,a4]@9 [bb3,eb4,g4]@56 ~@13]/3", // F Dm Eb
  I: "[[bb3,d4,f4]@31 [bb3,eb4,g4]@32 ~ c4@31 [d4,f4,bb4]@32 ~ f4@31 [eb4,g4,bb4]@32 ~ d5@15 [f4,a4,c5]@17, ~@63 [eb4,f4,a4]@33 ~@31 [bb3,d4]@33 ~@31 [g4,bb4]@17 ~@16]/7", // Bb Eb Bb Eb F F7 Bb Gm
  J: "[~@20 [bb3,d4,f4]@7 [bb3,eb4,g4]@36 [d4,g4,bb4]@12 [c4,f4,a4]@7 [d4,f4,a4]@9 [bb3,eb4,g4]@57 [bb3,d4,f4]@8 [bb3,eb4,g4]@35 [d4,g4,bb4]]/6", // Bb Eb Gm F Dm Eb Bb Eb …
  K: "[~@11 [c4,f4,a4]@8 [d4,f4,a4]@8 [bb3,eb4,g4]@56 [bb3,d4,f4]@8 [bb3,eb4,g4]@36 [d4,g4,bb4]]/4", // F Dm Eb Bb Eb Gm
  L: "[~@11 [c4,f4,a4]@8 [d4,f4,a4]@8 [bb3,eb4,g4]@57 [bb3,d4,f4]@8 [bb3,eb4,g4]@35 [d4,g4,bb4]@13 [c4,f4,a4]@7 [d4,f4,a4]@8 [bb3,eb4,g4]@56 [bb3,d4,f4]@8 [bb3,eb4,g4]@36 [d4,g4,bb4]]/8", // F Dm Eb Bb Eb Gm F Dm …
  M: "[~@11 [c4,f4,a4]@8 [d4,f4,a4]@8 [bb3,eb4,g4]@64 ~@5]/3", N: "[eb4,g4,bb4]/2",
  O: "[~@32 [c4,a4]@29 [b3,d4,f4,a4]@33 ~@2, ~@31 f4@30 ~@35]/3", // F Bm7b5
})).s("gm_string_ensemble_1").gain(0.3)

// chords · muted trumpet · "Trumpet Pan<0"
const muted_trumpet = note(`<
  ~@4 A@2 ~@2 B@2 C@2 ~@21 D@2 E@6 C@2 B@2 C@2 B@2 C@2 ~@16 F@2 G@2 H@2 I@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 ~@9 F@2
  G@2 H@2 J@2 K@16 L@4 K@16 M ~@2
>`.pickRestart({
  A: "[~@20 [d3,g3,bb3]@3 ~@5 [g3,bb3]@18 ~@18, ~@27 eb3@18 ~@19]/2", // Gm
  B: "[~@20 [g3,bb3]@2 ~@7 [eb3,g3]@23 ~@12, ~@20 d3 ~@7 bb3@23 ~@13]/2", // Gm Eb
  C: "[~@10 [d3,g3,bb3] ~@3 [eb3,g3,bb3]@14 ~@4]/2", // Gm Eb
  D: "[[eb3,g3,bb3]@14 ~@2 [eb3,g3,bb3]@2 ~@2 [eb3,g3,bb3]@6 ~@2 [eb3,g3,bb3]@33 ~@3]/2", // Eb
  E: "[[eb3,g3,bb3]@14 ~@2 [g3,bb3]@2 ~@2 [eb3,g3,bb3]@6 ~@2 [eb3,g3,bb3]@30 ~@5 [eb3,g3,bb3]@15 ~@2 [eb3,g3,bb3]@2 ~@2 [eb3,g3,bb3]@6 ~@2 [eb3,g3,bb3]@32 ~@3 [eb3,g3,bb3]@15 ~@6 [g3,bb3]@2 ~@7 [eb3,g3]@23 ~@12, ~@16 eb3 ~@131 d3 ~@7 bb3@23 ~@13]/6", // Eb Gm Eb Gm Eb
  F: "[~ [eb3,g3,bb3]@14 ~@2 [eb3,g3,bb3]@2 ~@2 [eb3,g3,bb3]@6 ~@2 [eb3,g3,bb3]@33 ~@2]/2", // Eb
  G: "[[eb3,g3,bb3]@14 ~@3 [g3,bb3]@2 ~@2 [eb3,g3,bb3]@6 ~@2 [eb3,g3,bb3]@30 ~@5, ~@17 eb3 ~@46]/2", // Eb Gm Eb
  H: "[[eb3,g3,bb3]@15 ~ [eb3,g3,bb3]@2 ~@3 [eb3,g3,bb3]@6 ~@2 [eb3,g3,bb3]@32 ~@3]/2", // Eb
  I: "[[eb3,g3,bb3]@15 ~@5 [g3,bb3]@2 ~@7 [eb3,g3]@23 ~@12, ~@20 d3 ~@7 bb3@23 ~@13]/2", // Eb Gm Eb
  J: "[[eb3,g3,bb3]@15 ~@5 [d3,g3,bb3]@3 ~@5 [eb3,g3,bb3]@20 ~@16, ~@20 ab3 ~@43]/2", // Eb Gm Eb
  K: "[~@19 [d3,g3,bb3]@3 ~@6 [eb3,g3,bb3]@29 ~@6 [eb3,g3,bb3]@2 ~@2 [eb3,g3,bb3]@2 ~@7 [eb3,g3,bb3]@8 [d3,g3,bb3]@3 ~@5 [eb3,g3,bb3]@20 ~@16, ~@84 ab3 ~@43]/4", // Gm Eb Gm Eb
  L: "[~@19 [d3,g3,bb3]@3 ~@6 [eb3,g3,bb3]@29 ~@6 [eb3,g3,bb3]@2 ~@19 [d3,g3,bb3]@3 ~@5 [eb3,g3,bb3]@20 ~@16, ~@84 ab3 ~@43]/4", // Gm Eb Gm Eb
  M: "~@19 [d3,g3,bb3]@3 ~@10", // Gm
})).s("gm_muted_trumpet").gain(0.45).pan(0)

// chords · brass section · "Brass   Pan<127"
const brass_section = note(`<
  ~@4 A@2 ~@2 B@2 C@2 ~@21 D@2 E@6 C@2 B@2 C@2 B@2 C@2 ~@16 F@2 G@2 H@2 I@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 ~@9 F@2
  G@2 H@2 J@2 K@16 L@4 K@16 M ~@2
>`.pickRestart({
  A: "[~@20 [g5,bb5]@3 ~@5 [g5,bb5]@18 ~@18, ~@27 eb5@18 ~@19]/2", // Gm
  B: "[~@20 [g5,bb5]@2 ~@7 [eb5,g5]@23 ~@12, ~@20 d5 ~@7 bb5@23 ~@13]/2", // Gm Eb
  C: "[~@10 [d5,g5,bb5] ~@3 [eb5,g5,bb5]@14 ~@4]/2", // Gm Eb
  D: "[[eb5,g5,bb5]@14 ~@2 [eb5,g5,bb5]@2 ~@2 [eb5,g5,bb5]@6 ~@2 [eb5,g5,bb5]@33 ~@3]/2", // Eb
  E: "[[eb5,g5,bb5]@14 ~@2 [g5,bb5]@2 ~@2 [eb5,g5,bb5]@6 ~@2 [eb5,g5,bb5]@30 ~@5 [eb5,g5,bb5]@15 ~@2 [eb5,g5,bb5]@2 ~@2 [eb5,g5,bb5]@6 ~@2 [eb5,g5,bb5]@32 ~@3 [eb5,g5,bb5]@15 ~@6 [g5,bb5]@2 ~@7 [eb5,g5]@23 ~@12, ~@16 eb5 ~@131 d5 ~@7 bb5@23 ~@13]/6", // Eb Gm Eb Gm Eb
  F: "[~ [eb5,g5,bb5]@14 ~@2 [eb5,g5,bb5]@2 ~@2 [eb5,g5,bb5]@6 ~@2 [eb5,g5,bb5]@33 ~@2]/2", // Eb
  G: "[[eb5,g5,bb5]@14 ~@3 [g5,bb5]@2 ~@2 [eb5,g5,bb5]@6 ~@2 [eb5,g5,bb5]@30 ~@5, ~@17 eb5 ~@46]/2", // Eb Gm Eb
  H: "[[eb5,g5,bb5]@15 ~ [eb5,g5,bb5]@2 ~@3 [eb5,g5,bb5]@6 ~@2 [eb5,g5,bb5]@32 ~@3]/2", // Eb
  I: "[[eb5,g5,bb5]@15 ~@5 [g5,bb5]@2 ~@7 [eb5,g5]@23 ~@12, ~@20 d5 ~@7 bb5@23 ~@13]/2", // Eb Gm Eb
  J: "[[eb5,g5,bb5]@15 ~@5 [d5,g5,bb5]@3 ~@5 [eb5,g5,bb5]@20 ~@16, ~@20 ab5 ~@43]/2", // Eb Gm Eb
  K: "[~@19 [d5,g5,bb5]@3 ~@6 [eb5,g5,bb5]@29 ~@6 [eb5,g5,bb5]@2 ~@2 [eb5,g5,bb5]@2 ~@7 [eb5,g5,bb5]@8 [d5,g5,bb5]@3 ~@5 [eb5,g5,bb5]@20 ~@16, ~@84 ab5 ~@43]/4", // Gm Eb Gm Eb
  L: "[~@19 [d5,g5,bb5]@3 ~@6 [eb5,g5,bb5]@29 ~@6 [eb5,g5,bb5]@2 ~@19 [d5,g5,bb5]@3 ~@5 [eb5,g5,bb5]@20 ~@16, ~@84 ab5 ~@43]/4", // Gm Eb Gm Eb
  M: "~@19 [d5,g5,bb5]@3 ~@10", // Gm
})).s("gm_brass_section").gain(0.45).pan(1)

// chords · synth strings 1 · "Strings"
const synth_strings_1 = note("<~@52 A@8 B@7 C ~@26 D@8 E F G H I J K ~@40>".pickRestart({
  A: "[[f4,bb4]@31 [g4,c5]@32 [bb4,d5]@32 ~ eb5@31 ~ d5@20 [a4,c5]@7 [g4,bb4]@24 ~ a4@9 [eb4,g4]@35 d5@16 c5@16, ~@95 c5@32 bb4@22 ~@30 f4@10 ~@67]/8", // Bb5 C5 Bb Am Gm Eb
  B: "[[f4,bb4]@31 ~ g4@31 [f4,a4]@31 ~ [bb4,d5]@7 ~@2 [c5,eb5]@4 [bb4,d5]@7 ~ [a4,c5]@7 ~ [g4,bb4]@11 [a4,c5]@4 [g4,bb4]@7 ~ [f4,a4]@8 [eb4,g4]@11 ~ [f4,a4]@3 ~@2 [eb4,g4]@8 f4@8 [c4,eb4]@36, ~@31 c5@33 ~@160]/7", // Bb5 F Bb Cm Bb Am Gm Am …
  C: "~ c4 ~@30, d5@5 ~@27", D: "[[g5,bb5]@191 [f5,a5]@21 ~@7 g5@28 ~@9, ~@212 d5@35 ~@9]/8",
  E: "~ c4 ~@6 c6@4 ~@3 bb5@4 ~@9 g5@3 ~, d5@5 ~@27, d6@3 ~@29", F: "~ bb5@4 ~@27",
  G: "d6@6 ~@2 c6@5 ~@3 bb5@4 ~@8 g5@4", H: "bb5@7 ~@25", I: "~ d6@5 ~@2 c6@6 ~@2 bb5@7 ~@6 g5@3", J: "bb5@5 ~@27",
  K: "d6@5 ~@27",
})).s("gm_synth_strings_1").gain(0.4)

// chords · piano · "E.Piano"
const piano_2 = note("<~@94 A@8 ~@47>".pickRestart({
  A: "[~@20 [f4,a4]@7 [bb3,eb4,g4]@37 [g4,bb4]@20 [f4,a4]@8 [bb3,eb4,g4]@36 [g4,bb4]@20 [f4,a4]@8 [bb3,eb4,g4]@35 ~ f4@28 [b3,d4,f4,a4]@28 ~@8, [g4,bb4]@28 ~@163 a4@28 ~@37, ~@24 c4@7 ~]/8", // F Eb Gm F Eb Gm F Eb …
})).s("gm_piano").gain(0.41)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B C@34 D C@3 D C@3 D C@3 E C@15 F@6 G C@3 D C@3 D C@3 D C@3 D C@3 E C@8 F@6 G C@3 D C@3 D C@3 D C@3 D C@3 G C@3
  D C@3 D C@3 D C@3 D C@2 ~@2
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x!4", C: "x!2", D: "x ~@4 x ~ x", E: "x ~@3 x ~@2 x", F: "~ x ~@15 x ~@14", G: "~@5 x ~ x",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A@34 B A@3 B A@3 B A@3 C A@15 D@6 E A@3 B A@3 B A@3 B A@3 B A@3 C A@8 D@6 E A@3 B A@3 B A@3 B A@3 B A@3 E A@3 B
  A@3 B A@3 B A@3 B A B ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@4 x ~@5 x!4 ~@2", D: "~@9 x ~@15 x ~@6", E: "x ~ x ~@2 x ~ x",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A@23 B A@10 C A@3 C A@3 C A@19 D@6 C A@3 C A@3 C A@3 C A@3 C A@12 D@6 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C
  A@3 C A@3 C A E ~@2
>`.pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x ~", C: "~@2 x!2 ~@2 x!2 ~@6 x!2",
  D: "~@5 x ~ x ~@5 x ~ x ~@5 x ~ x ~@5 x ~ x", E: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@4",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@73 [~ x!4 ~@3] ~@34 [~ x!4 ~@3] ~@19 [~ x!4 ~@3] ~@20>").gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@51 A ~@21 B ~@19 A ~@14 B ~@19 B ~@20>".pickRestart({
  A: "~@7 x", B: "~ x!4 ~@3",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~@34 A ~@3 A ~@3 A ~@25 A ~@3 A ~@3 A ~@3 A ~@3 A ~@18 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@4
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@34 A ~@3 A ~@3 A ~@3 A ~@21 B ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@14 B ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B ~@3 A ~@3 A
  ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "~@7 x", B: "x ~@6 x",
})).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<~@5 A@62 B@6 C A@28 B@6 C A@18 D ~@21>".pickRestart({
  A: "x!4", B: "~ x ~@7 x ~@7 x ~@7 x ~@6", C: "~ x!3", D: "x",
})).gain(0.5)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@127 [~ x!3]!2 [x!4]!17 [x!3 ~] ~@2>").gain(0.15)

// drums · congas
const congas = s("conga:13").struct("<~@3 [~ x ~ x]!11 ~@38 [~ x ~ x] ~@96>").gain(1.43)

// drums · congas
const congas_2 = s("conga:18").struct("<~@3 [x ~ x!2 ~@4 x ~ x!2 ~@4]!11 ~@38 [x ~ x!2 ~@4 x ~ x!2 ~@4] ~@96>")
  .gain(1.43)

// … 7 more lines

More by Chris Rea