Strudelify

I Hate You Then I Love You

Celine Dion

KeyD majorTempo70 bpm
0:00/0:00
// I Hate You Then I Love You — Celine Dion
// 70 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 82 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/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 · string ensemble 2 · "untitled"
const string_ensemble_2 = note("<A@7 B@8 C@8 D@8 E F@8 G@4 H@6 ~@7 I J@2 ~@10 K@6 L@6>".pickRestart({
  A: "[~@73 [c#4,e4,g4]@49 [a3,d4,f#4]@50 [c#4,e4,g4]@57 [a3,d4,f#4]@49 ~@9 [f#3,c#4,a4]@6 ~ g4@16 [f#3,c#4,a4]@26, ~@27 [a3,d4,f#4]@50 ~@204 [e3,b3]@8 ~@4 [e3,b3]@17 ~@26, ~@141 g4@4 ~@23]/7", // C#dim D C#dim D F#m D E5
  B: "[~@21 d4@4 ~@5 c#4@6 ~@6 c#4@17 ~@12 c#4@7 b3@8 c#4@7 b3@15 c#4@11 ~ d4@7 ~@9 d4@7 ~@13 d4@11 ~@7 b3@9 ~@8 b3@12 c#4@11 ~ c#4@7 ~@8 d4@7 ~@13 d4@12 ~@7 b3@9 ~@8 b3@13 c#4@12 ~@8 c#4@9 ~@6 c#4@14 d4@11 [b3,d4,e4,g#4,b4]@25, ~@25 [a3,f#4]@94 [e4,g4]@95 ~ [e4,g4]@96 d4@17 d4@20 ~@36, ~@25 d4@11 d4@23 d4@60 c#4@8 c#4@16 c#4@24 c#4@16 c#4@20 ~@11 d4@8 c#4@15 c#4@25 c#4@16 c#4@21 ~@12 f#4@47 ~@26, ~@312 a3@47 ~@25]/8", // E7 D Em
  C: "[~@23 a4@6 g#4@5 a4@6 g#4@17 a4@12 g#4@6 ~ f#4@5 g#4@7 f#4@19 g#4@11 ~@7 g#4@5 a4@7 g#4@17 a4@12 ~ g#4@5 f#4@6 g#4@6 f#4@19 g#4@10 ~@7 g#4@5 a4@6 ~ g#4@17 a4@12 ~ g#4@6 f#4@6 g#4@6 f#4@24 ~@12 f#4@5 ~ g#4@7 f#4@30 g#4@6 f#4@5 g#4@6 f#4@6 ~@2, ~@11 [e3,a3,c#4]@48 a4@3 ~@45 a4@3 ~@45 g#4@3 ~@34, ~@119 [g#3,d4]@94 ~@2 [g#3,b3,d4]@63 ~@34 [e3,a3,c#4]@72, ~@40 b3@31 ~@57]/8", // A G#dim A
  D: "[a5@32 f#5@13 ~ a4@36 b4@12 ~@25 f#4@21 ~@15 [f4,a4,d5]@5 [g4,b4,e5]@6 [f4,a4,d5]@25 [a3,c#4,e4]@85 ~@56 d4@46 [a3,c#4,e4]@6, [a3,c#4,e4]@92 ~@3 [d3,a3]@92 ~@197, ~@45 g4@44 ~@5 c#5@25 ~@265, ~@95 f#3@48 f3@43 ~@100 [e3,g#3,b3]@93 ~@5]/8", // Dm Em Dm A D5 E
  E: "~@15 [e4,g4,g5]", // Em
  F: "[~@4 [f#4,f#5]@8 ~ [g4,g5]@8 [d4,f#4,f#5]@11 ~ c#4@10 ~@2 f#4@21 ~ [b4,b5]@23 ~ [c#5,c#6]@23 ~ [d5,d6]@8 [f#4,e5,e6]@8 ~ [f#4,f#5]@7 ~@38 a4@45 ~@15 g4@21 ~@3 g4@22 ~@2 g4@22 ~@2 g4@6 ~@3 g4@5 ~ [g4,b4]@8 ~ [f#4,a4,d5]@51, ~@3 d4@9 e4@8 ~@12 [e4,e5]@11 a5@23 f#4@24 f#4@24 f#4@9 ~@30 e5@69 ~@37 [b4,b5]@25 ~@100, ~@45 a4@25 ~@61 f#6@8 [a5,a6]@84 ~@100 [f#5,f#6]@9 [a5,a6]@52, ~@165 c#5@57 ~@14 [a4,a5]@24 ~@23 [c#5,c#6]@24 [d5,d6]@8 [e5,e6]@9 ~@60]/8", // F# G D B C# D F#7 F# …
  G: "[~@45 d6@35 [b4,b5]@13 [f#4,a4,d5]@35 e5@11 f#5@24 b4@29, ~@15 [f#4,d5]@16 ~@33]/4", // B D
  H: "[~@7 [g4,e5]@6 [a4,f#5]@6 ~ [a#4,g5]@11 a#5@2 [g5,a#5]@11 ~ [d5,f#5]@93 ~@3 e5@96 [d5,f#5,a5,d6]@39 ~@12, ~@44 a5@93 ~ [g5,a5,c#6]@99 ~@51]/6", // C D D# Gm D A7
  I: "~@19 a#4@6 a4@4 c5@13 a#4@4 a4@2", J: "[a#4@4 f4@10 d#4@3 ~ d4@3 d#4@3 f4@36 ~@36]/2",
  K: "[~@9 [d3,f3,a#3]@62 ~ [c#3,f3]@60 [c3,f3]@60 ~@3 f3@90 ~@3, ~@71 g#3@60 ~@61 [a3,c4,f4]@94 ~@2]/6", // A# C# F5 F
  L: "[~@18 a#5@12 a5@12 f5@14 a#4@64 ~ a4@31 ~ [d4,f4]@114 ~@21, ~@60 [c4,d#4,f4]@16 a#4@57 ~@11, ~@51 a#3@16 ~@29]/6", // Dm F7
})).s("gm_string_ensemble_2").gain(0.33).pan(0.3)

