Strudelify

Les derniers seront les premiers (feat. Jean-Jacques Goldman)

Celine Dion

KeyC majorTempo124 bpm
0:00/0:00
// Les derniers seront les premiers (feat. Jean-Jacques Goldman) — Celine Dion
// 124 bpm, 2/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 209 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Cleangtr.
setcpm(124/2)

// 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(`<
  ~@32 A@2 B C D@2 E F G@2 H I J@2 K L M@2 N O@2 P@6 Q R S T@2 U V W X Y Z@2 AA@4 A@2 B C D@2 E F A@2 B C D@2 E F G@2 H
  I AB@2 AC AD A@2 B C D@2 E F G@2 H I J@2 K L M@2 N AE@2 AF@2 AG@4 Q R S T@2 U V W X Y Z@2 AA@4 Q R S T@2 U V W X Y Z@2
  AA@4 AH AI AJ@2 AK AL AM@2 AN AO AP@2 AQ@4 AH AI AJ@2 AK AL AM@2 AN AO AP@2 AQ@4 AH AI AJ@2 AK AL AM@2 AN AO AP@2 AQ@4
  AR@2 ~
>`.pickRestart({
  A: "[~@5 e4@3, [a1,a2,e3,a3,c4]]/2", B: "f3@3 f3, [f1,f2,a3]", C: "c4@4 ~@4 g2@7 ~, [g1,d3,g3]@15 ~, ~@2 b3@5 ~",
  D: "[e3@2 e3 ~@4 a2, a1, [a3,c4]@3 b3@5, ~@3 a2@2 e4@3, ~ c4]/2", // Am
  E: "f3@8 ~@4 f2@3 ~, [a3,c4]@15 ~, f2@3 ~, ~@8 f3@7 ~", F: "c4@4 ~@4 g1@7 ~, [g2,d3,g3], ~@4 b3@11 ~",
  G: "[e3@2 ~@5 c2, [a1,a3]@5 e4@3, c4 c4, ~ e3@3, ~@3 [a2,b3]@5]/2", H: "f3@2 ~ f2, [f1,a3,c4], ~ f3",
  I: "~ g2, [g1,g3,b3,d4]@15 ~", J: "[c3@4 ~ [g3,c4,g4]@3, [c2,d#4], [g3,c4]@5 ~@3, ~ c3]/2",
  K: "g#3@2 ~ g#2, [g#1,c4,d#4], ~ g#3", L: "f3@2 ~ a#2, [a#1,a#3,d4], ~ f3",
  M: "[g3@5 ~@23 c3@4, [c2,d#4], c4@5 c4@3, ~ g3 g3@2, ~@3 c3@3 g4@2]/2", N: "[g#2,g#3,c4,d#4]@15 ~",
  O: "[f3@20 f3@8 f3@3 ~, [a#2,a#3,d4,d#4,f4]@31 ~]/2", // A#
  P: "[~@3 f3@3 ~@4 f4@14, a#1, [a#3,d#4]@7 a#2@2 d#4@15, f3 f4@3 f3@4 ~@4, ~@4 a#2@20 f3@8 [a#3,d4]@63 ~]/6", // D#5 A#
  Q: "~@9 g3@7, [b3,e4], g3@9 ~@7, ~ [e2,e3,g4]@15", R: "~@7 b2@9, ~ [c3,g3,c4,e4,g4]@15",
  S: "g3@2 ~ d3, [g2,b3,d4], ~ g3", T: "[~@7 e3, [d2,d4]@16 [e3,g3,b3,e4] e2@8 g3@7, a3@3 a3@5, f#3 f#3@3, ~ d3@7]/2",
  U: "~@11 c3@5, [c4,e4], g3!2, ~ c3@10 ~@5", V: "g3@2 ~ b3, [g2,d4], b3@3 ~, ~ [d3,g3]",
  W: "~@3 f#3, [d2,a3], ~ d4@3, ~ d3", X: "g3@2 ~ e3, [e2,b3,e4], e3@3 ~, ~ g3",
  Y: "g3@7 ~@5 c3@4, [c4,e4], c3@11 ~@5, ~ g3", Z: "[g3@2 ~ b3 ~ a3 ~ a3, d4, g2 [d2,f#3], b3@3 ~@5, ~ [d3,g3] ~ d3]/2",
  AA: "[f3@2 ~@13 c4, [f2,c3], [g3,a3]@7 c4@3 f3@6, f4@6 c4@4 f4@12 c4@7 ~@3, c4@2 f3@6 g4@5 f4@3]/4", // F5 Gsus2
  AB: "[~@7 e5, a2@5 b4 c5@2, a4 a4, ~ a3@3, ~@3 e4@5]/2", AC: "~@12 f4@3 ~, [f2,a4], ~ f3@3, ~ c4",
  AD: "~ a4 [g3,d4,g4]@2, g2@15 ~, b4 ~", AE: "[~@20 f3@8 f3@3 ~, [a#2,a#3,d#4]@31 ~, f3@5 ~@3, ~@8 f4@23 ~]/2",
  AF: "[~@3 f3@3 f3@2, [a#1,a#3,d#4], f3@3 ~@5, ~ a#2@7, ~ f4@3]/2", // D#5
  AG: "[a#2 ~@2 a#3@2 ~@3 [a#2,a#3,c4,d4]@8, a#1@63 ~, d4@24 c4@4 f3@35 ~, c4@2 f3@3 a#3@3 ~@8, [f3,a#3] a#2@7 ~@8]/4", // A# A#5
  AH: "[e2,e3,g3,b3,e4,g4]", AI: "g3@2 ~ c3, [c2,c4,e4,g4], c3@3 ~, ~ g3",
  AJ: "[[g2,d4] [g3,b3,d4,g4] g2 ~@2 [a3,d4]@2 [d2,a3,d4,f#4], [g3,b3]@3 ~@9 f#4@16 ~@4, ~@3 [a3,d4]@2 [d3,g4]@3, ~@4 d2@3 ~]/2", // G5 G D5 D G D5 G5
  AK: "e3 ~@2 [e3,g4], e4, g4@3 ~, b3!2, ~ e2@3", AL: "g3 ~@5 g4@2, [c3,e4], g4@3 ~, c4!2, ~ g3@3",
  AM: "[~@2 b3 [a3,d4]@2 [a3,d4]@2 [d3,a3,d4,f#4], [g2,d4,g4]@13 ~@19, b3@2 ~ [d3,f#4]@4 ~, ~@4 g3@9 ~@7 a4@12]/2", // D5 D G5 D
  AN: "~@3 g3, [e2,b3,e4,g4], ~ b2@3, ~ e3", AO: "g3@2 ~ c3, [c4,e4], c3@11 ~@5, ~ g3",
  AP: "[~@2 g3 ~@4 f#3, [g2,b3,d4]@15 ~ d3@16, a3@3 [f#3,a3]@2 [a3,d4]@3, ~@5 f#3@2 ~, ~@3 d2]/2", // G F#m D5
  AQ: "[[g3,a3,c4]@8 ~@4 [g3,c4,f4]@14 ~@2 [g3,c4,f4]@7 ~ [g3,c4,e4]@6 ~@2 [g3,c4,e4]@7 ~ [g3,c4,e4]@7 ~ [g3,c4,e4]@3 ~, f3@9 ~@7, f4@11 ~@53, f2@5 ~@59]/4", // Am7 Csus4 C
  AR: "[~ [e2,e3,g4]@31, [g3,b3,e4]]/2", // Em
})).s("gm_piano").gain(0.27).pan(0.3)

// bass · electric bass finger · "Basse"
const bass = note(`<
  ~@75 A@2 B C D@2 B E A@2 B C D@2 B E A@2 B C D@2 B E A@2 B C D@2 B E A@2 B C F@2 G H I@2 G J@2 K@2 L M@3 N O P Q R S P
  T N O U T V@2 W X N O P Q R S P T N O U T V@2 W X Y Z AA AB AC AD AE AF AC AG AH AI AJ AK AL AM Y Z AA AB AC AD AE AF
  AC AG AH AI AJ AK AL AM Y Z AA AB AC AD AE AF AC AG AH AI AJ AK AL AM AN@2 ~
