Strudelify

Beauty & The Beast

Celine Dion

KeyF majorTempo76 bpm
0:00/0:00
// Beauty & The Beast — Celine Dion
// 76 bpm, 4/4, key F 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, 3/4 at bar 42, 5/4 at bar 43, 4/4 at bar 44) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 B C D E F G H I J K L M N O P Q R@2 S T U V W X Y Z AA AB AC AB AD AE AF AG AH AI AJ AK AL X AM AN@2 AO AP AO AQ AR
  AS AT AU AV AW AX P AY AZ@2 BA BB@3 BC@6 BD@3 BE@5
>`.pickRestart({
  A: "~@2 g3 a3@2 c4 e4 f4, f2, ~ c3@7", B: "~ d3 ~ bb3 a4 bb4 g4 a4, f2, bb3@3 ~@5, ~ f3@2 e3",
  C: "~@2 g3 a3@2 c4 e4 f4, f2, [a3,f4] ~@3, ~ c3@5 c3@2", // Dm
  D: "~ d3 ~ bb3 [c4,a4] [d4,bb4] [bb3,g4] [c4,a4], f2, bb3@3 ~@5, ~ f3@2 e3", // F Gm Eb F
  E: "~@4 g3@2 a3@4 c4@2 e4@3 f4, f2, f4 ~@3, ~ c3@7", F: "~ d3 ~ bb3 a4 bb4 [c4,g4] a4, f2, bb3@3 ~@5, ~ f3@2 e3",
  G: "~@2 g3 a3@3 e4 f4, f2, [a3,f4] ~@3, ~ c3@5 c3@2", // Dm
  H: "~ d3 ~ bb3 a4 bb4 [c4,g4] a4, f2, [bb3,g4]@3 ~@5, ~ f3@2 e3", // C5 Eb
  I: "~@2 g3 a3@2 g4 a4 bb4, f2, [g3,a3,f4] ~@3, ~ c3@5 c3@2", J: "~ g3 f3 g3 c4@2 [c4,a4] g4, a2, [e4,c5]@3 e3",
  K: "~ f3 bb3 f3 ~ f3 [bb3,a4] [f3,g4], bb2, [c4,d4,f4]@2 [c4,d4,f4,bb4] ~", // Bbmaj7 Fsus2 Dm7 Bb
  L: "~ f3 [g3,c4] d4 ~ f3 [c3,g3,e4]@2, c3@3 ~, [d4,f4]@2 ~ bb3@2 ~@3, ~@2 f4 ~", // C5 C Dm
  M: "[f3,g3,c4,f4]@2 [g4,a4] [f2,c4] [f4,a4] c4 [e4,g4] f4, f2@3 ~ f2@4", // Fsus2 Gsus2 F5 F Em
  N: "d4@2 bb3@2 f4@2 [f2,a4,f5]@2 [g4,e5]@3 [e4,c5]@2 ~@2 c3, f2@6 ~@2 f2@5 f3@2 ~, ~@7 [c4,g4]", // F C C5
  O: "[g4,a4] c4 [f4,a4] [f2,c4] [f4,a4] c4 [f4,a4] c4, f2@3 ~ f2@4", // Gsus2 F F5 F
  P: "[eb4,g4] bb3 [eb4,g4] [c3,bb3] [e4,a4] c4 [f4,c5] c4, f2@3 ~ f3@2 a2@2", // Eb C7 A5 F5
  Q: "[c4,d4,f4] f3 [c4,d4,f4] [bb2,f3] [c4,d4,f4] bb3 [f4,c5] c4, bb2@3 ~ bb2@2 a2@2", // Dm7 Bb5 Dm7 F5
  R: "[[d4,f4,bb4] bb3 [d4,f4,bb4] [g2,bb3] [c4,a4] [d4,bb4] [bb3,g4] ~@2 c4 ~ c3 [c5,a5] [d5,bb5] [bb4,g5] [c5,a5], g2@3 ~ c3@4 f2@3 ~@5, ~@7 [c4,a4]@2 ~ [a3,f4]@2 f3@4]/2", // Bb Gm F Gm Eb F Gm Eb …
  S: "~@2 c3@2 a3@2 c3@2 f4@2 g4@2 f3!2 [g2,d4,bb4]@2, f2@3 ~, [a4,f5]@4 a3@2 [f4,a4] ~", // Gm Dm F
  T: "[e4,g4,c5] c4 [e4,g4,c5] [a2,c4] [e4,g4,c5] c4 ~ a2, a2@3 ~ a2@3 ~, ~@3 f5", // C Am C
  U: "[bb4,e5] f4 [bb4,d5] bb2 ~ g4 a4 [d4,bb4], bb2@3 f4@2 ~@3, ~ bb2", // Bbdim Bb Gm
  V: "[e4,g4,c5]@2 c4@2 [e4,g4,c5]@2 [a2,c4]@2 [e4,g4,c5]@2 c4@2 e4 d4 [a2,c4]@2, a2@3 ~ a2@3 ~", // C Am C Am
  W: "[c5,d5] f4 [bb4,d5] bb2 ~ g4 [f4,a4] [d4,bb4], bb2@3 f4@2 ~@3, ~ bb2", // Csus2 Bb F Gm
  X: "[e4,g4,c5] c4 [e4,g4,c5] [a2,c4] [e4,c5] bb4 [c4,a4] g4, a2@3 ~ a2@4", // C Am C F
  Y: "[d4,f4,a4] a3 [d4,f4,a4] [d3,a3] f4 [bb3,g4] [c4,a4] [d2,a3,f4], d3@3 ~ d2@3 ~", // Dm D5 Eb F Dm
  Z: "[bb3,eb4,g4] g3 [eb4,g4] [eb2,bb3] [eb4,g4,bb4] bb3 [eb2,eb4,g4,bb4] [d2,bb3], eb2@3 ~ eb2@2 ~@2", // Eb Eb5 Eb Gm
  AA: "[d4,f4,g4] bb3 [d4,f4,bb4] [c2,bb3] [c2,f4,g4,c5] [c3,c4] [c3,e4,g4,c5] [c2,c4], c2@3 ~@5", // G7 Bb C7 Csus4 C
  AB: "[g4,a4,c5] c4 [f4,a4,c5] [f2,c4] a4 c5 e5 f5, f2@3 ~ f2@4", // Am7 F F5
  AC: "[d4,bb4]@2 [d4,f4,bb4] [f2,bb3] [d4,f4,bb4] bb3 [f3,e4,g4,c5] [c3,c4], f2@3 ~ f2@2 ~@2", // Gm Bb Bb5 Bb C
  AD: "[bb4,d5,g5] g4 [bb4,d5,g5] [f2,g4] [bb4,d5,g5] g4 [db2,db3,a4,db5,e5,a5]@2, f2@3 ~ f2@2 ~@2", // Gm Fsus2 Gm A
  AE: "[a4,d5,f5] f4 [a4,d5,f5] [d2,f4] [d5,f5,a5] a4 [a4,d5,f5] f4, d2@3 ~ d2@4", // Dm
  AF: "[g4,c5,e5] e4 [g4,c5,e5] [a2,e4] [e4,g4,c5] c4 [g4,c5,e5] [a2,e4], a2@3 ~ a2@3 ~", // C A5 C A5
  AG: "[c5,d5]@2 f4@2 [bb4,d5]@2 [bb2,g4]@2 f4@2 g4@2 bb2 g2 [f2,bb4]@2, bb2@3 ~ bb2@2 a4 ~", // Csus2 Bb Eb Bb5
  AH: "[f4,bb4,c5] c4 [f4,bb4,c5] [g2,c4] [c2,bb3,d4,f4,bb4]@2 [bb2,g4,bb4,c5,e5]@2, c3@3 ~@5", // Fsus4 C5 Bb C7
  AI: "[e4,g4,c5] c4 [e4,g4,c5] [a2,c4] [e4,g4,c5] c4 [e4,g4,c5] [a2,f5], a2@3 ~ a2@3 ~", // C Am C Dm
  AJ: "[bb4,e5]@2 f4@2 [bb4,d5]@2 [bb2,f4]@2 [bb4,d5]@2 f4@2 d5 f4 c5 a4, bb2@3 ~ bb2@4", // Bbdim Bb Bb5 Bb
  AK: "[e4,g4,c5] c4 [e4,g4,c5] [a2,c4] [e4,g4,c5] c4 [e4,g4,c5] [a2,f4], a2@3 ~ a2@3 ~", // C Am C Dm
  AL: "e4 bb3 d4 [bb2,bb3] f4 g4 [f4,a4] [bb2,d4,bb4], bb2@3 ~ bb1@3 ~", // Bb F Bb
  AM: "[d4,f4,a4] a3 [d4,f4,a4] [a2,a3] f4 [bb3,g4] [c4,a4] [d2,a3,f4], d3@3 ~ d2@3 ~", // Dm A Eb F Dm
  AN: "[[bb3,eb4,g4]@2 g3@2 [bb3,eb4,g4]@2 g4 a4 [eb2,eb4,g4,bb4]@4 g4@2 bb3@2 eb4@2 ab4@2 c4@2 eb4@2 [bb1,bb2,eb4,g4,bb4]@4 [eb2,eb3] [db2,db3] [bb1,bb2]@2, eb2@3 eb2 ~@2 [db2,db3]@3 [c2,c3]@3 ~@4]/2", // Eb Db Bb Db C
  AO: "[eb4,bb4,c5] c4 [eb4,bb4,c5] [ab2,c4] [eb4,ab4,c5] c4 [eb4,ab4,c5] [ab2,c4], ab2@3 ~ ab2@3 ~", // Cm7 Ab
  AP: "[f4,ab4,db5]@2 db4@2 [f4,ab4,db5]@2 [ab2,ab5]@2 [bb4,g5]@3 [g4,eb5]@2 ~@2 eb3, ab2@6 ~@2 ab2@5 ab3@2 ~, ~@7 [eb4,bb4]", // Db Ab Eb Cm Eb5
  AQ: "[f4,ab4,db5]@2 db4@2 [f4,ab4,db5]@2 [ab2,ab5]@2 [bb4,g5]@3 [g4,eb5]@3 [eb2,f4,db5]@2, ab2@3 ~ ab2@3 ~", // Db Ab Eb Cm Db
  AR: "[eb4,ab4,c5] c4 [eb4,ab4,c5] [ab2,c4] [eb4,ab4,c5] c4 [f2,ab4,c5] [e2,bb4,db5], ab2@3 ~ ab2@2 ~@2", // Ab Fm Bbdim
  AS: "[ab4,c5,eb5] eb4 [eb4,ab4,c5,eb5] [eb2,eb4] [g4,bb4,e5] e4 [g4,c5] [c3,bb4], eb2@3 ~ c2@3 ~", // Ab Eb Edim C5 C7
  AT: "[f4,ab4,c5] c4 [f4,ab4,c5] [eb2,c4] [f4,ab4,db5] db4 [f4,ab4,db5] [db2,db4], f2@3 ~ db2@3 ~", // Fm Cm Db
  AU: "[ab4,bb4,eb5]@2 eb4@2 [ab4,bb4,eb5]@2 [eb2,ab5]@2 [bb4,g5]@3 [g4,eb5]@3 [eb2,db5]@2, eb2@3 ~ eb2@3 ~", // Absus2 Ab5 Eb Cm Eb7
  AV: "[g4,a4,c5]@2 [g4,a4] [f2,c4] [f4,a4] c4 [e4,a4] f4, f2@3 ~ f2@4", // Am7 Gsus2 F5 F A5
  AW: "d4@2 bb3@2 f4@2 [f2,a4,f5]@2 [g4,e5]@2 d5 c5@3 [f2,bb4]@2, f2@3 ~ f2@3 ~", // F C Bb5
  AX: "[g4,a4] c4 [g4,a4] [f2,c4] [f4,a4] c4 e4 f4, f2@3 ~ f2@4", // Gsus2 F5 F
  AY: "[c4,d4,f4] f3 [c4,d4,f4] [bb2,f3] [c4,d4,f4] bb3 [d4,f4,a4] a3, bb2@3 ~ bb2@2 d3@2", // Dm7 Bb5 Dm7 Dm
  AZ: "[[d4,f4,bb4] bb3 [d4,f4,bb4] [g2,bb3] [c4,a4] [d4,bb4] [bb3,g4] ~@4 f2 [c4,a4] g4 a4 c5, g2@3 ~ c3@4 f2@3 ~ f2@2 e2@2, ~@7 [c4,a4]@3 [a3,f4]@2 ~@4]/2", // Bb Gm F Gm Eb F Dm
  BA: "[d4,f4] a3 [d4,f4] [d2,a3] [c4,f4] a3 [f4,a4] [c2,c4], d2@3 ~ c2@3 ~", // Dm D5 F5 F C
  BB: "[[c4,d4,f4]@2 f3@2 [c4,d4,f4]@2 [d2,f3]@2 [c4,d4,f4]@2 ~ f3@2 [d4,f4]@2 [a2,a4]@2 [g3,bb3,d4]@2 ~ f4@2 g4@2 ~ bb4@2 [c4,a4]@4 [d4,bb4]@4 [bb3,g4]@6 [c4,a4]@7, bb1@6 ~@2 bb2@7 ~@2 [g1,g2]@10 c3@8 c2@13]/3", // Dm7 Dm Dm7 Dm A Gm F Gm …
  BC: "[~@8 c3@2 ~@2 c3@2 a4@2 ~ c5@2 e5@2 f5@2 ~@2 d3@2 ~@2 f5@2 [g4,e5]@3 ~@3 bb4@2 ~@2 c3@2 a3@2 c3@2 a4@2 c5@2 e5@2 ~ f5@2 ~@2 d3@2 ~@2 f5@2 [g4,e5]@3 ~@3 bb4@2 c3@2 f2@2 c2@2 ~@2 a3@2 c4@2 e4@2 f4@2 [b2,f3,d4,g4]@4 ~ [bb2,f3,db4,f4]@2 e4, ~@6 f2@16 ~ f2@16 f2@16 ~ f2@12 ~@10 c3@10 ~@8, ~@6 f4@8 ~@9 [f4,bb4]@6 ~@5 [e4,c5]@3 ~@2 [c4,a4]@8 ~@9 [f4,bb4]@6 ~@5 c5@3 ~@26, ~@6 a3@4 a3@4 f3@8 ~@5 f3@8 f3@4 ~@8 f3@8 ~@5 f3@8 db3@4 [c4,f4,a4]@8 ~@16]/6", // C G7 Bbm Bb5 C F Bb5 F
  BD: "[~@2 [c4,f4]@3 g4@3 [g3,c4,e4]@4 [gb3,c4,eb4]@11 [f3,bb3,d4]@4 f4@3 g4@4 bb4@4 [a3,c4,f4,c5]@5 [g3,c4,g4,bb4]@5, ~@2 [a2,f3]@6 [d2,d3]@15 g2@15 ~@10]/3", // F5 C Cdim Bb F C7 Dm D
  BE: "[~ [f3,bb3,d4,g4]@6 ~ [bb3,c4,a4]@10 [a3,c4,f4]@3 a3@3 ~ c4@3 a3@4 [a3,f4]@4 [c4,a4]@4 [f4,c5]@9 ~ a5@20 ~@10, ~@7 e3@11 f2@51 ~@11, ~@49 [a4,c5,f5]@21 ~@10]/5", // Gm7 F Dm F F5 F
})).s("gm_piano").gain(0.35)

// other · synth brass 2
const synth_brass_2 = note(`<
  ~@4 A B C D ~@4 E B E F G H@2 I J I J I K L M N O ~@3 P Q R I J S J I K L T U V W X Y Z AA AB AC ~ AD AE AF G H@2 ~
  AG@3 AH@2 ~@6 AI AJ@4 ~
