Strudelify

True Love Ways

Cliff Richard

KeyB♭ majorTempo76 bpm
0:00/0:00
// True Love Ways — Richard Cliff
// 76 bpm, 4/4, key A# 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 59 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(76/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 C D E@3 F@5 ~ G@2 H@5 ~ I@2 J@5 ~@16 K L@4 M N@2 ~ O@2>".pickRestart({
  A: "[~@12 a6@7 ~@5 g6@7 ~@5 f6@7 ~@5, ~@11 d6@8 ~@4 bb5@8 ~@4 a5@8 ~@5, ~@23 f6@15 ~@9 eb6@15 ~@9 c6@15 ~@10]/2",
  B: "~@20 d6@3 ~ bb5@8 ~@12 d5@3 ~", C: "bb4@8 ~@12 d5@3 ~ bb4@8 ~@16",
  D: "~@3 [c5,eb5]@2 ~ [c5,eb5,g5]@2 ~ [eb5,g5,bb5]@2 ~", // Cm Eb
  E: "[[eb5,g5,bb5,c6]@23 ~@24 [d5,f5,bb5]@17 ~@7 [d5,f5,a5]@17 ~@7 [bb4,eb5,g5]@17 ~@6 [c5,f5,a5]@17 ~@9]/3", // Cm7 Bb Dm Eb F
  F: "[~@10 a5@2 ~ ab5@2 ~ g5@2 ~ gb5@2 ~ f5@5 ~ d5@5 ~ a4@5 ~ f4@5 ~ [bb4,eb5]@17 ~@6 [f4,a4,c5]@17 ~@7 [f4,bb4,d5]@17 ~ f4@5 ~ [g4,bb4,d5]@17 ~@6 [g4,bb4,c5,eb5]@17 ~@7 [c5,eb5,g5]@11 ~ [c5,eb5,gb5]@11 ~ [bb4,d5,f5]@17 ~@6 [g4,bb4,eb5]@17 ~@7 [f4,bb4,d5]@3 ~@2]/5", // Eb5 F Bb Gm Cm7 Cm Cdim Bb …
  G: "[~@18 gb6@14 ~@10 gb6@14 ~@9 gb6@14 ~@17, ~@16 c6@16 ~@8 db6@16 ~@7 c6@16 ~@17, ~@17 eb6@15 ~@9 eb6@15 ~@8 eb6@15 ~@17]/2",
  H: "[~@29 f5@2 ~ d5@2 ~ c5@2 ~ bb4@2 ~ c5@5 d5@17 ~@25 [f4,ab4,db5]@17 ~@7 [f4,ab4,db5]@17 ~@6 [a4,c5]@17 ~@3 [a4,c5]@3 ~ [g4,bb4,e5]@17 ~@3 [bb4,c5,e5]@3 ~ [a4,c5,f5]@35 ~@4 a5@3 ~ c6@3 ~ [f5,f6]@4 ~@6]/5", // Db Am Edim C7 F
  I: "[~@3 d6@3 bb5@3 ~ bb5@3 ~ a5@23 ~ [eb5,g5]@23 ~ [c5,f5]@17 ~@17]/2", // Eb F5
  J: "[~ bb5@11 ~ a5@17 ~@7 [bb4,eb5,g5]@23 ~@24 [bb4,d5,f5]@17 ~@7 [e5,g5]@17 ~@7 [eb5,g5]@17 ~@6 [d5,gb5,a5]@17 ~@7 [d5,g5]@23 ~@38, ~ [d5,f5]@29 ~@210]/5", // Eb Bb Em Eb D G5 Dm
  K: "~@30 d6@13 ~@3 d6@2",
  L: "[~@2 c6@3 ~ a5@23 ~ [g5,bb5]@23 ~ [f5,a5]@17 ~@7 bb5@23 ~ a5@23 ~ [eb5,g5]@23 ~ [c5,f5]@17 ~@7 [bb4,d5,f5]@15 ~ f5@2, ~@78 [d5,f5]@47 ~@67]/4", // Gm F Eb F5 Bb Dm
  M: "~@6 [bb4,g5]@19 ~@5 [bb4,eb5,g5]@18, ~@2 d5@23 ~@23", // Eb
  N: "[~@6 g5@11 ~ gb5@7 ~@5 f5@24 ~ g5@18 ~@7 [g4,bb4,eb5]@12 ~@4, ~@6 [c5,eb5]@19 ~@5 [bb4,d5]@43 ~@23]/2", // Eb Cm Bb
  O: "[~@18 [bb4,d5,f5,g5]@20 ~@6 a6@45 ~@7, ~@41 bb5@49 ~@6, ~@42 d6@47 ~@7, ~@43 f6@46 ~@7]/2", // Gm7
})).s("gm_piano").gain(0.4).pan(0.3)

