Strudelify

Halfway to Paradise

Billy Fury

KeyG majorTempo126 bpm
0:00/0:00
// Halfway to Paradise — Billy Fury
// 126 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D E F D G F H I G J K L M N O P D E M G@2 F H I G J K L M N Q R H S T U H S T U H S T U V W X Y D E F D G F H I
  G J K L M N Q R H S T U H S T U H S T U V W X Y D E F D G F H I G J K L M N Z AA I@2 Z AA I@2 AB AC Q AD AE ~@8
>`.pickRestart({
  A: "c2@2 ~@2 c2!5 ~@3 c2!4", B: "c2@2 ~@2 d2!3 ~ e2!3 ~ d2!3 ~", C: "c2@2 ~@6 g1 ~@2 g1!2 ~ g1 ~",
  D: "c2@6 e2@5 ~ g2@4", E: "c2@6 e2@6 g2@3 ~", F: "c2@5 ~ e2@5 ~ g2@3 ~", G: "c2@3 e2@3 g2@2", H: "g1@5 ~ b1@5 ~ d2@4",
  I: "g1@5 ~ b1@5 ~ d2@3 ~", J: "c2@6 e2@5 ~ g2@2 ~@2", K: "f1@6 a1@5 ~ c2@3 ~", L: "f1@6 a1@6 c2@3 ~",
  M: "c2@5 ~ e2@6 g2@3 ~", N: "g1@5 ~ b1@6 d2@2 ~@2", O: "c2@2 ~@2 d2!3 ~ e2!4 d2!4", P: "c2 ~@7 g1 ~@2 g1!2 ~ g1 ~",
  Q: "c2@3 ~ d2@3 ~ e2@3 ~ d2@3 ~", R: "c2@4 ~@4 c2 ~@2 c2!2 ~ c2 ~", S: "g1@3 b1@3 d2@2", T: "c2@5 ~ e2@6 g2@4",
  U: "c2@3 e2@3 g2 ~", V: "a1@5 ~ c2@5 ~ e2@3 ~", W: "d2@6 f#2@5 ~ a2@4", X: "d2@6 f2@5 ~ a2@3 ~",
  Y: "g2 ~ g2 ~ f2 ~ f2 ~ e2 ~ e2 ~ d2!2 ~@2", Z: "c2@3 ~ d2@3 ~ e2@4 d2@3 ~", AA: "c2@5 ~ e2@5 ~ g2@2 ~@2",
  AB: "c2@3 ~ d2@3 ~ e2@4 d2@4", AC: "c2@3 ~ d2@4 e2@3 ~ d2@3 ~", AD: "c2@6 ~@2 c2 ~@2 c2!2 ~ c2 ~", AE: "c2@11 ~@5",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  A@2 B C@2 D@2 E@2 F@2 ~@6 G H C@2 D@2 E@2 F@2 ~@6 G I ~@16 C@2 D@2 E@2 F@2 ~@6 G I ~@16 C@2 D@2 E@2 F@2 ~@6 G J K@2 G
  J K@2 G@3 L M ~@8
>`.pickRestart({
  A: "[~ g4@18 ~ [a4,d5,f5]@3 ~ [b4,g5]@2 ~@2 [a4,d5,f5]@2 ~@2, [c5,e5]@19 ~@13]/2", B: "[g4,c5,e5]@8 g4@7 ~",
  C: "[g4@11 ~ g4@3 ~, [c5,e5]@15 ~]/2", D: "[[g4,c5,e5]@28 [c5,e5] ~@3]/2", E: "[[g4,c5,e5]@27 ~ [g4,c5,e5] ~@3]/2",
  F: "[[b4,d5]@14 [b4,d5] ~, g4 ~@15]/2", G: "[g4,c5,e5]@3 ~ [a4,d5,f5]@3 ~ [b4,e5,g5]@3 ~ [a4,d5,f5]@3 ~",
  H: "[g4,c5,e5]@5 ~@3 g4@7 ~", I: "[g4,c5,e5]@8 [c5,e5] ~@2 [g4,c5,e5]@2 ~ [g4,c5,e5]@2", J: "[g4,c5,e5]@15 ~",
  K: "[g4,b4,d5]@15 ~", L: "[g4,c5,e5]@13 ~ [g4,c5,e5] ~", M: "[g4,c5,e5]@5 ~@3",
})).s("gm_brass_section").gain(0.45)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D E F G@2 H I J K L M N O P Q@2 D E F G@2 H I J K L M N O P R S@8 T@8 U D E F G@2 H I J K V M N O P R W@8 T@8 U
  D E F G@2 H I J K V M N O P X Y Z AA X Y Z AB AC@4 AD ~@8
