Strudelify

I Don't Know How to Love Him

Petula Clark

KeyD majorTempo72 bpm
0:00/0:00
// I Don't Know How to Love Him — Petula Clark
// 72 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: metre changes (4/4 at bar 1, 2/4 at bar 64, 4/4 at bar 65) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 70 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/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 · fretless bass · "FRETLESS"
const bass = note(`<
  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 M N O P Q R S T U V W X Y Z AA AB AC AD AE AF M
  N O P Q R S T U V AG AH@3 ~@4
>`.pickRestart({
  A: "d2@23 ~ d2@6 d2@17 ~", B: "d2@23 ~ d2@5 ~ d2@18", C: "d2@24 g2@6 d2@17 ~", D: "g2@24 d2@5 ~ d2@17 ~",
  E: "g2@24 g2@5 ~ g2@17 ~", F: "a2@5 ~ a1@18 a2@5 ~ a2@12 c#2@5 ~", G: "f#2@23 ~ a2@5 ~ a2@12 e2@5 ~",
  H: "d2@24 a2@5 ~ a1@12 c#2@6", I: "f#2@21 a2@3 b2@5 ~ d3@12 b2@6", J: "f#2@6 a2@2 b2@2 d3@3 b2 d3 b2",
  K: "g2@12 f#2@12 e2@11 ~ d2@12", L: "a1@12 a2@3 a2@8 ~", M: "d2@23 ~ g2@6 d2@15 b2@2 ~",
  N: "g2@4 ~@2 g2@15 a2@2 ~ d2@4 ~@2 d2@9 a2@2 ~ d2@6", O: "g2@20 ~ g2@3 g2@3 ~@3 g2@10 ~@2 g2@6",
  P: "a2@3 a2@3 a1@17 a2@2 ~@5 a2@9 c#2@3 e2@6", Q: "f#2@24 a2@3 ~@3 a2@8 ~ a2@3 f#2@3 e2@3",
  R: "d2@19 ~@2 a2@6 ~@3 a2@7 ~@2 a2@3 d#2@3 e2@3", S: "f#2@19 ~@2 a2@3 b2@3 ~@3 d3@9 a2@3 b2@3 e2@3",
  T: "f#2@19 ~@2 a2@3 b2@3 ~@3 d3@9 a2@3 b2@3 a2@3", U: "g2 f#2 e2 d2", V: "a1@23 a2@6 ~ g2@6 f#2@6 e2@6",
  W: "d2@23 ~ d2@4 ~@2 d2@11 ~ d2@5 ~", X: "g2@9 c2@3 d2@3 e2@5 ~ g2@12 ~ c#2@2 b1@6 a1@3 g1@3, ~@33 d2@2 ~@13",
  Y: "f#1@8 ~ c#2@3 e2@3 f#2@5 ~ a#2@6 f#2@2 ~ c#2@9 f#2@6 d2@3",
  Z: "b1@12 b1@5 ~ b1@3 b1@3 a1@5 ~ a1@3 a1@3 b1@5 ~ a1@6", AA: "g1@5 ~ g1@2 ~ g1@3 g1@9 d2@3 g2@5 ~ g2@12 e2@6",
  AB: "a1@8 a1@2 c2@3 d2 e2 f#2", AC: "g2@7 a2 d2 ~ d2@3 a2 d2@2", AD: "g2@12 f#2@2 ~ f#2@6 d2@3",
  AE: "e2@7 g2@3 e3@2 b2@2 e2@2", AF: "a2@29 ~ a1@9 a2@3 a1@5 ~", AG: "d2@23 ~ g2@12 f#2@6 e2@5 ~",
  AH: "[d2@33 ~ a1@74 ~@36]/3",
})).s("gm_fretless_bass").gain(0.35)

// bass · contrabass · "FRETLESS"
const bass_2 = note("<~@65 A@2 ~ B@2>".pickRestart({
  A: "[~@15 d2@62 ~@19]/2", B: "[~@19 d2@34 ~@43]/2",
})).s("gm_contrabass").gain(0.3)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A@2 B C D E@2 F G@2 H I B C D E@2 F G@2 H I J D K L D M C N O I B C D E@2 F G@2 H I J D K L D ~ C N O I B C D E@2 F
  G@2 H I P ~@7