// bass · acoustic bass
const bass = note("<~ A B A B C D E F@8 G@8 H@8 I@8 J@7 K L@6 M@5>".pickRestart({
  A: "bb1@23 ~ d2@23 ~", B: "eb2@23 ~ f2@23 ~", C: "bb1@23 ~ g1@23 ~", D: "g1@23 ~ c2@23 ~", E: "c2@23 ~ c2@23 ~",
  F: "[f2@23 ~ f1@23 bb1@23 ~ d2@23 ~ eb2@23 f2@23 ~ bb1@23 ~ d2@23 ~ eb2@23 f2@23 ~ bb1@23 ~ g1@23 c2@23 ~ f2@23 ~ bb1@23 eb2@23 ~ bb1@3 ~@2]/8",
  G: "[~@42 eb2@23 ~ eb2@23 ~ eb2@23 ab1@15 ~ ab2@3 ~ a2@3 ~ bb2@23 ~ f2@23 ~ bb2@23 bb2@23 ~ db2@23 ~ db2@23 c2@23 ~ c2@23 ~ f2@23 c2@23 ~ f2@4 ~@6]/8",
  H: "[~@39 bb1@23 d2@23 ~ eb2@23 ~ f2@23 bb1@23 ~ d2@23 ~ eb2@23 f2@23 ~ f2@23 ~ e2@23 ~ eb2@23 gb2@15 ~@5 gb2@3 ~ g2@23 g2@22 eb2@16]/8",
  I: "[~@7 f2@26 bb1@24 d2@11 ~ e2@11 ~ eb2@23 f2@23 ~ bb1@23 ~ f2@11 ~ e2@11 eb2@23 ~ f2@23 ~ bb1@24 ~ e2@24 eb2@24 c3@24 ~ bb2@24 f2@24 bb1@4 ~@11]/8",
  J: "[~@34 eb2@23 ~ eb2@23 eb2@23 ~ ab2@15 ~ ab2@3 ~ a2@3 ~ bb2@23 f2@23 ~ bb2@23 ~ bb2@23 db2@11 ~ db2@11 ~ db2@11 ~ db2@11 ~ c2@11 ~ c2@11 ~ c2@11 c2@11 ~ f2@11 ~ f2@3 ~ f2@2]/7",
  K: "~@2 f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~ f2@8 ~@10",
  L: "[~@30 bb1@23 ~ d2@23 ~ eb2@23 ~ f2@23 ~ bb1@23 ~ d2@23 ~ eb2@23 ~ f2@23 ~ bb1@23 ~ g2@23 ~ eb2@18]/6",
  M: "[~@6 f2@23 ~ bb2@24 ~ g2@24 ~ eb2@25 c2@32 ~ bb1@95 ~@7]/5",
})).s("gm_acoustic_bass").gain(0.5)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~ A B A B C D E F@8 ~ G H I J K L M N O P Q R S@4 T U V W X Y Z AA AB AC AD AE@3 AF AG AH AI AH AI AJ AK AL ~@3
>`.pickRestart({
  A: "bb3@11 ~ [d4,f4]@3 ~@9 a3@11 ~ [d4,f4]@3 ~@9", B: "g3@11 ~ [bb3,eb4]@3 ~@9 f3@11 ~ [a3,c4]@3 ~@9",
  C: "bb3@11 ~ [d4,f4]@3 ~@9 g3@11 ~ [bb3,d4]@3 ~@9", D: "f3@11 ~ [bb3,c4]@3 ~@9 e3@11 ~ [bb3,c4]@3 ~@9",
  E: "g3@11 ~ [c4,eb4]@3 ~@9 g3@11 ~ [c4,eb4]@3 ~@9", // Cm
  F: "[g3@12 [c4,eb4]@3 ~@9 f3@11 ~ c4@7 ~@4 bb3@11 ~ [d4,f4]@3 ~@9 a3@11 ~ [d4,f4]@3 ~@9 g3@11 ~ bb3@7 ~@4 f3@11 ~ [a3,c4]@3 ~@9 bb3@11 ~ [d4,f4]@3 ~@9 a3@11 ~ [d4,f4]@3 ~@9 g3@11 [bb3,eb4]@3 ~@9 f3@11 ~ [a3,c4]@3 ~@9 bb3@11 ~ [d4,f4]@3 ~@9 g3@11 bb3@7 ~@5 g3@11 ~ [c4,eb4]@3 ~@9 f3@11 ~ c4@3 ~@9 bb3@11 d4@3 ~@9 g3@11 ~ [bb3,eb4]@7 ~@5 bb3@3 ~@2, ~@36 gb3@3 ~@68 eb4@3 ~@162 d4@3 ~@109]/8", // Cm Dm Am Dm Eb5 Am Dm Cm …
  G: "~@2 [gb3,bb3,eb4] ~@7 [gb3,bb3,eb4] ~@5", H: "~@6 [gb3,bb3,eb4]@3 ~@20 [ab3,c4,eb4]@3 ~@16",
  I: "~@5 [f3,bb3,d4]@3 ~@21 [f3,bb3,d4]@3 ~@16", J: "~@4 [f3,bb3,d4]@3 ~@21 [f3,bb3,d4]@3 ~@17",
  K: "~@4 [f3,ab3,db4]@3 ~@20 [f3,ab3,db4]@3 ~@18", L: "~ [f3,a3,c4] ~@7 [g3,bb3,c4] ~@3 [c4,f4] ~@2",
  M: "~@2 [c4,eb4,f4]@3 ~@9 [c4,eb4,f4]@3 ~@9 [c4,eb4,f4]@3 ~@9 [f3,f4]@4 ~@6", N: "~@13 bb3@3",
  O: "~@3 [d4,f4]@3 ~@8 a3@11 ~ [d4,f4]@3 ~@9 g3@10", P: "~@2 [bb3,eb4]@3 ~@9 f3@11 ~ [a3,c4]@3 ~@8 bb3@11",
  Q: "~ [d4,f4]@3 ~@9 a3@11 ~ [d4,f4]@3 ~@9 g3@11", R: "~ [bb3,eb4]@3 ~@8 f3@11 ~ [a3,c4]@3 ~@9 bb3@11 ~",
  S: "[[d4,f4]@3 ~@9 bb3@11 ~ [e4,g4]@3 ~@9 bb3@11 [eb4,g4]@3 ~@9 a3@11 ~ [a3,d4]@3 ~@21 [g3,bb3,d4]@3 ~@19 [g3,bb3,d4]@3 ~@9 eb4@21 ~@39 [bb3,d4,f4]@3, ~@127 g3@23 ~@42, ~@64 bb3@11 ~@21]/4", // Dm Em Eb D5 Gm Bb
  T: "~@21 [a3,d4,f4]@3 ~@20 [g3,bb3,eb4]@3 ~", U: "~@20 [g3,bb3,c4,eb4]@3 ~@21 [f3,bb3,d4]@3 ~",
  V: "~@20 [f3,a3,d4]@3 ~@20 [g3,bb3,eb4]@3 ~@2", W: "~@19 [g3,bb3,c4,eb4]@3 ~@22 [f3,bb3,d4]@4",
  X: "~@5 [g3,bb3,d4] ~@5 [gb3,bb3,eb4]", Y: "~@21 [gb3,bb3,eb4]@4 ~@20 [f3,bb3,d4]@3",
  Z: "~@21 [g3,bb3,eb4]@4 ~@8 [f3,bb3,d4]@4 ~@11", AA: "~@23 [gb3,bb3,eb4]", AB: "~@7 [gb3,bb3,eb4] ~@7 [gb3,bb3,d4]",
  AC: "~@7 [gb3,bb3,db4] ~@7 [f3,bb3,d4]", AD: "~@20 [f3,bb3,d4]@3 ~@21 [f3,bb3,d4]@3 ~",
  AE: "[~@20 [f3,bb3,d4]@3 ~@8 [ab3,db4,f4]@3 ~@9 [ab3,db4,f4]@3 ~ [ab3,db4,f4]@3 ~ [ab3,db4,f4]@3 ~ [ab3,db4,f4]@3 ~@9 [ab3,db4,f4]@3 ~ [ab3,db4,f4]@3 ~ [ab3,db4,f4]@3 ~ [bb3,d4,f4]@3 ~@9 [bb3,d4,f4]@3 ~ [bb3,d4,f4]@3 ~ [bb3,d4,f4]@3 ~ [c4,e4,g4]@3 ~@8 [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [a3,c4,f4]@3 ~@9 [a3,c4,f4]@3 ~ [a3,c4,f4]@2]/3", // Bb Db Bb C F
  AF: "~@2 [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@4 ~@14", // F
  AG: "~@30 bb3@11 ~ [d4,f4]@3 ~@3", AH: "~@6 a3@11 ~ [d4,f4]@3 ~@9 g3@11 ~ [bb3,eb4]@3 ~@3",
  AI: "~@6 f3@11 ~ [a3,c4]@3 ~@9 bb3@11 ~ [d4,f4]@3 ~@3", AJ: "~@6 g3@11 ~ [bb3,d4]@3 ~@9 g3@11 ~ [bb3,eb4]@3 ~@3",
  AK: "~@6 g3@11 ~ gb3@11 ~ d4@12 ~ [f3,bb3]@4 ~", AL: "~@19 [g3,bb3,d4]@4 ~@9 [g3,bb3,eb4]@8 ~@8",
})).s("gm_acoustic_guitar_nylon").gain(0.3)

// chords · string ensemble 1
const string_ensemble_1 = note("<~ A B A C D E F G@8 H@8 I@3 J@3 K@7 L@8 M@2 N O@8 P@3>".pickRestart({
  A: "[f3,bb3,d4]@23 ~ [a3,d4,f4]@23 ~", B: "[eb4,g4,bb4]@23 ~ [c4,f4,a4]@23 ~",
  C: "[eb4,g4,bb4]@23 ~ [f4,a4]@11 ~ gb4@11 ~, ~@24 c4@23 ~", D: "[bb3,d4,f4]@23 ~ [bb3,d4,g4]@23 ~",
  E: "[g3,c4,f4]@23 ~ [g3,c4,e4]@23 ~", F: "~@12 [c4,eb4]@11 ~ [eb4,g4]@18 ~ [g4,bb4]@4 ~",
  G: "[g4@23 ~ gb4@23 [bb3,d4,f4]@23 ~ [d4,f4,a4]@23 ~ [bb3,eb4]@23 [a3,c4]@23 ~ [bb3,d4,f4]@23 ~ [d4,f4,a4]@23 ~ [bb3,eb4]@23 [a3,c4]@23 ~ [bb3,d4,f4]@23 ~ [bb3,d4,g4]@23 [c4,eb4,g4]@23 ~ g4@11 ~ gb4@11 ~ [bb3,d4,f4]@23 [bb3,eb4,g4]@23 ~ [bb3,d4,f4]@3 ~@2, [c4,eb4]@47 ~@48 g4@47 ~@48 g4@47 ~@71 [bb3,eb4]@23 ~@53]/8", // Bb Dm Eb5 Am Bb Dm Eb5 Am …
  H: "[~@42 bb3@23 ~ c4@23 ~ db4@47 d4@94 ~ db4@47 c4@23 ~ e4@23 ~ f4@47 ~@10]/8",
  I: "[~@39 [f3,bb3]@23 f4@20 a4@3 ~ [bb3,eb4]@23 ~ [a3,c4]@23 ~@11, ~@39 d4@47 g4@47 ~@11, ~@62 a3@19 ~@63]/3", // Bb5 Eb5 Am
  J: "[~ bb4@11 ~ a4@23 ~ [bb3,eb4]@23 [a3,c4]@23 ~ [bb3,d4,f4]@23 ~ [e4,g4]@23 ~ [eb4,g4]@12, ~ [d4,f4]@35 ~ g4@47 ~@60]/3", // Eb5 Am Bb Em Eb Dm
  K: "[~@11 [d4,gb4]@23 ~@69 c4@26 [f3,bb3]@23 ~ [a3,f4]@23 ~ g3@23 c4@23 ~ f3@23 ~ [a3,f4]@23 ~@12 bb4@11 ~ c4@20 g4@3 ~ [f3,d4,f4]@17, ~@35 g4@94 ~@166 a4@19 ~@22, ~@35 bb3@68 ~@74 bb3@71 ~@23 [bb3,eb4]@47 ~@18, ~@80 eb4@49 d4@47 ~ eb4@47 d4@47 g3@23 ~@42]/7", // D Bb5 Dm Eb5
  L: "[~@8 g4@18 d5@6 c5@20 d5@4 c5@6 bb4@6 ~ a4@6 c5@6 [f3,d4]@24 [g3,eb4]@24 [f3,d4]@36 ~@13 f4@23 ~ eb4@23 d4@23 ~ db4@19 ~ c4@3 ~ c4@23 bb3@23 ~ a3@23 ~ bb3@23 [c4,f4,ab4]@3 ~@9 [c4,f4,ab4]@3 ~ [c4,f4,ab4], ~@4 d4@28 ~@49 bb4@85 ~@218, ~@4 g3@12 [gb3,eb4]@24 ~@49 [gb3,bb3]@45 ~@58]/8", // Dm Cm Dm Fm Ebm Gb
  M: "[~@3 [c4,f4,ab4]@3 ~ [c4,f4,ab4]@3 ~@9 [c4,f4,ab4]@3 ~ [c4,f4,ab4]@3 ~ [c4,f4,ab4]@3 ~ [d4,f4,a4]@3 ~@9 [d4,f4,a4]@3 ~ [d4,f4,a4]@3 ~ [d4,f4,a4]@3 ~ [c4,e4,g4]@3 ~@8 [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,f4,a4]@3 ~@9 [c4,f4,a4]@3 ~ [c4,f4,a4]@2]/2", // Fm Dm C F
  N: "~@2 [c4,f4,a4]@3 ~ [c4,eb4,f4,a4]@3 ~ [c4,eb4,f4,a4]@3 ~ [c4,eb4,f4,a4]@3 ~ [c4,eb4,f4,a4]@3 ~ [c4,eb4,f4,a4]@3 ~ [c4,eb4,f4,a4]@3 ~ [c4,eb4,f4,a4]@4 ~@14", // F F7
  O: "[~@30 [f3,bb3]@23 ~ [a3,f4]@23 ~ [eb4,g4,bb4]@23 ~ [c4,f4,a4]@23 ~ [f3,bb3,d4]@23 ~ [a3,d4,f4]@23 ~ [eb4,g4,bb4]@23 ~ [c4,f4,a4]@23 ~ [f3,f4]@19 ~ d4@3 ~@61 gb4@11 ~ d4@12 ~ c4@12 d4@6 f4@6 g4@6 d5@6 ~ bb4@6 ~@6 f3@4, ~@30 d4@47 ~@145 bb3@71 ~ c4@23 ~@67, ~@246 g4@59 ~@79, ~@270 eb4@49 ~@65]/8", // Bb5 Dm Eb F Bb Dm Eb F
  P: "[~@3 g3@6 bb3@6 ~ c4@6 d4@8 ~ a4@10 ~ g4@95 ~@7]/3",
})).s("gm_string_ensemble_1").gain(0.35)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~ A B C@2 D E F G ~@5 H@2 ~ I@2 J@2 ~@9 K@2 L@5 M@8 ~@2 N O@5 P Q@2 R@3
>`.pickRestart({
  A: "bb4@23 ~ d5@19 ~ a5@3 ~", B: "g5@47 ~", C: "[~@12 bb5@11 ~ a5@19 ~ g5@51 ~]/2", D: "~@36 d6@5 ~ c6@5 ~",
  E: "bb5@47 ~", F: "~@12 g4@11 ~ bb4@18 ~ d5@4 ~", G: "c5@47 ~", H: "[~@20 c6@5 ~ bb5@5 ~ a5@5 ~ c6@5 ~ bb5@50 ~@2]/2",
  I: "[~@6 [eb5,gb5]@5 ~ [f5,ab5]@5 ~ [gb5,bb5]@5 ~ [f5,ab5] ~ [gb5,bb5] ~ [f5,ab5] ~ [eb5,gb5]@7 ~ [f5,ab5]@3 ~ [gb5,bb5]@44 ~@10]/2", // Ebm Fm Gb Fm Gb Fm Ebm Fm …
  J: "[~@5 [a5,c6]@5 ~ [g5,bb5]@5 ~ [a5,c6]@6 [g5,bb5] ~ [a5,c6] ~ [g5,bb5] ~ [f5,a5]@7 ~ [g5,bb5]@3 ~ [f5,a5]@44 ~@11]/2", // Am Gm Am Gm Am Gm F Gm …
  K: "[~@11 c5@5 ~ bb4@5 ~ a4@5 ~ c5@5 ~@5 a3@3 ~ bb3@3 ~ f4@3 c4@3 ~ d4@3 ~ a4@3 ~ f4@3 g4@3 ~ c5@3 ~ a4@3 bb4@3 ~ f5@3 ~ c5@3 ~ d5@3 bb5@3 ~ f5]/2",
  L: "[~@3 g5@3 ~ d6@26 ~@12 f5@23 ~ gb5@11 ~ g5@47 f5@35 ~ gb5@11 g5@47 ~ f6@17]/5",
  M: "[~@8 g6@24 c7@48 ~ bb6@85 ~@18 bb4@5 ~ c5@5 ~ d5@5 ~ [f5,ab5]@5 ~ [eb5,gb5]@5 [d5,f5]@5 ~ [eb5,gb5]@5 ~ [bb5,d6]@5 ~ [ab5,c6]@5 ~ [eb5,gb5]@5 ~ [c5,eb5]@5 ~ [f5,ab5]@17 ~ [eb5,gb5]@5 ~ [d5,f5]@94 ~@17]/8", // Fm Ebm Dm Ebm Bb Ab Ebm Cm …
  N: "~@6 [c5,c6]@7 ~ [d5,d6]@7 ~ [eb5,eb6]@7 ~ [f5,f6]@8 ~@10", // C D Eb F
  O: "[~@30 bb4@23 ~ d5@19 ~ a5@3 ~ g5@47 ~@13 bb5@11 ~ a5@19 ~ g5@51 ~ f5@18]/5", P: "~@2 d5@3 ~ g5@19 ~ d6@3 ~ c6@18",
  Q: "[~@2 d6@3 ~ g6@11 ~ a6@11 ~ bb6@53 ~@9 f4@4]/2", R: "[~@3 g4@6 bb4@6 ~ c5@6 d5@8 ~ a5@10 ~ g5@95 ~@7]/3",
})).s("gm_string_ensemble_1").gain(0.35).pan(0.3)

