Strudelify

Hasta Manana

ABBA

KeyF majorTempo168 bpm
0:00/0:00
// Hasta Manana — ABBA
// 168 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 130 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(168/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
const bass = note(`<
  A B C D E F G H I D J K I D F L M N E O M N P Q A B R S T@2 U V W@2 G X W@2 Y Q A B R S T Z U AA E AB E J A AC U Q A
  AD I D J K I D F L M N E O M N P Q A B R S T@2 U V W@2 G X W@2 Y Q A B R S T Z U AA E AB E J A AC U Q A AE AF AG J AH
  AI AJ AK AL AM@4 AF AN AO AE AF@2 AP AQ@2 ~
>`.pickRestart({
  A: "f3 c3", B: "f3@2 c3 bb2", C: "a2 e2", D: "a2@2 e2 a2", E: "bb2 f2", F: "bb2@2 f2 bb2", G: "c3 g2",
  H: "c2@4 d2 e2 g2@2", I: "f2 c3", J: "bb2 f3", K: "g3 c3 g2@2 c2@2 g2@2", L: "d3 d2", M: "g2 d2", N: "g2!2",
  O: "bb2@4 f2 bb2 a2@2", P: "c3!2", Q: "c3@2 d3 e3", R: "a2 e3", S: "a2!2", T: "d3 a2", U: "g3 d3",
  V: "g3@3 d3 g2@2 d3@2", W: "g2 d3", X: "c3@2 c3 g3", Y: "c3 g3", Z: "d3@3 a2 d3@2 gb3@2", AA: "g3@2 d3 g2",
  AB: "bb2@2 f2!2", AC: "d3 a2, gb3", AD: "f3 c3 d3 e3", AE: "db3!2 eb3 f3", AF: "gb3 db3", AG: "gb3@2 db3 b2",
  AH: "bb2!2", AI: "eb3 bb2", AJ: "eb3@3 bb2 eb3@2 g3@2", AK: "ab3 eb3", AL: "ab3@2 eb3 db3", AM: "b2 gb3",
  AN: "eb3 bb2, g3", AO: "ab2 eb3", AP: "gb3@2 db3 bb2", AQ: "gb2/2",
})).s("gm_electric_bass_finger").gain(0.35).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E F G H I J K L I M N O P Q R S T U V W X@2 Y Z AA AB AC@2 AD AE AF AG AH@2 V W X@2 AI AJ AK AL AM@2 AN AO AP
  AQ AR@2 AS@2 AT AU AV AW K AX AV AY N O P Q R S T U V W X@2 Y Z AA AB AC@2 AD AE AF AG AH@2 V W X@2 AI AJ AK AL AM@2
  AN AO AP AQ AR@2 AS@2 AT AZ BA@2 BB BC BD BE BF@2 BG BH BI BJ BK@2 BL@2 BM@2 BN BO@2 ~