>`.pickRestart({
  A: "[d4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3 [d4,g4,b4]@5 ~ [g4,b4]@11 ~ [g4,b4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@9 d4@11 ~ d4@3 ~@4", // D F#m G
  B: "[d4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3 [d4,g4,b4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@9 d4@11 ~ d4@3 ~@4", // D F#m G F#m
  C: "[d4,g4,b4]@5 ~ [g4,b4]@11 ~ [g4,b4]@3 ~@3 [d4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@9 d4@11 ~ d4@3 ~@4", // G D F#m
  D: "[d4,g4,b4]@5 ~ [g4,b4]@11 ~ [g4,b4]@3 ~@3 [d4,g4,b4]@5 ~ [g4,b4]@11 ~ [g4,b4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@9 d4@11 ~ d4@3 ~@4", // G
  E: "[d4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3 [c#4,e4,a4]@5 ~ [e4,a4]@11 ~ [e4,a4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@9 c#4@11 ~ c#4@3 ~@4", // D F#m A A5
  F: "[d4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3 [c#4,e4,g4]@5 ~ [e4,g4]@11 ~ [e4,g4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@9 c#4@11 ~ c#4@3 ~@4", // D F#m C#dim Em
  G: "[c#4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3 [d4,f#4,b4]@5 ~ [f#4,b4]@11 ~ [f#4,b4]@3 ~@3, ~@5 c#4@11 ~ c#4@3 ~@9 d4@11 ~ d4@3 ~@4", // F#m Bm B5
  H: "[d4,g4,b4]@5 ~ [g4,b4]@3 ~@3 [c#4,f#4,a4]@5 ~ [f#4,a4]@3 ~@3 [b3,e4,g4]@5 ~ [e4,g4]@3 ~@3 [a3,d4,f#4]@5 ~ [d4,f#4]@3 ~@3, ~@5 d4@4 ~@8 c#4@3 ~@9 b3@4 ~@8 a3@4 ~@3", // G F#m Em D
  I: "[c#4,e4,a4]@5 ~ [e4,a4]@11 ~ [e4,a4]@3 ~@3 [c#4,e4,a4]@5 ~ [e4,a4]@11 ~ [e4,a4]@3 ~@3, ~@5 c#4@11 ~ c#4@3 ~@9 c#4@11 ~ c#4@3 ~@4", // A A5 A A5
  J: "[d4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3 [d4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@9 d4@11 ~ d4@3 ~@4", // D F#m D F#m
  K: "[c#4,f#4,a#4]@5 ~ [f#4,a#4]@11 ~ [f#4,a#4]@3 ~@3 [c#4,f#4,a#4]@5 ~ [f#4,a#4]@11 ~ [f#4,a#4]@3 ~@3, ~@5 c#4@11 ~ c#4@3 ~@9 c#4@11 ~ c#4@3 ~@4", // F#
  L: "[d4,f#4,b4]@5 ~ [f#4,b4]@11 ~ [f#4,b4]@3 ~@3 [d4,f#4,b4]@5 ~ [f#4,b4]@11 ~ [f#4,b4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@9 d4@11 ~ d4@3 ~@4", // Bm B5 Bm B5
  M: "[d4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3 [c4,e4,g4]@5 ~ [e4,g4]@11 ~ [e4,g4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@9 c4@11 ~ c4@3 ~@4", // D F#m C Em
  N: "[d4,g4,b4]@5 ~ [g4,b4]@11 ~ [g4,b4]@3 ~@3 [c#4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@9 c#4@11 ~ c#4@3 ~@4", // G F#m
  O: "[e4,g4,b4]@5 ~ [g4,b4]@11 ~ [g4,b4]@3 ~@3 [e4,g4,b4]@5 ~ [g4,b4]@11 ~ [g4,b4]@3 ~@3, ~@5 e4@11 ~ e4@3 ~@9 e4@11 ~ e4@3 ~@4", // Em G Em G
  P: "[d4,f#4,a4]@5 ~ [f#4,a4]@11 ~ [f#4,a4]@3 ~@3 [g4,b4]@12 [d4,f#4,a4]@5 ~ [e4,a4]@3 ~@3, ~@5 d4@11 ~ d4@3 ~@3 d4@11 ~@7 c#4@3 ~@4", // D F#m G D A5
})).s("gm_acoustic_guitar_nylon").gain(0.09)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@2 A@2 B C D E F@2 G H I J K L M N O@2 P Q R ~@9 S T U V W X Y Z AA AB AC ~@9 I J K L M AD AE O AF AB AG@2 ~@6
>`.pickRestart({
  A: "[f#4@22 ~@2 g4@5 ~ g4@3 f#4@2 ~ f#4@16 ~@2 g4@17 ~ f#4@11 ~ d4@6 f#4@6]/2", B: "g4@2 d4 g4!2 b3 d4 g4",
  C: "f#4@6 a3@6 d4@6 f#4@6 a4@3 a3@3 c#4@3 e4@6 a4@8 ~", D: "f#4@12 d4@5 ~ f#4@6 a4@3 c#4@3 e4@2 ~ a4@6 c#4@3 e4@6",
  E: "f#4@12 d4@5 ~ f#4@6 a4@3 c#4@3 e4@2 ~ a4@6 c#4@3 e4@5 ~",
  F: "f#4@6 c#4@5 ~ e4@6 f#4@5 ~ f#4@5 ~ b3@3 d4@6 f#4@3 b3@5 ~", G: "g4@11 ~ f#4@12 e4@12 f#4@11 ~",
  H: "g4@6 g3@3 b3@6 g4@3 d4@5 ~ a4@6 [c#4,e4]@2 ~ a4@3 e4@3 c#4@3 a4@6", // C#m
  I: "f#4@6 a3@6 d4@6 f#4@6 b4@6 a4@9 d4@3 a3@5 ~", J: "g4@6 b3@6 d4@6 g4@6 f#4@2 ~ a3@3 d4@3 f#4@5 ~ d4@3 a3@5 ~",
  K: "g4@6 b3@5 ~ d4@6 g4@6 d4@3 b3@2 ~ g4@3 d4@6 b3@2 ~ g4@5 ~", L: "f#4@5 ~ a3@6 d4@6 f#4@5 ~ a4@6 c#4@6 e4@6 a4@5 ~",
  M: "f#4@6 a3@6 d4@3 f#4@6 ~@3 a4@3 e4@3 c#4@3 a3@3 a4@10 ~@2",
  N: "f#4@6 a3@5 ~ d4@6 f#4@5 ~ a4@3 c#4@3 a3@3 e4@2 ~ a4@12",
  O: "f#4@5 ~ c#4@3 e4@2 ~ f#4@3 c#4@2 ~ f#4@6 d4@6 b3@2 ~ d4@3 f#4@3 b3@3 d4@3 f#4@3", P: "b4@3 a4@3 g4@3 f#4@2 ~",
  Q: "g4@6 b3@3 d4@5 ~ g4@3 d4@5 ~ c#4@2 ~ a4@2 ~ b3@2 ~ g4@3 a3@3 f#4@3 g3@3 e4@3",
  R: "d4@6 a3@5 ~ f#4@6 a3@5 ~ d4@6 a3@3 f#4@6 d4@3 a3@5 ~", S: "d4@6 a3@6 d4@6 f#4@6 b4@6 a4@11 ~ a4@3 ~@3",
  T: "g4@6 b3@6 d4@6 g4@6 f#4@4 ~@2 a3@3 d4@3 f#4@3 d4@3 a3@5 ~",
  U: "g4@6 b3@3 d4@3 g4@5 ~ b3@5 ~ g4@6 b3@3 d4@3 g4@3 d4@3 b3@3 a3@3",
  V: "f#4@5 ~ a3@3 d4@3 f#4@3 d4@3 a3@5 ~ a4@3 c#4@3 a3@3 a4@3 c#4@3 a3@3 a4@5 ~",
  W: "f#4@6 a3@6 d4@3 f#4@6 a3@3 a4@3 e4@3 c#4@3 a3@3 a4@10 ~@2",
  X: "f#4@6 a3@3 d4@3 f#4@3 d4@3 a3@3 f#4@2 ~ a4@3 ~ c#4@4 e4@3 ~ a4@6 e4@5 ~",
  Y: "f#4@5 ~ a3@6 c#4@6 f#4@6 d4@6 b3@2 ~ d4@4 ~@2 d4@3 f#4@2 ~ d4@2 ~",
  Z: "c#4@5 ~ c#4@6 e4@6 f#4@6 f#4@9 b3@3 d4@6 f#4@6", AA: "b4@2 d4 ~ a4@2 c#4 ~ g4@2 b3 ~ f#4@2 a3 ~",
  AB: "g4@6 b3@3 d4@5 ~ g4@3 d4@5 ~ [c#4,a4]@2 ~@4 [b3,g4]@3 ~@3 [a3,f#4]@3 ~@3 [g3,e4]@3 ~@3", // F#m Em D C
  AC: "f#4@6 ~@3 d4@3 f#4@6 a3@5 ~ f#4@6 a3@6 d4@6 a3@5 ~, ~@6 a3@5 ~@37",
  AD: "f#4@6 a3@5 ~ d4@6 f#4@5 ~ a4@3 c#4@3 a3@3 e4@3 a4@12",
  AE: "f#4@5 ~ c#4@3 e4@3 f#4@3 c#4@3 f#4@6 d4@6 b3@2 ~ d4@3 f#4@3 b3@3 d4@3 f#4@3",
  AF: "b4@2 d4 ~ a4@2 c#4 ~ g4@2 b3 ~ f#4@2 d4 ~",
  AG: "[f#4@6 a3@5 ~ d4@6 f#4@4 ~@2 [b3,g4]@10 ~@2 [a3,f#4]@6 [g3,e4]@5 ~@5 f#5@30 ~@14, ~@47 f#3@35 ~@14, ~@24 [a3,d4]@17 ~@7, ~@49 a4@33 ~@14, ~@25 d5@16 ~@7]/2", // Em D C D5
})).s("gm_acoustic_guitar_steel").gain(0.22)