>`.pickRestart({
  A: "~@8 a3@2 c4@2 e4@3 f4", B: "bb3@3 ~", C: "~@8 a3@3 c4 e4@2 f4@2", D: "g4", E: "~@8 a3@3 a3 g3@2 a3@2",
  F: "bb3@4 a3 g3 a3 c4", G: "f3@4 f3 e3 f3 a3", H: "[bb3@8 c4@2 d4@2 bb3@2 c4@4 bb3 a3 a3@12]/2",
  I: "~@4 a3 bb3 c4 d4", J: "[a3,e4]", K: "c4@4 ~@3 c4 c4@2 bb3@2 a3@2 g3 f3", L: "f3@2 ~@2 a3 bb3 c4 a3",
  M: "bb3 a3 bb3@10 ~@4", N: "g3@3 f3 bb3@3 a3 c4@6 a3@2", O: "[f3,c4]", P: "d4", Q: "c4@14 a3 g3", R: "f3",
  S: "~@8 d4@5 c4!2 a3", T: "bb3 a3 bb3@6 ~@4 bb3@4", U: "~ c4@3 [bb3,eb4]@2 ~@2", V: "~@8 c3@2 eb3@2 g3@3 ab3",
  W: "[db3,db4]", X: "~@8 c4@2 bb3 bb3@3 c4@2", Y: "ab3 ~", Z: "~@4 ab3 bb3 c4 [bb3,db4]", AA: "[c4,eb4]@4 [c4,e4]!4",
  AB: "[c4,f4]@8 db4@3 c4 bb3@2 ab3@2", AC: "[eb3,eb4]", AD: "~@8 a3@2 g3 f3 g3@3 a3", AE: "f3 ~",
  AF: "~@8 a3@2 g3@2 a3@3 c4", AG: "[~@8 bb3@3 ~ a3 bb3@2 d4@2 g3@10 c4@4 d4@4 bb3@6 c4@3 bb3@3 ~]/3",
  AH: "[a3@3 a3@8 ~@5]/2", AI: "~@6 [a3,c4]@5 [bb3,d4]@5", AJ: "[~ [g3,bb3]@6 [a3,c4]@11 [f3,c4]@31 ~@15]/4",
})).s("gm_synth_brass_2").gain(0.5)

// other · pad new age · "Sfx Fantasy"
const pad_new_age = note(`<
  ~@13 A B ~@3 C D ~@14 E F G H G H ~@2 I J ~ K F L M ~@2 N O P Q ~@2 R@2 S ~ T@4 ~@6 U V@5
