Strudelify
The Spanish Night Is Over cover art

The Spanish Night Is Over

Engelbert Humperdinck

KeyB♭ majorTempo121 bpm
0:00/0:00
// The Spanish Night Is Over — Humperdinck Engelbert
// 121 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(121/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 · vibraphone
const vibraphone = note(`<
  ~@3 A@2 B@2 ~@9 C@2 D@2 E@3 ~@3 F@2 ~@2 G H ~@3 I@2 ~@2 J@2 ~@18 K@2 ~@2 L@2 ~@3 M@2 ~@3 N O@3 ~ P@4 ~@3 M@2 ~@2 Q@2
  ~@2 R S T@4
>`.pickRestart({
  A: "[~ [c5,ab5] ~@2 [d5,bb5]@2 [ab4,f5]@2, ~ [c5,ab5] ~@2, ~@3 [bb4,g5]@2 ~@3]/2", // Fm Gm Db Fm Eb
  B: "[~@2 [g4,eb5] ~, ~ [c5,ab5]@2 [ab4,f5]@2 ~@3, ~ [bb4,g5] ~@2]/2", // Cm Fm Db Eb
  C: "[~@9 eb6@4 ~@3, ~@5 eb5@4 ~@7, ~@3 g5@2 ~@3, ~@7 bb5@4 ~@5]/2",
  D: "[~@5 eb6@2 ~, ~@5 f5@4 c6@4 ~@3, ~@7 ab5@4 ~@5]/2",
  E: "[~@3 eb6@2 ~@2 d6@2 ~@3, ~@3 eb5@4 ~@5 f5@4 ~@8, ~@4 ab5@4 ~@5 bb5@4 ~@7, ~@5 c6@4 ~@15]/3",
  F: "[~@5 eb6 ~ d6 ~ c6 ~ bb5 bb5@4, ~@3 eb6@2 c6@2 ~, ~@2 d6 ~]/2", G: "~@7 [g5,bb5], ~ [ab5,c6]",
  H: "~ [f5,ab5] ~ [eb5,g5] [eb5,g5]@4, bb5 ~, g5@3 ~@5, ~ [f5,ab5]@2 ~", // Fm Eb Fm
  I: "[~ eb6 ~ d6 ~ c6 ~ bb5 bb5@4 ~@4, ~ eb6@2 c6@2 ~@3, ~ d6 ~@2]/2",
  J: "[~ eb6 ~ d6 ~ c6 ~ bb5@4 ~@5, ~ eb6@2 c6@2 ~@3, ~ d6 ~@2]/2",
  K: "[~@5 f6 ~ e6 ~ d6 ~ c6 c6@4, ~@3 f6@2 d6@2 ~, ~@2 e6 ~]/2",
  L: "[~@8 d6 bb5!2 d6 ~@2 [a5,c6] c6 ~@4 [g5,bb5] ~@3 [f5,a5]@8, ~@9 d6@2 bb5@8 ~@2 [g5,bb5]@8 ~@3, ~@3 d6@2 ~@3, ~@15 a5@2 a5@7 ~@8, ~@2 c6 ~]/2", // Am Gm F Gm
  M: "[~ f6 ~ e6 ~ d6 ~ c6 c6@4 ~@4, ~ f6@2 d6@2 ~@3, ~ e6 ~@2]/2", N: "~ [bb5,d6]!3 [bb5,d6]@4",
  O: "[~@2 c6@2 ~@3 [g5,bb5]@4 ~@2 [c6,e6] ~@6 [a5,c6]@4, ~@2 a5@4 ~@9 [d6,f6]@4 [bb5,d6]@4 ~, ~@2 [c6,e6]@2 ~@3 [c6,e6] [c6,e6]@2 ~@2]/3", // Gm C Am Dm Bb C
  P: "[~@4 e5@3 ~@5 e5@3 g5@3 [g5,bb5]@2 ~@2 a5 [a5,c6]@4 ~@5, f5@3 [bb5,d6]@4 ~@25, a5 a5@2 ~@2 [f5,d6]@2 ~@3 [g5,bb5]@2 ~@4, ~ g5@4 ~@2 [e5,g5]@4 ~@4 e5@4 ~@3 f5@4 ~@6, ~ bb5 c6@2 c6@4 ~@4 c6@4 ~@16]/4", // Gm Am Bb Dm Gm Em
  Q: "[~ f6 ~ e6 ~ d6 ~@3 f6@4 ~@3, ~ f6@2 d6@2 ~@3, ~ e6 ~@2, ~@7 c6@4 ~@5]/2", R: "[d6,f6] [c6,e6]",
  S: "[bb5,d6] [c6,e6]", // Bb C
  T: "[~ f6 ~ e6 ~ d6 ~@3 f6 ~ e6 ~ d6 ~@3 f6 ~ e6 ~@3 f6@4 ~@5, ~ f6@2 d6@2 ~ e6@2 ~ f6@2 c6@2 ~@3, ~@4 e6@4 ~@2 f6@4 ~ c6@4 ~@2 d6@4 ~@7, ~@7 c6@4 ~@3 d6@4 ~@2 e6@4 ~@8]/4",
})).s("gm_vibraphone").gain(0.4)