// other · ocarina
const ocarina = note(`<
  A B C ~@15 D@2 E@2 F G ~@3 H I J K L M N O@2 P Q R S T@2 U V ~@4 W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL ~@6
>`.pickRestart({
  A: "f#5@4 g5 f#5 e5 f#5", B: "d5@23 b4@6 ~ c#5@6 d5@6 e5@6",
  C: "d4@2 ~ d4@2 ~ d4@3 d4@3 d4@3 d4@3 d4@3 d4@3 b4@5 ~ a4@16 ~@2", D: "a4 f#4",
  E: "[b4@11 a4@13 g4@12 f#4@11 g4@25 a4@6 g4@6 f#4@6 e4@6]/2", F: "f#4@47 ~", G: "b4", H: "~@42 e6@5 ~",
  I: "d6@6 g5@5 ~ g5@9 a5@5 ~ d5@2 ~ d5@8 ~ d5@3 c5@6", J: "b4@21 a4@2 b4 a4@23 ~",
  K: "~@12 g5@3 f#5@3 e5@2 ~ b5@3 a5@3 g5@2 ~ e6@3 d6@3 b5@2 ~ g6@3 e6@2 ~ e6@3",
  L: "b6@21 a6@3 a6@3 a5@2 ~ a5@6 a5@3 b5@2 ~ c#6@3 a5@2 ~", M: "d6@14 ~ f#6@2 a6@3 d6@2 ~ b6@6 ~ a6@17 ~",
  N: "~@6 b6@15 a6@2 ~ a6@6 d6@6 d6@3 d6@3 d6@3 d6@3",
  O: "[g6@3 f#6@3 g6@17 ~ d6@2 ~ d6@2 ~ g6@5 ~ g6@2 ~ f#6@2 ~ g6@3 g6@6 d6@3 a6@3 d6@3 a6@3 f#6@2 ~ d6@3 e6@3 a6@2 ~ a5@2 ~ a5@2 ~ a5@2 ~ a5@2 ~ a5@2 ~ a5@2 ~ a5@2 ~]/2",
  P: "d6@13 ~@2 d6@3 e6@3 g6@3 e6@3 a5@3 a5@3 a5@2 ~ a6@2 ~ a5@2 ~ a5@3 a5@2 ~",
  Q: "a5@14 ~ f#6@3 e6@3 d6@3 a6@6 ~@3 a5@3 b5@3 c#6@3 e6@6", R: "~@9 f#6@3 d6@6 c#6@3 b5@3 ~@6 b6@3 b5@7 ~@8",
  S: "~@9 f#6@3 d7@3 c#7@2 ~ c#7@5 ~@4 d7 c#7 ~ d7@3 b6@3 f#6@2 ~ b6@3 f#6@3 d6@3",
  T: "[b6@5 ~ d6@6 a6@6 c#6@5 ~ g6@6 b5@6 f#6@6 a5@12 ~@6 d6@9 ~ d6@2 c#6@6 b5@6 d6@6 b5@6, ~@69 c#6@2 ~@25]/2",
  U: "a5@7 ~ a5@3 f#5 d5 f#5 c6 f#5", V: "b5 ~", W: "~@36 d6@5 ~ d6@4 ~@2",
  X: "~ a6@2 b6@14 ~ d7@6 a6@3 f#6@2 ~ d6@9 f#6@3 a6@3 f#6@3, b6 ~@23", Y: "g6@4 e6@4 b5@3 g5 e5@4",
  Z: "~@27 a5@3 c#6@3 f6@2 ~ a6@12", AA: "~@12 d7@2 ~ f#6@3 a6@3 d7@2 ~ b6@6 a6@18, ~ d6@23 ~@24",
  AB: "b6@4 g6@5 d6@3 g6@5 ~ b6@5 ~ a6@7 ~@2 f#6@3 a6@3 d6@3 f#6@3 a6@3", AC: "g6@17 b5@6 ~ g6@10 ~@2 g6@11 ~",
  AD: "a6@11 ~ a5@4 ~@2 a5@6 ~@6 a5@2 ~ a5@3 a6@9 ~@3",
  AE: "~@10 g6@2 a6@3 f#6@3 e6@3 g6@3 e6@3 a5@3 a5@2 ~ a5@3 a5@5 ~ a6@2 ~ a6@3, ~@9 a6@2 ~@37",
  AF: "~@10 g6@2 a6@3 f#6@3 d6@3 a6@3 e6@3 a5@2 ~ a5@2 ~ a5@3 a6@5 ~ a5@4 ~@2, ~@9 a6@2 ~@37",
  AG: "~@33 d7 ~ c#7 d7@3 b6@3 f#6@3 d6@3", AH: "f#6@12 ~@22 c#7@2 d7@3 b6@3 f#6@3 d6@2 ~, ~@33 d7@2 ~@13",
  AI: "b6@5 ~ d6@6 a6@6 c#6@5 ~ g6@6 b5@6 f#6@6 a5@6", AJ: "g6@24 ~@3 a6@5 g#6 a6@3 a6@3 g6@3 a6@3 g6@3",
  AK: "f#6@4 ~ b6 a6 g6", AL: "a6@11 ~@5",
})).s("gm_ocarina").gain(0.11)

