Strudelify

Don't Pay the Ferryman

Chris de Burgh

KeyD majorTempo120 bpm
0:00/0:00
// Don't Pay the Ferryman — Chris de Burgh
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 51, 4/4 at bar 51) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 52 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · "Ferryman"
const bass = note(`<
  ~ A B C D E F G H I@2 J K L M N O P Q R S T U V W N X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT
  AU AV AW
>`.pickRestart({
  A: "~@6 e1 g1", B: "a1@3 ~ a1 ~ a1 ~@3 a1 ~@3 a1 ~", C: "a1@2 ~@2 b1@3 ~ b1 ~ b1@2 ~@2 b1 ~",
  D: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", E: "b1 ~ b1 ~ b1 ~ b1 ~ f#1 ~ f#1 ~@3 f#1@2",
  F: "b1@3 ~ b1@2 f#1@2 b1@2 ~@4 f#1 ~", G: "b1@2 ~@2 b1 ~ b1@2 ~@2 b1@2 ~@2 b1@2",
  H: "d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~@3 d2 ~",
  I: "[d2@2 ~@2 d2 ~@2 d2 d2@2 f#2@2 f#1@2 g1@5 ~ g1@2 ~ g1 g1@2 g1@2 ~@2 g1 ~]/2",
  J: "g1@3 ~ g1@3 g2 f#2 ~ f#2@2 ~@2 f#1@2", K: "e2@3 ~ e2@2 ~ e2 d2 ~ d2@2 c#2@2 b1@2",
  L: "a1@3 ~ a1@2 ~ a1 a1@2 a1 ~@3 e1@2", M: "a1 ~ a1@2 ~@2 a1@2 ~@2 a1@2 ~@2 a1@2",
  N: "b1@2 ~@2 b1@2 ~@2 b1 ~ b1@2 ~@2 b1 ~", O: "d2@3 ~ d2@2 ~@2 d2 ~ d2 ~ d2 b1 a1@2",
  P: "d1@3 ~ d2@2 ~@2 d2 ~ d2@2 f#1@2 g1@2", Q: "~@2 g1 ~ g1@2 ~ d2 g2@2 d2@2 g1@3 ~",
  R: "g1@3 ~ g2@2 g1 ~ f#1@2 f#1@2 f#2@2 f#1 ~", S: "e1@3 ~ e2@2 e1@2 d2@2 d2@2 c#2@2 b1@2",
  T: "a1@3 ~ a1@2 ~@2 a1 ~ a1@3 ~ a1@2", U: "a2@2 e2 ~@3 a1@3 ~ a1@2 ~@2 a#1@2",
  V: "b1@2 ~@2 b1@2 ~@2 b1@2 b1@2 ~@2 b1 ~", W: "a1@3 ~@3 a1@2 ~@2 a1@3 ~ a1@2", X: "c#2@4 ~@2 c#2@3 ~ c#2@2 b1@2 a1@2",
  Y: "g1@3 ~ g1@3 ~@3 g1@2 g1@3 ~", Z: "f#1@3 ~ f#1@2 ~@4 f#1@2 ~@2 f#1 ~", AA: "g1@3 ~ g1@3 ~@3 g1@2 ~@2 g1 ~",
  AB: "a1@3 ~ a1@3 ~@3 a1@2 f#1 ~ f#1@2", AC: "g1@3 ~ g1@3 ~@3 g1@2 ~@2 d2@2", AD: "g2@2 ~@2 g2@3 ~@3 g2@2 d2 ~ g1@2",
  AE: "f#1@3 ~ f#1@3 ~ f#1@2 ~@2 f#1@2 ~ c#2", AF: "f#2 ~ f#2 ~ f#2@2 c#2@2 f#1 ~ f#1 ~ f#1 g#1 a#1@2",
  AG: "b1@3 ~ b1@2 ~ b1 a1@2 a1@2 ~@2 a1@2", AH: "b1@2 ~@2 b1@2 ~ f#2 b2 f#2 b1 ~ b1@2 a1 ~",
  AI: "b1@3 ~ b1 ~@2 b1 a1@2 a1@2 ~@2 a1@2", AJ: "g1@2 ~@2 g1@3 ~ a1 ~ a1 ~ a1@2 a1@2",
  AK: "b1@2 ~@2 b1@2 ~ b1 a1 ~ a1@3 ~ b1@2", AL: "~@2 b1 ~ b1@3 ~ b1 ~@2 b1 b2 f#2 b1 a1",
  AM: "g1@3 ~ g1@2 ~ g1 a1 ~ a1 ~ a1 e1 g1 a1", AN: "b1@3 ~ b1@2 ~ b1 a1@2 a1@2 ~@2 a1 ~",
  AO: "b1@3 ~ b1 ~@2 b1!2 ~ b1 ~@3 f#1 a1", AP: "b1@3 ~ b1@2 ~ b1 a1@2 a1@2 ~@2 g1@2",
  AQ: "~@2 g1@2 ~@2 a1@3 ~ a1@2 b1@2 c#2@2", AR: "b1@2 ~@2 b1@2 ~ b1 a1 ~ a1@2 ~@2 b1@2",
  AS: "~@2 b1 ~ b1@2 b1@2 ~@2 b1 ~ b1@2 a1@2", AT: "g1 ~ g1 ~ g1 ~ g1@2 a1@3 ~ a1 ~ a1@2",
  AU: "b1@2 ~@2 f#2@2 b1@2 a1 ~ a1 ~ a1 ~ a1 ~", AV: "a1 ~ a1@2 a1 ~ a1@2 a1 ~ a1 ~ a1 ~ a1 ~",
  AW: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ b1 ~ b1@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.3)

// chords · piano
const piano = note(`<
  ~@2 A B C D E F G H I J K L M F G H I J N L O P Q R S T U T U V W X Y Z AA Z AB Z AC AD Z AA Z AB Z AC AD AE@2 AF
>`.pickRestart({
  A: "a2@4 a3@3 e3", B: "a2@2 b2@4 f#3 b2", C: "a2@8 a3@3 e3@2 a2@3", D: "b2@4 f#2 f#3@2 f#3", E: "b2@3 ~", F: "b2!2",
  G: "[d3,f#3,a3]!2", H: "[d3,a3] [d3,f#3]", I: "g2 d3", J: "g3 f#3", K: "e3@3 e3 d3@4", L: "a2@3 e3 a3@3 e3",
  M: "a3 e3@2 a2@2 a2 a2@2", N: "e3@3 e3 [d3,a3]@4", O: "a3 e3@2 a2@3 a2@2", P: "[b2,f#3]@7 b3", Q: "a3!2, c#4",
  R: "b2@4 b2@3 b2, f#3@3 ~", S: "c#3!2, [e3,a3]", T: "g3!2", U: "f#3 [f#3,a3]", V: "g3!2, b3", W: "g2!2", X: "f#2!4",
  Y: "[f#3,a#3,c#4]@8 ~@4 f#2@3 ~", Z: "[b2,d3,f#3] [a2,e3,a3]", AA: "[b2,d3,f#3]@2 f#3 d3", AB: "g2 a2",
  AC: "[b2,d3,f#3]@2 b3 a3", AD: "[g3,b3] ~ [a2,c#3,e3]@2", AE: "[b2 f#3 [a3,c#4,e4]@4 a2!2]/2",
  AF: "a2@2 a2@2 a2 b2!2 ~",
})).s("gm_piano").gain(0.35).pan(0.4)

// other · piano
const piano_2 = note(`<
  ~ A B C D E@2 F G H@2 I J K L F G M@2 N O K P Q P Q R@3 S@2 T@3 U V@2 W@2 X@2 Y@3 W@2 X@2 Z@4
>`.pickRestart({
  A: "~@6 c#5 d5", B: "[a4,c#5,e5]@4 [a4,c#5,e5]@3 d5", C: "[a4,c#5,e5] [b4,d5,f#5]@2 [b4,d5,f#5]",
  D: "[a4,c#5,e5]@11 d5@2 c#5@3", E: "[[d4,f#4,b4]@13 ~ d4 e4]/2", F: "f#4 f#4@2 f#4@3 e4!2, d4", G: "e4 d4@2 d4@3 ~@2",
  H: "[f#4 a4!6 [g4,b4]@7 b4@2]/2", I: "b4@2 b4@2 [d4,a4]@3 a4", J: "g4 g4@3 ~ f#4 [d4,f#4] f#4", K: "[c#4,e4] ~@3",
  L: "~@6 d4 e4", M: "[f#4 a4!6 [g4,b4]@5 ~ b4@3]/2", N: "[d4,b4]@2 b4@2 [d4,a4] a4@2 g4", O: "g4!4 f#4 g4 f#4!2",
  P: "~@5 e4!2 f#4", Q: "e4 d4 [d4,f#4] ~",
  R: "[~@4 b4 b4@2 b4@2 [d4,g4,b4]@2 [d4,g4,b4]@2 a4@2 [d4,f#4,a4]@3 f#5@2 e5 d5 ~@2]/3", // G D
  S: "[[d4,g4,b4] [d4,g4,b4]@3 [d4,g4,b4] a4@2 [d4,f#4,a4]@3 f#5@2 e5 d5 ~@2]/2", // G D
  T: "[~@3 b4 [g4,b4] c#5@2 [g4,b4,d5]@2 [g4,b4,e5]@2 [b4,d5,f#5]@2 g5@2 [a#4,c#5,f#5]@7 ~ f#5]/3", // G Em Bm F#
  U: "f#5!3 f#5@3 ~@2", V: "[b4@2 f#5@2 e5 d5!2 e5@2 f#5 f#5@2 ~@4]/2",
  W: "[~@2 f#5@2 e5 d5 ~ [g4,b4,e5]@2 f#5 ~ [g4,b4,d5]@5]/2", X: "[~@2 f#5@2 e5 d5!2 e5@2 f#5 f#5@2 ~ b4!2 c#5]/2",
  Y: "[d5!4 e5!2 d5 b4@3 f#5@2 e5 d5!2 e5@2 f#5 f#5@2 ~@4]/3",
  Z: "[d5!4 e5!2 d5 b4@3 f#5@2 e5@15 d5 [a4,c#5,e5] [b4,d5,f#5] [b4,d5,f#5]@2]/4", // A Bm
})).s("gm_piano").gain(0.35).pan(0.6)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@2 A B A C D E@2 F@2 G@2 H@2 I@2 J@2 K L M@2 N O N O P@2 Q@2 R@3 S T U V@2 W U X T U T Y T Z AA AB AC AD
>`.pickRestart({
  A: "[a4,a5] ~@3 [a4,a5] ~@3 [a4,a5] ~@3 [a4,a5] ~@3", B: "[a4,a5] ~@3 [b4,b5] ~@3 [b4,b5] ~@3 [b4,b5] ~@3",
  C: "b5 ~ f#5@2 d5@2 b4 ~ f#4@2 e4@2 d4@2 c#4@2", D: "b3@5 ~@3", E: "[~@4 f#4@12 e4@8 f#4@7 ~, ~@4 d4@27 ~, ~ a3]/2",
  F: "[[a3,f#4]@2 ~@2 [f#4,d5]@2 c#5 [d4,b4]@9, ~@2 a4@5 ~@9, ~@12 e4 ~@19]/2", G: "[b4 a4 g4 f#4, d5, ~@8 d4@23 ~]/2",
  H: "[e4@8 e5@3 c#5@3 [c#4,a4]@2, c#5@21 ~ e4@4 ~@6]/2", I: "[b4 a4, d4]/2",
  J: "[[f#4,d5]@6 c#5 b4@9, ~@12 e4 ~ d4@16 ~@2]/2", K: "d5 g5 [a4,f#5]@2, b4@7 ~@9", L: "[g4,e5] [f#4,d5]",
  M: "[e4,c#5]/2", N: "[f#4,d5]@13 ~ [f#4,d5]@2", O: "[e4,c#5]", P: "[b4 a4, [d4,d5]@31 ~]/2", Q: "[b4 a4, [d4,d5]]/2",
  R: "[b4@6 g4 ~ b4@2 c#5@2 ~@2 [g4,b4,d5]@4 g4@4 f#5@4 g5@3 ~@3 f#4@9 ~@7, ~@8 g4@4 ~@6 e5@3 ~@9 f#5@17 ~]/3", // G
  S: "f#6@2 f#5@2 f#5 ~ [f#5,f#6]@2 ~@8, f#5 ~ f#6@4 ~@10", T: "[b4,b5] ~@3 [b4,b5] ~@3 [a4,a5] ~@3 [a4,a5] ~@3",
  U: "[b4,b5] ~@3 [b4,b5] ~@3 [b4,b5] ~@3 [b4,b5] ~@3", // B
  V: "[[d5,f#5] ~@3 [d5,f#5] ~@3 [c#5,e5] ~@3 [c#5,e5] ~ [f#4,b4,d5]@8 ~@2 [a4,d5]@2 c#5@2 b4@2 a4@2, ~@24 e4@5 ~@3]/2", // D C#m Bm D5
  W: "[f#4,d5] ~@3 [b4,b5] ~@3 [a4,a5] ~@3 [a4,a5] ~@3", X: "[g4,g5] a5, ~@4 a4@3 ~",
  Y: "[g4,g5] ~@3 [g4,g5] ~@5 f#5@2 d5@2 a4 ~", Z: "[b4,b5] ~@3 [b4,b5] ~@3 [b4,b5] ~@3 b4@2 c#5@2", AA: "d5 [e4,c#5]",
  AB: "~@4 f#5@3 ~ a4@8, [b4,d5]@4 c#4@3 ~", AC: "c#5@8 [a4,e5]@7 ~, e4@3 ~@5",
  AD: "[c#5,a5]@6 ~@2 [e5,c#6]@2 [f#5,d6] ~ [f#5,d6]@2 ~@2", // F#m C#m D
})).s("gm_string_ensemble_1").gain(0.12).pan(0.3)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@2 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 AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU
  AV AW AX
>`.pickRestart({
  A: "~@6 b3@9 ~, ~ e3@7, ~ a3@3", B: "~@2 e3@2 a3@2 b3@9 ~", C: "~@4 a3@2 b3@9 ~, ~ e3@7",
  D: "~ d4 c#4 b3 f#3 d3 c#3 d3", E: "b2@11 ~@5", F: "~@4 [d3,f#3,b3] ~@5 [d3,f#3,b3] ~@3 [d3,b3] ~",
  G: "~@4 [d3,a3,d4] ~ d3 ~@3 [d3,a3] ~@3 [d3,a3] ~", H: "~@2 d3 ~ [d3,a3] ~@3 d3 ~ [d3,a3] ~ d3 ~ [g2,d3] ~",
  I: "~@2 g2 ~ [g2,d3,g3] ~@3 g2 ~ [g2,d3,g3] ~@3 [d3,g3] ~", J: "g2 ~ g2 ~ [g2,d3,g3] ~@3 d3 ~ d3 ~ [d3,a3] ~ d3 ~",
  K: "~@2 e3 ~ [e3,b3] ~@5 d3 ~ [d3,a3] ~ d3 ~", L: "a2 ~ a2 ~ [a2,e3,a3] ~@3 a2 ~ a2 ~ [a2,e3,a3] ~ a2 ~",
  M: "a2 ~ a2 ~ [a2,e3,a3] ~@3 a2 ~ [a2,e3,a3] ~@5", N: "b2@2 ~@2 [b2,f#3,b3] ~@5 [b2,f#3,b3] ~ b2 ~ [d3,a3] ~",
  O: "~@2 d3 ~ [d3,a3] ~@5 [d3,a3] ~@3 [d3,a3] ~", P: "~@2 d3 ~ [d3,a3,d4] ~@3 d3 ~ [d3,a3,d4] ~@3 [d3,a3] ~",
  Q: "~@4 [g2,d3,g3] ~@5 [g2,d3,g3] ~@3 g2 ~", R: "d3 ~@3 [g2,d3,g3] ~@3 d3 ~ d3 ~ [d3,a3]@2 d3 ~",
  S: "~@2 e3 ~ [e3,b3]@2 e3 ~ d3 ~@3 [d3,a3] ~ a2 ~", T: "~@6 e3 ~ c#4@2 e4 ~ c#4 ~ b3 a3",
  U: "b3 ~ b3@2 a3@2 f#3 e3 ~ f#3 a3 ~ f#3@2 e3 ~", V: "d3 ~@3 [b2,f#3] ~@5 [b2,f#3]@2 b2 ~ [a2,e3]@2",
  W: "~@2 a2 ~ [a2,e3,a3] ~@3 [e3,a3] ~ [a2,e3,a3]@2 ~@2 [a2,e3,a3]@2", // A5
  X: "[b2,f#3] ~@3 [b2,f#3,b3] ~ b2 ~@3 [b2,f#3,b3]@2 b2 ~ [a2,e3,a3] ~", // B5 A5
  Y: "a2 ~ a2 ~ [a2,e3,a3] ~ a2 ~@3 [a2,e3,a3] ~@3 [a2,e3,a3] ~", // A5
  Z: "[g2,d3]@2 ~@2 [g2,d3,g3] ~ g2 ~ d3 ~ d3 ~ [g2,d3,g3] ~@3", // G5
  AA: "~@2 d3 ~ [d3,a3]@2 ~@2 d3 ~ [d3,a3,d4] ~ d3 ~ d3 ~", AB: "d3 ~ d3 ~ d3 ~@3 d3 ~ [d3,g3,b3] ~ d3 ~ [d3,a3] ~",
  AC: "~@2 d3 ~ [d3,a3,d4] ~@5 [d3,a3,d4]@2 d3 ~ [d3,a3] ~", // D5
  AD: "g3 ~ [d3,g3] ~ [d3,g3,d4] ~ d3 ~@3 [d3,g3,d4] ~ d3 ~ [d3,g3]@2", // G5
  AE: "~@2 d3 ~ [d3,g3] ~@3 d3 ~ [d3,g3] ~@3 [d3,g3] ~", // G5
  AF: "f#2 ~ f#2 ~ [f#2,c#3,f#3] ~ f#2 ~ f#2 ~ [f#2,c#3,f#3]@2 ~@4", // F#5
  AG: "[f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3] ~ [f#2,c#3,f#3]@2 f#2 ~ e3 ~ e3 ~ d3@2", // F#5
  AH: "b2@2 ~@2 [b2,f#3,b3] ~@3 a2 ~ a2 ~ [a2,e3,a3] ~@3", AI: "~@4 [f#3,b3] ~@3 f#3 a3 ~ b3 ~ b3 a3 ~",
  AJ: "~@2 f#3 ~ [f#3,b3] ~@2 b3 a3 ~ [e3,a3] ~@3 [d3,g3]@2", // B5 A5 G5
  AK: "~@2 g2 ~ [g2,d3,g3] ~@2 a2 [a2,d3,g3] ~ [a2,d3,g3] ~@3 [a2,e3,a3] ~", // G5 Dsus4 A5
  AL: "~@2 b2 ~ [b2,f#3,b3] ~ f#3 ~ [e3,a3] ~ [e3,a3] ~@3 [b2,f#3,b3] ~, ~@7 a2@3 ~@6", // B5 A5 B5
  AM: "b2 ~ b2 ~ [b2,f#3,b3] ~@3 [f#3,b3] ~ [f#3,b3] ~@3 [b2,f#3,b3] ~, ~@7 b2@2 ~@7", // B5
  AN: "g2 ~ g2 ~ [g2,d3,g3] ~@3 [e3,a3] ~ [e3,a3] ~@3 [b2,f#3,b3] ~, ~@7 a2@4 ~@5", // G5 A5 B5
  AO: "~@2 b2 ~ [b2,f#3,b3] ~ f#3 ~ [e3,a3] ~ [e3,a3] ~ b2 ~ b2 ~, ~@7 a2@3 ~@6", // B5 A5
  AP: "~@2 b2 ~ [b2,f#3,b3] ~ f#3 b2 f#3 a3 ~@2 e3 ~ e3 d3", // B5
  AQ: "b2@2 ~@2 [b2,f#3,b3] ~ f#3 a2 [e3,a3] ~ [e3,a3] ~@3 [g2,d3,g3]@2", // B5 A5 G5
  AR: "~@2 g2 ~ [g2,d3,g3] ~ [d3,g3] a2 ~@2 [a2,e3,a3] ~ [a2,e3,a3]@2 a2 ~", // G5 A5
  AS: "[b2,f#3,b3]@2 ~@2 [b2,f#3,b3] ~ f#3 ~ [a2,e3,a3] ~ [a2,e3,a3] ~@3 [b2,f#3,b3] ~", // B5 A5 B5
  AT: "~@2 b2 ~ [b2,f#3,b3] ~@3 [f#3,b3] ~ [f#3,b3] ~@3 [b2,f#3] ~, ~@7 b2@4 ~@5", // B5
  AU: "[g2,d3,g3] ~@3 [g2,d3,g3] ~@2 a2 [a2,e3,a3] ~ [e3,a3] ~@3 [b2,f#3,b3]@2", // G5 A5 B5
  AV: "~@2 b2 ~ [b2,f#3,b3]@2 b2 ~ [a2,e3,a3]@2 a2 ~ [a2,e3,a3] ~ a3 ~", // B5 A5
  AW: "[a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3] ~", // A5
  AX: "[a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3] ~ [a2,e3,a3] ~ [b2,f#3,b3] ~ [b2,f#3,b3] ~@3", // A5 B5
})).s("gm_electric_guitar_muted").gain(0.16).pan(0.7)

// chords · electric guitar muted · soft notes
const electric_guitar_muted_2 = note(`<
  ~@7 A B C D E F ~@2 G H I J K L ~@2 M N O P Q I R S C ~ T ~ U@2 V ~ W X R Y ~ Z ~ AA U ~ AB ~@2
>`.pickRestart({
  A: "~@6 d3 ~@7 f#3 ~", B: "~@2 d3 ~@5 d3 ~@3 d3 ~@3", C: "d3 ~@15", D: "g2 ~@5 g2 ~@7 g2 ~", E: "~@6 g2 ~@9",
  F: "e3 ~@5 e3 ~ d3 ~@7", G: "~@6 b2 ~@9", H: "d3 ~@5 d3 ~@9", I: "~@6 d3 ~@9", J: "g2 ~ g2 ~@13",
  K: "g2 ~ d3 ~@3 d3 ~@9", L: "e3 ~@9 d3 ~@5", M: "~@6 b2 ~ b2 ~@7", N: "a2 ~@5 a2 ~ a2 ~@3 a2 ~@3",
  O: "~@2 b2 ~@5 b2 ~@7", P: "~@8 a2 ~@7", Q: "g3@2 g2 ~@13", R: "~@6 g3 ~@9", S: "d3 ~@7 d3 ~@7", T: "~@14 f#2 ~",
  U: "~@6 f#3 ~@9", V: "~@8 e3 ~@7", W: "b2 ~@15", X: "~@6 f#3 ~@3 b2 ~ b2 ~@3", Y: "b2 ~@5 b3 ~@9",
  Z: "~@8 a2 ~ a2 ~ a2 ~@3", AA: "~@12 a2 ~@3", AB: "~@14 [a2,e3] ~",
})).s("gm_electric_guitar_muted").gain(0.1).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@2
  [x ~@2 x!2 ~@3]!4
  [x ~@6 x ~@8]
  [x ~@2 x!2 ~@3]!42
  [~@4 x ~@2 x]
  [x ~@3 x ~@2 x]
  [x ~@7 x ~@2 x ~@4]
>`).gain(0.22)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@5 A ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@6 A ~@6>".pickRestart({
  A: "~@7 x",
})).gain(0.13)

// drums · snare
const snare = s("sd").struct("<~ A B@4 C B@27 D B@14 E B F>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x!2 ~", D: "~@4 x ~@5 x ~ x ~ x!2", E: "~ x!2 ~@3 x ~", F: "~@4 x!4 ~@4 x ~@3",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct("<~@6 [~@3 x ~@2 x ~] ~@42 [~@3 x ~@4] ~ [~@5 x ~@2]>").gain(0.27)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A@2 ~@3 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@16 B@2 ~
>`.pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2",
})).gain(0.09)

// drums · mid tom
const mid_tom = s("mt").struct("<~@6 [~@5 x ~@10] ~@42 [~@5 x ~@10] ~ [~@8 x!2 ~@6]>").gain(0.27)

// drums · open hat
const open_hat = s("oh").struct("<~@2 [~@7 x]!4 ~ [~@7 x]!28 ~@15 [~@3 x ~@4] ~>").gain(0.13)

// drums · crash
const crash = s("cr").struct("<~@7 A ~@27 A ~@6 A ~@6 B ~ C>".pickRestart({
  A: "x", B: "~ x", C: "~@3 x",
})).gain(0.22)

// drums · ride
const ride = s("rd").struct("<~@35 [~ x!3] [x!4]!6 [~ x!3] [x!4]!6 [x!2 ~@2] ~@2>").gain(0.27)

// … 26 more lines

More by Chris de Burgh