Strudelify

Salvation

Roxette

KeyF majorTempo66 bpm
0:00/0:00
// Salvation — Roxette
// 66 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 6/4 at bar 41, 4/4 at bar 43, 6/4 at bar 61, ...) 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(66/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 · synth strings 1 · "strings lower"
const synth_strings_1 = note(`<
  A@2 B@2 C@4 D@2 B@2 C@4 E F G H@3 G I@2 J B@2 C@4 E F G H@3 G I@2 K@5 L@4 M@4 N@2 O@2 N@2 P Q@3 R S T S T S T S T S T
  S T
>`.pickRestart({
  A: "[eb3@2 ~ c4, g3, bb3@3 ~, ~ eb4]/2", B: "[[f3,d4]@2 ~ c4, bb3@3 ~, ~ [g3,eb4]]/2",
  C: "[[f3,d4] ~ c4 [bb3,d4], bb3 ~, ~ g3@3, ~ eb4@2 ~]/4", D: "[[ab3,c4,eb4] [d4,f4] ~ c4, ~ bb3@2 ~, ~ [g3,eb4]]/2",
  E: "[ab3,c4,eb4] [bb3,d4,f4]", F: "[f3,a3,f4,a4] [e3,g3,e4,g4], [c3,c4]",
  G: "[d3,f3,a3,d4,f4,a4] [c3,e3,g3,c4,e4,g4]", // Dm C
  H: "[[bb2,bb3]@2 [a3,a4] [e3,g3,e4,g4] [f3,a3,f4,a4] [e3,g3,e4,g4], [d3,f3,d4,f4] [c3,c4]]/3", // Bb A Em F Em Dm C
  I: "[[bb2,bb3]@2 [a3,a4] [c3,e3,g3,c4,e4,g4], [d3,f3,d4,f4]@3 ~]/2", J: "~ c4, [g3,eb4]",
  K: "[[bb2,d3,f3,bb3,d4,f4] [e3,g3,e4,g4] [a3,a4] [bb2,bb3]@2 [a3,a4]@2 [eb3,eb4] [d3,d4] [c3,eb3,c4,eb4], ~ [c3,c4]@2 [d3,d4]@4 [bb3,bb4]@2 ~, ~@2 [f3,f4]@5 [g3,g4]@3]/5", // Bb Em A Bb A Eb D Cm …
  L: "[[bb2,d3,f3,bb3,d4,f4] [ab2,c3,ab3,c4]@2 [g2,g3] [d3,f3,d4,f4] [eb3,eb4] [d3,d4] [c3,eb3,c4,eb4], ~ [eb3,eb4]@3 ~ [g3,g4]@3, ~@3 [bb2,bb3]@2 [bb3,bb4]@2 ~]/4", // Bb Ab G Dm Eb D Cm Eb …
  M: "[[bb2,d3,f3,bb3,d4,f4] [ab2,c3,ab3,c4]@2 [g2,g3] [d3,f3,d4,f4] [f3,a3,f4,a4] [e3,g3,e4,g4] [d3,f3,a3,d4,f4,a4], ~ [eb3,eb4]@3 ~@4, ~@3 [bb2,bb3]@2 [c3,c4]@2 ~]/4", // Bb Ab G Dm F Em Dm Eb …
  N: "[[c3,e3,g3,c4,e4,g4] [bb2,bb3]@2 [a3,a4], ~ [d3,f3,d4,f4]@3]/2", // C Bb A Dm
  O: "[[e3,g3,e4,g4] [f3,a3,f4,a4] [e3,g3,e4,g4] [d3,f3,a3,d4,f4,a4], [c3,c4]@3 ~]/2", // Em F Em Dm C
  P: "[c3,e3,g3,c4,e4,g4] [bb2,d3,f3,bb3,d4,f4]", // C Bb
  Q: "[[e3,g3,e4,g4]@2 [a3,a4]@2 [bb2,bb3]@4 [a3,a4]@3 [c3,e3,g3,c4,e4,g4], [c3,c4]@4 [d3,d4]@7 ~, ~@2 [f3,f4]@9 ~]/3", // Em A Bb A C D F
  R: "[bb2,d3,f3,bb3,d4,f4]", S: "c5 d4, [f4,a4]", T: "[c4,e4,g4]",
})).s("gm_synth_strings_1").gain(0.33).pan(0.4)