>`.pickRestart({
  A: "~@6 f5 ~ e5@2 ~ c5@2 ~ g4 ~", B: "a4@3 ~@5", C: "~@8 a5 ~ bb5@2 g5 ~ a5 ~", D: "f5@7 ~@9", E: "~@4 f4 g4 a4 bb4",
  F: "c5 ~", G: "~@7 f5", H: "e5@4 d5@3 ~@9", I: "g4@5 ~ g4@2", J: "~ ab4@2 ~ bb4@3 ~",
  K: "~@6 ab5 ~ g5@2 ~ eb5@2 ~ bb4@2", L: "~@6 ab5 ~ g5 ~@2 eb5 ~@2 db5@2", M: "c5@3 ~@5",
  N: "~@6 ab5@2 g5@2 ~ eb5@2 ~ db5@2", O: "c5@5 ~@11", P: "~@8 e5@2 d5 c5@2 ~ bb4@2", Q: "a4@7 ~@9",
  R: "[~@8 a4@2 bb4@2 g4@2 a4@4 f4@6 a4@2 g4@2 a4@2 c5 ~]/2", S: "f5 ~",
  T: "[~@4 f4@2 g4@2 ~ bb4@2 c5@4 d5@4 bb4@6 c5@13 a4@16 ~@10]/4", U: "~@6 a4@5 bb4@5",
  V: "[~ g4@6 a4@11 f4@51 ~@11]/5",
})).s("gm_pad_new_age").gain(0.5)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@12 A B A C D E F G H I H I J K L M A N A O P H Q R H I H S J T U@2 V W V X Y Z AA AB A AC A C AD E AE AF AG@3 ~@14
>`.pickRestart({
  A: "f1@3 f1 f1@4", B: "f1@6 f1@2 f1@5 f2@2 c2", C: "f1@3 c2 f2@2 a1@2", D: "bb1@3 bb1 bb1@2 a1@2", E: "g1@3 g1 c2@4",
  F: "f1@3 c2 f2@4", G: "~@2 c2@2 a2@2 c2@2 a2@4 f2!2 g1@2, f1@3 ~", H: "a1@3 a1 a1@3 a1", I: "bb1@3 bb1 bb1@4",
  J: "a1@3 a1 a1@4", K: "d2@3 d2 d1@3 d1", L: "eb1@3 eb1 eb1@2 eb1 d1", M: "c1@3 c1!2 c2!2 c1", N: "f1@3 f1 f1@2 f2 c2",
  O: "f1@3 f1 f1@2 [db1,db2]@2", P: "d1@3 d1 d1@4", Q: "bb1@6 bb1@2 bb1@4 bb1 g1 f1@2", R: "c2@3 g1 c1@2 bb1@2",
  S: "bb1@3 bb1 bb0@3 bb1", T: "d2@3 a1 d1@3 d1", U: "[eb2@5 ~ eb2 ~ eb2@3 ~ db2@6 c2@6 bb1@3 ~ eb2 db2 bb1@2]/2",
  V: "ab1@3 ab1 ab1@3 ab1", W: "ab1@6 ab1@2 ab1@5 ab2@2 eb2", X: "ab1@3 ab1 ab1@3 eb1", Y: "ab1@3 ab1 ab1@2 f1 e1",
  Z: "eb1@3 eb1 c1@3 c2", AA: "f1@3 eb1 db1@3 db1", AB: "eb1@3 eb1 eb1@3 eb1", AC: "f1@3 f1 f1@3 f1",
  AD: "bb1@3 bb1 bb1@2 d2@2", AE: "f1@3 f1 f1@2 e1@2", AF: "d1@3 d1 c1@3 c1",
  AG: "[bb0@6 d1@2 bb1@7 a1@2 [g0,g1]@10 c2@8 c1@13]/3", // G
})).s("gm_acoustic_bass").gain(0.48)