// chords · synth strings 2
const synth_strings_2 = note("<~@2 A@3 B@3 ~@32 C@6 ~@3 D E@8 F@3 G@3 H@6 ~@12>".pickRestart({
  A: "[~@2 e5@8 f#5@8 g5@8 a5@72 e5@6 f#5@13 g5@14 f#5@6 e5@7]/3",
  B: "[d5@29 ~@25 [g5,b5]@17 [a4,c#5,a5,c#6]@40 ~@33, ~@43 [e4,b4,g5,b5]@8 ~@2 [e4,b4]@17 ~@74, ~@47 [f#4,c#5,a5]@9 ~@88, ~@16 c#6@3 ~@29]/3", // G A Em E5 F#m
  C: "[~@45 d6@35 b5@13 d5@35 e5@11 f#5@24 b4@36 e5@6 f#5@6 ~ g5@11 a#5@12 ~ a5@48 ~@4]/6",
  D: "~@39 [c4,a4,c5]@5 ~ [d4,a#4]@3, ~@11 d5", // F Gm
  E: "[~@2 [d4,a#4]@5 ~ d#4@4 ~ d#4@4 ~ f4@4 ~@6 a#4@2 ~ c5@3 ~@57 [a#5,d6]@35 ~ f5@11 [f5,a5,c6,d#6]@30 [f5,g5,a#5,d6]@6 [d#5,f5,a5,c6]@6 [a#4,d#5,g5,a#5]@6 [c5,d#5,f5,a5]@39 ~@3 d#6@8 ~@34 f5@12 ~ d#6@72 [f5,a#5]@2 ~@8 [d#4,c6]@13 [d4,f5,a#5]@4 [c4,d#5,a5]@2, ~ d5@5 ~ [c5,d#5]@4 ~ [c5,d#5]@5 [d5,f5]@5 [d#5,g5]@2 f5@2 a4@3 ~@5 d5@43 ~@278 d4@6 [c4,d#5,a5]@4 ~@19, ~@23 g4@2 a5@2 [g5,a#5]@3 [a5,c6]@3 ~@3 [a#5,d6]@41 ~@151 [a5,c6]@129 [f5,a#5]@21 ~@6, ~@73 f5@53 ~@110 d#6@47 ~@74 d6@27, ~@121 g5@5 ~@2]/8", // Gm A# F7 Gm7 F7 D# F7 A#5 …
  F: "[[d4,f5]@3 ~ d5@10 [f3,c5,d#5]@3 ~ [d3,a#4,d5]@3 [f3,c5,d#5]@3 ~@9 f6@3 d#6@4 ~ d6@5 c6@6 a#5@6 g5@5 ~@42 g#5@39, a#5@17 ~@31, ~@3 a#3@11 ~@10 [a#3,d5,f5]@38 ~@82, ~@4 f5@20 ~@39 [f5,a#5,d6]@81]/3", // Dm F7 Gm F7 A#
  G: "[~@3 g5@20 f#5@25, ~ [a#5,d#6]@15]/3", // D#5
  H: "[~@21 [a#5,d6]@90 [a5,c6,d#6]@102 [f5,a#5,d6]@61 ~@14, ~@7 f5@64 ~@25]/6", // A# Adim A#
})).s("gm_synth_strings_2").gain(0.34)