// chords · piano
const piano = note(`<
  ~@8 A B C B C D E F G H I J I K@3 L@2 C B C M N O P H I J I K@3 Q@2 R@3 S T@2 U S T@2 V W X@2 Y@5 Z J AA J AB AC AB AC
  AB AC AB AC AD ~@3
>`.pickRestart({
  A: "~@15 [eb3,g3,bb3]", B: "[eb3,g3,bb3]@8 [c3,eb3,g3]@7 [bb2,d3,f3]", C: "[bb2,d3,f3]@15 [eb3,g3,bb3]",
  D: "[eb3,g3,bb3]@15 [c3,eb3,g3]", E: "[c3,eb3,g3]@15 [g2,bb2,d3]", F: "[g2,bb2,d3]@15 [ab2,c3,eb3]",
  G: "[ab2,c3,eb3] [bb2,d3,f3]", H: "[f3,a3,c4] [g3,c4,e4]", I: "[f3,a3,d4] [g3,c4,e4]", J: "[f3,bb3,d4]",
  K: "[~@2 [f3,bb3,d4], [f3,a3,c4] [g3,c4,e4] [f3,a3,d4] [g3,c4,e4] ~@2, ~ c6 a5 f5 g5 c6 g5 e5 a5 d6 a5 f5 g5 c6 g5 e5 ~@8, ~@3 c5@2 c5@2 c5@2 c5@2 c5@2 c5@2 c5@2 d5@2 d5@2 d5@2 d5@2 c5@2 c5@2 c5@2 c5@2 ~@15]/3", // Bb F C Dm C
  L: "[~@15 c5@2 ~@14 [bb2,d3,f3], [f3,a3,d4] [g3,c4,e4] ~@2, a6 f6 d6 a5 c6 g5 e5 g5 ~@8, ~ d5@2 d5@2 d5@2 d5@2 c5@2 c5@2 c5@2 ~@17]/2", // Bb Dm C
  M: "bb5 eb5 eb6 eb5 bb5 eb5 g5 eb5 bb5 eb5 g5 eb5 bb4 eb5 g5 [c3,eb3,g3,eb5], [eb3,g3,bb3]", // Cm Eb
  N: "g5 c5 c6 c5 g5 c5 eb5 c5 g4 c5 eb5 c5 g5 c5 c6 [g2,bb2,d3,c5], [c3,eb3,g3]", // Gm Cm
  O: "g5 bb4 bb5 bb4 g5 bb4 d5 bb4 g4 bb4 d5 bb4 g5 bb4 bb5 [ab2,c3,eb3,bb4], [g2,bb2,d3]", // Ab Gm
  P: "eb5 ab4 ab5 ab4 eb5 ab4 c5 ab4 f5 bb4 bb5 bb4 f5 bb4 d5 bb4, [ab2,c3,eb3] [bb2,d3,f3]", // Ab Bb
  Q: "[~@2 [f3,bb3,d4] [g3,c4,e4], [f3,a3,d4] [g3,c4,e4] ~@2, a6 f6 d6 a5 c6 g5 e5 g5 ~@8, ~ d5@2 d5@2 d5@2 d5@2 c5@2 c5@2 c5@2 c5@2 ~@15]/2", // Bb C Dm C
  R: "[[a3,c4,f4]@8 [f3,bb3,d4]@16 [f3,a3,d4]@16 bb5 eb5 eb6 eb5 bb5 eb5 g5 eb5, ~@5 [g3,bb3,eb4]]/3", // F Bb Dm Eb
  S: "bb5 d5 d6 d5 bb5 d5 g5 d5 g5 c5 c6 c5 g5 c5 eb5 c5, [g3,bb3,d4] [g3,c4,eb4]", // Gm Cm
  T: "[f5 bb4 bb5 bb4 f5 bb4 d5 bb4 eb5 ab4 ab5 ab4 eb5 ab4 c5 ab4 ~ ab4 c5 ab4 eb5 ab4 ab5 ab4 bb5 eb5 eb6 eb5 bb5 eb5 g5 eb5, [f3,bb3,d4] [ab3,c4]@2 [g3,bb3,eb4], ~ eb4 eb4 ~]/2", // Bb Ab Eb
  U: "f5 bb4 bb5 bb4 f5 bb4 d5 bb4 bb5 eb5 eb6 eb5 bb5 eb5 g5 eb5, [f3,bb3,d4] [g3,bb3,eb4]", // Bb Eb
  V: "f5 bb4 bb5 bb4 f5 bb4 d5 bb4 [f3,a3,c4]@8, [f3,bb3,d4] ~", W: "[g3,c4,e4] [f3,a3,d4]",
  X: "[[g3,c4,e4] [f3,bb3,d4]@2 [f3,a3,d4]]/2", // C Bb Dm
  Y: "[[g3,c4,e4] ~@4 [f3,bb3,d4]@2 ~@2 [f3,bb3,d4], ~ [f3,a3,c4] [g3,c4,e4] [f3,a3,d4] [g3,c4,e4] ~@2 [f3,a3,d4] [g3,c4,e4] ~, ~@5 c6 a5 f5 g5 c6 g5 e5 a5 d6 a5 f5 g5 c6 g5 e5 ~@8 a6 f6 d6 a5 c6 g5 e5 g5 ~@4, ~@11 c5@2 c5@2 c5@2 c5@2 c5@2 c5@2 c5@2 d5@2 d5@2 d5@2 d5@2 c5@2 c5@2 c5@2 c5@2 ~@16 d5@2 d5@2 d5@2 d5@2 c5@2 c5@2 c5@2 c5@2 ~@7]/5", // C Bb F C Dm C Dm C
  Z: "[g3,c4,e4] [a3,c4,f4]", AA: "[f3,a3,d4]@3 [g3,c4,e4]", AB: "f5 c5 a5 c5 c6 c5 a5 c5 f5 d5 a5 d5 f5 d5 a4 d5",
  AC: "g5 c5 c6 c5 g5 c5 e5 c5 g4 c5 e5 c5 g5 c5 c6 c5", AD: "f5 c5 ~@14",
})).s("gm_piano").gain(0.52).pan(0.7)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@73
  [~@2 a5 c5 c6 c5 a5 c5 f5 d5 a5 d5 f5 d5 a4 d5]
  [g5 c5 c6 c5 g5 c5 e5 c5 g4 c5 e5 c5 g5 c5 c6 c5]
  [f5 c5 a5 c5 c6 c5 a5 c5 f5 d5 a5 d5 f5 d5 a4 d5]
  [g5 c5 c6 c5 g5 c5 e5 c5 g4 c5 e5 c5 g5 c5 ~@2]