>`.pickRestart({
  A: "[a1@27 ~ g1@3 ~]/2", B: "f1@7 ~", C: "g1@15 ~", D: "[a1@25 ~@3 g1@3 ~]/2", E: "g1@7 ~",
  F: "[c2@26 ~@2 a#1@3 ~]/2", G: "g#1@15 ~", H: "a#1@13 ~@3", I: "[c2@6 c1@9 ~]/2", J: "[a#1@13 ~ a#1 ~]/2",
  K: "[a#1@25 ~@3 a#1@2 ~@2]/2", L: "a#1@10 ~@2 a#1@3 ~", M: "[a#1@23 ~]/3", N: "e2", O: "c2", P: "g2@15 ~",
  Q: "d2@9 ~@3 d2@4", R: "e2@15 ~", S: "c2@15 ~", T: "d2@15 ~", U: "g2@7 ~", V: "[f2@13 f1 ~@2]/2", W: "f1@6 c2 ~",
  X: "f2@4 c2@3 ~", Y: "e2@11 ~ e2@3 ~", Z: "c2@7 ~ c2@3 ~ b1@3 ~", AA: "g1@3 ~ g1@2 d2@2", AB: "~@2 d2@2 d1@3 ~",
  AC: "e1@7 ~ e1@2 ~@2 e1@3 ~", AD: "c1@7 ~ c1@2 ~@2 c1@3 ~", AE: "g1@7 ~ g1@2 ~@2 g1@3 ~", AF: "d1@3 ~ d1@4 g1@4 a1@4",
  AG: "c1@10 ~@2 c1@3 ~", AH: "g1@6 ~@2 g1@2 ~@2 g1@3 ~", AI: "d1@3 ~ d1@7 ~ d1@3 ~", AJ: "c2@11 ~ c1@3 ~",
  AK: "c1@11 ~ c2@4", AL: "~@4 c2@6 ~@2 c2@3 ~", AM: "g1@3 ~ a1@4 c2@4 d2@4", AN: "e2/2",
})).s("gm_electric_bass_finger").gain(0.35)

// other · oboe
const oboe = note("<~@75 A B@3 C@2 D@6 ~@87 E@3 F G H I J E@3 K L@4 E@3 F G H I J E@3 K L@4 ~@3>".pickRestart({
  A: "~ a4@15", B: "[e5@9 d5 e5 g5]/3", C: "[~ e5@27 ~ c5@3, ~@14 d5 ~]/2", D: "[b4@12 g4@16 e4@61 ~@7]/6", E: "b5/3",
  F: "a5@4 c6@2 c#6@2 d6@7 ~", G: "d6", H: "g5@7 ~", I: "g5 a5 b5@2", J: "a5", K: "a5 d6", L: "[c6@59 ~@5]/4",
})).s("gm_oboe").gain(0.3).pan(0)

// chords · string ensemble 1 · "Strings1"
const string_ensemble_1 = note(`<
  A@2 B C D E@2 F@4 G H@2 I J K@2 ~@14 L@3 M N@3 O P Q@3 R S T U V@3 W@8 ~@12 X@4 ~@8 Y@2 P M Y@2 Z AA AB@2 Z M Y@2 AC
  AD L@3 M N@3 O P Q@3 R S T U V@3 AE@8 ~@12 X@4 ~@12 X@4 ~@12 AF@4 ~@12 AF@4 ~@12 AF@4 ~@3