// chords · tremolo strings
const tremolo_strings = note("<~@20 A@4 ~@35>".pickRestart({
  A: "[~@40 db4@47 c4@23 ~ [e4,g4]@23 ~ [f4,a4]@47 ~@10, ~@40 f4@71 ~@81]/4", // Em F
})).s("gm_tremolo_strings").gain(0.4)

// other · pizzicato strings · F
const pizzicato_strings = note("<~@23 [~@19 [f4,f5]@2 ~@3] ~@35>").s("gm_pizzicato_strings").gain(0.4)

// other · flute
const flute = note("<~@15 A ~@16 B@8 ~@17 C@2>".pickRestart({
  A: "~@31 bb4@11 ~ bb4@3 ~@2",
  B: "[~@7 f6 g6 f6 g6 ~ f6 g6 f6 g6 f6 g6 ~ f6 g6 f6 g6 ~ f6 g6 f6 ~ g6 f6 g6 ~ f6 ~@12 f6@23 ~ gb6@11 ~ g6@47 f6@35 ~ gb6@11 g6@23 ~ bb6@23 ~ f6@24 ~ g6@24 bb6@24 gb6@24 ~ f6@24 g6@24 f6@4 ~@11]/8",
  C: "[~@42 a5@47 ~@7]/2",
})).s("gm_flute").gain(0.3).pan(0.3)

