Strudelify

The Reason

Celine Dion

KeyD♭ majorTempo72 bpm
0:00/0:00
// The Reason — Celine Dion
// 72 bpm, 4/4, key C# 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 91 bars on a 32-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 · "tk2"
const bass = note(`<
  ~ A ~@3 B C D ~ E F G H I J I J K L M N O P Q R S T U@2 V W@2 I J I J K L M N O P Q R S T U@2 V W@2 X Y X Y O P Q R O
  P Q R O P Q R S T O P Q R S T Z@5 AA@2 ~ C AB H AC@5
>`.pickRestart({
  A: "db2@3 ~", B: "db2", C: "db3", D: "db2@13 ~@3", E: "bb2", F: "eb2", G: "b1@3 ~", H: "ab2",
  I: "db2@7 ~@3 db2@4 ab1@2", J: "db2@7 ab1", K: "bb1 bb2", L: "ab1 ab2", M: "gb1@4 gb1!4", N: "gb1!3 gb2!5",
  O: "db2@14 db2@5 ~ db2@8 ab1@2 bb1@2", P: "db2@14 db2@5 ~ db2@8 db2@2 eb2@2", Q: "gb2@14 gb2@5 ~ gb2@8 db2@2 eb2@2",
  R: "gb2@14 gb1@5 ~ gb1@8 gb1@4", S: "bb1 ab1", T: "gb1!5 gb2!3", U: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~",
  V: "gb1 ~ gb1 ~ gb1 ~ gb1 ~ gb1 ~ gb1 ~ gb1 ~ gb1@2", W: "[b1@63 ~]/2", X: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  Y: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b2@2 b2@2 b2@2", Z: "gb2!8", AA: "[db2@7 ~]/2", AB: "bb2@7 ~",
  AC: "[~ gb2@34 ~ gb1@35 db2@71 ~@18]/5",
})).s("gm_fretless_bass").gain(0.52)

// bass · fretless bass · "tk2" · soft notes
const bass_soft = note("<~ A B C D ~@2 E B ~@2 F ~ G ~ G ~@16 G ~ G ~@46 A B ~ H ~@6>".pickRestart({
  A: "~@3 db3", B: "db3", C: "~@2 db3@2 eb3@2 f3@8 eb3 f3", D: "gb3@3 db3@5", E: "~@13 db3@3", F: "~@3 ab2",
  G: "~@7 db2@2 ~@7", H: "~@7 bb2",
})).s("gm_fretless_bass").gain(0.29)

// chords · string ensemble 2 · "tk3"
const string_ensemble_2 = note(`<
  ~ A@4 ~@6 B C D E D E F G H@2 I@2 J@2 K L ~@2 M N@2 D E D E F G H@2 I@2 J@2 K L ~@2 M N@2 ~@4 O@2 P@2 O@2 P@2 I@2 J@2
  K L Q@2 J@2 K R@6 A@4 S T U@5
>`.pickRestart({
  A: "[[f3,ab3] [gb3,a3] [f3,ab3] [gb3,a3], db4]/4", B: "b2", C: "ab2", D: "[ab3,db4,f4]", E: "[a3,db4,gb4]",
  F: "[bb3,db4,f4]", G: "[ab3,eb4,ab4,c5]", H: "[gb3,db4,gb4,ab4,bb4]/2", I: "[[db4,f4,ab4]@31 ~]/2",
  J: "[[db4,gb4,bb4]@31 ~]/2", K: "[f4,bb4,db5] [eb4,ab4,c5]", L: "[db4,gb4,bb4]", M: "~@3 [bb3,eb4]",
  N: "[[b2,e3,a3,db4]@15 ~]/2", O: "[db4,f4,ab5,db6]/2", P: "[db4,gb4,bb5,db6]/2", Q: "[[f4,ab4]@31 ~, db4 ~@63]/2",
  R: "[db4,gb4,bb4]/6", S: "[f3,bb3,db4]", T: "[f3,ab3,c4]",
  U: "[~ [gb3,bb3,db4]@34 ~ [a2,db3,a3,db4,gb4]@35 [ab2,db3,ab3,db4,f4,ab4]@71 ~@18]/5", // Gb Gbm Db
})).s("gm_string_ensemble_2").gain(0.29).pan(0.4)