// bass · acoustic bass
const bass = note("<A@3 B C D@3 E@8 F@2 G@8 H I@5 J@5 K@6 L@7 ~ M@6 ~ N@8 O@4 ~@12>".pickRestart({
  A: "[~@28 d1@15 a1@29 ~ e1@17 a1@32 ~ d1@20 ~]/3", B: "a1@26 ~ e1@21", C: "~@5 a1@29 d1@14",
  D: "[~@6 a1@21 ~@9 a0@4 a1@23 ~@12 a1@33 ~@11 d2@12 ~@5 d2@5 ~ a1@2]/3",
  E: "[~@10 a1@11 ~ d2@16 ~@3 d2@5 ~ a1@11 ~ a1@12 e2@17 ~ e2@5 ~ a1@11 ~@2 a1@11 e2@17 ~@2 e2@5 a1@10 ~@2 a1@11 ~ e2@16 ~ e2@5 ~ a1@11 ~ a1@12 e2@16 ~@3 e2@5 ~ a1@11 ~ a1@12 ~ d2@16 ~ d2@5 ~ a1@11 ~@2 a1@11 e2@21 ~@3 e2@5 d2@6 ~ c#2@5 b1@6 ~@2 a1@12 ~@6 a1@4 ~@2]/8",
  F: "[a1@11 ~ e2@9 ~@3 a1@12 ~@4 a1@4 ~@3 a1@12 e2@11 ~ b1@15 ~@4 b1@4 ~ b1]/2",
  G: "[~@11 e2@9 ~@3 b1@14 ~@3 b1@4 ~@2 b1@13 ~ e2@10 ~@2 b1@12 ~@5 b1@4 ~@2 b1@11 ~@2 e2@10 ~ b1@11 ~@7 b1@4 ~@2 a1@12 ~@6 a1@5 ~@2 a1@10 ~ e2@9 ~@3 a1@12 ~@5 a1@3 ~@3 a1@11 ~@2 e2@9 ~@3 a1@14 ~@3 a1@3 ~@4 a1@11 ~ e2@10 ~@2 a1@15 ~@2 a1@5 ~@2 b1@11 ~ c2@10 ~ d2@16 ~@3 d2@4 ~@2 a1@12 ~ a1@10 ~@2]/8",
  H: "d2@15 ~@2 d2@5 ~ a1@10 ~@3 a1@10 ~@2",
  I: "[a1@15 ~@3 a1@4 ~@2 a1@11 e2@11 ~ a1@14 ~@4 a1@3 ~@3 a1@12 ~ e2@11 b1@14 ~@3 b1@5 ~@2 e1@9 ~@2 e1@11 ~@2 b1@15 ~@3 b1@4 ~@2 e1@11 ~ e1@11 ~ a1@15 ~@24 a1@4 ~@2 a1@4]/5",
  J: "[~@9 e1@10 ~@2 a1@14 ~@4 a1@3 ~@3 d2@11 ~@6 d2@4 ~ d2@12 ~ a1@10 ~ d2@15 ~@4 d2@5 ~ d2@11 ~ d2@12 ~ e2@12 ~@5 e2@4 ~@2 e2@11 ~ a1@11 e2@14 ~@4 a1@4 ~@2 a1@12 e2@12 a1@5]/5",
  K: "[~@13 a1@5 ~ a1@12 ~ e2@11 ~ a1@15 ~@3 a1@4 ~@2 a1@12 e2@10 ~ d2@16 ~@2 d2@4 ~@3 a1@10 ~ a1@11 ~ d2@17 ~@2 d2@6 a1@10 ~@2 a1@12 d2@17 ~ d2@3 ~@3 d2@13 d2@12 d3@15 ~@3 d3@4 ~@2 d3@11 d2@11 ~ g2@4]/6",
  L: "[~@13 g2@5 ~@2 g2@15 ~@2 g2@4 ~@2 a#2@17 ~@2 a#2@4 ~@2 a#1@10 ~@3 a#1@11 ~ a1@15 ~ a1@5 ~ d2@12 ~ d2@11 ~ a1@16 ~@3 a1@5 ~ d2@10 ~ d2@11 ~ a1@15 ~@3 a1@3 ~@3 a1@22 ~@2 a1@17 ~@2 a1@5 ~ a1@16 ~ a1@3 ~@3 d2@18 ~@34]/7",
  M: "[~@21 a#2@13 ~@5 a#2@3 ~@3 a#2@10 ~ f2@11 ~ a#2@14 ~@5 a#2@4 ~@2 f2@10 ~@2 f2@10 ~ c3@15 ~@3 c3@4 ~ f2@10 ~@2 f2@10 ~@3 f2@15 ~@4 f2@3 ~@2 f2@10 ~@2 c3@9 ~@2 f2@14 ~@5 f2@3 ~@4 f2@11 ~@40]/6",
  N: "[~@8 f2@11 ~@2 a#2@14 ~@4 a#2@3 ~@3 a#2@10 ~ f2@11 ~@2 a#2@14 ~@3 a#2@3 ~@3 a#2@10 ~ f2@10 ~@2 a#2@15 ~@4 a#2@4 ~@2 c3@10 ~@2 d3@10 ~@2 d#3@16 ~ d#3@5 ~@2 c3@10 ~@2 a#2@11 ~ f#2@17 ~@2 f#2@4 ~ f2@11 ~ d#2@12 ~@2 d#2@16 ~ d#2@5 ~ f2@11 ~ f#2@9 ~@3 f2@15 ~ a#2@4 ~@3 a#2@10 ~ f2@11 ~@2 a#2@15 ~@3 a#2@4 ~@2 a#2@4]/8",
  O: "[~@8 f2@11 ~ c3@15 ~@2 c3@4 ~@2 c3@11 ~ f2@12 ~ c3@15 ~@3 c3@4 ~@2 c3@11 ~ f2@11 ~@2 a#2@16 ~@2 a#2@4 ~@2 a#2@10 ~ f2@10 ~@2 a#2@5 ~@23]/4",
})).s("gm_acoustic_bass").gain(0.21).pan(0.8)