// other · drawbar organ
const drawbar_organ = note(`<
  ~@24
  [a#4@5 ~ f#4@2 ~ f#4@30 d4@2 c#4@3 b3@3 ~]
  [c#4@6 b3@2 ~ b3@7 ~@2 b4@15 d5@9 b4@6]
  [g4@36 g4@3 f#4@3 e4@2 d4@3 ~]
  [e4@24 e4@17 ~@7]
  ~@42
>`).s("gm_drawbar_organ").gain(0.17)

// other · cello
const cello = note("<~@67 A@3>".pickRestart({
  A: "[~@4 g3@7 f#3@7 e3@7 ~ d3@7 b3@34 a3@33 ~@44]/3",
})).s("gm_cello").gain(0.3)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@43 A@4 B C ~ D E F@4 ~@14>".pickRestart({
  A: "[~@2 [d5,d6]!2 [b4,b5] [d5,d6]@2 [e5,e6]@3 [e5,e6]!2 [c#5,c#6] [e5,e6]@2 [f#5,f#6]@3 [f#5,f#6]!2 [d5,d6] [f#5,f#6]@2 [g5,g6]@3 [g5,g6]!2 [d5,d6] [g5,g6]@3]/4", // D B D E C# E F# D …
  B: "[a5,a6]@23 ~ [c6,c7]@24", C: "[b5,b6] [g5,g6] [a5,a6]@2", D: "~@6 [b4,d5,f#5] [b4,d5,g5]",
  E: "[b4,d5] c#5 b4 c#5, e5@47 ~, ~ a4@3", // Bm
  F: "[[f#4,a4]@24 [g4,b4]@6 [f#4,a4]@17 [g4,b4]@24 [f#4,a4]@24 ~ b4@47 ~ d4@24 [c#4,e4]@24, d5@46 ~ d5@48 [d4,g4]@48 a4@48 ~, ~@143 f#4@24 ~@25]/4", // F#m G F#m G F#m C#m G5
})).s("gm_string_ensemble_1").gain(0.35)