// bass · electric bass finger
const bass = note(`<
  ~@8 A B C@2 D E F B F@2 G H I E A J K L M N O P M Q ~ R S T U V W B X Y Z AA AB AC AA Y AD@2 AE AF AG C AA Y AH AI AJ
  AK AL AM AN AO AP ~ AQ AR AS AT AU AV AW AX AI AN AK AL AM AJ AY AP ~ AZ BA AS BB AF AV AT BC BD@2 BE@2 BF@2 BG@2
>`.pickRestart({
  A: "eb1@5 ~ g1@6 bb1@4", B: "eb1@4 ~@2 g1@6 bb1@3 ~", C: "bb1@5 ~ d2@6 f2@3 ~", D: "bb1@4 ~@2 d2@6 f2@3 ~",
  E: "bb1@2 ~ d2@3 f2 ~", F: "eb1@2 ~ g1@3 bb1@2", G: "f1@2 ~ ab1@3 c2@2", H: "f1@4 ~@2 ab1@6 c2@3 ~",
  I: "ab1@4 ~@2 c2@6 eb2@3 ~", J: "eb1@3 ~@13", K: "~@8 bb1@5 ~ d2@2", L: "~ d2 f2@2 bb1@2 ~ bb1",
  M: "d2 ~ d2@2 f2@2 ~@2 eb1@5 ~ g1@2", N: "~ g1 bb1@2 eb1@2 ~ eb1", O: "g1 ~ g1@2 bb1@2 ~@2 bb1@5 ~ d2@2",
  P: "~@2 d2@2 f2@3 ~ bb1@4 ~@2 bb1@2", Q: "~ g1 bb1@2 eb1 ~@3", R: "bb1@2 ~ d2 ~ d2 f2@2",
  S: "bb1@4 ~@2 bb1@2 d2 ~ d2@2 f2@2 ~@2", T: "eb1@5 ~ g1@3 ~ g1@2 bb1@4", U: "eb1@4 ~@2 eb1@2 g1@2 g1@2 bb1@3 ~",
  V: "f1@5 ~ ab1@6 c2@3 ~", W: "bb1@4 ~@2 bb1@2 d2 ~ d2@2 f2 ~@3", X: "c2@2 ~ c2 e2!2 g2 ~", Y: "f1@5 ~ a1@6 c2@4",
  Z: "f1@2 ~ a1@3 c2 ~", AA: "c2@4 ~@2 e2@6 g2@3 ~", AB: "c2@5 ~ e2@6 g2@4", AC: "c2@2 ~ e2@3 g2@2",
  AD: "f1@2 ~ a1@3 c2@2", AE: "f1@5 ~ a1@6 c2@3 ~", AF: "g1@5 ~ bb1@6 d2@4", AG: "g1@4 ~@2 bb1@6 d2@3 ~",
  AH: "f1@3 ~@13", AI: "~@4 c2@2 ~ e2", AJ: "~ e2 g2@2 c2@2 ~ c2", AK: "e2 ~ e2@2 g2@3 ~ f1@5 ~ a1@2",
  AL: "~ a1 c2@2 f1@2 ~ f1", AM: "a1 ~ a1@2 c2@2 ~@2 c2@5 ~ e2@2", AN: "~@2 e2@2 g2@4 c2@5 ~ c2@2",
  AO: "e2 ~ e2@2 g2@4 f1@5 ~ a1@2", AP: "~@2 a1@2 c2@4 f1@3 ~@5", AQ: "c2@5 ~ e2@3 ~ e2@2 g2@4",
  AR: "c2@4 ~@2 c2@2 e2 ~ e2@2 g2@4", AS: "f1@5 ~ a1@2 ~@2 a1@2 c2@4", AT: "f1@4 ~@2 f1@2 a1 ~ a1@2 c2@4",
  AU: "g1@3 bb1@3 d2@2", AV: "c2@3 ~@3 c2@2 e2 ~ e2@2 g2@2 ~@2", AW: "f1@5 ~ f1@2 a1@4 c2@4", AX: "f1 ~@7",
  AY: "e2 ~ e2@2 g2@2 ~@2 f1@5 ~ a1@2", AZ: "c2@4 ~@2 e2@3 ~ e2@2 g2@4", BA: "c2@4 ~@2 c2@2 e2 ~ e2@2 g2@2 ~@2",
  BB: "f1@5 ~ f1@2 a1 ~ a1@2 c2@3 ~", BC: "f1@3 a1 ~ a1 c2@2", BD: "g1@4 ~@2 g1@2 bb1 ~ bb1@2 d2@4",
  BE: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", BF: "f1@2 ~ a1 ~ a1 c2@2",
  BG: "[f1@5 ~ a1@2 ~@2 a1@2 c2@2 f1@16 ~@2]/2",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A@3 B@2 C@2 D@2 E@8 F@6 G@8 ~ H@8 I@6 J@4 K@6 L@8 ~ M@4 N O@2 ~ P@8 ~ Q@4 R S@3 T@3 U@5
>`.pickRestart({
  A: "[~@36 [c4,ab4]@8 [bb3,g4]@3 ~, eb2]/3", // Fm Eb
  B: "[[d4,bb4]@7 ~ [ab3,f4]@11 ~ [c4,ab4]@4 [bb3,g4]@3 ~ [ab3,f4]@2 ~@2, bb2]/2", C: "[[eb3,eb4]@13 ~@3, g3@3 ~]/2",
  D: "[bb3,eb4,g4]/2", E: "[ab3@47 ~@17 eb4@64, [d4,f4]@32 g3@31 ~, ~@24 bb3@39 ~]/8",
  F: "[f4@32 eb4@16 f4@16 [g3,eb4]@17 ~@15, ab3@2 ~, c4@46 ~@2 bb3@33 ~@15]/6", // Cm
  G: "[~@8 d4@31 ~ [eb4,g4]@31 ~ d4@31 ~ [c4,eb4,ab4]@5 ~@2 eb4@11 ~@6, ~@8 bb3@94 ~@8 [bb3,g4]@11 ~@7, ~@8 ab4@29 ~@34 ab4@31 ~@26]/8", // Eb Ab Eb
  H: "[d4@31 ~ [eb4,g4]@31 ~ c4@15 ~@17 eb4@15 ~ e4@15 ~, bb3@62 ~ ab3@31 ~@2 g3@30 ~@2, ab4@29 ~@35 f4@31 ~@33, ~@80 bb3@31 c4@15 ~@2]/8", // Eb
  I: "[[a3,f4]@15 ~ e4@32, c4, ~@16 bb3@31 ~]/6", J: "[[a3,f4]@63 ~]/4",
  K: "[g3@31 ~ f3@15 ~ e4@14 ~@2 f4@17 ~@15, bb3@62 ~ a3@17 ~@16, d4@16 c4@11 ~@5]/6",
  L: "[~@4 [bb3,e4]@15 ~ f4@16 [bb3,e4]@15 ~ [bb3,d4]@3 [a3,c4]@7 ~@2, ~@4 c4@47 ~ f4@10 ~@2, ~@20 a3@15 ~@29]/8", // Bbdim Bb Am
  M: "[[bb3,e4]@32 [a3,f4]@31 ~, c4@31 ~]/4", N: "[g3,bb3]@7 ~, d4", O: "[[bb3,e4]@15 ~ [a3,f4]@16, c4]/2",
  P: "[~@8 [bb3,e4]@31 ~ f4@31 [bb3,e4]@30 ~@3 [bb3,d4]@6 [a3,c4]@11 ~@7, ~@8 c4@94 ~@2 f4@17 ~@7, ~@40 a3@29 ~@59]/8", // Bbdim Bb Am
  Q: "[[bb3,e4]@31 [a3,f4]@31 ~@2, c4@31 ~]/4", R: "~ [g3,bb3,d4]@15", S: "[[bb3,e4]@15 ~ [a3,f4]@30 ~@2, c4@23 ~]/3",
  T: "[~ g3@31 f4@7 ~ [bb3,c4,e4]@7 ~, ~ d4@39 ~@8, ~ bb3@37 ~@10]/3", // C7
  U: "[[g3,bb3]@6 ~@2 [bb3,c4,e4]@7 ~ [a3,f4]@45 ~ [a3,f4]@8 ~@10, d4@8 ~@7 c4@28 ~@37]/5", // Gm C7 Dm
})).s("gm_string_ensemble_1").gain(0.23)

// other · electric guitar clean
const electric_guitar_clean = note("<~@41 A@2 B ~ C@2 D@2 E@2 F@2 ~@2 G@2 ~@42>".pickRestart({
  A: "[~@7 f4@6 ~@3, ~@4 f4@2 c4@3 ~@7, ~@10 a3@7 ~@15]/2", B: "~@4 e4 bb3 c4 e4",
  C: "[~@14 e4@15 ~@3, ~@2 e4 c4 ~@4, ~@10 bb3@19 ~@3]/2", D: "[~@14 f4@11 ~@7, ~@2 f4 c4@2 ~@3, ~@10 a3@9 ~@13]/2",
  E: "[~@10 a3@2 c4@2 f4@13 ~@5, ~@2 f4 ~@5]/2", F: "[~@4 f4 bb3 d4 f4@7 ~@2]/2",
  G: "[~@2 f4 ~ f4@2 e4 ~ e4@2 d4 ~ d4@2 c4@5 ~@13]/2",
})).s("gm_electric_guitar_clean").gain(0.19)

// chords · marimba
const marimba = note(`<
  ~ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB Y AC AD ~ AE AF AG@2 AH AI AG AJ AK AL AM AN AO AP AQ AR
  AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH ~ BI@2 BJ@2 BK BI BJ BL BM BN BO BP BQ BR BS BT ~ BI@2 BU BV BK BI BW
  BX BY@2 BZ@2 CA CB CC ~
>`.pickRestart({
  A: "[g4,bb4,eb5]!2 [bb4,eb5] [g4,bb4,eb5]!4 g4 [g4,bb4,eb5]!2 [bb4,eb5] [g4,bb4,eb5]!2 g4 [g4,bb4,eb5]!2", // Eb Eb5 Eb Eb5 Eb
  B: "[g4,bb4,eb5] [bb4,eb5] [g4,bb4,eb5]!2 g4 [bb4,eb5] [g4,bb4,eb5] [g4,bb4] [g4,eb5] [bb4,eb5] [g4,bb4,eb5] [g4,bb4] [g4,eb5] [g4,bb4,eb5] [bb4,eb5] [g4,bb4,eb5]", // Eb Eb5 Eb Eb5 Eb Gm Cm Eb5 …
  C: "[g4,bb4] [g4,eb5] [g4,bb4,eb5] [bb4,eb5] [g4,bb4,eb5] g4 [g4,eb5] eb5 [g4,eb5]!2 g4 [g4,bb4,eb5] eb5 [g4,eb5]!2 g4", // Gm Cm Eb Eb5 Eb Cm Eb Cm
  D: "[ab4,d5]!2 d5 [ab4,d5] ab4 [ab4,d5] d5 [ab4,d5]!2 ab4 [ab4,d5]!2 [bb4,d5] [ab4,d5] bb4 [ab4,d5]", // Abdim Bb Abdim
  E: "[bb4,d5] [ab4,bb4,d5] [ab4,d5] bb4 [ab4,d5] [bb4,d5] [ab4,bb4,d5] [ab4,bb4] [ab4,bb4,d5]!2 d5 [ab4,bb4,d5] [ab4,bb4] [ab4,bb4,d5]!2 ~", // Bb Bb7 Abdim Bb Bb7 Absus2 Bb7 Absus2 …
  F: "~ eb5 [g4,bb4] eb5 [g4,bb4,eb5] [g4,bb4] [g4,eb5] [bb4,eb5] [g4,bb4] [g4,eb5] [bb4,eb5] [g4,bb4] [g4,bb4,eb5] eb5 [g4,bb4] [g4,bb4,eb5], g4 ~@7", // Gm Eb Gm Cm Eb5 Gm Cm Eb5 …
  G: "eb5 [g4,bb4,eb5] [g4,bb4] [g4,bb4,eb5]!2 eb5 [g4,bb4] [g4,bb4,eb5] [g4,eb5]@5 ~@3, ~@8 bb4@3 ~@5", // Eb Gm Eb Gm Eb Cm
  H: "bb4 ~@3 [eb5,g5] ~ bb4 ~ [eb5,g5] ~ [eb5,g5] ~@3 [g4,bb4,eb5] ~", // Eb
  I: "~@2 [eb5,g5] ~ [bb4,eb5,g5] ~ g4 ~ [bb4,eb5,g5] ~ [bb4,eb5,g5] ~@3 [bb4,eb5] ~", // Eb Eb5
  J: "~@4 [bb4,d5,f5] ~ ab4 ~ [bb4,d5,f5] ~ [bb4,d5,f5] ~@3 [ab4,bb4,d5] ~", // Bb Bb7
  K: "~@2 [d5,f5] ~ [d5,f5] ~ [ab4,bb4,d5] ~ [d5,f5] ~ [ab4,d5,f5] ~@3 [ab4,bb4,d5] ~", // Dm Bb7 Dm Ddim Bb7
  L: "[d5,f5] ~@3 [d5,f5] ~ [ab4,bb4,d5] ~ [d5,f5] ~ [d5,f5] ~ ab4 ~ [bb4,d5] ~", // Dm Bb7 Dm Bb
  M: "~@2 [d5,f5] ~@3 ab4 ~ [bb4,d5] ~ [d5,f5] ~ [bb4,d5] ~ ab4 ~", // Dm Bb Dm Bb
  N: "[g4,bb4,eb5] ~@3 [eb5,g5] ~ g4 ~ [bb4,eb5] ~ [eb5,g5] ~@3 g4 ~", // Eb Eb5 Eb
  O: "[bb4,eb5] ~@3 [eb5,g5] ~ [eb4,g4] ~ [bb4,eb5] ~ [eb5,g5] ~@3 [bb4,eb5] ~", // Eb5 Eb Eb5 Eb Eb5
  P: "[eb4,g4] ~@3 [eb5,g5] ~ [eb4,g4] ~ [bb4,eb5] ~ [eb5,g5] ~@3 [eb4,g4] ~", // Eb Eb5 Eb
  Q: "[bb4,eb5] ~ [eb5,g5] ~@3 [eb4,g4] ~ [bb4,eb5] ~ [eb5,g5] ~ [eb4,g4] ~ [bb4,eb5] ~", // Eb5 Eb Eb5 Eb Eb5
  R: "~@6 f4 ~ [ab4,c5] ~ [c5,f5] ~@3 f4 ~", S: "[ab4,c5] ~ [c5,f5] ~@3 ab4 ~ [c5,f5] ~ [f5,ab5] ~@3 [c5,f5] ~",
  T: "ab4 ~@3 [eb5,ab5] ~ ab4 ~ [c5,eb5] ~ [eb5,ab5] ~@3 [ab4,c5,eb5] ~", // Ab5 Cm Ab5 Ab
  U: "[ab4,bb4] ~@3 [d5,f5] ~ [ab4,bb4] ~ [f5,bb5] ~ [f5,ab5] ~@3 [ab4,bb4,d5,f5] ~", // Absus2 Dm Absus2 Bb5 Fm Bb7
  V: "g4 ~@3 [eb5,g5] ~ eb4 ~ [g4,bb4,eb5] ~ [eb5,g5] ~@3 [eb4,bb4,eb5] ~", W: "[g4,bb4,eb5]@5 ~@11",
  X: "~@10 [bb4,d5,ab5]!3 ~ [bb4,d5,ab5] ~", Y: "~@2 [bb4,d5,ab5] ~@3 [bb4,d5,ab5] ~@3 [bb4,d5,ab5]!3 ~ [bb4,d5,ab5] ~",
  Z: "~@2 [bb4,d5,ab5] ~ [bb4,d5,ab5]!3 ~@3 [bb4,eb5,g5]!3 ~ [bb4,eb5,g5] ~", // Bb7 Eb
  AA: "~@2 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,eb5,g5]!3 ~ [bb4,eb5,g5] ~", // Eb
  AB: "~@2 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,d5,ab5]!3 ~ [bb4,d5,ab5] ~", // Eb Bb7
  AC: "~@2 [bb4,d5,ab5] ~@3 [bb4,d5,ab5] ~@3 [c5,ab5]!2 ~@2 [bb4,eb5,g5] ~", // Bb7 Fm Eb
  AD: "~@2 [eb5,g5] ~ [eb5,g5] ~ [eb5,g5] ~ [eb5,g5] ~@7", // Eb
  AE: "~@2 [bb4,d5,ab5]!2 ~@2 [bb4,d5,ab5] ~@3 [bb4,d5,ab5] ~@3 [bb4,d5,ab5] ~", // Bb7
  AF: "~@2 [bb4,d5,ab5]!2 ~@2 [bb4,d5,ab5] ~@3 [bb4,d5,ab5] ~@3 [bb4,d5,ab5]!2", // Bb7
  AG: "~@2 [bb4,eb5,g5]!2 ~@2 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~@3 [bb4,eb5,g5] ~", // Eb
  AH: "~@2 [c5,f5,ab5]!2 ~@2 [c5,f5,ab5] ~@3 [c5,f5,ab5] ~@3 [c5,f5,ab5] ~", // Fm
  AI: "~@2 [d5,f5,bb5]!2 ~@2 [d5,f5,ab5] ~@3 [bb4,d5,f5] ~@3 [bb4,d5,f5] ~", // Bb Ddim Bb
  AJ: "~@2 [c5,e5,g5]!3 ~ [c5,e5,g5] ~@3 [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~", // C
  AK: "[a4,c5] ~ [c5,f5] ~@3 [f4,a4] ~ [a4,c5] ~@3 [c5,f5] ~ [a4,c5] ~", // Am F5 F Am F5 Am
  AL: "~@2 [a4,c5] ~ [c5,f5] ~ f4 ~ [a4,c5] ~@3 [c5,f5] ~ [f4,c5] ~", // Am F5 Am F5
  AM: "g4 ~ [bb4,e5] ~@3 [g4,bb4,c5] ~ [bb4,e5] ~@3 [e5,g5] ~ g4 ~", // Bbdim C7 Bbdim Em
  AN: "bb4 ~ [c5,e5] ~@3 g4 ~ bb4 ~ [c5,e5] ~ [e5,g5] ~ g4 ~", // C Em
  AO: "bb4 ~ [c5,e5] ~@3 g4 ~ [bb4,c5,e5] ~@3 [e5,g5] ~ g4 ~", // C C7 Em
  AP: "bb4 ~ [c5,e5] ~@3 bb4 ~ [c5,e5] ~@3 [e5,g5] ~ [g4,c5] ~", // C Em C5
  AQ: "f4 ~ [c5,f5] ~@3 [f4,a4,c5] ~ [c5,f5] ~@3 [a4,c5] ~ f4 ~", // F5 F F5 Am
  AR: "~@2 [c5,f5] ~@3 [f4,a4,c5] ~ [c5,f5] ~@3 [a4,c5] ~ f4 ~", // F5 F F5 Am
  AS: "f4 ~ [c5,f5] ~@3 c4 ~ [f4,a4,c5,f5] ~@3 [c5,f5] ~ f4 ~", // F5 F F5
  AT: "[a4,c5] ~ [c5,f5] ~@3 f4 ~ [a4,c5] ~@3 [c5,f5] ~ f4 ~", // Am F5 Am F5
  AU: "g4 ~ [bb4,d5] ~@3 d4 ~ [g4,d5,g5] ~@3 [bb4,d5,g5] ~ d4 ~", // Bb G5 Gm
  AV: "g4 ~ [bb4,d5] ~@3 d4 ~ [g4,d5,g5] ~@3 [bb4,d5] ~ g4 ~", AW: "f4 ~ [bb4,d5] ~@3 d4 ~ [d5,f5] ~@3 [bb4,d5] ~ f4 ~",
  AX: "g4 ~ [bb4,e5] ~@3 [e4,c5] ~ [g4,c5,e5] ~@3 [e5,g5] ~ g4 ~", // Bbdim C Em
  AY: "f4 ~ [c5,f5] ~@3 [f4,a4,c5] ~ [c5,f5] ~@3 [a4,c5] ~ c4 ~", AZ: "[f4,c5,f5] ~@15",
  BA: "~@10 [c5,e5,g5]!2 ~@2 [c5,e5] ~", BB: "~@2 [c5,e5] ~@3 [bb4,c5,e5] ~@3 [bb4,c5,e5]!2 ~@2 [bb4,c5,e5] ~",
  BC: "~@2 [bb4,c5,e5] ~@3 [bb4,c5,e5] ~@3 [a4,c5,f5]!2 ~@2 [a4,c5,f5] ~", // C7 F
  BD: "~@2 [c5,f5] ~@3 [c5,f5] ~@3 [a4,c5,f5]!2 ~@2 [a4,c5,f5] ~", // F5 F
  BE: "~@2 [a4,c5,f5] ~@3 [a4,c5,f5] ~@3 [bb4,c5,e5]!2 ~@2 [bb4,c5,e5] ~", // F C7
  BF: "~@2 [bb4,c5,e5] ~@3 [c5,e5] ~@3 [bb4,c5,e5]!2 ~@2 [bb4,c5,e5] ~", // C7 C C7
  BG: "~@2 [bb4,c5,e5] ~@3 [bb4,c5,e5] ~@3 [a4,c5,f5]!2 ~@2 [c5,f5] ~", BH: "~@2 [c5,f5] ~@3 [a4,c5] ~ [c5,f5] ~@7",
  BI: "~@2 [bb4,c5,e5]!2 ~@2 [bb4,c5,e5] ~@3 [bb4,c5,e5] ~@3 [bb4,c5,e5] ~", // C7
  BJ: "~@2 [a4,c5,f5]!2 ~@2 [a4,c5,f5] ~@3 [a4,c5,f5] ~@3 [a4,c5,f5] ~", // F
  BK: "~@2 [g4,bb4,d5]!2 ~@2 [g4,bb4,d5] ~@3 [g4,bb4,d5] ~@3 [g4,bb4,d5] ~", BL: "[a4,c5,f5] ~@15",
  BM: "~@10 [bb4,c5,e5]!2 ~@2 [bb4,c5,e5] ~", BN: "~@2 [bb4,c5,e5] ~@3 [bb4,c5,e5] ~@3 [bb4,c5,e5]!2 ~@2 [bb4,c5,e5] ~",
  BO: "~@2 [bb4,c5,e5] ~@3 [c5,e5] ~@3 [a4,c5,f5]!2 ~@2 [c5,f5] ~", // C7 C F F5
  BP: "[a4,c5] ~ [c5,f5] ~@3 [a4,c5] ~@3 [a4,c5]!2 ~@2 [a4,c5] ~", // Am F5 Am
  BQ: "~@2 [c5,f5] ~@3 c5 ~@3 [bb4,c5,e5] ~@3 [bb4,c5] ~", // F5 C7 Bbsus2
  BR: "~@2 [bb4,c5] ~@3 [c5,e5] ~ [bb4,c5] ~@2 [bb4,c5] ~@2 [bb4,c5] ~", // Bbsus2 C Bbsus2
  BS: "~@2 [bb4,c5] ~ [bb4,c5,e5] ~ [bb4,c5] ~@3 [bb4,d5] ~@3 [a4,c5] ~", // Bbsus2 C7 Bbsus2 Bb Am
  BT: "~@2 [c5,f5] ~ [a4,c5] ~ [c5,f5] ~ [c5,f5] ~@7", BU: "~@2 [c5,f5]!2 ~@2 [a4,c5] ~@3 [c5,f5] ~@3 [a4,c5,f5] ~",
  BV: "~@2 [c5,f5]!2 ~@2 [a4,c5] ~@3 [c5,f5] ~@3 [c5,f5] ~", // F5 Am F5
  BW: "~@2 [a4,c5,f5]!2 ~@2 [c5,f5] ~@3 [c5,f5] ~@3 [a4,c5,f5] ~", // F F5 F
  BX: "~@2 [c5,f5]!2 ~@2 [a4,c5,f5] ~@3 [a4,c5] ~@3 [a4,c5] ~", // F5 F Am
  BY: "~@2 [g4,bb4,d5]!2 ~@2 [bb4,d5,f5] ~@3 [g4,bb4,d5] ~@3 [g4,bb4,d5] ~", // Gm Bb Gm
  BZ: "~@2 [g4,bb4,d5]!2 ~@2 [g4,bb4,d5] ~@3 [bb4,c5,e5] ~@3 [bb4,c5,e5] ~", // Gm C7
  CA: "~@2 [a4,c5,f5]!2 ~@2 [c5,f5] ~@3 [a4,c5] ~@3 [f4,a4] ~", // F F5 Am F
  CB: "c5 ~ [c5,f5]!2 ~@2 [a4,c5] ~@3 [f4,a4] ~ c5 ~ a4 ~", // F5 Am F
  CC: "~@2 [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,d5] ~ [bb4,c5] ~ [a4,c5,f5] ~", // F Am D5 Bbsus2 F
})).s("gm_marimba").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@8 A@15 B@17 A@16 B@20 C B@20 D ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!4", C: "x!2 ~ x", D: "x ~ x ~ x ~ x!2",
})).gain(0.39)

// drums · rim
const rim = s("rim").struct("<~@8 [~ x ~ x]!7 [~@4 x ~@5 x ~@2 x ~ x] [~ x ~ x]!7 ~@76>").gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@24 A B@6 C ~ B@7 D B@7 D B@7 ~ A B@6 C ~ B@7 ~ A B@6 C ~ B@15 ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~@2 x ~@2 x!3",
})).gain(0.35)

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

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

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

// drums · high tom
const high_tom = s("ht").struct("<~@24 A ~@7 B ~@24 C ~@7 D ~@8 C ~@7 E ~@16>".pickRestart({
  A: "~@3 x ~@12", B: "~@11 x ~@4", C: "~ x ~ x ~@12", D: "~@9 x ~ x ~@4", E: "~@5 x ~@2",
})).gain(0.31)

// drums · crash
// … 22 more lines

More by Engelbert Humperdinck