// bass · contrabass
const bass_2 = note("<A@6 B@2 ~@49 C D@2 ~@22>".pickRestart({
  A: "[~@30 d2@4 ~ a2@7 f#3@33 d2@5 a2@6 g3@34 ~ d2@8 a2@8 f#3@35 d2@10 a2@6 g3@36 ~@3 d2@4 a2@6 f#3@36 ~@15]/6",
  B: "[~@26 a2@37 ~@33]/2", C: "~@19 a#4@6 a4@4 c5@13 a#4@4 a4@2", D: "[a#4@4 f4@10 d#4@3 ~ d4@3 d#4@3 f4@36 ~@36]/2",
})).s("gm_contrabass").gain(0.14).pan(0.6)

// other · flute
const flute = note("<A@4 ~@28 B@2 C@2 D@4 E ~@41>".pickRestart({
  A: "[~@30 b3@2 a3@2 ~ a3@2 ~ a3@2 b3 a3@2 b3 a3@2 ~ a3@2 ~ a3@2 ~ a3@2 ~ a3@2 b3 a3@2 b3@2 ~ b3@2 ~ b3 a3@2 b3 ~@3 a3@2 ~ b3 a3@2 ~ a3@2 ~ a3@2 ~ a3@2 ~ a3@2 b3@2 ~@2 a3@2 b3@2 ~@2 a3@2 b3@2 a3@2 ~ a3@2 ~ a3@2 ~ a3@2 ~ a3@2 ~ a3@2 ~ a3@2 b3@2 ~ b3@2 a3@2 ~ a3@2 b3@2 a3@2 ~ a3@2 ~ a3@2 b3@2 a3@2 ~ a3@2 ~ a3@2 ~ a3@2 b3@2 a3@2 ~ a3@2 b3@2 ~ b3@2 a3@2 ~ a3@2 ~ a3@2 b3@2 a3@2 ~ a3@2 ~ a3@2 b3 a3 ~, ~@29 a3@2 ~@3 b3@2 ~ b3@2 ~@7 b3@2 ~ b3@2 ~ b3@2 ~ b3@2 ~@6 a3@2 ~ a3@2 ~@4 a3@2 ~@20 a3@2 ~@4 a3@2 ~@26 a3@2 ~@38 a3@2 ~@22, ~@73 b3@2 ~@5 b3@2 ~ b3@2 ~ b3@2 ~ b3@2 ~@4 b3@2 ~@4 b3@2 ~@5 b3@2 ~ b3@2 ~ b3@2 ~ b3@2 ~ b3@2 ~ b3@2 ~@8 b3@2 ~@5 b3@2 ~ b3@2 ~@5 b3@2 ~ b3@2 ~ b3@2 ~@5 b3@2 ~@8 b3@2 ~ b3@2 ~@5 b3@2 ~ b3@2 ~@4]/4",
  B: "[~@44 d4@7 c#4@9 d4@7 c#4@13 d4@11 c#4@5]/2",
  C: "[~ b3@10 c#4@7 b3@14 c#4@12 ~ d4@7 c#4@9 d4@7 c#4@13 d4@11 c#4@4]/2",
  D: "[~@3 b3@8 c#4@7 ~ b3@12 c#4@12 d4@8 c#4@8 d4@8 c#4@13 d4@12 c#4@6 b3@10 c#4@7 b3@12 c#4@11 ~@2 c#4@7 b3@10 c#4@7 b3@23 c#4@5]/4",
  E: "~@2 b3@8 c#4@6 ~ b3@13 ~@18",
})).s("gm_flute").gain(0.2).pan(0.3)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@9 A@3 ~@2 B C ~ D E@2 ~@2 F@2 ~ G H ~ I ~@2 J ~@17 K ~@32>".pickRestart({
  A: "[~@40 g3@3 ~@2 b3@2 a3@2 ~ b3@14 a3 ~ [a3,b3]@2 g3@2 a3@18 ~@4 a3@2 ~ g4@15 ~@34, ~@91 g#3@2 ~@51]/3", // Asus2
  B: "~@16 c#4@2 d4@2 c#4 ~ c#4@2 b3@11 ~@13, ~@21 d4@2 ~@25", C: "~@3 e4@2 ~ f#4@4 g#4@2 ~ a4@3 ~ b4@3 ~ c#5@10 ~@17",
  D: "~@37 [e4,g#4]@2 ~ [f#4,a4]@3 [e4,g#4]@3 [f#4,a4]@2", // E F#m E F#m
  E: "[~ [g#4,b4]@25 ~@4 [f#4,a4]@3 [e4,g#4] ~@2 [f#4,a4]@3 ~@2 [f4,a4] [e4,g#4]@2 [d4,f#4] ~@2 [c#4,e4]@14 ~@35]/2", // G#m F#m E F#m F E D C#m
  F: "[~@18 a3@2 c#4@2 e4@2 g#4@5 ~ f#4@4 g#4@5 ~ f#4@21 ~@35]/2",
  G: "~@6 a3@3 ~@3 e4@2 ~@3 f#4@18 e4@4 ~@3 d4@2 d#4 e4@3, ~@10 d4@4 ~@21 d#4 ~@12", H: "d4@11 ~@13",
  I: "~@16 [c#4,e4]@5 ~@2 [b3,d4]@3 ~ c#4@2 ~@2 [g#3,b3]@15 ~@2, ~@23 c4 ~@24", // C#m Bm G#m
  J: "~@15 a3@2 ~@2 c#4@2 ~ b3 ~ c#4@12 ~ d4@2 e4@3 ~@6",
  K: "~@13 c#4@2 e4@2 g4@6 f#4@3 e4@2 f#4@6 ~ d4@6 ~@7, ~@11 a3@5 ~@32",
})).s("gm_acoustic_guitar_nylon").gain(0.32).pan(0.7)

