Strudelify

Flames of Love

Fancy

KeyE minorTempo120 bpm
0:00/0:00
// Flames of Love — Fancy
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 8 "DISTORTION" Syn Bass 3 -> synth bass 1
// note: "DISTORTION" named as a guitar, played on distortion guitar (the other patch table's reading)
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@13 A B C D E F G H I J K L M N O P Q L R S T U V W X Y Z AA AB AC AD L AE AF AG U AH R AI K Z AJ AK AC AL Q AM AN F
  AO AP D V AQ AR M AS AT AU C L AV AW Z Y AX AY AZ BA Q BB BC BD BE C AS AT F BF H BG BH BI AP V AN BJ F BK AS BL AZ Z
  BA AV BM X BN BO R BP BQ Q C BR BP BS BT@2 ~@7
>`.pickRestart({
  A: "g2 ~ g3@2 g2 ~ g3 ~ g2@2 g3 ~ g2 ~ g3@2", B: "f#2 ~ f#3 ~ f#2 ~ f#3@2 f#2@2 f#3 ~ f#2 ~ f#3 ~",
  C: "e2 ~ e3@2 e2 ~ e3@2 e2 ~ e3@2 e2 ~ e3 ~", D: "e2 ~ e3 ~ e2 ~ e3@2 e2 ~ e3 ~ e2 ~ e3@2",
  E: "a2 ~ a3 ~ a2 ~ a3 ~ a2 ~ a3@2 a2 ~ a3 ~", F: "d2 ~ d3@2 d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3@2",
  G: "g2 ~ g3@2 g2 ~ g3@2 g2 ~ g3@2 g2 ~ g3 ~", H: "c2 ~ c3@2 c2 ~ c3@2 c2 ~ c3@2 c2 ~ c3 ~",
  I: "a2 ~ a3 ~ a2 ~ a3@2 a2 ~ a3 ~ a2 ~ a3@2", J: "b2 ~ b3@2 b2 ~ b3@2 b2 ~ b3@2 b2 ~ b3@2",
  K: "e2 ~ e3@2 e2 ~ e3 ~ e2 ~ e3 ~ e2 ~ e3@2", L: "d2 ~ d3@2 d2 ~ d3@2 d2 ~ d3@2 d2 ~ d3 ~",
  M: "g2 ~ g3@2 g2 ~ g3@2 g2 ~ g3@2 g2 ~ g3@2", N: "f#2 ~ f#3@2 f#2 ~ f#3@2 f#2 ~ f#3@2 f#2 ~ f#3@2",
  O: "e2 ~ e3@2 e2 ~ e3 ~ e2 ~ e3@2 e2 ~ e3@2", P: "e2 ~ e3@2 e2 ~ e3@2 e2 ~ e3 ~ e2 ~ e3@2",
  Q: "a2 ~ a3@2 a2 ~ a3@2 a2 ~ a3@2 a2 ~ a3 ~", R: "g2 ~ g3 ~ g2 ~ g3@2 g2 ~ g3@2 g2 ~ g3@2",
  S: "c2 ~ c3@2 c2 ~ c3 ~ c2 ~ c3@2 c2 ~ c3@2", T: "a2 ~ a3@2 a2 ~ a3@2 a2 ~ a3 ~ a2 ~ a3 ~",
  U: "b2 ~ b3@2 b2 ~ b3@2 b2 ~ b3 ~ b2 ~ b3 ~", V: "e2 ~ e3@2 e2 ~ e3@2 e2 ~ e3@2 e2 ~ e3@2",
  W: "d2 ~ d3 ~ d2@2 d3 ~ d2 ~ d3@2 d2 ~ d3@2", X: "e2 ~ e3@2 e2 ~ e3 ~ e2 ~ e3 ~ e2 ~ e3 ~",
  Y: "g2 ~ g3@2 g2 ~ g3@2 d2 ~ d3@2 d2 ~ d3 ~", Z: "e2 ~ e3@2 e2 ~ e3@2 e2 ~ e3 ~ e2 ~ e3 ~",
  AA: "g2 ~ g3 ~ g2@2 g3@2 d2 ~ d3 ~ d2 ~ d3@2", AB: "c2 ~ c3 ~ c2 ~ c3 ~ c2 ~ c3@2 c2 ~ c3@2",
  AC: "g2 ~ g3@2 g2 ~ g3 ~ g2 ~ g3 ~ g2 ~ g3@2", AD: "b2 ~ b3 ~ b2 ~ b3@2 b2@2 b3 ~ b2 ~ b3 ~",
  AE: "a2 ~ a3 ~ a2 ~ a3@2 a2 ~ a3@2 a2 ~ a3@2", AF: "e2 ~ e3 ~ e2@2 e3 ~ e2 ~ e3@2 e2 ~ e3@2",
  AG: "g2 ~ g3@2 g2 ~ g3@2 a2 ~ a3 ~ a2 ~ a3@2", AH: "e2 ~ e3@2 e2 ~ e3@2 d2 ~ d3@2 d2@2 d3 ~",
  AI: "f#2 ~ f#3 ~ f#2 ~ f#3 ~ f#2 ~ f#3@2 f#2 ~ f#3@2", AJ: "a2 ~ a3 ~ a2 ~ a3@2 a2 ~ a3@2 a2 ~ a3 ~",
  AK: "d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3@2 d2 ~ d3@2", AL: "c2 ~ c3@2 c2 ~ c3@2 c2@2 c3 ~ c2 ~ c3 ~",
  AM: "b2 ~ b3 ~ b2 ~ b3@2 b2 ~ b3@2 b2 ~ b3@2", AN: "e2 ~ e3 ~ e2 ~ e3 ~ e2 ~ e3@2 e2 ~ e3@2",
  AO: "g2 ~ g3@2 g2 ~ g3 ~ g2 ~ g3 ~ g2 ~ g3 ~", AP: "f#2 ~ f#3@2 f#2 ~ f#3@2 f#2 ~ f#3 ~ f#2 ~ f#3 ~",
  AQ: "a2 ~ a3@2 a2 ~ a3 ~ a2 ~ a3 ~ a2 ~ a3@2", AR: "d2 ~ d3@2 d2 ~ d3@2 d2 ~ d3@2 d2 ~ d3@2",
  AS: "c2 ~ c3 ~ c2 ~ c3@2 c2 ~ c3@2 c2 ~ c3@2", AT: "a2 ~ a3@2 a2 ~ a3 ~ a2 ~ a3@2 a2 ~ a3@2",
  AU: "b2 ~ b3@2 b2 ~ b3@2 b2 ~ b3 ~ b2 ~ b3@2", AV: "e2 ~ e3 ~ e2 ~ e3@2 e2 ~ e3 ~ e2 ~ e3 ~",
  AW: "g2 ~ g3@2 g2 ~ g3 ~ d2 ~ d3@2 d2 ~ d3@2", AX: "c2 ~ c3@2 c2 ~ c3@2 c2 ~ c3@2 c2 ~ c3@2",
  AY: "g2 ~ g3@2 g2@2 g3@2 g2 ~ g3@2 g2 ~ g3@2", AZ: "b2 ~ b3 ~ b2 ~ b3 ~ b2 ~ b3 ~ b2 ~ b3@2",
  BA: "d2 ~ d3@2 d2 ~ d3@2 d2 ~ d3 ~ d2 ~ d3 ~", BB: "e2 ~ e3 ~ e2 ~ e3@2 e2 ~ e3@2 e2 ~ e3@2",
  BC: "g2 ~ g3 ~ g2 ~ g3 ~ a2 ~ a3@2 a2 ~ a3@2", BD: "b2 ~ b3@2 b2 ~ b3 ~ b2 ~ b3 ~ b2 ~ b3@2",
  BE: "e2 ~ e3@2 e2 ~ e3 ~ d2 ~ d3 ~ d2 ~ d3 ~", BF: "e2 ~ e3@2 e2 ~ e3@2 e2 ~ e3@2 e2@2 e3 ~",
  BG: "d2 ~ d3 ~ d2 ~ d3@2 d2 ~ d3@2 d2 ~ d3@2", BH: "d2 ~ d3@2 d2 ~ d3 ~ d2 ~ d3@2 d2 ~ d3@2",
  BI: "g2 ~ g3@2 g2 ~ g3@2 g2 ~ g3 ~ g2 ~ g3@2", BJ: "a2 ~ a3 ~ a2 ~ a3 ~ a2 ~ a3@2 a2 ~ a3@2",
  BK: "g2 ~ g3@2 g2 ~ g3@2 g2 ~ g3 ~ g2 ~ g3 ~", BL: "a2 ~ a3@2 a2@2 a3@2 a2 ~ a3@2 a2 ~ a3@2",
  BM: "g2 ~ g3@2 g2 ~ g3 ~ d2 ~ d3 ~ d2 ~ d3@2", BN: "g2 ~ g3@2 g2 ~ g3@2 d2 ~ d3 ~ d2 ~ d3 ~",
  BO: "c2 ~ c3@2 c2 ~ c3@2 c2 ~ c3 ~ c2 ~ c3 ~", BP: "b2 ~ b3 ~ b2 ~ b3 ~ b2 ~ b3@2 b2 ~ b3@2",
  BQ: "d2 ~ d3@2 d2 ~ d3 ~ d2 ~ d3 ~ d2 ~ d3 ~", BR: "g2 ~ g3 ~ g2 ~ g3@2 a2 ~ a3@2 a2 ~ a3@2",
  BS: "e2 ~ e3@2 e2 ~ e3 ~ d2 ~ d3 ~ d2 ~ d3@2", BT: "[e2@29 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · synth strings 1 · "SYN STRING"
const synth_strings_1 = note(`<
  A@6 B@3 C D@2 E@3 F@7 G@2 H I@2 J@7 K L H M@4 N@7 O P@3 F@7 G@2 H I@2 J@7 K L H M@4 N@7 Q@2 R@4 S@6 F@7 G@2 H M@4 N@7
  T@2 U@2 ~@7