>`.pickRestart({
  A: "[c3,c4,g4,c5,e5]@3 ~ [c3,c4,c5]!2 [c3,g4,c5]!2 [c3,c4,g4,c5,e5]@3 ~ [c3,c4,g4,c5,e5]!4, ~@2 [g4,e5] e5 ~@4", // C C5 C
  B: "[c3,c4,g4,c5,e5]@3 ~ [d3,a4,d5,f5]!3 ~ [e3,b4,e5,g5]!2 e3 ~ d3!2 d3@2, ~@7 [d3,a4,d5,f5]@3 [b4,e5,g5]@2 [a4,d5,f5]@3 ~, ~@11 e3@3 ~@2", // C Dm Em Dm Em Dm
  C: "[c3,g4,c5,e5]@3 ~@5 [g2,g3,g4]@3 g2 [g2,b4,d5]@2 [g2,b4,d5]@2, ~@11 [g3,g4]@4 ~", // C G
  D: "~@4 e5@2 [g4,c5,e5]@3 ~ [g4,c5]@2 c5@2 c5@2, c3@3 e3@3 [g3,g4,e5]@2, ~@3 c5@3 ~@10", // C C5 C
  E: "~@4 e5@2 [g4,c5,e5]@3 ~ c5@2 [g3,g4,c5,e5]@4, c3@3 e3@3 ~@2, ~@3 c5@3 ~@10", // C
  F: "~@4 c5@2 [g4,c5,e5]@3 ~@3 c5@2 c5@2, c3@3 e3@3 [g3,g4,e5]@2, ~@3 g4@3 ~@10", // C
  G: "~@4 c5@2 [g4,c5,e5]@3 ~ g4@2 [g3,g4,c5,e5]@4, c3@3 e3@3 ~@2, ~@3 g4@3 ~@10", // C
  H: "~@4 c5@2 [g4,c5,e5]@3 ~@3 [g3,g4,c5,e5]@2 g4@2, c3@3 e3@3 ~@2, ~@3 g4@3 ~@10", // C
  I: "~@4 [b4,d5]@2 [g4,b4,d5]@3 ~ g4@2 g4@2 g4@2, g2@5 ~ b2@4 ~@2 [d3,b4,d5]@4, ~@3 g4@3 ~@10", // Bm G
  J: "b4@3 ~ [g4,b4]@2 [g4,b4,d5]@3 ~ [g4,b4]@2 [d3,g4,b4,d5]@4, g2@3 b2@3 ~@2", // G
  K: "[g4,c5,e5]@3 ~ c5@2 g4@3 ~ g4@2 ~@2 g4@2, c3@3 [e3,c5,e5]@3 [g3,c5,e5]@2, ~@3 g4@3 ~@10", // C
  L: "[g4,c5,e5]@3 ~ c5@2 [e3,c5,e5]@4 g4@2 [g3,g4,c5,e5]@3 ~, c3@3 ~@5, ~@3 [g4,e5]@3 g4@3 ~@7", // C
  M: "[f4,a4,c5]@3 [f4,a4]@3 f4@3 ~ f4@2 ~@2 f4@2, f2@5 ~ [a2,a4,c5]@6 [c3,a4,c5]@4", // F Am F
  N: "[f4,a4,c5]@3 ~ a4@2 f4@3 ~ f4@2 [c3,a4,c5]@2 [f4,a4,c5]@2, f2@3 [a2,a4,c5]@3 ~@2, ~@3 [f4,c5]@3 ~@10", // F Am F5
  O: "[g4,c5,e5]@3 ~ c5@2 g4@3 ~ g4@2 [g3,g4,c5,e5]@2 [g4,c5]@2, c3@3 [e3,c5,e5]@3 ~@2, ~@3 g4@3 ~@10", // C C5 C
  P: "[g4,b4,d5]@3 ~ b4@2 g4@3 ~ g4@2 [d3,g4,b4,d5]@4, g2@5 ~ [b2,b4,d5]@6 ~@4, ~@3 [g4,d5]@3 ~@10", // G Bm G5
  Q: "[[c3,g4,c5,e5]@3 ~ [d3,a4,d5,f5]!2 [d3,d5] ~ [e3,b4,e5,g5]!3 ~ [d3,a4,d5,f5]!3 ~ [g4,c5,e5]@3 ~@5 [g2,g4]@3 [g2,g4] [g2,g4]@2 [g2,g4]@2, ~@6 f5@3 ~@7 c3@5 ~@11, ~@7 [d3,d5]@3 ~ [e3,e5,g5]@3 ~ [d3,a4,d5,f5]@3 ~@14]/2", // C Dm D Em Dm C G D …
  R: "[c3,g4,c5,e5]@3 ~ [a4,d5,f5]!2 [d5,f5] ~ [e3,b4,e5,g5]@4 [a4,d5,f5] [a4,f5] f5 [d5,f5], ~@4 d3@3 [d5,f5]@3 ~@3 d5@2 ~, ~@6 a4@3 ~@3 d3@4, ~@7 a4", // C Dm Em Dm
  S: "[[g4,c5,e5]@7 ~ [c3,g4,c5,e5]@3 [c3,c5,e5] [c3,g4,c5,e5]@2 [c3,g4]@2 [g4,b4,d5]@3 ~ b4@2 [g4,b4,d5]@3 ~ b4@2 [g4,b4,d5]@2 [g4,b4]@2 [b4,d5]@3 ~ b4@2 [g4,b4,d5]@3 ~ [g4,b4]@2 [b4,d5]@2 g4@2 g4@3 g4@3 [g4,c5,e5]@4 c5@2 ~@2 g4@2 c5@3 ~ [g4,c5]@2 g4@3 ~ g4@2 ~@2 g4@2 [g4,b4,d5]@3 ~ b4@2 [g4,b4,d5]@3 ~ b4@2 [g4,b4,d5]@2 [g4,b4]@2 [b4,d5]@3 ~ b4@2 [g4,b4,d5]@3 ~ [g4,b4]@2 [b4,d5]@2 g4@2 g4@3 g4@3 [g4,c5,e5]@4 c5@2 ~@2 g4@2, c3@5 ~@9 [c5,e5]@40 ~@6 e5@9 ~@7 [c5,e5]@42 ~@10, ~@8 g2@3 b2@3 d3@2 g2@3 b2@3 d3@2 c3@3 e3@3 [g3,c5]@2 c3@3 [e3,c5,e5]@3 g3@24 [g3,c5,e5]@2, ~@19 g4@3 ~@58 g2@6 b2@6 d3@4 g2@6 b2@6 d3@4 c3@6 e3@6 ~@4, ~@83 g4@3 ~@42]/8", // C C5 G Bm G Bm C C5 …
  T: "[c5@3 ~ [g4,c5]@2 g4@3 ~ g4@2 ~@2 g4@2 [g4,b4,d5]@3 ~ b4@2 [g4,b4,d5]@3 ~ b4@2 [g4,b4,d5]@2 [g4,b4]@2 [b4,d5]@3 ~ b4@2 [g4,b4,d5]@3 ~ [g4,b4]@2 [b4,d5]@2 g4@2 g4@3 g4@3 [g4,c5,e5]@4 c5@2 ~@2 g4@2 c5@3 ~ [g4,c5]@2 g4@3 ~ g4@2 ~@4 [a4,c5,e5]@3 ~ c5@2 [a4,c5,e5]@3 ~ a4@2 [e3,c5,e5]@4 [a4,d5]@3 ~@3 [a4,c5,d5,f#5]@3 ~@3 [a3,a4,c5,d5,f#5]@4 [a4,c5,d5,f5]@3 ~@3 [a4,c5,d5,f5]@3 ~@3 [a3,a4,c5,d5,f5]@3 ~, c3@3 [e3,c5,e5]@3 g3@24 [g3,c5]@2 ~@3 [e3,c5,e5]@3 g3@26, ~@12 [c5,e5]@42 ~@6 e5@9 ~@7 [c5,e5]@4 ~@3 a4@3 ~@42, ~@8 g2@3 b2@3 d3@2 g2@3 b2@3 d3@2 c3@3 e3@3 ~@2 c3@3 ~@5 a2@3 c3@3 ~@2 d3@3 f#3@3 ~@2 d3@3 f3@3 ~@2, ~@19 g4@3 ~@56 g4@50]/8", // C5 G Bm G Bm C C5 Am …
  U: "g3!2 f3!2 e3!2 d3!2, [g4,b4,d5]@13 ~@3", // G
  V: "[g4,c5,e5]@3 ~ c5@2 g4@3 ~ g4@2 [g3,g4,c5,e5]@3 ~, c3@3 [e3,c5,e5]@3 ~@2, ~@3 [g4,e5]@3 ~@10", // C
  W: "[[g4,c5,e5]@7 ~ [c3,g4,c5,e5]@3 [c3,c5,e5] [c3,g4,c5,e5]@2 [c3,g4]@2 [g4,b4,d5]@3 ~ b4@2 [g4,b4,d5]@3 ~ b4@2 [g4,b4,d5]@2 [g4,b4]@2 [b4,d5]@3 ~ b4@2 [g4,b4,d5]@3 ~ [g4,b4]@2 [b4,d5]@2 g4@2 g4@3 g4@3 [g4,c5,e5]@4 c5@2 ~@2 g4@2 c5@3 ~ [g4,c5]@2 g4@3 ~ g4@2 ~@2 g4@2 [g4,b4,d5]@3 ~ b4@2 [g4,b4,d5]@3 ~ b4@2 [g4,b4,d5]@2 [g4,b4]@2 [b4,d5]@3 ~ b4@2 [g4,b4,d5]@3 ~ [g4,b4]@2 [b4,d5]@2 g4@2 g4@3 g4@3 [g4,c5,e5]@4 c5@2 ~@2 g4@2, c3@5 ~@9 [c5,e5]@40 ~@6 e5@9 ~@7 [c5,e5]@42 ~@10, ~@16 g2@6 b2@6 d3@4 g2@6 b2@6 d3@4 c3@6 e3@6 [g3,c5]@4 c3@7 ~@9 g2@6 b2@6 d3@4 g2@6 b2@6 d3@4 c3@6 e3@6 ~@4, ~@19 g4@3 ~@48 [e3,c5,e5]@6 g3@48 [g3,c5,e5]@4, ~@83 g4@3 ~@42]/8", // C C5 G Bm G Bm C C5 …
  X: "[c3,g4,c5,e5]@3 ~ [d3,a4,d5] d5 [d5,f5]@2 [e3,b4,e5,g5]@3 ~ d3!2 d3@2, ~@4 f5@2 ~@6 [a4,d5,f5]@3 ~, ~@5 d3@3 ~@8", // C D5 Dm Em Dm
  Y: "g4@3 g4@3 [g4,c5,e5]@3 ~ g4@2 [g3,g4,c5,e5]@2 g4@2, [c3,c5,e5]@5 ~ e3@4 ~@6", // C
  Z: "c5@3 ~ [g4,b4,d5]@2 [g4,b4,d5]@3 ~@3 [g4,b4]@2 g4@2, g2@6 b2@5 ~ [d3,d5]@4", // G D
  AA: "~@4 [g4,b4,d5]@2 [g4,b4,d5]@3 ~ [g4,b4]@2 g4@2 g4@2, g2@3 b2@2 ~ [d3,b4,d5]@2", // G
  AB: "~@4 [g4,b4,d5]@2 [g4,b4,d5]@3 ~ [g4,b4]@2 [d3,g4,b4,d5]@2 g4@2, g2@3 b2@2 ~@3", // G
  AC: "[[c3,g4,c5,e5]@3 ~ [d3,a4,d5] [d3,d5] [d3,d5,f5] ~ [e3,b4,e5,g5]@3 ~ [d3,a4,d5,f5]!2 [d3,d5,f5] ~ [c3,g4,c5,e5]@3 ~ [d3,a4,d5,f5]!3 ~ [e3,b4,e5,g5]@3 ~ [d3,a4,d5,f5]!3 ~ [c3,g4,c5,e5]@3 ~ [d3,a4,d5,f5] [a4,d5,f5]!2 ~ [e3,b4,e5,g5]@3 ~ [d3,a4,d5,f5] [d3,a4,f5]!2 ~ [g4,c5,e5]@7 ~ [c3,g4,c5,e5]@3 [c3,g4,c5,e5] [c3,g4,c5,e5]@2 [c3,g4,c5,e5]@2, ~@4 f5@2 ~ [d3,d5,f5]@3 ~@5 [d3,a4,d5,f5]@3 ~@5 [d3,a4,d5,f5]@3 ~@5 [d3,a4,d5,f5]@3 ~@3 d3@2 [d3,a4,d5,f5]@3 ~@5 [d3,a4,d5,f5]@3 ~@14, ~@5 a4@3 ~@37 d5@2 ~ c3@3 ~@13]/4", // C D5 D Dm Em Dm C Dm …
  AD: "[c3,g4,c5,e5]@5 ~@3", // C
})).s("gm_piano").gain(0.4)

// chords · piano · "A.PIANO 2" · soft notes
const piano_soft = note(`<
  A ~@2 B C D E ~ F ~@2 G ~@5 H ~ B C D E ~ F ~@2 G ~@7 I J K ~ I J K ~ I J K ~ L M@2 ~ B C D E ~ F ~@2 G ~@7 I J K ~ I
  J K ~ I J K ~ L M@2 ~ B C D E ~ F ~@2 G ~@5 N O P Q N O P Q R ~@12