// other · acoustic guitar nylon · soft notes · Asus2
const acoustic_guitar_nylon_2 = note(`<
  ~@28
  [~@27 [a3,b3]@2 ~@19]
  ~@2
  [~@43 g4@5]
  [~@3 f#4@6 ~ g4@6 ~ f#4@13 ~ e4@10 ~@7]
  ~@49
>`).s("gm_acoustic_guitar_nylon").gain(0.18).pan(0.7)

// other · tuba
const tuba = note("<~@57 A B@2 ~@22>".pickRestart({
  A: "~@19 a#3@6 a3@4 c4@13 a#3@4 a3@2", B: "[a#3@4 f3@10 d#3@3 ~ d3@3 d#3@3 f3@36 ~@36]/2",
})).s("gm_tuba").gain(0.41)

// other · french horn
const french_horn = note(`<
  ~@15 A@2 B@2 C@5 D E@7 ~@3 F@2 G ~ H@3 I ~ J@4 K@2 L@2 M@4 N@3 ~@11 O@2 P@4 Q@2 R@4
>`.pickRestart({
  A: "[~@17 e3@5 d4@6 c#4@5 c#4@3 b3@4 ~ d4@11 c#4@4 ~@2 c#4@3 b3@2 ~ d4@3 c#4@22 e3@6 ~]/2",
  B: "[d4@5 c#4@10 b3@3 c#4@2 d4@55 ~@21]/2",
  C: "[~@16 e3@4 ~@2 c#4@4 b3@3 ~ b3@9 a#3@3 ~ c#4@4 b3@4 ~ b3@10 a#3@3 c#4@3 b3@20 ~ b3@5 ~ c#4@4 b3@6 g#3@5 f#3@4 g#3@51 ~@21 e4@4 ~ f#4@3 e4@2 ~ f#4@12 e4@4 f#4@3 e4@2 ~ f#4@14 e4@5 f#4@2, ~@34 c4 ~@85]/5",
  D: "~ e4@2 f#4@13 e4@6 g#4@20 f#4@6",
  E: "[~ e4@22 a3@40 ~@21 e3@5 e3@5 ~ c#4@6 ~@2 c#4@8 a3@7 e3@40 ~@26 e3@4 ~@2 e3@7 f#3@4 ~@2 f#3@6 g#3@4 ~@2 g#3@5 a3@4 ~@2 a3@6 b3@4 ~@3 b3@6 a3@4 ~ a3@5 ~ g#3@4 ~@2 g#3@6 a3@7 f#3@6 g#3@5 a3@48 ~@2]/7",
  F: "[~@33 d5@5 c#5@4 b4@4 c#5@16 a4@5 ~ a4@15 ~@2 a3@4 ~ a3@4 b3@2]/2", G: "~@2 b3@11 c#4@4 ~ c#4@4 d4@3 ~ d4@13 ~@9",
  H: "[~@20 d5@7 c#5@7 b4@8 c#5@17 a4@5 ~@2 a4@16 ~@4 f#4@6 g4@6 f#4@8 g4@2 ~ f#4@3 g4@2 ~ f#4@15 ~ g4@3 f#4@3 ~ g4@6]/3",
  I: "~@2 f#4@10 ~ g4@3 f#4@2 ~ g4@4 f#4@6 ~@19",
  J: "[~@32 a3@4 ~@3 a3@5 ~ g4@8 f#4@7 g4@7 f#4@58 ~@9 a3@5 ~@2 a3@6 b3@5 ~ b3@5 c#4@5 ~ c#4@5 ~ d4@4 ~@2 d4@6 e4@4 ~ e4@5]/4",
  K: "[~ d4@4 ~@2 d4@6 c#4@5 ~ c#4@7 d4@6 b3@6 c#4@6 d4@39 ~@13]/2",
  L: "[~@36 f3@3 ~@2 f3@5 ~ g3@2 ~ g3@13 a3@3 ~ a3@3 ~ a#3@2 ~ a#3@12 c4@3 ~ c4@4 d4@2]/2",
  M: "[~ d4@26 f4@4 ~@2 f4@4 g4@5 ~ g4@26 d#4@5 ~ d#4@42 ~@18 f3@3 ~@2 f3@3 g3@2 ~@2 g3@11 a3@3 ~@2 a3@3 a#3@2 ~@2 a#3@11 c4@3 ~ c4@4 d4@3]/4",
  N: "[~ d#4@20 g4@9 g4@6 g4@6 ~@2 g4@43 f4@3 g4@2 f4@38 ~@14]/3",
  O: "[~@11 f3@7 ~ f3@7 g3@6 ~ g3@6 a3@5 ~@2 a3@6 a#3@18 ~@26]/2",
  P: "[~@34 f3@7 ~@2 f3@6 g3@6 ~@2 g3@6 a3@5 ~ a3@5 a#3@5 ~@2 a#3@8 c4@5 ~ c4@6 a#3@5 ~ a#3@17 a3@5 ~@2 a3@4 a#3@4 g3@22 a3@31]/4",
  Q: "[~ a#3@57 ~@38]/2", R: "[~@22 f4@35 d4@102 ~@33]/4",
})).s("gm_french_horn").gain(0.45).pan(0.4)