// drums · kick
const kick = s("bd").struct("<~@12 A@6 B A@2 B A@5 C A@7 C A@3 C A@2 D E A@2 B C A B@2 A@10 F ~@15>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@2 x", C: "x!2", D: "x ~@2 x!2 ~ x ~", E: "~ x ~@2 x ~@3", F: "~ x ~@14",
})).gain(0.52)

// drums · rim
const rim = s("rim").struct("<~@12 [~ x ~ x]!8 ~@32 [~ x ~ x]!8 [~@4 x ~@8 x ~@2] [~@3 x ~@4] ~@15>").gain(0.52)

// drums · snare
const snare = s("sd").struct("<~@20 [~ x ~ x]!15 [~ x ~@2] [~ x ~ x]!6 [~ x ~@2] ~ [~ x ~ x]!8 ~@25>").gain(0.52)

// drums · low tom
const low_tom = s("lt").struct("<~@19 A ~@7 A ~@7 B ~@4 C ~@2 A ~@8 D ~@24>".pickRestart({
  A: "~@7 x", B: "~@14 x!2", C: "~ x ~@2", D: "x",
})).gain(0.52)

// drums · hihat
const hihat = s("hh").struct("<~@12 A@3 B A@3 C A@7 B A@4 D A@4 B A@5 E F A@3 B G A@5 B A@3 C H I ~@15>".pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2", C: "x!7 ~", D: "~ x!7", E: "x!5 ~@3", F: "x!2 ~ x!5", G: "~@2 x!6",
  H: "x ~ x ~ x ~ x ~ x ~@2 x ~ x ~ x", I: "~ x ~@2 x ~ x ~@2 x ~@6",
})).gain(0.52)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 A ~@7 A ~@7 A ~@7 B ~@7 C ~@25>".pickRestart({
  A: "~@13 x ~@2", B: "~@12 x!3 ~", C: "~@15 x",
})).gain(0.52)