// other · french horn
const french_horn = note("<~@31 A@5 ~@21 B@2>".pickRestart({
  A: "[~@43 bb3@11 ~ d4@21 ~ a4@4 g4@47 ~@12 bb4@11 ~ a4@19 ~ g4@3 ~ f4@47 ~@17]/5", B: "[~@18 g4@71 ~@7]/2",
})).s("gm_french_horn").gain(0.45)

// other · orchestral harp · Bbmaj7 Ebmaj7 Bbmaj7 Ebmaj7 Gsus2 F Gsus2 Csus2 …
const orchestral_harp = note(`<
  ~@16
  [~@31 [a6,bb6] g6 f6 [d6,eb6] c6 [a5,bb5] g5 f5 [d5,eb5] c5 bb4 [g4,a4] ~@5]
  ~@6
  [~@19 [f5,f6]@2 ~@3]
  ~@16
  [~@22 bb6 [g6,a6] f6 eb6 [c6,d6] bb5 a5 [f5,g5] eb5 d5 [bb4,c5] a4 g4 ~@13]
  ~@18
>`).s("gm_orchestral_harp").gain(0.35)

// other · timpani
const timpani = note("<~@32 [~@7 bb2!13 ~ bb2!6 ~ bb2!6 ~@14] ~@23 [~@42 bb2!6] [bb2!48] [bb2!42 ~@6]>")
  .s("gm_timpani").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@7 B C D@2 E F G H I J K@2 L M N O P O Q R S@2 T U V W X Y Z X AA AB ~ AC W X Y Z AD ~@2 AE@6 AF ~@3