>`).s("gm_piano").gain(0.15).pan(0.7)

// bass · fretless bass · "bass"
const bass = note(`<
  ~@9 A B A B C D E F G H I H J H I K ~ B A B C D E F G H I H J H I K L M@2 N O P@2 Q O R@2 S T U@2 V T U@2 W X I Y I Z
  D Z D Z D Z AA AB ~@3
>`.pickRestart({
  A: "eb2@7 eb2 ~@2 c2@6", B: "bb1@7 bb1 bb1@2 bb1@6", C: "eb2@7 eb2@3 eb2@6", D: "c2@7 c2 c2@2 c2@6",
  E: "g1@7 g1@3 g1@6", F: "ab1@7 ab1 bb1@2 bb1@6", G: "f2@7 f2 c2@2 c2@6", H: "d2@7 d2 c2@2 c2@6",
  I: "bb1@7 bb1@3 bb1@6", J: "f1@7 f1 c2@2 c2@6", K: "d2@7 d2 c2@5 c2 c2@2", L: "bb1@7 bb1 c2@2 c2@6",
  M: "[f2@7 f2 bb1@7 bb1@3 bb1@6 d2@7 d2]/2", N: "d2@2 d2@6 eb2@7 eb2", O: "d2@2 d2@6 c2@7 c2",
  P: "[bb1@2 bb1@6 ab1@7 ab1@3 ab1@6 eb2@7 eb2]/2", Q: "bb1@2 bb1@6 eb2@7 eb2",
  R: "[bb1@2 bb1@6 ab1@7 ab1@3 ab1@6 eb2@8]/2", S: "bb1@8 f2@7 f2", T: "c2@2 c2@6 d2@7 d2",
  U: "[c2@2 c2@6 bb1@7 bb1@3 bb1@6 d2@7 d2]/2", V: "c2@2 c2@6 f1@7 f1", W: "c2@5 c2 c2@2 bb1@7 bb1",
  X: "c2@2 c2@6 f2@7 f2", Y: "d2@7 d2 d2@2 d2@2 c2@4", Z: "f2@7 f2 d2@2 d2@6", AA: "c2@7 ~ c2@2 c2@6", AB: "f2@7 ~@9",
})).s("gm_fretless_bass").gain(0.42)

// bass · fretless bass · "bass" · soft notes
const bass_soft = note(`<
  ~@72
  [~@7 c2 ~@8]
  [~@7 f2 d2@2 d2@6]
  [c2@7 c2 c2@2 c2@6]
  [f2@7 f2 d2@2 d2@6]
  [c2@7 ~ c2@2 c2@6]