// other · timpani
const timpani = note(`<
  ~@50
  [~@24 d2 c2@2 d2 ~@2 c2@2 ~@2 d2@2 ~@2 c2@2 ~@2 d2@2 ~@4, ~@28 c2@2 ~@3 c2@2 ~ c2@2 ~@3 c2@2 ~@5, ~@29 d2@2 ~ d2@2 ~@3 d2@2 ~ d2@2 ~@6]
  ~@5
  [~@7 d2 ~@2 d2 ~ e2 d2 ~ d2 ~@2 d2 ~ d2 ~ d2 ~@25, ~@9 e2@2 ~@3 e2@2 ~ e2@2 e2@2 e2@2 ~@25]
  ~@25
>`).s("gm_timpani").gain(0.1).pan(0.3)

// other · bassoon
const bassoon = note("<A B C D E@2 ~@26 F@2 G@2 H@4 I ~@41>".pickRestart({
  A: "~@27 d4@8 c#4@8 d4@5", B: "c#4@12 d4@13 ~ c#4@7 b3@9 c#4@6", C: "b3@13 c#4@12 ~ d4@8 ~ c#4@8 ~ d4@4",
  D: "~@2 c#4@13 d4@12 ~ c#4@11 ~ b3@8", E: "[~@2 c#4@7 b3@13 ~ c#4@13 d4@47 ~@13]/2",
  F: "[~@44 d4@7 c#4@9 d4@7 c#4@13 d4@11 c#4@5]/2",
  G: "[~ b3@10 c#4@7 b3@14 c#4@12 ~ d4@7 c#4@9 d4@7 c#4@13 d4@11 c#4@4]/2",
  H: "[~@3 b3@8 c#4@7 ~ b3@12 c#4@12 d4@8 c#4@8 d4@8 c#4@13 d4@12 c#4@6 b3@10 c#4@7 b3@12 c#4@11 ~@2 c#4@7 b3@10 c#4@7 b3@23 c#4@5]/4",
  I: "~@2 b3@8 c#4@6 ~ b3@13 ~@18",
})).s("gm_bassoon").gain(0.09)