>`.pickRestart({
  A: "[a3@31 ~]/2", B: "c4@15 ~", C: "b3@15 ~", D: "a3", E: "[e4@23 ~ c4@4 d4@4]/2", F: "[g4 e4@3 c5@4]/4",
  G: "b4 c5 b4@2", H: "[a4@8 e4@15 ~ g4@8]/2", I: "d4@3 c4", J: "b3", K: "a3/2", L: "a3/3", M: "d4", N: "g4/3", O: "f4",
  P: "e4", Q: "[~ c5@31 b4@16]/3", R: "[d#4,c5]", S: "[c4,g4]", T: "[d#4,d#5]", U: "[f4,d5]",
  V: "[~ [d#4,c5]@22 ~ g4@3 ~ g4@20]/3", W: "[f4@8 d#4@4 d4@3 ~, a#4@15 ~]/8", X: "[f4,g4,c5]/4", Y: "[e4@31 ~]/2",
  Z: "c4", AA: "~ d4@14 ~", AB: "e4/2", AC: "f3", AD: "g3@15 ~", AE: "[f4@8 d4@7 ~, [a#4,f5]@15 ~]/8",
  AF: "[f4 e4, [g4,c5]]/4", // C5
})).s("gm_string_ensemble_1").gain(0.2)

// chords · acoustic guitar steel · "Steel Gtr"
const acoustic_guitar_steel = note(`<
  A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 E@2 F@2 G@2 H@7 ~@2 I J@3 I
  J@3 I J@3 K@4 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 E@2 F@2 G@2 H@7 ~@2 L M@3 N M@3
  N M@3 K@4 L M@3 N O@3 P Q@3 R@2 S T U V W@2 X Y Z AA AB AC AD@2 AE@2 AF AG U AH AI@2 X Y Z AA AB AC AD@2 AE@2 AF AG U
  AJ W@2 X Y Z AA AB AC AD@2 AK@2 AF AG AL@2 ~