>`).s("gm_fretless_bass").gain(0.13)

// chords · acoustic guitar nylon · "acoustic guitar"
const acoustic_guitar_nylon = note("<~@17 A B C D E F G F ~@8 A B C D E F G F H I@8 J@5 K@6 L M N M ~@12>".pickRestart({
  A: "[c4,f4,a4]@4 [c4,f4,a4]@3 [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@2", // F C
  B: "[d4,f4,a4]@4 [d4,f4,a4]@3 [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@2", // Dm C
  C: "[bb3,d4,f4]@4 [bb3,d4,f4]@3 [bb3,d4,f4]!2 [bb3,d4,f4]@3 [bb3,d4,f4]@2 [bb3,d4,f4]@2", // Bb
  D: "[d4,f4,a4]@4 [d4,f4,a4]@2 [d4,f4,a4] [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]!2", // Dm C
  E: "[c4,f4,a4]@4 [c4,f4,a4]@2 [f4,a4] [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@2", // F C
  F: "[d4,f4,a4]@4 [d4,f4,a4]@2 [d4,f4,a4] [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@2", // Dm C
  G: "[bb3,d4,f4]@4 [bb3,d4,f4]@2 [d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4] [d4,f4]@2 [d4,f4]@2 [bb3,d4,f4]@2, ~@5 bb3@2 ~", // Bb Dm Bb Dm Bb
  H: "[bb3,d4,f4]@4 [bb3,d4,f4]@3 [bb3,d4,f4]!2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]!2", // Bb C
  I: "[[c4,f4,a4]@4 [c4,f4,a4]@2 [c4,f4,a4]!2 [bb3,d4,f4]@4 [bb3,d4,f4]@2 [bb3,d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]@2 [d4,f4,a4]@4 [d4,f4,a4]@3 [d4,f4,a4]@2 [d4,f4,a4] [d4,f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@2 [g3,bb3,eb4]@4 [g3,bb3,eb4]@2 [g3,bb3,eb4] [g3,bb3,d4]@2 [g3,bb3,d4] [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,c4,eb4]@4 [g3,c4,eb4]@2 [g3,c4,eb4] [f3,bb3,d4]@2 [f3,bb3,d4] [f3,bb3,d4]@2 [f3,bb3,d4]@2 [f3,bb3,d4]@2 [ab3,c4,eb4]@4 [ab3,c4,eb4]@2 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [g3,bb3,eb4]@4 [g3,bb3,eb4]@2 [g3,bb3,eb4] [f3,bb3,d4]@2 [f3,bb3,d4] [f3,bb3,d4]@2 [f3,bb3,d4]@2 [f3,bb3,d4]!2 [g3,bb3,eb4]@2 [g3,bb3,eb4]@2 [g3,bb3,eb4]@2 [g3,bb3,eb4] [g3,bb3,d4]@2 [g3,bb3,d4] [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]!2 [g3,c4,eb4]@4 [g3,c4,eb4]@2 [g3,c4,eb4] [f3,bb3,d4]]/8", // F Bb Dm Eb Gm Cm Bb Ab …
  J: "[~ [f3,bb3,d4] [f3,bb3,d4]@2 [f3,bb3,d4]@2 [f3,bb3,d4]!2 [ab3,c4,eb4]@4 [ab3,c4,eb4]@2 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]!2 [g3,bb3,eb4]@4 [g3,bb3,eb4]@2 [g3,bb3,eb4] [f3,bb3,d4]@2 [f3,bb3,d4] [bb3,d4]@2 [bb3,d4]@2 [f3,bb3,d4]!2 [c4,f4,a4]@4 [c4,f4,a4]@3 [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@2 [d4,f4,a4]@4 [d4,f4,a4]@3 [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@2 [bb3,d4,f4]@4 [bb3,d4,f4]@3 [bb3,d4,f4], ~@17 f3@2 ~@21]/5", // Bb Ab Eb Bb F C Dm C …
  K: "[[bb3,d4,f4] [bb3,d4,f4]@3 [bb3,d4,f4]@2 [bb3,d4,f4]@2 [d4,f4,a4]@4 [d4,f4,a4]@2 [d4,f4,a4] [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]!2 [c4,f4,a4]@4 [c4,f4,a4]@2 [f4,a4] [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@2 [d4,f4,a4]@4 [d4,f4,a4]@2 [d4,f4,a4] [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@2 [bb3,d4,f4]@4 [bb3,d4,f4]@2 [d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4] [d4,f4]@2 [d4,f4]@2 [bb3,d4,f4]@2 [d4,f4,a4]@4 [d4,f4,a4]@2 [d4,f4,a4] [c4,e4,g4]@2 [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@2 [bb3,d4,f4]@4 [bb3,d4,f4]@3 [bb3,d4,f4], ~@33 bb3@2 ~@13]/6", // Bb Dm C F C Dm C Bb …
  L: "[bb3,d4,f4] [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]!2 [c4,f4,a4]@4 [c4,f4,a4]@2 [c4,f4,a4]!2", // Bb C F
  M: "[bb3,d4,f4]@4 [bb3,d4,f4]@2 [bb3,d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]@2", // Bb
  N: "[d4,f4,a4]@4 [d4,f4,a4]@3 [d4,f4,a4]!3 [d4,f4,a4]@2 [c4,e4,g4]@2 [c4,e4,g4]!2", // Dm C
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0.3)

// other · distortion guitar · "distortion lower"
const distortion_guitar = note("<~@17 A B C B D B C E ~@8 A B C B D B C E ~@11 F G H@2 I G H@2 J ~@16>".pickRestart({
  A: "[f3,f4]@7 [f3,f4] [c3,c4]@2 [c3,c4]@6", B: "[d3,d4]@7 [d3,d4] [c3,c4]@2 [c3,c4]@6",
  C: "[bb2,bb3]@7 [bb2,bb3]@3 [bb2,bb3]@6", D: "[f2,f3]@7 [f2,f3] [c3,c4]@2 [c3,c4]@6",
  E: "[d3,d4]@7 [d3,d4] [c3,c4]@5 [c3,c4] [c3,c4]@2", F: "~@8 [f3,f4]@7 [f3,f4]",
  G: "[c3,c4]@2 [c3,c4]@6 [d3,d4]@7 [d3,d4]", // C D
  H: "[[c3,c4]@2 [c3,c4]@6 [bb2,bb3]@7 [bb2,bb3]@3 [bb2,bb3]@6 [d3,d4]@7 [d3,d4]]/2", // C Bb D
  I: "[c3,c4]@2 [c3,c4]@6 [f2,f3]@7 [f2,f3]", J: "[c3,c4]@5 [c3,c4] [c3,c4]@2 ~@8",
})).s("gm_distortion_guitar").gain(0.29).pan(0.7)

// other · tubular bells · "chimes"
const tubular_bells = note("<~@44 A B C@2 D B C@2 E F G@2 H F G@2 I ~@16>".pickRestart({
  A: "~ [bb4,eb5]", B: "d5 c5", C: "[bb4@4 ab4@5 ~@3 [bb4,eb5]@4]/2", D: "bb4@3 ~ [bb4,eb5]@4", E: "bb4@7 ~ f4@8",
  F: "e4 d4", G: "[c4@4 bb3@7 ~ d4@4]/2", H: "c4!2 g4 e4 f4@4", I: "c4@2 c4@2 e4@2 g4 ~@9",
})).s("gm_tubular_bells").gain(0.52).pan(1)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@72
  [~@7 x ~@8]
  [~@7 x ~@2 x ~@5]
  [x ~@6 x!2 ~ x ~@5]
  [x ~@6 x ~@2 x ~@5]
  [x ~@3 x!2 ~@2]
>`).gain(0.16)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@12 A ~@7 B ~@47 A ~@3 C D@4>".pickRestart({
  A: "~@3 x", B: "~@10 x!2 ~@2 x ~", C: "~@12 x!2 ~@2", D: "~ x ~ x",
})).gain(0.27)