// chords · distortion guitar · "tk6"
const distortion_guitar = note(`<
  ~@21 A@2 B@2 C D ~@13 A@2 B@2 C D ~@9 A@2 B@2 A@2 B@2 A@2 B@2 C D E@2 B@2 C D ~@16
>`.pickRestart({
  A: "[db3,ab3,db4]/2", B: "[gb2,db3,gb3]/2", C: "[bb2,f3,bb3] [ab2,eb3,ab3]", D: "[gb2,db3,gb3]",
  E: "[[ab3,db4], db3 ~@63]/2", // Db5
})).s("gm_distortion_guitar").gain(0.35).pan(0.3)

// chords · string ensemble 1 · "tk7"
const string_ensemble_1 = note("<~@27 A@2 B ~@16 A@2 B ~ C D E D E ~@20 F G H ~@3 I J ~ K L ~@5>".pickRestart({
  A: "[f3,c4,eb4] ~ [f3,c4,eb4] ~ [f3,c4,eb4] ~ [f3,c4,eb4] ~ [f3,c4,eb4] ~ [f3,c4,eb4] ~ [f3,c4,eb4] ~ [f3,c4,eb4] ~", // F7
  B: "[gb3,db4,f4] ~ [gb3,db4,f4] ~ [gb3,db4,f4] ~ [gb3,db4,f4] ~ [gb3,db4,f4] ~ [gb3,db4,f4] ~@5", C: "~@20 a2@11 ~",
  D: "[e3,a3,e4,a4] ~ [e3,a3,e4,a4] ~ [e3,a3,e4,a4] ~ [e3,a3,e4,a4] ~ [e3,a3,e4,a4] ~ [e3,a3,e4,a4] ~ [e3,a3,e4,a4] ~ [e3,a3,e4,a4] ~", // A5
  E: "[gb3,b3,gb4,b4] ~ [gb3,b3,gb4,b4] ~ [gb3,b3,gb4,b4] ~ [gb3,b3,gb4,b4] ~ [gb3,b3,gb4,b4] ~ [gb3,b3,gb4,b4] ~ [gb3,b3,gb4,b4] ~ [gb3,b3,gb4,b4] ~", // B5
  F: "bb3 ~ c4 ~ db4 ~ eb4 ~ f4 ~ gb4 ~ ab4 ~ bb4 ~ c5 ~ db5 ~ eb5 ~ f5 ~ gb5 ~ ab5 ~ bb5 ~ c6 ~",
  G: "db6@7 bb5 db6@3 bb5 db6@3 bb5", H: "db6@29 ~@3", I: "~@12 db3 ~@3 db3@10 ~@2 db3 ~@3",
  J: "db3@9 ~@7 db3@9 ~@3 db3 ~@3", K: "~@7 db5", L: "f5",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.7)

// chords · string ensemble 1 · "tk7" · soft notes
const string_ensemble_1_soft = note("<~@29 A ~@18 A ~ B@8 ~@23 C D E F ~ G@5>".pickRestart({
  A: "~@12 [gb3,db4,f4] ~ [gb3,db4,f4] ~", B: "[~ c4@31]/8", C: "db3@9 ~@23", D: "~@12 db3 ~@19",
  E: "db3@10 ~@2 db3 ~@3 db3@10 ~@2 db3 ~@3", F: "bb4@6 c5 ~", G: "[~ [bb4,db5]@34 ~ gb4@35 ab4@71 ~@18]/5",
})).s("gm_string_ensemble_1").gain(0.23).pan(0.7)

// other · french horn · "tk8"
const french_horn = note("<~ A B C@2 ~@46 D E F G ~@25 A B H@2 I J K@2 L@3>".pickRestart({
  A: "~@11 ab3@5 db4@5 eb4@5 ~ f4@5", B: "f4@2 gb4@4 f4 gb4", C: "[ab4@18 gb4@2 f4@2 eb4@2 f4@7 ~]/2",
  D: "~@12 a4 ~ db5 ~ e5@16", E: "db5@12 b4@17 ~@3", F: "~@12 e4 ~ a4 ~ db5@16", G: "gb4@7 ~",
  H: "[ab4@9 gb4 f4 eb4 f4@3 gb4]/2", I: "f4@5 bb4 c5 db5", J: "c5 f4@2 f4", K: "[~ bb4@34 ~ db4@16 eb4@12]/2",
  L: "[~@2 db4@5 ab4@71 ~@18]/3",
})).s("gm_french_horn").gain(0.35).pan(0.7)

// chords · brass section · "tk9"
const brass_section = note("<~@27 A@2 B ~@16 A@2 B ~@2 C D C D ~@36>".pickRestart({
  A: "[f2,f3,c4,f4,a4]/2", B: "[gb2,gb3,db4,gb4,bb4]", C: "[a2,a3]", D: "[b2,b3]@29 ~@3",
})).s("gm_brass_section").gain(0.35).pan(0.4)

// other · overdriven guitar · "tk11"
const overdriven_guitar = note("<~@54 A@2 B C D E@2 F@2 G ~@27>".pickRestart({
  A: "[~@31 ab5@13 f5@2 db5@14 bb4@2 db5 ~]/2", B: "f5 ab5 f5@5 eb5 bb5 e5@3 db5@2 bb4 db5",
  C: "gb5@3 ~ e5@4 db5@12 eb5@2 bb4@2 db5@4 eb5@2 bb4@2", D: "[bb4,eb5]!5 bb4 [bb4,db5]@4 bb4 db5 f5 ab5 bb5 ab5",
  E: "[db6@2 bb5@2 db6@9 ~ db6 bb5 db6@4 db6 bb5 db6@4 db6 bb5 db6@8 db6@2 bb5@2 bb5@4 ab5@4 b5@8 ab5@4 e5@2 eb5@2]/2",
  F: "[db5@2 bb4@2 db5@2 db5@6 db5@8 bb4@2 db5@2 gb5@12 e5@4 db5@2 b4 ab4 db5 b4 ab4 gb4 b4 ab4 gb4 e4 db4 ab4 gb4 e4 db4 b3 ab3 db4 b3 ab3 gb3 e3]/2",
  G: "db3@29 ~@3",
})).s("gm_overdriven_guitar").gain(0.52).pan(0.4)

// other · timpani · "tk12"
const timpani = note("<~@21 A B C D ~@15 A B C D ~@19 A B C D ~@2 A B C D ~@18>".pickRestart({
  A: "~@28 ab2 ~ ab2 ~", B: "db3@3 ~@11 ab2 ~ db3 ~@3 db3 ~@7 ab2 ~ gb2 ~", C: "gb2@5 ~@11 gb2 ~@11 ab2 ~ gb2 ~",
  D: "gb2 ~@13 gb2 ~ gb2 ~@3 gb2@4 ~@8",
})).s("gm_timpani").gain(0.22).pan(0.6)

// chords · electric guitar clean · "tk13"
const electric_guitar_clean = note(`<
  ~@5 A@2 B@2 C@2 D E F@6 G@2 ~@4 H@2 ~@5 F@6 G@2 ~@4 H@2 ~@21 H@2 ~@4 I@8 ~@10
>`.pickRestart({
  A: "[~@7 db4, ab4@3 ab4@4 ab4@4 ab4@5, ~ db4@2 db4@2 db4@2 ~]/2",
  B: "[~@28 db4@3 ~, f4@41 ~@23, ~ db4@2 db4@2 db4@2 ~, ~@3 ab4@4 ab4@4 ab4@5, ~@9 ab3@4 ~@3]/2",
  C: "[~@3 [bb3,db4], ~@3 db4@2 db4@3 ~@2 db4@2 ~@4, ~@4 f4@4 ~@3 gb4@5, ~@6 ab3@2 ~ bb3@3 ~@4, ~@7 f3@3 ~@6]/2", // Bbm
  D: "~ db4 ~ db4 gb4@4, eb4@13 ~@19, ~@4 b3@7 ~@5", E: "db4 [ab3,c4]",
  F: "[~@15 db4 ~@15 db4 ~@15 ab3, db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@3 ~ db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@3 ~@3 db4@4 db4@2 c4@6 c4@2, ~ ab3@4 ab3@4 a3@4 a3@4 ab3@4 ab3@4 a3@4 a3@4 bb3@6 bb3@2 ~@2 c5@5, ~@3 ab4@4 ab4@2 ~@2 ab4@4 ~@4 ab4@4 ab4@2 ~@11 bb4@4 ~@2 ab4@2 ab4@4, ~@14 gb4@3 ~@10 gb4@3 eb4@2 f4@3 f4@2 f4@4 f4@4 f4@3]/6",
  G: "[~@13 gb4 [db4,gb4,ab4]@2, db4@3 db4@2 ~ db4 ~, ~ gb4@4 gb4@2 gb4@4 gb4@2 ~@3, ~@4 ab4@4 ab4@5 ~@3 ab4@4 ab4@8 ~@4, ~@3 db5@5 ~ db5@4 ~@3]/2", // Dbsus4
  H: "[~@15 db4, bb3 ab3 gb3!2, ~ db4@2 db4@2 c4@2 c4@2 db4@2 db4@2 db4@2 ~, ~ f4@2 f4@2 eb4@2 eb4]/2",
  I: "[~@55 db4@2 ~@7, bb3 ab3 gb3!2 gb3!2 gb3!2 gb3!2 gb3!2 gb3!2 ~@2, ~ db4@2 db4@2 c4@2 c4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 db4@2 ~@9, ~ f4@2 f4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 eb4@2 ~@3]/8",
})).s("gm_electric_guitar_clean").gain(0.29).pan(0.3)

// chords · electric guitar clean · "tk13" · soft notes
const electric_guitar_clean_2 = note("<~@5 A@4 B C D ~@79>".pickRestart({
  A: "[~@2 ab3@8 ab3@8 ab3@8 ~@4 eb4@3 ~ ab3@8 ab3@8 ~@12 eb4@2, ~@52 ab3@16 ~@48 ab3@11 ~]/4",
  B: "~@19 c4@2 ~@11, f4 ~, ~ f3@4 ~@3, ~ ab3@2 ~", C: "~@15 ab3 ~@8 ab3@8", D: "~@5 db4 ~ db4, ~@3 b3",
})).s("gm_electric_guitar_clean").gain(0.17).pan(0.3)

// chords · epiano1 · "tk14"
const epiano1 = note("<~@5 A B C B D E F G H I J K L M N O ~@11 H I J K L M N O ~@48 P@3>".pickRestart({
  A: "[ab3,db4,f4]@3 [ab3,db4,f4]", B: "[a3,db4,eb4]", C: "[ab3,db4,f4]", D: "[bb3,db4,f4]", E: "[bb3,db4,gb4]",
  F: "[b3,eb4,gb4]", G: "~ ab3, db4, ~ ab4@3", H: "[ab3,db4,f4]@7 ~", I: "~@3 a4, [a3,db4,gb4]@7 ~, ~@3 db5@4 ~",
  J: "[ab3,db4,f4], ab4@11 ~@21", K: "[a3,db4,gb4]@31 ~", L: "bb3@16 bb3@11 ~ [bb4,db5]@4, [db4,f4]",
  M: "~@7 eb4, ab3, eb4@5 eb4@2 ~, [ab4,c5]@15 ~@9 ab4@8, ~ eb5@2 ~", // Ab
  N: "db4@3 ~@4 db4, gb3@27 ~@5, [gb4,bb4]@2 [eb4,ab4] gb4, ~@3 db4@2 db4@2 ~", // Gb Ab5
  O: "[gb4,bb4]@2 ~@5 db4, gb3!2, db4@3 db4@2 db4@2 ~, ~ [gb4,bb4]@2 [gb4,bb4]", // Gb
  P: "[~@5 ab5@8 ~@3, ~@21 db5@4 f5@53 ~@18, ~@23 eb5@9 ~@64]/3",
})).s("gm_epiano1").gain(0.35).pan(0.6)

// chords · piano · "tk15"
const piano = note(`<
  ~ A B@3 C D@2 E F G H I J K L@2 M N O@2 P Q R S T U V W X Y@2 J K L@2 M N O@2 P Q R S T U V W X Y@2 Z AA Z AA P Q R AB
  P Q R AB P Q R S T U P Q R S T U@6 A B@3 AC AD AE ~ AF@2 ~
>`.pickRestart({
  A: "[ab3,db4,f4]@25 ~@3 ab3@4", // Db
  B: "[~@20 ab4@11 ~ f4@19 ~ eb4@2 ~@2 eb4@2 ~@2 ab3@12 ~@24, a3@12 a3@19 eb4@2 ~@21 f4@15 ~@27, ~@2 db4@6 db4@8 ~@13 db4@6 ~@13, ~@8 ab4@12 ~@11 ab4@20 ~ ab4@6 ~@38]/3",
  C: "[ab3,db4,f4]@27 ~@5", D: "[[a3,db4,eb4]@31 ~ [db4,f4]@32, ~@31 ab4@32 ~, ~@31 eb4@3 ~@30]/2", E: "[a3,db4,eb4]",
  F: "bb3@4 ~@3 bb3, [db4,bb4], f4@3 f4, ~@4 bb3@3 ~", // Gb
  G: "~@6 bb3@7 ~@3, ab4@13 ~@3, bb3@3 ~@5, eb4@8 db4@19 ~@5, ~@4 gb4@23 ~@5",
  H: "eb4@2 db4@2 b3@2 gb3@9 ~, gb4@31 ~, db4 ~@31", I: "~@2 bb3 db4 [ab3,c4]@4, ab2@31 ~, ~@4 eb3@27 ~",
  J: "~@12 eb4@3 eb4 [ab3,db4,f4]@12 ab3@2 ~@2, f4 db4 ~@2, ~ ab3@3 ~@4", // Db
  K: "~@6 gb4 a3, a3@11 ~ a3@14 ~@6, ~@2 db4@7 ~ db4@6, ~@8 gb4@13 ~@11",
  L: "[~@56 gb4@7 ~, f4@8 db4@7 ~ ab3@16 a3@11 ~ a3@7 ~ a3@10 ~@2, ~@4 ab3@8 eb4@8 db4@13 ~@3 db4@27 ~, ~@24 f4@11 ~@5 gb4@14 ~@10, ~@48 ab4@9 ~@7]/2",
  M: "~@16 f4@11 ~@5, [db4,f4,bb4]@11 ~ db4@15 ~@5, ~@4 f3@9 ~@19, ~@8 bb3@9 ~@15", // Bbm
  N: "~ c5, [f4,ab4]@4 f4@11 ~, ~@4 c4@17 ~@11, ~@3 ab4@5", // Fm
  O: "[~@8 db4@4 ~@4 db4@4 ~@16 db4@4 ~@4 db4@4 [gb4,ab4,db5]@7 ~ [gb4,ab4,db5]@7 ~, [ab4,db5]@28 ~@2 db5@7 ~@27, gb4@9 ~@3 gb4@15 ~ gb4@11 ~ [gb4,ab4]@7 ~@17, ~@4 ab3@16 ab3@9 ~@3 ab3@21 ~@11, ~@24 db4@7 ~@33]/2", // Gbsus2 Db5 Gbsus2
  P: "[f4,ab4,db5]@2 f4!2 [f4,ab4,db5]@2 f4!2, ~ [ab4,db5] ~ [ab4,db5]", // Db Db5
  Q: "[ab4,db5]@2 ab4!2 [f4,ab4,db5]@2 ab4!2, ab5 ~, ~ [f4,db5] ~ [f4,db5]", // Db5 Db
  R: "[bb4,db5]@2 ~ gb4!5, gb4@3 ~@5, ~ [ab4,bb4,db5] [bb4,db5]!2", // Bbm Bbm7 Bbm
  S: "gb4@2 gb4@2 gb4@2 gb4@2 gb4@2 gb4@2 [gb4,bb4,db5]@2 gb4 f4, [ab4,db5] [bb4,db5]!2 ~", // Gb Db5 Bbm
  T: "[f4,bb4,db5,f5]@2 [f4,f5] f4 ab4!2 [ab4,c5,eb5] ab4, ~ [bb4,db5] [c5,eb5] ~", // Bbm F Ab Bbm Cm
  U: "gb4!5 ~@2 gb4, [ab4,bb4,db5]!2 [bb4,db5] [ab4,bb4,db5], ~@5 gb4@2 ~", // Bbm7 Bbm Bbm7
  V: "[f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2 f4!2, ~@3 [a4,c5]", W: "[f4,a4,c5]@2 f4!6, ~ [a4,c5]!3",
  X: "~ gb4!4 ~@2 gb4, [ab4,bb4,db5] [bb4,db5]!2 [ab4,bb4,db5], ~@5 gb4@2 ~", Y: "[[e4,a4,db5,e5]@7 ~]/2",
  Z: "~@7 a4, [b4,db5,e5]@7 ~ [b4,db5,e5]@7 ~ [b4,db5,e5]@7 ~ [b4,db5,e5]@7 ~, ~@4 a4@7 ~ a4@7 ~ a4@7 ~@5", // Dbm7
  AA: "gb4!8, b4!4", AB: "gb4!8, [ab4,db5] [bb4,db5]!3",
  AC: "~@8 f4@6 [bb3,eb4] db4, f4@11 ~ db4@16 ~@4, ~ f3@6 ~, ~@2 bb3@5 ~", AD: "ab3 ~ eb4@2, eb4@3 ab3@5, ~ c4@3",
  AE: "~@7 gb4@9, ~ gb3@31, ~@5 bb3@27, ~@5 db4@11", AF: "[~@6 eb4@2 f4@31 ~@25, ~@2 ab3@27 ~@35]/2",
})).s("gm_piano").gain(0.4)

// other · piano · "tk16"
const piano_2 = note(`<
  ~@19 A B@2 C ~ D@2 ~ E ~@2 F G ~@6 A H I C ~ J@2 ~ E ~@2 F G F G F G ~@7 K I C ~ L@2 M@2 N ~ O@2 ~@5 P Q ~@10
>`.pickRestart({
  A: "~@15 gb5", B: "[ab5@2 gb5 ab5@2 gb5 ab5@12 gb5@9 ~@5]/2", C: "~@4 ab5@4 ab5@4 ab5@2 ab5@6 f5@7 ~@5",
  D: "[~@10 ab5@2 ab5@2 ab5 ab5@3 ~@14]/2", E: "~@2 f5 e5 f5 e5 f5 e5 f5@2 ~@6", F: "a5@3 ab5@3 gb5@2",
  G: "e5@12 eb5@9 ~@11", H: "ab5@4 gb5@2 ab5@3 ~ gb5@2 ab5@8 ab5@4 ab5@4 ab5@4", I: "ab5@2 gb5@9 ~@5",
  J: "[~@10 ab5@2 ab5@2 ab5 ab5@3 bb5@8 ~@6]/2", K: "~@5 ab5!3", L: "[~@5 ab5!2 ab5@2 bb5@4 ~@3]/2",
  M: "[~@10 [ab5,db6]@8 [gb5,bb5] [f5,ab5]@9 ~@4]/2", N: "~ db6@4 f5@2 ~, ~ ab5@6 ~",
  O: "[~@20 ab5@4 ab5@4 ab5@7 ~ bb5@16 ~@12]/2", P: "[bb4,db5,gb5]", Q: "[ab4,db5,f5]",
})).s("gm_piano").gain(0.05)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@13 A@5 B@2 ~@2 C ~@9 A@5 B@2 ~@2 C ~@22 C ~@5 C ~@20>".pickRestart({
  A: "~@7 x ~@8", B: "~@3 x ~@4", C: "~@15 x",
})).gain(0.24)