>`.pickRestart({
  A: "[~@4 c4 e4 ~ g3, a2@27 ~@5, ~ e3@6 ~, ~@8 a3@13 ~@3 a3@8, ~@12 b3@9 ~@11]/2",
  B: "[~@4 g3 ~@2 a4, f3@4 ~ d3@3, ~ g3@2 g4@3 ~@2, ~@8 c4@13 ~@3 d4@8]/2",
  C: "[~@3 b3 c4 e4 a3 g3, a2@31 ~, ~ e3@7, ~@4 a3@5 ~@7]/2",
  D: "[~@3 g4 ~@2 c4 b3, f3@11 ~ g2@20, ~ g3@3 d3@4, ~@2 c4@3 g3@3]/2",
  E: "[~@7 a#3, c3@27 ~@5, ~ g3@6 ~, ~ c4 d#4 c4, ~@3 d4@2 g4@3]/2",
  F: "[~@3 f3 a#3 ~@2 [g3,c5], g#3@3 a#4@3 ~@2, ~@4 a#3@9 ~@7 a#3@12, ~@8 d#4@13 ~@3 f4@8]/2", // C5
  G: "[~@3 d4 d#4 g4 c4 a#3, c3@31 ~, ~ g3@7, ~@4 c4@5 ~@7]/2",
  H: "[~@16 a#2@4 a#2@4 ~@8 a#3@4 f4@4 ~@8 a#3@4 ~@12 a#3@4 f4@4 ~@8 a#3@4 ~@8 a#3@17 ~@3, g#3@11 ~ a#4@12 f4@11 ~@5 f4@11 ~@6 f4@11 ~@4 f4@10 ~@2 d#4@13 ~@15, g#2@8 [g#2,d#4]@8 ~@8 a#2@16 a#2@15 ~ a#2@14 ~@2 a#2@14 ~@2 a#2@19 ~@5, ~@4 a#3@12 ~@4 d#4@14 ~@2 a#3@12 ~@4 [a#3,d#4]@13 ~@3 a#3@12 ~@4 a#3@7 ~@21, ~@28 f3@12 ~@4 f3@12 ~@4 f3@11 ~@5 f3@12 f4@10 ~@14]/7", // G#5 D#5
  I: "~ e4@14 ~, [e2,e3,g3,b3]", // Em
  J: "[~ e4@14 ~ [g2,d3,b3,d4]@13 ~@3 [d2,d3,a3,d4]@16, [c3,e3,g3,c4]@15 g3@14 ~@2 f#3@16 ~, d4 ~@3]/3", // G D5 C
  K: "[~ c4@61 ~@2, [f3,g3,a3]@63 ~, c3@15 ~]/4", L: "~ [g3,b3,e4]@14 ~, [e3,g4]@7 ~",
  M: "[~ e4@14 ~ [d3,b3,d4]@13 ~@3 [d3,a3,d4]@16, [e3,g3,c4]@15 g3@14 ~@2 f#3@16 ~, d4 ~@3]/3", // G D5 C
  N: "~ e4@14 ~, [e3,g3,b3]@7 ~", // Em
  O: "[~ e4@14 ~ [d3,b3,d4]@13 ~@3 [a3,d4]@16, [e3,g3,c4]@15 g3@14 ~@2 f#3@16 ~, d4 ~@3]/3", // G D5 C
  P: "~ e4@14 ~, [g3,b3]@15 ~", Q: "[~ e4@14 ~ [b3,d4]@13 ~@3 [a3,d4]@16, [g3,c4]@15 g3@14 ~@2 f#3@16 ~, d4 ~@3]/3",
  R: "[[a3,c4,f4,g4]@9 ~@3 [a3,c4,f4,g4]@19 ~]/2", S: "~ [a3,c4,f4,g4]@3", T: "~@4 [a3,c4,f4,g4]@7 ~ [a3,c4,f4,g4]@3 ~",
  U: "[b3,e4,g4]@7 ~", V: "[c4,e4,g4]@5 ~ [g3,c4,e4,g4] ~",
  W: "[[g3,b3,d4,g4]@3 ~ [g3,b3,d4,g4]@7 ~ [a3,d4,f#4]@7 ~ [a3,d4,g4]@6 ~@2 [a3,d4,f#4]@3 ~]/2", // G D Dsus4 D
  X: "[b3,e4,g4]@3 ~ [b3,e4,g4] ~@3 [b3,g4]@3 ~ [b3,g4]@2 ~@2, ~@2 e4 ~", // Em
  Y: "[g3,e4,g4]@4 c4@2 ~@2 [c4,e4,g4]@3 ~ [c4,e4,g4]@2 ~@2, c4@3 ~@5 g3@4 ~@4", // C
  Z: "[b3,d4,g4]@3 ~ [b3,d4,g4]@2 ~@2 [b3,d4,g4]@2 ~@2 [a3,d4,g4]@4", AA: "~@4 [a3,d4,f#4]@7 ~ [a3,d4,f#4]@3 ~",
  AB: "[g3,e4,g4]@4 b3 ~ [g3,b3,e4,g4] ~, b3@3 ~@5", AC: "[c4,e4,g4]@6 ~@2 [e4,g4]@4 g3 ~@3, ~@8 c4@3 ~@5",
  AD: "[[b3,d4,g4]@3 ~ [b3,g4]@6 ~@2 [a3,d4,f#4]@7 ~ [a3,d4,f#4]@5 ~@3 [a3,d4,f#4]@2 ~@2, ~@4 d4@3 ~@25]/2", // G Em D
  AE: "[[c4,f4,g4]@8 ~@4 [c4,f4,g4]@12 a3@2 ~@2 [a3,c4,e4,g4] ~ [a3,c4,e4,g4] ~]/2", // Csus4 Am7
  AF: "[f3,c4,e4,g4]@3 ~ [f3,c4,e4,g4]@5 ~@3 [f3,e4,g4]@4", // C
  AG: "~@3 [c4,e4,g4] f3@2 ~@2 [f3,c4,e4,g4]@3 ~ [f3,c4,e4,g4]@3 ~", AH: "~ [c4,g4]@10 ~@2 [g3,c4,e4,g4]@2 ~, e4@5 ~@3",
  AI: "[[g3,b3,d4,g4]@3 ~ [g3,b3,d4,g4]@7 ~ [a3,d4,f#4]@7 ~@2 [a3,d4,g4]@6 ~ [a3,d4,f#4]@3 ~]/2", // G D Dsus4 D
  AJ: "~ [c4,g4]@10 ~ [g3,c4,e4,g4]@2 ~@2, e4@5 ~@3", // C5 C
  AK: "[[a3,c4,f4,g4]@8 ~@4 [c4,f4,g4]@12 a3@2 ~@2 [a3,c4,e4,g4] ~ [a3,c4,e4,g4] ~, ~@6 a3@5 ~@5]/2", // F Csus4 Am7
  AL: "[~ [g3,b3,e4]@31, [e2,e3,g4]]/2", // Em
})).s("gm_acoustic_guitar_steel").gain(0.23).pan(0.9)

// chords · synth strings 1 · "SynStri1"
const synth_strings_1 = note(`<
  ~@59 A B C D A B E D A B E D F@4 G@2 H I G@2 J K ~@43 A B C D A B E D A B E D F@4 A B C D A B E D A B E D F@4 A B C D
  A B E D A B E D L@4 A B C D A B E D A B E D L@4 A B C D A B E D A B E D L@4 M@2 ~