>`.pickRestart({
  A: "x!2", B: "x ~@23 x ~@22 x", C: "~@23 x ~@23 x", D: "~@11 x ~@11 x", E: "~@7 x ~@7 x", F: "~@21 x ~@22 x ~@3",
  G: "~@5 x ~@5 x", H: "~@19 x ~@23 x ~@4", I: "~@7 x", J: "~@3 x ~@3 x", K: "~@17 x ~@23 x ~@6", L: "~@2 x ~@2 x",
  M: "~@16 x ~@22 x ~@8", N: "~@5 x ~@7 x ~@2", O: "~@7 x ~@11 x ~@4", P: "~@13 x ~@2", Q: "~@14 x ~@22 x ~@10",
  R: "~@13 x ~@23 x ~@10", S: "~ x ~ x", T: "~@11 x ~@23 x ~@12", U: "~@5 x ~@10 x ~@7", V: "~@11 x ~@4",
  W: "~@3 x ~@7 x ~@4", X: "~ x ~@2 x ~", Y: "~@8 x ~@22 x ~@16", Z: "~@7 x ~@23 x ~@16", AA: "~@8 x ~@24 x ~@14",
  AB: "~@3 x ~@12", AC: "~@10 x ~@22 x ~@14", AD: "~@7 x ~@22 x ~@17", AE: "~ x ~@3 x ~@2", AF: "~@7 x ~@40",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct(`<
  ~ A@8 B C D E F G H ~ I J K L M N O ~ P O Q R S T U V W X Y Z X AA U AB AA@2 X Y AC AD ~ AE AF@5 AG AH ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@11 x ~@23 x ~@12", C: "~@11 x ~@22 x ~@13", D: "~@5 x ~@11 x ~@6", E: "~@3 x ~@7 x ~@4",
  F: "~@9 x ~@22 x ~@15", G: "~ x ~@2 x ~", H: "~@7 x ~@23 x ~@16", I: "~ x ~@3 x ~@2", J: "~@6 x ~@22 x ~@18",
  K: "~@5 x ~@23 x ~@18", L: "~ x ~@5 x ~@4", M: "~@4 x ~@22 x ~@20", N: "~ x ~@7 x ~@6", O: "~ x ~@11 x ~@10",
  P: "~@3 x ~@22 x ~@21", Q: "~ x ~@23 x ~@22", R: "~ x ~@22 x ~@23", S: "x ~@23 x ~@22 x", T: "~@23 x ~@23 x",
  U: "~@7 x ~@8", V: "~@15 x", W: "~@21 x ~@22 x ~@3", X: "~@5 x ~@5 x", Y: "~@20 x ~@22 x ~@4", Z: "~@19 x ~@24 x ~@3",
  AA: "~@7 x ~@7 x", AB: "~@23 x", AC: "~@19 x ~@23 x ~@4", AD: "~@3 x ~@4", AE: "~@7 x", AF: "~@3 x ~@3 x",
  AG: "~@18 x ~@24 x ~@4", AH: "~@19 x ~@28",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@46 [~@21 x ~ x] [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@8] ~@11>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@7 B C D E F G A H I E J K L M C N O P Q R S T C U ~@8 V W R A X Y Z AA AB AC AD E AE E AF AG ~@3