// drums · rim
const rim = s("rim").struct("<~@12 [~@3 x] [~ x ~ x]!6 [~ x ~@2] ~@12 [~ x ~ x]!6 [~ x ~@2] ~@52>").gain(0.63)

// drums · snare
const snare = s("sd").struct(`<
  ~@20 A B@3 C B D B@2 E ~@9 A B@3 C B D B@2 E ~ F B@3 A B@3 G B G B H B@3 C B D B@3 C B@5 I J ~@11
>`.pickRestart({
  A: "~@4 x ~@3 x ~ x!3 ~@3", B: "~ x ~ x", C: "~@4 x ~@7 x!2 ~@2", D: "~@4 x ~@5 x!3 ~ x!2", E: "~ x!2 ~",
  F: "~@8 x ~ x!3 ~@3", G: "~@4 x ~@4 x ~@2 x ~@3", H: "~@4 x ~ x ~@3 x!3 ~@3", I: "~@4 x ~@5 x!3 ~@3", J: "~@2 x!2",
})).gain(0.71)

// drums · low tom
const low_tom = s("lt").struct("<~@20 A ~@3 B ~@4 A ~@9 A ~@3 B ~@4 A ~@5 C ~@7 B ~@3 B ~@5 B ~@18>".pickRestart({
// … 44 more lines

More by Celine Dion