// other · flute
const flute_2 = note(`<
  ~@15 A@2 B@2 C@5 D E@7 ~@3 F@2 G ~ H@3 I ~ J@4 K@2 L@2 M@4 N@3 ~@11 O@2 P@4 Q@2 R@4
>`.pickRestart({
  A: "[~@17 e4@5 d5@6 c#5@5 c#5@3 b4@4 ~ d5@11 c#5@4 ~@2 c#5@3 b4@2 ~ d5@3 c#5@22 e4@6 ~]/2",
  B: "[d5@5 c#5@10 b4@3 c#5@2 d5@55 ~@21]/2",
  C: "[~@16 e4@4 ~@2 c#5@4 b4@3 ~ b4@9 a#4@3 ~ c#5@4 b4@4 ~ b4@10 a#4@3 c#5@3 b4@20 ~ b4@5 ~ c#5@4 b4@6 g#4@5 f#4@4 g#4@51 ~@21 e5@4 ~ f#5@3 e5@2 ~ f#5@12 e5@4 f#5@3 e5@2 ~ f#5@14 e5@5 f#5@2, ~@34 c5 ~@85]/5",
  D: "~ e5@2 f#5@13 e5@6 g#5@20 f#5@6",
  E: "[~ e5@22 a4@40 ~@21 e4@5 e4@5 ~ c#5@6 ~@2 c#5@8 a4@7 e4@40 ~@26 e4@4 ~@2 e4@7 f#4@4 ~@2 f#4@6 g#4@4 ~@2 g#4@5 a4@4 ~@2 a4@6 b4@4 ~@3 b4@6 a4@4 ~ a4@5 ~ g#4@4 ~@2 g#4@6 a4@7 f#4@6 g#4@5 a4@48 ~@2]/7",
  F: "[~@33 d6@5 c#6@4 b5@4 c#6@16 a5@5 ~ a5@15 ~@2 a4@4 ~ a4@4 b4@2]/2", G: "~@2 b4@11 c#5@4 ~ c#5@4 d5@3 ~ d5@13 ~@9",
  H: "[~@20 d6@7 c#6@7 b5@8 c#6@17 a5@5 ~@2 a5@16 ~@4 f#5@6 g5@6 f#5@9 g5@4 f#5@3 g5@5 f#5@13 g5@3 f#5@4 g5@5]/3",
  I: "~@2 f#5@10 ~ g5@3 f#5@2 ~ g5@4 f#5@6 ~@19",
  J: "[~@32 a4@4 ~@3 a4@5 ~ g5@8 f#5@7 g5@7 f#5@58 ~@9 a4@5 ~@2 a4@6 b4@5 ~ b4@5 c#5@5 ~ c#5@5 ~ d5@4 ~@2 d5@6 e5@4 ~ e5@5]/4",
  K: "[~ d5@4 ~@2 d5@6 c#5@5 ~ c#5@7 d5@6 b4@6 c#5@6 d5@39 ~@13]/2",
  L: "[~@38 f4@2 ~@2 f4@5 g4@2 ~ g4@13 a4@3 ~ a4@3 ~ a#4@2 ~ a#4@12 c5@3 ~ c5@4 d5@2]/2",
  M: "[~ d5@26 f5@4 ~@2 f5@4 g5@5 ~ g5@26 d#5@5 ~ d#5@42 ~@18 f4@3 ~@2 f4@3 g4@2 ~@2 g4@11 a4@3 ~@2 a4@3 a#4@2 ~@2 a#4@11 c5@3 ~ c5@4 d5@3]/4",
  N: "[~ d#5@20 g5@9 g5@6 g5@6 ~@2 g5@43 f5@3 g5@2 f5@38 ~@14]/3",
  O: "[~@11 f4@7 ~ f4@7 g4@6 ~ g4@6 a4@5 ~@2 a4@6 a#4@18 ~@26]/2",
  P: "[~@34 f4@7 ~@2 f4@6 g4@6 ~@2 g4@6 a4@5 ~ a4@5 a#4@5 ~@2 a#4@8 c5@5 ~ c5@6 a#4@5 ~ a#4@17 a4@5 ~@2 a4@4 a#4@4 g4@22 a4@31]/4",
  Q: "[~ a#4@57 ~@38]/2", R: "[~@22 f5@35 d5@102 ~@33]/4",
})).s("gm_flute").gain(0.34).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@7 A@2 B@2 C D A B@2 C D A B@2 C D@2 A B@2 C D A B ~ E F G H I J K@2 H I J F G H I@3 ~ E L@2 M N@2 ~@2 L M N O L@2 M
  N O L@2 P ~@12