// drums · open hat
const open_hat = s("oh").struct("<~@15 A ~@11 A ~ B ~ C ~@5 A ~@10 A ~ D@2 ~@3 A D ~@2 A ~@17>".pickRestart({
  A: "~@7 x", B: "~ x ~@2", C: "~@3 x", D: "x",
})).gain(0.59)

// drums · high tom
const high_tom = s("ht").struct("<~@51 [~@7 x] ~@25>").gain(0.39)

// drums · crash
const crash = s("cr").struct("<~@11 A B ~@19 B ~@9 C D ~@5 E@2 B ~@25>".pickRestart({
  A: "~@11 x!5", B: "x", C: "~@3 x", D: "~ x ~@2 x ~@3", E: "x!2",
})).gain(0.26)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@11 [~@8 x!3 ~@5] ~@65>").gain(0.13)

// drums · ride
const ride = s("rd").struct("<~@32 x ~@28 [~@11 x ~@4] [~@3 x ~@12] ~@14>").gain(0.46)

// drums · tambourine
const tambourine = s("tb").struct("<~@20 [~ x ~ x]!23 [~ x ~@2 x ~@3] [~ x ~ x]!8 ~@25>").gain(0.59)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@28 [~ x!7] [x!8]!2 [x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~] [x!16]!3 [x!13 ~ x ~] ~@41>")
  .gain(2.66)

stack(
  piano, synth_brass_2, pad_new_age, bass, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  crash_soft, ride, tambourine, cabasa
)

More by Celine Dion