>`.pickRestart({
  A: "[a3,c4,f4]@2 [a3,c4,f4]!2 [a3,c4,f4]@2 [a3,c4,f4]@2", // F
  B: "[a3,c4,f4]@2 [a3,c4,f4,a4] [a3,c4,f4]!2 [a3,c4,f4,a4] [a3,c4,f4]@2, ~@3 c5@2 ~@3", // F
  C: "[a3,c4,e4]@2 [a3,c4,e4]!2 [a3,c4,e4]@2 [a3,c4,e4]@2", // Am
  D: "[a3,c4,e4]@2 [a3,c4,e4,a4] [a3,c4,e4]!2 [a3,c4,e4,a4] [a3,c4,e4]@2, ~@3 c5@2 ~@3", // Am
  E: "[f3,bb3,d4]@2 [f3,bb3,d4]!2 [f3,bb3,d4]@2 [f3,bb3,d4]@2", // Bb
  F: "[f3,bb3,d4]@2 [f3,bb3,d4,f4] [f3,bb3,d4]!2 [f3,bb3,d4,bb4] [f3,bb3,d4]@2, ~@3 c5@2 ~@3", // Bb
  G: "[c4,e4,a4]@2 [c4,e4,a4]!2 [c4,e4,a4]@2 [c4,e4,a4]@2", H: "[c4,e4,g4]@2 [c4,e4,g4]!4 [c4,e4,g4]@2",
  I: "[f3,a3,c4]@3 ~@4 [f3,a3,c4], ~@3 [f3,a3,c4]@2 [f3,a3,c4]@2 ~, ~@2 g4 a4", // F
  J: "[e3,a3,c4]@3 ~@4 [e3,a3,c4], ~@3 [e3,a3,c4]@2 [e3,a3,c4]@2 ~, ~@2 f4 g4", // Am
  K: "[f3,bb3,d4]@3 [f3,bb3,d4]@2 [f3,bb3,d4]@2 [f3,bb3,d4]", L: "[e3,g3,c4]@3 [e3,g3,c4]@2 [e3,g3,c4]@2 [e3,g3,c4]",
  M: "[e3,a3,c4]@3 [e3,a3,c4]@2 ~@2 [e3,a3,c4], ~@5 [e3,a3,c4]@2 ~, ~@3 f4", // Am
  N: "[f3,bb3,d4]@3 d4!2 ~@2 [f3,bb3,d4], ~@3 [f3,bb3]@2 [f3,bb3,d4]@2 ~, ~@3 f4", // Bb Bb5 Bb
  O: "[gb3,a3,c4]@3 [gb3,a3,c4]@2 [gb3,a3,c4]@2 [gb3,a3,c4], [gb4,d5]@3 ~", // Gbdim D
  P: "bb4@2 ~@2 a4 [g3,bb3,d4]@2 [g3,bb3,d4], [g3,bb3,d4]@3 [g3,bb3,d4]@2 ~@3, ~@2 g4@2 ~ bb4@3", // Gm
  Q: "[g3,bb3,d4]@3 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4], g4", // Gm
  R: "~@4 g4 [f3,bb3,db4]@2 [f3,bb3,db4], [f3,bb3,db4]@3 [f3,bb3,db4]@2 ~@3, ~@2 f4@2 ~ a4@3", // Bbm
  S: "[f3,bb3,db4]@3 [f3,bb3,db4]@2 [f3,bb3,db4]@2 [f3,bb3,db4], f4", // Bbm
  T: "~@7 [g3,bb3,d4], [g3,bb3,d4]@3 [g3,bb3,d4]@2 [g3,bb3,d4]@2 ~, ~ g4 a4 bb4", // Gm
  U: "[f3,b3,d4,a4]@3 g4 ~ d4!2 [f3,b3,d4], ~@3 [f3,b3,d4]@2 [f3,b3]@2 ~, ~@2 f4 ~", // Bm7b5 Bdim Fdim
  V: "[f3,bb3,d4]@3 [f3,bb3,d4] [e3,g3,bb3]@3 [e3,g3,bb3], f4 [c4,e4]", // Bb Edim C
  W: "[f3,bb3,d4]@3 [f3,bb3,d4] [e3,g3,bb3]@3 [e3,g3,bb3], f4 [e4,g4]", // Bb Edim Em
  X: "[[f3,a3,c4]@3 c4!2 ~ f4 [f3,a3,c4] ~@3 c4!2 ~@2 [f3,a3,c4], a4@4 g4@2 ~ e4@3 d4@2 ~@2 d4@2, ~@3 [f3,a3]@2 [f3,a3,c4]@2 ~ [f3,a3,c4]@3 [f3,a3]@2 [f3,a3,c4]@2 ~]/2", // F
  Y: "[e3,a3,c4]@3 a3!3 a3@2, e4 ~, ~@3 [e3,c4]@2 [e3,c4]@3", // Am C
  Z: "[e3,a3,c4]@3 a3!2 c4!2 [e3,a3,c4], ~@3 [e3,c4]@2 [e3,a3]@2 ~", // Am C A5
  AA: "f3@2 f3 [f3,a3,d4]@2 f3!2 [f3,a3,d4], [a3,d4]@3 ~@2 [a3,d4]@2 ~", // Dm D5
  AB: "f3@2 f3 [f3,a3,d4] c4@2 c4@2, [a3,d4]@3 ~ [gb3,a3]@4", // Dm D5 Gbm
  AC: "[g3,bb3,d4]@3 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4]", // Gm
  AD: "[g3,bb3,d4]@3 ~ [c4,a4] [g3,bb3,d4]@2 [g3,bb3,d4], g4@4 ~ bb4@3, ~@3 [g3,bb3,d4]@2 ~@3", // Gm F Gm
  AE: "[bb3,c4,a4]@2 bb3 ~@2 d4!2 [g3,bb3,d4], [g3,d4]@3 [g3,bb3,d4]@2 [g3,bb3]@2 ~, ~ g4 f4 ~", // F Gm G5 Gm
  AF: "[f3,g3,bb3,c4]@3 [f3,g3,bb3,c4] [bb3,e4]@2 bb3 [e3,g3,bb3], f4@4 [e3,g3]@3 ~, ~@3 e4", // Fsus4 Bbdim Edim Em
  AG: "[e3,g3,bb3]@3 [e3,g3,bb3]@2 [e3,g3,bb3]@2 [e3,g3,bb3], e4 ~", // Edim
  AH: "[bb3@2 bb3 ~@2 d4 [d4,bb4] [g3,bb3,d4] bb3@2 bb3 ~@2 d4!2 [g3,bb3,d4], [g3,d4]@3 [g3,bb3,d4]@2 [g3,bb3]@2 ~ [g3,d4]@3 [g3,bb3,d4]@2 [g3,bb3]@2 ~, ~@2 g4@2 [c4,a4]@2 ~ [c4,a4]@3 g4@2 f4@2 ~@2]/2", // Gm G5 Gm G5 Gm F
  AI: "[e3,a3,c4]@3 a3!4 [e3,a3,c4], e4 ~, ~@3 [e3,c4]@2 [e3,c4]@2 ~", // Am C
  AJ: "[e3,a3,c4]@3 a3!2 [e3,a3,c4]@2 [e3,a3,c4], ~@3 [e3,c4]@2 ~@3", // Am C
  AK: "[gb3,a3,d4]@3 [gb3,a3,d4]@2 [gb3,a3,d4]@2 [gb3,a3,d4]", // D
  AL: "[gb3,a3,c4]@3 ~ [bb3,g4] [gb3,a3,c4]@2 [gb3,a3,c4], ~@3 [gb3,a3,c4]@2 a4@3", // Gbdim Eb Gbdim
  AM: "[[g3,bb3,d4]@3 [g3,bb3,d4]@2 [g3,bb3,d4]@2 [g3,bb3,d4] [g3,bb3,d4]@3 ~@2 g3!2 [g3,bb3,d4], bb4@10 ~ [g3,bb3,d4]@2 [bb3,d4]@2 ~, ~@6 a3 ~]/2", // Gm Bb
  AN: "[d4,bb4]!3 [f3,bb3,d4,bb4]@2 [f3,bb3,d4]@3, [f3,bb3]@3 ~@5", // Gm Bb Bb5
  AO: "[d4,bb4]!3 [f3,bb3,d4,e4,c5]@2 [f3,bb3,d4]@2 [f3,bb3,d4], [f3,bb3]@3 ~@2 bb4@3", // Gm Bb Bb5
  AP: "[db4,bb4]!3 [f3,bb3,db4,bb4]@2 [f3,bb3,db4]@2 [f3,bb3,db4,bb4], [f3,bb3]@3 ~@5", // Gb Bbm Bb5
  AQ: "[db4,bb4]!3 [f3,bb3,db4,f4]@2 [f3,bb3,db4]@2 [f3,bb3,db4], [f3,bb3]@3 ~@2 g4@3", // Gb Bbm Bb5
  AR: "[[f3,a3,c4]@3 c4!2 ~ f4 [f3,a3,c4] ~@4 db4 [gb3,a3,c4]@2 [gb3,a3,c4], a4@4 g4@2 ~ e4@3 d4@2 ~ d4@3, ~@3 [f3,a3]@2 [f3,a3,c4]@2 ~ [gb3,a3,c4]@3 [gb3,a3,c4]@2 ~@3]/2", // F Gbdim F Gbdim
  AS: "[[g3,bb3,d4]@3 ~@2 bb3 [bb3,g4] [g3,bb3,d4] bb3@2 bb3 [f3,g3,bb3,c4] [bb3,d4] bb3@2 [e3,g3,bb3], bb4@4 [c4,a4]@2 ~ f4@3 e4@2 ~ e4@3, ~@3 [g3,bb3,d4]@2 [g3,d4]@2 ~ [f3,g3,c4]@3 ~ [e3,g3]@3 ~]/2", // Gm Eb Gm Fsus4 Bb Edim F Gm …
  AT: "[f3,a3,c4]@3 ~@2 [f3,a3,c4]@2 [f3,a3,c4], f4, ~@3 [f3,a3,c4]@2 ~@3, ~ [a4,c5,f5]", // F
  AU: "[f3,a3,c4]@3 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4], [a4,c5,f5] ~", // F
  AV: "~@7 [f3,a3,c4], [f3,a3,c4]@3 [f3,a3,c4]@2 [f3,a3,c4]@2 ~, ~ f4 g4 a4", // F
  AW: "[e3,a3,c4]@3 ~@4 [e3,a3,c4], e4@2 f4 g4, ~@3 [e3,a3,c4]@2 [e3,a3,c4]@2 ~", // Am
  AX: "[e3,g3,c4]@3 [e3,g3,c4]@2 [e3,g3,c4]@2 [e3,g3,c4], e4", // C
  AY: "[e3,a3,c4]@3 [e3,a3,c4]@2 ~@2 [e3,a3,c4], e4@3 f4, ~@5 [e3,a3,c4]@2 ~", // Am
  AZ: "[f3,ab3,b3]@3 [f3,ab3,b3]@2 [f3,ab3,b3]@2 [f3,ab3,b3], [ab4,b4,f5]", // Fdim
  BA: "[[gb3,bb3,db4]@3 db4!2 ~ gb4 [gb3,bb3,db4] ~@3 db4!2 ~@2 [gb3,bb3,db4], bb4@4 ab4@2 ~ f4@3 eb4@2 ~@2 eb4@2, ~@3 [gb3,bb3]@2 [gb3,bb3,db4]@2 ~ [gb3,bb3,db4]@3 [gb3,bb3]@2 [gb3,bb3,db4]@2 ~]/2", // Gb
  BB: "[f3,bb3,db4]@3 bb3!4 [f3,bb3,db4], f4 ~, ~@3 [f3,db4]@2 [f3,db4]@2 ~", // Bbm Db
  BC: "[f3,bb3,db4]@3 bb3!2 [f3,bb3,db4]@2 [f3,bb3,db4], ~@3 [f3,db4]@2 ~@3", // Bbm Db
  BD: "[eb3,g3,bb3]@3 [eb3,g3,bb3]@2 [eb3,g3,bb3]@2 [eb3,g3,bb3], eb4", // Eb
  BE: "[g3,bb3,db4]@3 [g3,db4]!2 [g3,bb3,db4]@2 [g3,bb3,db4], ~@3 bb3@2 ~@3", // Gdim
  BF: "[db5 b4 bb4 [ab3,b3,eb4]@2 [ab3,b3,eb4]@2 [ab3,b3,eb4] [ab3,b3,eb4]@3 [ab3,b3,eb4]@2 [ab3,b3,eb4]@2 [ab3,b3,eb4], [ab3,b3,eb4]@3 b4@7 ~@6]/2", // Abm
  BG: "[eb4,b4]!3 [eb3,gb3,b3,eb4,b4]@2 [eb3,gb3,b3]@2 [eb3,gb3,b3], [eb3,gb3,b3]@3 ~@5", // Abm B
  BH: "[eb4,b4]!3 [eb3,gb3,b3,f4,db5]@2 [eb3,gb3,b3]@2 [eb3,gb3,b3], [eb3,gb3,b3]@3 ~@2 [eb4,b4]@3", // Abm B Abm
  BI: "[d4,b4]!3 [gb3,b3,d4,b4]@2 [gb3,b3,d4]@2 [gb3,b3,d4,b4], [gb3,b3]@3 ~@5", // G Bm B5
  BJ: "[d4,b4]!3 [gb3,b3,d4,gb4]@2 [gb3,b3,d4]@2 [gb3,b3,d4], [gb3,b3]@3 ~@2 ab4@3", // G Bm B5
  BK: "[[gb3,bb3,db4]@3 db4!2 ~ gb4 [gb3,bb3,db4] ~@4 d4 [g3,bb3,db4]@2 [g3,bb3,db4], bb4@4 ab4@2 ~ f4@3 eb4@2 ~ eb4@3, ~@3 [gb3,bb3]@2 [gb3,bb3,db4]@2 ~ [g3,bb3,db4]@3 [g3,bb3,db4]@2 ~@3]/2", // Gb Gdim Gb Gdim
  BL: "[[eb3,ab3,b3]@3 ~@2 b3 [b3,ab4] [eb3,b3] b3@2 ~ [f3,ab3,db4] gb4 ~@2 [f3,ab3,b3], [eb4,b4]@4 [db4,bb4]@2 ~ [ab3,gb4]@3 [b3,f4]@2 ~ ab4@3, ~@3 [eb3,ab3,b3]@2 [eb3,ab3]@2 ~ [f3,db4]@3 ~ [f3,ab3,b3]@3 ~]/2", // Abm E Abm Db Fdim Abm Gb Ab7 …
  BM: "[[gb3,bb3,db4] [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4] [gb3,bb3,db4]@3 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4], gb4]/2", // Gb
  BN: "[gb3,bb3,db4]@3 [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 [gb3,bb3,db4]", BO: "[gb3,bb3,db4]/2",
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.3)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  A B C D E F G H A C I C A C J K L@5 ~@6 M ~ N ~ O@2 ~@2 O@2 ~@4 P@2 ~@2 Q@2 R@2 ~@3 S C T C A ~ A C I C A C J K L@5
  ~@6 M ~ N ~ O@2 ~@2 O@2 ~@4 P@2 ~@2 Q@2 R@2 ~@3 S C T C U@2 ~@16 V@5 ~
>`.pickRestart({
  A: "f4", B: "f4@2 a4 c5@2 a4 f4@2", C: "e4", D: "e4@2 a4 c5@2 a4 e4@2", E: "d4@15 ~", F: "d4@2 f4 c5@2 bb4 d4@2",
  G: "a4@15 ~", H: "g4", I: "d4", J: "d4@2 d4 f4", K: "d5 a4@2 c5", L: "[bb4@10 bb4 a4@3 g4@12 bb4 a4@3 g4@10]/5",
  M: "c5", N: "d5", O: "[~@2 bb4 a4@3 g4@10]/2", P: "[~@2 c5@5 ~]/2", Q: "[d5@5 ~@3]/2",
  R: "[~@4 bb4@2 a4@6 g4@15 ~@5]/2", S: "a4", T: "bb4", U: "[~@2 a4 g4@3 f4@10]/2",
  V: "[~@2 bb4 ab4@3 gb4@4 bb4 ab4@3 gb4@4 bb4 ab4@3 gb4@18]/5",
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.3)

// chords · piano
const piano = note(`<
  ~@24 A B C@2 D E F G F H I J K F L M A B N O P Q R K S@2 T U V Q F I W B@2 C S X A Y Z AA K AB AC T F AD AE AF A B C@2
  D E F G F H I J K F L M A B N O P Q R K S@2 T U V Q F I W AG AH AI T U AJ AK AL AM AN AO AP AQ AR AS AT AU AV AR AW AX
  ~@2
>`.pickRestart({
  A: "[c4,f4,a4]", B: "[a3,c4,f4]", C: "[c4,e4,a4]", D: "[d4,f4,a4]@3 [a3,d4,f4]@5", E: "[a3,d4,f4] [gb3,a3,c4]",
  F: "[g3,bb3,d4]", G: "[bb3,d4,g4]", H: "[g3,bb3,d4]@3 [bb3,d4,g4]@5", I: "[c4,f4,g4,bb4] [g3,bb3,e4]",
  J: "[g3,bb3,e4]", K: "[d4,g4,bb4]", L: "[d4,f4,bb4] [e4,g4,bb4]", M: "[bb3,d4,f4] [g3,bb3,e4]",
  N: "[a3,c4,e4]@3 [a3,c4,e4]@5", O: "[c4,e4,a4]@3 [a3,c4,e4]@5", P: "[a3,d4,gb4]", Q: "[c4,gb4,a4]",
  R: "[bb3,d4,g4]@3 [d4,g4,bb4]@5", S: "[d4,f4,bb4]", T: "[db4,f4,bb4]", U: "[bb3,db4,f4]",
  V: "[c4,f4,a4]@3 [a3,c4,f4]@5", W: "[c4,f4,a4]@3 [c4,f4,a4]@5", X: "[c4,e4,g4]", Y: "[a3,c4,e4]",
  Z: "[d4,f4,bb4]@3 [d4,f4,bb4]@5", AA: "[a3,c4,gb4]", AB: "[d4,g4,bb4]@3 [bb3,d4,g4]@5",
  AC: "[bb3,db4,f4]@3 [db4,f4,bb4]@5", AD: "[d4,f4,b4]", AE: "[bb3,d4,f4] [e4,g4,bb4]", AF: "[bb3,d4,f4] [bb3,e4,g4]",
  AG: "[b3,f4,ab4]", AH: "[gb3,bb3,db4]@3 [bb3,db4,gb4]@5", AI: "[bb3,db4,gb4]@3 [gb3,bb3,db4]@5",
  AJ: "[bb3,eb4,g4]@3 [eb4,g4,bb4]@5", AK: "[db4,g4,bb4]@3 [db4,g4,bb4]@5", AL: "[b3,eb4,ab4]@3 [b3,eb4,ab4]@5",
  AM: "[ab3,b3,eb4]", AN: "[b3,eb4,gb4]", AO: "[b3,eb4,gb4]@3 [b3,eb4,gb4]@5", AP: "[d4,gb4,b4]", AQ: "[gb3,b3,d4]",
  AR: "[db4,gb4,bb4]@3 [gb3,bb3,db4]@5", AS: "[bb3,db4,g4]", AT: "[b3,eb4,ab4]@3 [eb4,ab4,b4]@5", AU: "[b3,f4,ab4]!2",
  AV: "[db4,gb4,bb4] [bb3,db4,gb4]@7", AW: "[db4,gb4,bb4]", AX: "[bb3,db4,gb4]",
})).s("gm_piano").gain(0.3).pan(0.3)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~@56 A@2 B C D C B C D E F@2 G@2 F@2 H I J@5 E K@2 L@2 H M@3 N O P@4 Q@2 R@6 S C T C G@2 L@2 U@2 V@2 W@6 K@2 X T Y@5 ~
>`.pickRestart({
  A: "c5/2", B: "f4", C: "e4", D: "d4", E: "d5", F: "g4/2", G: "f4/2", H: "f4 e4", I: "f4 g4", J: "c5/5", K: "bb5/2",
  L: "bb4/2", M: "[bb5 a5 g5@6]/3", N: "f5 e5", O: "f5 g5", P: "c5/4", Q: "d5/2", R: "bb5/6", S: "a4", T: "bb4",
  U: "db5/2", V: "eb5/2", W: "b4/2", X: "b4", Y: "db5/5",
})).s("gm_string_ensemble_2").gain(0.14).pan(0)

// drums · kick
const kick = s("bd").struct("<x!22 [x!2]!2 x!48 [x!2]!2 x!54 ~@2>").gain(0.23).pan(0.3)

// drums · snare
const snare = s("sd").struct("<[~ x]!22 [x!2]!2 [~ x]!48 [x!2]!2 [~ x]!53 x ~@2>").gain(0.19).pan(0.3)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x]!15 [~ x ~@2] [x!2 ~ x] [~ x ~ x]!110 ~@3>").gain(0.19).pan(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@15 [~@3 x] ~@39 [~ x] ~ [~@3 x] ~@72>").gain(0.23).pan(0.3)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@13 A ~@49 A ~@54 A ~@2>".pickRestart({
  A: "x",
})).gain(0.23).pan(0.3)

stack(bass, acoustic_guitar_steel, electric_guitar_clean, piano, string_ensemble_2, kick, snare, hihat, open_hat, crash)

More by ABBA