>`.pickRestart({
  A: "~@22 x ~@18 x ~@4 x ~", B: "~@24 x ~@17 x ~@4 x", C: "~@23 x ~@17 x ~@4 x ~", D: "~@23 x ~@18 x ~@4 x",
  E: "~@11 x", F: "~@14 x ~@4 x ~@24 x ~@3", G: "~@15 x ~@4 x ~@22 x ~@4", H: "~@14 x ~@4 x ~@25 x ~@2",
  I: "~@15 x ~@4 x ~@24 x ~@2", J: "~@15 x ~@4 x ~@23 x ~@3", K: "~@14 x ~@4 x ~@23 x ~@4",
  L: "~@21 x ~@17 x ~@4 x ~@3", M: "~@20 x ~@17 x ~@4 x ~@4", N: "~@20 x ~@18 x ~@4 x ~@3",
  O: "~@19 x ~@18 x ~@4 x ~@4", P: "~@5 x ~@6",
})).gain(0.07).pan(0.4)

// drums · rim
const rim = s("rim").struct(`<
  ~@7 A B C D C E B C D C E B C D C E@2 B C D C E B C ~ F G@2 H I J G K H I J G@2 H L@3 M ~ N@2 L H@2 ~@2 N L H K L N L
  H K L N M ~@12
>`.pickRestart({
  A: "~@17 x ~@6", B: "~@5 x ~@11 x ~@6", C: "~@11 x ~@23 x ~@12", D: "~ x ~ x", E: "~@10 x ~@24 x ~@12", F: "~@2 x",
  G: "~@8 x ~@22 x ~@16", H: "~@7 x ~@24 x ~@15", I: "~@8 x ~@24 x ~@14", J: "~@9 x ~@22 x ~@15",
  K: "~@7 x ~@23 x ~@16", L: "~ x ~@2 x ~", M: "~ x ~@4", N: "~@3 x ~@7 x ~@4",
})).gain(0.07).pan(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@7 A B@23 ~ C D@16 E ~ F D@4 ~@2 G D@10 E ~@12>".pickRestart({
  A: "~@4 x!4", B: "x!8", C: "~@11 x ~ x ~ x", D: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", E: "~ x ~ x ~ x ~@10",
  F: "~@7 x ~ x ~ x ~ x ~ x", G: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x",
})).gain(0.08).pan(0.4)

// drums · crash
const crash = s("cr").struct("<~@6 [~@28 x!20] [x!11 ~@37] ~@42 [~@35 x ~@12] ~@31>").gain(0.05).pan(0.4)

stack(
  string_ensemble_2, synth_strings_2, bass, bass_2, flute, acoustic_guitar_nylon, acoustic_guitar_nylon_2, tuba,
  french_horn, timpani, bassoon, flute_2, kick, rim, hihat, crash
)

More by Celine Dion