// chords · string ensemble 2 · "STRINGS"
const string_ensemble_2 = note("<~@62 A B@4 C@3>".pickRestart({
  A: "[a4,f#5]@23 ~ b4@12 a4@6 g4@6, d5, ~@23 g5@25", // D
  B: "[~@9 a4@25 ~@34 d6@18 [a5,c#6]@20 ~@5 [d4,a4,d5,f#5,a5]@63 ~@18, ~@8 [d5,f#5]@25 ~ b5@52 ~@106, ~@34 [g4,d5]@33 ~ d5@38 ~@86, ~@35 g5@71 ~@86]/4", // A D G5
  C: "[~@33 [g4,c5,e5,g5,b5]@34 [a4,d5,f#5,a5]@33 ~@44]/3", // Cmaj7 D
})).s("gm_string_ensemble_2").gain(0.14)

// other · oboe
const oboe = note("<~@43 A B@2 A C D@3 E ~@18>".pickRestart({
  A: "g4", B: "f#4", C: "a4@24 c5@23 ~", D: "[b4@24 a4@23 g4@24 f#4@24 e4@46 ~@3]/3", E: "d5 c#5 b4 a4",
})).s("gm_oboe").gain(0.49)

// chords · french horn · "FR.HORN"
const french_horn = note("<~@43 A B C D E F ~ G H ~@18>".pickRestart({
  A: "[g3,b3,d4]@47 ~", B: "[f#3,a#3,c#4,e4]", C: "[f#3,b3,d4,f#4]@47 ~", D: "[g3,b3,d4,g4]",
  E: "[a3,d4,f#4]@23 ~ [c4,e4,g4]@23 ~", F: "[b3,d4,g4,b4]@24 ~ [d4,f#4,a4]@23, ~@24 a3@23 ~",
  G: "~@36 g3@6 [b3,g4]@5 ~, ~@35 e4@7 ~@6", H: "b3@11 ~ a3@33 ~@3, [g4,a4]@47 ~",
})).s("gm_french_horn").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  ~@23 A B C D E F G H I J K J L M I N I L O J G M P Q N R S M N@3 R S M N@3 T D I ~@7
>`.pickRestart({
  A: "x ~@6 x!2 ~@7", B: "x ~@2 x!2 ~@3", C: "x!2 ~@2 x ~@3", D: "x ~ x ~@5 x ~@2 x ~@2 x ~", E: "x",
  F: "x ~ x ~@4 x ~@2 x ~@5", G: "x ~@2 x!3 ~@2", H: "x!2", I: "x ~@3 x!2 ~ x", J: "x ~@3 x!2 ~@2", K: "~@7 x!2 ~@7",
  L: "x!2 ~@2 x!2 ~@2", M: "x ~@6 x!2 ~ x ~@5", N: "x ~@6 x!2 ~ x ~@3 x ~", O: "x!2 ~@2 x!2 ~ x",
  P: "x ~@7 x ~ x ~@4 x", Q: "x ~ x ~@4 x ~@2 x ~@3 x ~", R: "x ~@2 x ~@3 x!2 ~ x ~@3 x ~",
  S: "x ~ x ~@4 x!2 ~ x ~@2 x ~@2", T: "x ~ x ~@4 x!2 ~ x ~@5",
})).gain(0.12)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@24 A ~@2 B C ~ D E F G H I ~ E ~ E@4 ~@27>".pickRestart({
  A: "~@15 x", B: "~@8 x ~ x ~@4 x", C: "~@7 x", D: "~@7 x ~@2 x ~@5", E: "~@7 x ~@8", F: "~@7 x ~@6 x ~",
  G: "x ~@4 x ~ x", H: "~@3 x ~@3 x ~@6 x ~", I: "~@7 x ~@5 x ~@2",
})).gain(0.07)

// drums · snare
const snare = s("sd").struct("<[x!8]!23 [~ x ~ x]!19 [~ x ~@2] [~ x ~ x]!20 ~@7>").gain(0.12)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@32 [~ x ~@6] ~@19 [~ x ~@6] ~@17>").gain(0.07)

// drums · mid tom
const mid_tom = s("mt").struct("<~@22 [~@12 x!4] ~@19 [~@12 x!4] ~@27>").gain(0.12)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@31
  [~@33 x ~@2 x ~@2 x ~@2 x ~ x ~@3]
  ~@19
  [~@33 x ~@2 x ~@2 x ~@2 x ~ x ~@3]
  ~@18
>`).gain(0.15)

stack(
  bass, bass_2, acoustic_guitar_nylon, acoustic_guitar_steel, ocarina, drawbar_organ, cello, string_ensemble_1,
  string_ensemble_2, oboe, french_horn, kick, kick_soft, snare, pedal_hat, mid_tom, open_hat
// … 1 more lines

More by Petula Clark