>`.pickRestart({
  A: "[b3,e4,g4]@15 ~", B: "[c4,d4,e4,g4]@15 ~", C: "[b3,d4,g4]@7 ~", D: "[a3,d4,f#4]@15 ~", E: "[b3,d4,g4]@15 ~",
  F: "[a3,c4,f4,g4]/4", G: "[[e3,a3,c4]@31 ~]/2", H: "[f3,a3,c4]@15 ~", I: "[g3,b3,d4]", J: "[f3,a3,c4]",
  K: "[g3,b3,d4]@15 ~", L: "[f4 e4, [a3,c4,g4]]/4", M: "[b3,e4,g4]/2",
})).s("gm_synth_strings_1").gain(0.25)

// other · pad sweep · "SweepPad"
const pad_sweep = note("<~@71 A@4 ~@63 A@4 ~@12 A@4 ~@12 A@4 ~@12 A@4 ~@12 A@4 ~@3>".pickRestart({
  A: "[[f1,f2]@63 ~]/4", // F
})).s("gm_pad_sweep").gain(0.45)

// other · percussive organ · "Organ2"
const percussive_organ = note("<~@51 A B@3 C@2 D@2 ~@59 A B@3 C@2 D@2 ~@83>".pickRestart({
  A: "~@2 f5 c6", B: "~@8 f5@3 ~ c6@4", C: "[~@2 f5 c6@5]/2", D: "[a#5@3 ~]/2",
})).s("gm_percussive_organ").gain(0.25).pan(0.3)

// chords · electric guitar clean · "Cleangtr"
const electric_guitar_clean = note(`<
  ~@154 A@2 B@2 C D@3 E D@3 E D@3 F@2 G@2 C H@3 E D@3 E D@3 F@2 G@2 I J@3 E D@3 E D@3 A@2 K@2 ~@3