>`.pickRestart({
  A: "x!12", B: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@7 x ~@2 x ~@3 x ~@3 x",
  C: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  D: "~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~",
  E: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  F: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@7 x ~@2",
  G: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3",
  H: "x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@4", I: "~@31 x ~@14 x ~",
  J: "~@2 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  K: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3", L: "x!9 ~ x!2",
  M: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  N: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@6", O: "~@43 x ~@3 x",
  P: "~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~",
  Q: "~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@2",
  R: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  S: "~ x ~@3 x ~@3 x ~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3",
  T: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x",
  U: "~@2 x ~@3 x ~@3 x ~@3 x ~@2 x ~@30", V: "~@19 x ~ x ~ x",
  W: "~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  X: "x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@6 x ~@11 x ~@3 x", Y: "~@3 x ~@3 x ~@11 x ~@3 x ~@3 x ~@3 x ~@11 x ~@3 x",
  Z: "~@3 x ~@3 x ~@10 x ~@3 x ~@3 x ~@3 x ~@11 x ~@3 x ~", AA: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@10", AB: "~@5 x ~ x",
  AC: "~@3 x ~@5 x ~ x ~ x ~ x ~@5 x ~@2", AD: "~@3 x ~@5 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  AE: "~ x ~ x ~ x ~ x ~ x ~ x ~@3 x ~ x ~ x ~ x ~ x",
  AF: "~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@4 x ~@3 x",
  AG: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@20",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A ~@3 B ~@7 C ~@7 D ~@2 E ~@12 F ~@7 G ~ G ~@4>".pickRestart({
  A: "~@2 x", B: "~@41 x ~@6", C: "~@3 x", D: "~@5 x ~@6", E: "~@7 x ~@8", F: "~@7 x ~@4", G: "~@13 x ~@10",
})).gain(0.5)

// … 24 more lines

More by Cliff Richard