>`.pickRestart({
  A: "[[g3,g4,g5] [f#3,f#4,a4,f#5] [e3,g4,g5]@2 [a4,c5,a5] [d3,d4,f#4,d5], b4@2 a3, d4@15 ~ e4@23 ~@9, ~@64 a2@13 ~@19]/6", // G F#m Em Am D
  B: "[[g4,b4,g5]@4 [c4,c5]@3 [b3,b4] [a3,a4]@4, g3@30 ~@2 a2@13 ~@3, ~@8 e4@15 ~, ~@16 c3@17 ~@15]/3", // G C B A
  C: "[b2,f#3,b3,f#4,b4], d#4@7 ~", D: "[e3,e4,g4]/2",
  E: "[~@6 [d5,d6]@2 [b5,b6]@4 [a5,a6]@2 ~@2 [g3,g4,b4]@16 ~@6 [d5,d6]@2 [b5,b6]@4 [a5,a6] ~ [a5,a6]@2, ~@7 [b5,b6]@11 ~@6, ~@8 d4@15 ~, ~@2 [f#3,f#4,a4]]/3", // D B A G D B A B …
  F: "[~@2 [b5,b6]@2 [g5,g6]@15 ~@3 [g5,g6]@2 [b5,b6]@4 [d6,d7]@3 ~ [d6,d7]@4 [c6,c7] ~ [c6,c7]@4 [b5,b6]@4 ~@8 [f#5,f#6]@2 [a5,a6]@4 [c6,c7]@3 ~ [c6,c7]@4 [b5,b6] ~ [b5,b6]@4 [a5,a6]@4 ~@10 [e5,e6]@4 [f#5,f#6]@2 ~@2 a2@12 [a5,a6]@2 [f#5,f#6]@2, e4@46 [a5,a6]@7 ~@11 b4@16 [c4,e4]@30 ~@2, [e3,g4,b4]@2 a4@2 g4@2 ~, ~@16 [a3,c5]@8 d4@15 [g5,g6] c3@7 ~ [a3,a4]@8, ~@24 [d3,f#4]@8 g3@15 [g5,g6]@7 ~@2]/7", // B G B D C B F# A …
  G: "[~@3 [b4,b5] [g5,g6]@2 [f#5,f#6] ~ [e3,e4,g4]@8, [b2,f#3,d#4,f#4]@16 b3@13 ~@3, b3@13 ~ [e5,e6]@16 ~@2]/2", // B G F# Em B E
  H: "[d3,a3,d4,f#4]@15 ~", I: "[[g3,g4,b4] [f#3,f#4,a4], d4@15 ~]/2",
  J: "[[e3,g4,b4]@16 [a3,c5]@8 [d3,f#4]@8 b4@8 c3@7 ~ [a3,a4]@8, e4@23 ~ d4@15 ~ [c4,e4]@15 ~, ~@2 a4@2 g4@2 ~, ~@64 g3@30 ~@2 a2@13 ~@3]/7", // Em Am D A C
  K: "[b2,f#3,d#4,f#4], b3@13 ~@3", L: "[e3,e4,g4], b3@13 ~@3",
  M: "[[e3,e4]@2 g3 [d3,f#4,a4], [g4,b4]@3 ~, ~@8 d4@7 ~]/2", // E D G
  N: "[[c3,c5]@16 g3@14 ~@2 b3@16 d3@13 ~@3 [a2,c4]@14 ~@2 [e3,b3]@16 [g2,g3,b3]@8 [a3,e4,a4]@8, g4@16 f#4@16 e4@15 ~@9, e4@7 ~ d4@23 ~@17 d4@3 ~@5, ~@2 b4@4 ~@4 g4@3 ~, ~@32 b2@13 ~@3 [a3,a4]@32 ~@24 [a2,c#4]@6 ~@2]/7", // C Am E5 G A5 A
  O: "[b2,b3,f#4,b4], d#4@7 ~", // B5
  P: "[~@6 [d5,d6]@2 [d3,b5,b6]@4 [a5,a6]@2 ~@2 [g3,g4,b4]@16 ~@6 [d5,d6]@2 [b5,b6]@4 [a5,a6] ~ [a5,a6]@2, [e3,e4,g4]@4 [a3,d4,f#4]@3 [b5,b6]@11 ~@6, ~@8 d4@15 ~, ~@2 [f#3,f#4,a4]]/3", // D G A G D B A Em …
  Q: "[[b2,f#4,b4]@16 [e3,e4,g4]@8 [a3,d4,f#4]@7 ~, b3@11 ~ d3@2 ~@2, d#4@7 ~@9]/2", // B5 Em D
  R: "[e3@16 [c3,g3]@13 ~@3 a2@13 ~@3 [d3,f#4]@16, e4@24 d4@7 ~, g4@31 ~ [a3,a4]@32, b3@7 ~ c4@15 ~@9]/4", // C5 D A
  S: "[e3@16 [c3,c4]@14 ~@24 [d5,d6]@2 [b5,b6]@4 [a5,a6]@2 ~@2 [g3,g4,b4]@16 ~@6 [d5,d6]@2 [b5,b6]@4 [a5,a6] ~ [a5,a6]@2, g4@48 f#4@15 ~ d4@30 ~@2, e4@16 ~@15 [b5,b6]@11 ~@6, b3@7 ~ g3@8 [d3,a3,d4,a4]@16 ~@8 [f#3,f#4,a4]@8]/6", // C D B A G D B A …
  T: "[[b2,f#4,b4]@8 [e3,e4,g4]@4 [a3,d4,f#4]@3 ~, b3@11 ~ d3@2 ~@2, d#4@7 ~@9]/2", U: "[e2,e3,g3,b3,e4]/2",
})).s("gm_synth_strings_1").gain(0.25)

// chords · harpsichord · "HARPSICHRD"
const harpsichord = note(`<
  ~@13 A B C@2 D B A E D F C B A B C@2 D B A E D F C B G H G H I J K L M N O P Q A B C@2 D B A E D F C R A B C@2 D B A E
  D F C B G H G H I J K L M N O P Q C E D B C E S B T U G@2 M L J V W P X@2 G H G H I J K L M N O P Y ~@9