// drums · clap
const clap = s("cp").struct("<~@9 [~ x ~ x]!16 ~ [~ x ~ x]!46 [~ x ~@2]!2 ~@3>").gain(0.44)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@72 [~@3 x]!2 [~ x ~ x]!3>").gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@16 A ~@7 B ~@7 C ~@7 D ~@3 E ~@7 F ~@7 F ~@3 A ~@12>".pickRestart({
  A: "~@15 x", B: "~@3 x", C: "~@13 x!2 ~", D: "~@12 x!2 ~@2", E: "~@7 x ~@8", F: "~@4 x!2 ~@10",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct("<~@9 [x!8]!16 [~@7 x] [x!8]!50 [x!6 ~@2]>").gain(0.27)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A ~@7 B ~@7 C ~@7 D ~@3 E ~@7 F ~@7 F ~@3 A ~@12>".pickRestart({
  A: "~@7 x", B: "~@11 x ~@4", C: "~@3 x", D: "~@10 x!2 ~@4", E: "~@3 x ~@4", F: "~@2 x!2 ~@12",
})).gain(0.49)

// drums · crash
const crash = s("cr").struct("<~@9 A ~@7 A ~@15 A ~@7 A ~@2 B ~@7 B ~@7 B ~@4 A ~@3 A ~@3 A ~@3>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.27)

// drums · tambourine
const tambourine = s("tb").struct("<~@17 [x!8]!8 ~@8 [x!8]!8 ~@36>").gain(0.44)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@44 [~@4 x!4] [x!8]!15 [x!4 ~@4] ~@4 [x!8]!8 x ~@3>").gain(1.89)

// drums · jingle bells · soft notes
const jingle_bells_soft = s("sleighbells:4").struct("<~@73 [~ x!7] [x!8]!2 [x!7 ~]>").gain(0.71)

stack(
  synth_strings_1, piano, piano_soft, bass, bass_soft, acoustic_guitar_nylon, distortion_guitar, tubular_bells, kick,
  kick_soft, snare, snare_soft, clap, clap_soft, low_tom, hihat, mid_tom, crash, tambourine, jingle_bells,
  jingle_bells_soft
)

More by Roxette