>`.pickRestart({
  A: "[~@13 c4@19, ~@3 e4@5]/2", B: "[~@4 e4@7 ~@2 [g3,a3]@5 ~@2 e4@8 ~@4, ~@12 c4@5 ~@15]/2", C: "~ [g3,b3,e4]@14 ~",
  D: "[~ e4@14 g3@14 ~@3 [a3,d4]@16, d4@12 ~@19 f#3@16 ~]/3", E: "~ e4@14 ~", F: "[a3@10 ~@3 c4@19, ~@3 [a3,e4]@5]/2",
  G: "[~@4 a3@8 ~ [g3,a3]@5 ~@2 [a3,c4,e4]@8 a3@3 ~, ~@12 c4@5 ~@15]/2", // Gsus2 Am
  H: "[~ e4@14 g3@14 ~@3 [a3,d4]@16, [g3,c4]@15 ~@16 f#3@16 ~, d4 ~@3]/3", I: "~ [b3,e4]@15",
  J: "[~ e4@14 g3@14 ~@3 [a3,d4]@16, c4@15 ~@16 f#3@16 ~, d4 ~@3]/3", // D5
  K: "[~@13 [g3,a3]@5 ~@2 [c4,e4]@8 a3@4, ~@12 c4@5 ~@15]/2", // Gsus2 C
})).s("gm_electric_guitar_clean").gain(0.14).pan(0.1)

// drums · kick
const kick = s("bd").struct(`<
  ~@75 A B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@2 B A B A ~@3 A@13 C A@15 D E ~ C A C A C A C A
  C A C A C@2 F ~ C A C A C A C A C A C A@4 ~ C A C A C A C A C A C A@4 ~@4
>`.pickRestart({
  A: "x", B: "~@3 x", C: "x ~@2 x", D: "x!2", E: "~@2 x!2", F: "~ x ~@2",
})).gain(0.56)

// drums · rim
const rim = s("rim").struct("<~@75 [x!2]!44 [~ x]!5 ~@85>").gain(0.56)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@146 A B ~@5 B C ~@2 D ~@51>".pickRestart({
  A: "~ x", B: "x", C: "x ~@8 x ~@6", D: "~@3 x",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@145 A B ~@2 C D E@2 F ~@3 G ~@15 H ~@15 I ~@15 I ~@3>".pickRestart({
  A: "~ x ~ x", B: "x!2 ~@2", C: "~ x ~@2", D: "~@4 x ~@4 x ~@6", E: "x", F: "~@5 x!2 ~", G: "~@3 x!2 ~@3",
  H: "~@4 x!4", I: "x ~ x ~ x ~ x!2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@82 A ~@7 A ~@7 A ~@7 A ~@15 A ~@46 A ~@3 A ~@11 A ~@3 A ~@11 A ~@3 A ~@3
>`.pickRestart({
  A: "~@3 x",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@149 A B ~@2 C ~@3 C ~@15 D ~@35>".pickRestart({
  A: "~@2 x!2", B: "x", C: "~ x ~@2", D: "~@2 x!2 ~@4",
})).gain(0.48)

// drums · crash
// … 30 more lines

More by Celine Dion