>`.pickRestart({
  A: "~@3 c4 ~@4", B: "~@3 g4@3 ~@10", C: "c5@2 ~ g4@3 ~@4 g4@2 ~@4, ~ e5 ~@6", D: "~@3 e5@3 ~@4 g4@2 ~@4",
  E: "~@3 e5@3 ~@10", F: "~@2 e5 ~@5", G: "~@3 e5@3 ~@10, ~ c5 ~@6", H: "~@6 a4@3 ~@2 b4@3 ~@2", I: "~@5 g4 ~ d5",
  J: "~@3 g4@3 ~@6 g4@2 [b4,d5]@2", K: "~@5 c5 ~@4 g4@3 ~@3", L: "~@10 [c5,e5]@2 ~@3 a4", M: "~@2 a4 ~@5",
  N: "~@5 a4@3 ~@8", O: "~@5 [c5,e5] ~@2", P: "~@5 [g4,b4] ~ b4", Q: "~@5 d5 ~@2", R: "~@14 a4 ~",
})).s("gm_piano").gain(0.2)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@9 A B@8 ~@7 A C@8 D@7 E@4 F@8 ~@4 A C@8 G@7 E@4 F@8 ~@4 A H@8 I J K L I J K M N O P Q ~@8
>`.pickRestart({
  A: "[g4,g5]", // G
  B: "[g4@4 [g4,g5]@4 [g4,g5,a5]@4 g5@4 [g5,c6]@7 ~ [g5,c6]@15 ~ [g5,b5]@8 [g5,b5]@5 ~ [f5,a5,c6]@21 ~ [f5,a5,c6]@4 [e5,c6]@14 ~@2 [d5,g5,b5]@15 ~ [c5,e5]@3 ~ [d5,f5]@2 ~@2 g5@3 ~ f5@2 ~@2, ~@3 g4@29, ~@3 b5@7 ~@10 g5@4 ~@8, ~@16 e6@31 ~@81]/8", // G Gsus2 C5 G F C G C …
  C: "[g4@4 [g4,g5]@4 [g4,g5,a5]@4 g5@4 [g5,c6]@7 ~ [g5,c6]@15 ~ [g5,b5]@8 [g5,b5]@5 ~ [f5,a5,c6]@21 ~ [f5,a5,c6]@4 [e5,c6]@14 ~@2 [d5,g5,b5]@15 ~ [c6,e6]@3 ~ [a5,d6,f6]@4 [b5,e6,g6]@3 ~ [a5,d6,f6]@3 ~, ~@3 g4@29, ~@3 b5@7 ~@10 g5@4 ~@8, ~@16 e6@31 ~@81]/8", // G Gsus2 C5 G F C G C …
  D: "[[c6,e6]@7 ~ c6 ~@2 c6!2 ~@19 d6@14 ~@2 g5@15 ~ a5@4 g5@2 a5@4 g5@2 a5@2 g5@2 ~@16 d6@14 ~@2, g5@16 [g5,b5]@29 ~@3 e5@64, ~ c6@7, ~@80 [g5,b5]@29 ~@3]/7", // C G
  E: "[g5@15 ~ a5@4 g5@2 a5@4 g5@2 a5@2 g5@2 ~@16 d6@13 ~@3, e5, ~@32 [g5,b5]@29 ~@3]/4", // G
  F: "[g5@15 ~ a5@4 g5@2 a5@4 g5@2 a5@2 ~@2 [c6,e6]@13 ~@3 [f#5,a5]@13 ~@3 [a5,d6]@16 g5@15 ~@33, e5, ~@30 g5@50 b5@11 ~@37, ~@32 a5@15 ~@17 f5@14 ~@50]/8", // C F#m D5
  G: "[[c6,e6]@7 ~ c6 ~@2 c6!2 ~@19 d6@14 ~@2 g5@15 ~ a5@4 g5@2 a5@4 g5@2 a5@2 g5@2 ~@16 d6@13 ~@3, g5@16 [g5,b5]@29 ~@3 e5@64, ~ c6@7, ~@80 [g5,b5]@29 ~@3]/7", // C G
  H: "[g4@4 [g4,g5]@4 [g4,g5,a5]@4 g5@4 [g5,c6]@7 ~ [g5,c6]@15 ~ [g5,b5]@8 [g5,b5]@5 ~ [f5,a5,c6]@21 ~ [f5,a5,c6]@4 [e5,c6]@14 ~@2 [d5,g5,b5]@15 ~ [c5,g5,c6,e6]@3 ~ [d5,a5,d6,f6]@3 ~ [e5,b5,e6,g6]@3 ~ [d5,a5,d6,f6]@3 ~, ~@3 g4@29, ~@3 b5@7 ~@10 g5@4 ~@8, ~@16 e6@31 ~@81]/8", // G Gsus2 C5 G F C G C …
  I: "[c5,c6,e6]@15 ~, g5@13 ~@3", J: "[g4,g5,b5,d6]", K: "[f5,b5,d6]@15 ~, g4 ~@15",
  L: "[c5,g5,c6,e6]@3 ~ [d5,a5,d6,f6]@3 ~ [e5,b5,e6,g6]@3 ~ [d5,a5,d6,f6]@3 ~", // C Dm Em Dm
  M: "~@4 [a5,d6,f6]@3 ~ [b5,e6]@2 ~@2 [a5,d6,f6]@2 ~@2", // Dm E5 Dm
  N: "[g5,c6,e6]@3 ~ [a5,d6,f6]@2 ~@2 [b5,e6]@2 ~@2 [a5,d6,f6]@2 ~@2", // C Dm E5 Dm
  O: "[g5,c6,e6]@3 ~ [a5,d6]@2 ~@2 [b5,e6,g6]@2 ~@2 [a5,d6,f6]@2 ~@2", // C D5 Em Dm
  P: "~@8 [g5,c6,e6] ~@2 [c6,e6] [g5,c6,e6] ~ [c6,e6] ~", Q: "[g5,c6,e6]@3 ~",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.4)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note(`<
  ~@17 A B ~@14 C ~@13 D@2 ~@16 C ~@13 D@2 ~@17 E ~@3 E ~@2 F G H I J ~@8
>`.pickRestart({
  A: "~@8 e5@3 ~ d5@2 ~@2", B: "[c5,e5]@3 ~@5 [g4,b4]@5 ~@3", C: "g5@3 ~@13", D: "[~@15 d6@17]/2", E: "~@14 g5 ~",
  F: "[g5,c6,e6] ~@3 g6 ~@3", G: "~@4 g6 ~@3", H: "~@2 f6 ~@5", I: "[g5,c6,e6]@7 ~@4 g5 ~@2 g5 ~", J: "c5@3 ~",
})).s("gm_string_ensemble_1").gain(0.2).pan(0.4)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@9 A B@8 ~@7 A C@8 D@8 E F@2 G H@4 I ~@6 A C@8 J@8 E F@2 G H@4 I ~@6 A K@8 L M N O L M N P Q R S T ~@8
>`.pickRestart({
  A: "g3@15 ~",
  B: "[g3@3 ~ [g3,g4]@3 ~ [g3,g4,a4]@3 ~ g4@4 [g4,c5]@7 ~ [g4,c5]@15 ~ [g4,b4]@8 [g4,b4]@5 ~ [f4,a4,c5]@21 ~ [f4,a4,c5]@4 [e4,c5]@14 ~@2 [d4,b4]@15 ~ [c4,e4]@3 ~ [d4,f4]@2 ~@2 g4@3 ~ f4@2 ~@2, ~@3 g3@29, ~@3 b4@7 ~@10 g4@4 ~@8, ~@16 e5@31 ~@81]/8", // G Gsus2 C5 G F C G C …
  C: "[g3@3 ~ [g3,g4]@3 ~ [g3,g4,a4]@3 ~ g4@4 [g4,c5]@7 ~ [g4,c5]@15 ~ [g4,b4]@8 [g4,b4]@5 ~ [f4,a4,c5]@21 ~ [f4,a4,c5]@4 [e4,c5]@14 ~@2 [d4,b4]@15 ~ [c5,e5]@3 ~ [a4,d5,f5]@4 [b4,e5,g5]@3 ~ [a4,d5]@3 ~, ~@3 g3@29, ~@3 b4@7 ~@10 g4@4 ~@8, ~@16 e5@31 ~@81]/8", // G Gsus2 C5 G F C G C …
  D: "[[c5,e5]@7 ~ c5 ~@2 c5!2 ~@19 d5@14 ~@2 g4@15 ~ a4@4 g4@2 a4@4 g4@2 a4@2 g4@2 ~@16 d5@14 ~@2 g4@15 ~, g4@16 b4@29 ~@35 b4@29 ~@19, ~@7 c5@57]/8", // C
  E: "a4@2 g4 a4@2 g4 a4 g4", F: "[~@16 d5@13 ~@3, b4@29 ~@3]/2", G: "g4@15 ~",
  H: "[a4@4 g4@2 a4@4 g4@2 a4@2 ~@2 [c5,e5]@13 ~@3 [f#4,a4]@13 ~@3 [a4,d5]@16, ~@7 g4@25, ~@16 a4@15 ~@17 f4@14 ~@2]/4", // C F#m D5
  I: "g4@15 ~, b4@11 ~@5",
  J: "[[c5,e5]@7 ~ c5 ~@2 c5!2 ~@19 d5@14 ~@2 g4@15 ~ a4@4 g4@2 a4@4 g4@2 a4@2 g4@2 ~@16 d5@13 ~@3 g4@15 ~, g4@16 b4@29 ~@35 b4@29 ~@19, ~@7 c5@57]/8", // C
  K: "[g3@3 ~ [g3,g4]@3 ~ [g3,g4,a4]@3 ~ g4@4 [g4,c5]@7 ~ [g4,c5]@15 ~ [g4,b4]@8 [g4,b4]@5 ~ [f4,a4,c5]@21 ~ [f4,a4,c5]@4 [e4,c5]@14 ~@2 [d4,b4]@15 ~ [c4,g4,c5,e5]@3 ~ [d4,a4,d5,f5]@3 ~ [e4,b4,e5,g5]@3 ~ [d4,a4,d5,f5]@3 ~, ~@3 g3@29, ~@3 b4@7 ~@10 g4@4 ~@8, ~@16 e5@31 ~@81]/8", // G Gsus2 C5 G F C G C …
  L: "[c4,c5,e5]@15 ~, g4@13 ~@3", M: "[g3,g4,b4,d5]", N: "[f4,b4,d5]@15 ~, g3 ~@15",
  O: "[c4,g4,c5,e5]@3 ~ [d4,a4,d5,f5]@3 ~ [e4,b4,e5,g5]@3 ~ [d4,a4,d5,f5]@3 ~", // C Dm Em Dm
  P: "~@4 [a4,d5,f5]@3 ~ [b4,e5]@2 ~@2 [a4,d5]@2 ~@2", Q: "[g4,c5]@3 ~ [a4,d5]@2 ~@2 e5@2 ~@2 [a4,d5,f5]@2 ~@2",
  R: "c5@3 ~@5 e5@2 ~@2 [a4,d5,f5]@2 ~@2", S: "~@8 [g4,c5,e5] ~@2 [c5,e5] [g4,c5,e5] ~ [c5,e5] ~", T: "[c5,e5]@3 ~",
})).s("gm_string_ensemble_2").gain(0.25)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note(`<
  ~@9 A@2 ~@5 B C D ~@6 A@2 ~@5 B E ~ F@2 G@8 H@8 ~@4 A@2 ~@5 B E ~ F@2 G@8 H@8 ~@4 A@2 ~@5 B ~ I ~@3 I ~@2 J K L M N
  ~@8
>`.pickRestart({
  A: "[g4@19 ~@13]/2", B: "g4@7 ~", C: "~@8 e4@3 ~ d4@2 ~@2", D: "[c4,e4]@3 ~@5 [g3,b3]@5 ~@3", E: "g4@3 ~@9 f5@2 ~@2",
  F: "[g4@29 ~@3]/2", G: "[~@32 g4@29 ~@3, e4]/4", H: "[~@47 d5@17 ~@64, e4]/8", I: "~@14 g4 ~",
  J: "[g4,c5,e5] ~@3 g5 ~ f5 ~", K: "e5@3 ~ f5@2 ~@2 [b4,g5]@2 ~@6", L: "[g4,e5]@3 ~ [a4,d5,f5]@2 ~@2 [b4,g5]@2 ~@6",
  M: "[g4,c5,e5]@7 ~@4 g4 ~@2 g4 ~", N: "[c4,g4]@3 ~",
})).s("gm_string_ensemble_2").gain(0.15)

// drums · kick
const kick = s("bd").struct("<A@2 B C@15 B C@14 D B C@30 D B C@30 D C@3 D C@3 D@3 B@2 ~@8>".pickRestart({
  A: "x!2", B: "x", C: "x ~@6 x", D: "x ~@2 x!2 ~@2 x",
})).gain(0.46)

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

// drums · low tom
const low_tom = s("lt").struct("<~@2 A ~@15 B ~@15 C ~@15 C ~@15 C ~@15 C ~@25 C ~@9>".pickRestart({
  A: "~@6 x!2", B: "~@8 x ~@2 x ~@4", C: "~@7 x",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct("<A B C D@8 ~@6 B C D@8 ~@6 E C ~@16 D@8 ~@6 E C ~@16 D@8 ~@14 E@3 C ~@9>".pickRestart({
  A: "x ~@3 x!5 ~@4 x!3", B: "x ~@3 x!12", C: "x", D: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", E: "x ~@3 x!5 ~@3 x!4",
})).gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 A ~@15 B ~@15 C ~@15 D ~@15 C ~@15 D ~@25 C ~@9>".pickRestart({
  A: "~@8 x ~@2 x ~@4", B: "~@6 x!2", C: "~@8 x ~@2 x!2 ~@3", D: "~@3 x",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@50 [~@5 x ~@2] ~@31 [~@5 x ~@2] ~@35>").gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@7 A ~@5 A ~ A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@5 A ~@3 A ~@3 A@5 ~@8
>`.pickRestart({
  A: "x",
})).gain(0.2)

// drums · ride
const ride = s("rd").struct(`<
  A ~@2 A ~@3 A ~@3 B@6 A ~ A ~@3 A ~@3 B@6 ~@2 B@15 C A ~@3 A ~@3 B@6 ~@2 B@15 C A ~@3 A ~@3 B@6 A D B@2 A D B@2 A ~@12
>`.pickRestart({
  A: "x", B: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", C: "x!8", D: "x ~ x!2 ~ x!3",
})).gain(0.36)

stack(
  bass, brass_section, piano, piano_soft, string_ensemble_1, string_ensemble_1_soft, string_ensemble_2,
  string_ensemble_2_soft, kick, snare, low_tom, hihat, mid_tom, high_tom, crash, ride
)