>`.pickRestart({
  A: "~@2 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~", // G
  B: "~@2 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~", // D
  C: "~@2 [b4,e5,g5] ~@3 [b4,e5,g5] ~@3 [b4,e5,g5] ~@3 [b4,e5,g5] ~", // Em
  D: "~@2 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~", // Am
  E: "~@2 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~", // C
  F: "~@2 [b4,d#5,f#5] ~@3 [b4,d#5,f#5] ~@3 [b4,d#5,f#5] ~@3 [b4,d#5,f#5] ~", // B
  G: "~@2 [b4,e5,g5,b5] ~@2 a4 [e5,g5,b5] ~ b4 ~ [e5,g5,b5] a4 ~@2 [b4,e5,g5,b5] ~", // Em
  H: "~@2 [b4,d5,g5,b5] ~@2 a4 [d5,g5,b5] ~ b4 ~ [d5,f#5,a5] a4 ~@2 [b4,d5,f#5,a5] ~", // G D Bm7
  I: "~@2 [c5,e5,g5,c6] ~@2 g4 [e5,g5,c6] ~ c5 ~ [e5,g5,c6] g4 ~@2 [c5,e5,g5,c6] ~", // C
  J: "~@2 [b4,d5,g5,b5] ~@2 g4 [d5,g5,b5] ~ b4 ~ [d5,g5,b5] g4 ~@2 [b4,d5,g5,b5] ~", // G
  K: "~@2 [b4,d5,f#5,b5] ~@2 f#4 [d5,f#5,b5] ~ b4 ~ [d5,f#5,b5] f#4 ~@2 [b4,d5,f#5,b5] ~", // Bm
  L: "~@2 [a4,d5,f#5,a5] ~@2 d4 [d5,f#5,a5] ~ a4 ~ [d5,f#5,a5] d4 ~@2 [a4,d5,f#5,a5] ~", // D
  M: "~@2 [c5,e5,a5,c6] ~@2 a4 [e5,a5,c6] ~ c5 ~ [e5,a5,c6] a4 ~@2 [c5,e5,a5,c6] ~", // Am
  N: "~@2 [b4,e5,g5,b5] ~@2 g4 [e5,g5,b5] ~ b4 ~ [e5,g5,b5] g4 ~@2 [b4,e5,g5,b5] ~", // Em
  O: "~@2 [b4,d5,g5,b5] ~@2 g4 [d5,g5,b5] ~ b4 ~ [e5,a5,c#6] g4 ~@2 [b4,e5,a5,c#6] ~", // G A
  P: "~@2 [b4,d#5,f#5,b5] ~@2 f#4 [d#5,f#5,b5] ~ b4 ~ [d#5,f#5,b5] f#4 ~@2 [b4,d#5,f#5,b5] ~", // B
  Q: "~@2 [b4,e5,g5,b5] ~@2 a4 [e5,g5,b5] ~ b4 ~ [d5,f#5,a5] ~@3 [d5,f#5,a5] ~", // Em D
  R: "a5@2 [a4,d5,f#5] ~ d6@2 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~, ~ b5 ~ a5@2 ~@3", // D
  S: "~@2 [a4,d5] ~@3 [a4,d5] ~@3 [a4,d5] ~@3 [a4,d5] ~", // D5
  T: "~@2 [b4,d5,g5,b5] ~@2 a4 [d5,g5,b5] ~ b4 ~ [d5,g5,b5] a4 ~@2 [b4,d5,g5,b5] ~", // G
  U: "~@2 [b4,d5,f#5,a5] ~@2 a4 [d5,f#5,a5] ~ b4 ~ [d5,f#5,a5] a4 ~@2 [b4,d5,f#5,a5] ~", // Bm7 D Bm7
  V: "~@2 [g4,c5,e5,g5] ~@2 c4 [c5,e5,g5] ~ g4 ~ [c5,e5,g5] c4 ~@2 [g4,c5,e5,g5] ~", // C
  W: "~@2 [a4,c5,e5,a5] ~@2 e4 [c5,e5,a5] ~ a4 ~ [c5,e5,a5] e4 ~@2 [a4,c5,e5,a5] ~", // Am
  X: "[~@2 [b4,e5,g5,b5] ~@2 e4 [e5,g5,b5] ~ e5@2 [e5,b5] e4 b5@2 [b4,e5,g5,b5] ~@17, ~@8 b4 ~ g5@2 ~@2 d5@8 ~@10]/2", // Em E5 Em
  Y: "~@2 [b4,e5,g5,b5] ~@2 a4 [e5,g5,b5] ~ b4 ~ [d5,f#5,a5] b4 ~ b4 [g4,d5,f#5,a5] ~", // Em D
})).s("gm_harpsichord").gain(0.2)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@12 A@5 B@2 C@5 ~@13 D ~ D ~@9 A@5 B@2 C@5 ~@13 D ~ D ~@17 A@5 B@2 C@5 ~ D ~ D ~@19
>`.pickRestart({
  A: "[~@6 [d4,d5]@2 [b4,b5]@4 [a4,a5]@2 [b4,b5]@22 ~@2 [d4,d5]@2 [b4,b5]@4 [a4,a5] ~@5 [b4,b5]@2 [g4,g5]@15 ~@3 [g4,g5]@2 [b4,b5]@4 [d5,d6]@3 ~, ~@23 [a4,a5]@3 ~@14]/5", // D B A B D B A B …
  B: "[[d5,d6]@4 [c5,c6] ~ [c5,c6]@4 [b4,b5]@4 [a4,a5]@7 ~ [f#4,f#5]@2 [a4,a5]@4 [c5,c6]@3 ~]/2", // D C B A F# A C
  C: "[[c5,c6]@4 [b4,b5] ~ [b4,b5]@4 [a4,a5]@4 [g4,g5]@10 [e4,e5]@4 [f#4,f#5]@2 [g4,g5]@14 [a4,a5]@2 [f#4,f#5]@7 ~ [b3,b4]@2 [g4,g5]@4 [f#4,f#5]@2 [e4,e5]@16 ~@2]/5", // C B A G E F# G A …
  D: "~@8 b4@2 ~ a4@2 ~ b4@2",
})).s("gm_string_ensemble_1").gain(0.35)

// other · celesta
const celesta = note(`<
  ~@12 A@5 B@2 C@5 ~@13 D ~ D ~@9 A@5 B@2 C@5 ~@13 D ~ D ~@17 A@5 B@2 C@5 ~ D ~ D ~@19
>`.pickRestart({
  A: "[~@6 [d5,d6]@2 [b5,b6]@4 [a5,a6]@2 [b5,b6]@22 ~@2 [d5,d6]@2 [b5,b6]@4 [a5,a6] ~@5 [b5,b6]@2 [g5,g6]@15 ~@3 [g5,g6]@2 [b5,b6]@4 [d6,d7]@3 ~, ~@23 [a5,a6]@3 ~@14]/5", // D B A B D B A B …
  B: "[[d6,d7]@4 [c6,c7] ~ [c6,c7]@4 [b5,b6]@4 [a5,a6]@7 ~ [f#5,f#6]@2 [a5,a6]@4 [c6,c7]@3 ~]/2", // D C B A F# A C
  C: "[[c6,c7]@4 [b5,b6] ~ [b5,b6]@4 [a5,a6]@4 [g5,g6]@10 [e5,e6]@4 [f#5,f#6]@2 [g5,g6]@14 [a5,a6]@2 [f#5,f#6]@7 ~ [b4,b5]@2 [g5,g6]@4 [f#5,f#6]@2 [e5,e6]@16 ~@2]/5", // C B A G E F# G A …
  D: "~@8 b5@2 ~ a5@2 ~ b5@2",
})).s("gm_celesta").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@13 [x!2]!11 [x ~ x!2] [x!2]!61 [x!4] [x!2]!33 x ~@8>").gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@13 A@11 B A@11 C A@12 D A@11 B A@11 C A@12 E A@7 B A@11 B A@12 C ~@9>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!3", C: "~@4 x ~@5 x ~ x ~ x!2", D: "~@2 x!2 ~ x!2 ~", E: "~ x ~@2 x ~ x ~",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct("<~@35 [~@2 x ~ x ~ x ~ x ~ x!2 ~ x!2 ~] ~@36 [~@2 x ~ x ~ x ~ x ~ x!2 ~ x!2 ~] ~@56>")
  .gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@13 A@24 B@25 A@12 B@13 A@8 B@25 C ~@8>".pickRestart({
  A: "x!8", B: "x!16", C: "x",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct(`<
  ~@13 A ~@11 A ~@11 A ~@12 A ~@11 A ~@11 A ~@12 A ~@3 A ~@3 A ~@11 A ~@12 A ~@8
>`.pickRestart({
  A: "x",
})).gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@13 A@12 B C B C B C B C B C B C A@25 B C B C B C B C B C B C A@13 B C B C B C B C A@11 C A@13 D ~@8
>`.pickRestart({
  A: "x!16", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", D: "x",
})).gain(0.75)

stack(bass, synth_strings_1, harpsichord, string_ensemble_1, celesta, kick, snare, clap, hihat, crash, cabasa)