Strudelify

Just for the Record

Marillion

KeyD majorTempo86 bpm
0:00/0:00
// Just for the Record — Marillion
// 86 bpm, 7/8, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (7/8 at bar 1, 4/4 at bar 5, 7/8 at bar 6, 4/4 at bar 14, ...) are rendered on a constant 7/8 grid of one bar per cycle
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 3 "#TROMBONE1" Trombone 1 -> trombone
// note: Full arrangement: all 78 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/3.5)

// 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 · piano · "HONKY TONK"
const piano = note("<A@3 B@8 C@3 D E@8 F@3 G@4 H@4 I@4 J K J K L@4 M@8 N@8 O@8 P@8>".pickRestart({
  A: "[~@5 f#4@2 d4@2 f#4@2 g4@2 ~ d4@2 a4@2 d4@2 ~ g4@2 e4@2 g4@2 c5@2 ~ e4@2 d5@2 e4@2 ~ f#4@2 d4@2 f#4@2 g4@2 ~ d4@2 a4@2 d4@2 ~ g4@2 e4@2 g4@2 c5@2 ~ e4@2 d5@2 e4@2 ~ f#4@2 d4@2 f#4@2 g4@2 ~ d4@2 a4@2 d4@2 ~ g4@2 e4@2 g4@2 c5@2 ~ e4@2, ~@5 d3@16 c3@16 d3@16 c3@16 d3@16 c3@11]/3",
  B: "[d5@2 e4@2 ~ f#4@2 d4@2 b3@2 g4@2 ~ b3@2 f#4@2 b3@2 ~ d4@2 g4@2 d4@2 b3@2 ~ d4@2 b3@2 g3@2 ~ b3@2 g3@2 c#4@2 a3@2 ~ c#4@2 d4@2 a3@2 ~ e4@2 a3@2 d4@2 b3@2 ~ d4@2 g4@2 b3@2 ~ a4@2 b3@2 c#4@2 a3@2 ~ c#4@2 d4@2 a3@2 ~ e4@2 a3@2 d4@2 b3@2 ~ d4@2 g4@2 b3@2 ~ a4@2 b3@2 c#4@2 a3@2 ~ c#4@2 d4@2 a3@2 ~ e4@2 a3@2 d4@2 b3@2 ~ d4@2 g4@2 b3@2 ~ a4@2 b3@2 c#4@2 a3@2 ~ c#4@2 d4@2 a3@2 ~ e4@2 a3@2 d4@2 b3@2 ~ d4@2 g4@2 b3@2 ~ a4@2 b3@2 c#4@2 a3@2 ~ c#4@2 d4@2 a3@2 ~ e4@2 a3@2 d4@2 b3@2 ~ d4@2 g4@2 b3@2 ~ a4@2 b3@2 c#4@2 a3@2 ~ c#4@2 d4@2 a3@2 ~ e4@2 a3@2 d4@2 b3@2 ~ d4@2 g4@2 b3@2 ~ a4@2 b3@2 c#4@2 a3@2 ~ c#4@2 d4@2 a3@2 ~ e4@2 a3@2 d4@2 b3@2 ~ d4@2, ~@5 b2@18 g2@18 a2@16 g2@16 a2@16 g2@16 a2@16 g2@16 a2@16 g2@16 a2@16 g2@16 a2@16 g2@16 a2@16 g2@7]/8",
  C: "[g4@2 b3@2 ~ a4@2 b3@2 c#4@2 a3@2 ~ c#4@2 d4@2 a3@2 ~ e4@2 a3@2 d4@2 b3@2 ~ d4@2 g4@2 b3@2 ~ a4@2 b3@2 f#4@5 d4@2 a4@5 d4@2 f#4@2 d4@2 g4@5 c4@2 e4@5 c4@2 f#4@2 g4@2 ~ f#4@4 d4@2 ~ g4@4 d4@2 f#4@2 ~ d4@2, ~@9 a2@16 g2@16 d3@18 c3@18 ~ b2@18]/3",
  D: "f#4@5 d4@2 g4@4 d4@2 ~ f#4@2 d4@2 f#4@5 d4@2 a4@5 d4@2, f#2@9 d3@7",
  E: "[f#4@2 d4@2 ~ g4@4 c4@2 e4@5 c4@2 f#4@2 ~ g4@2 f#4@4 d4@2 ~ g4@4 d4@2 ~ f#4@2 d4@2 d4@2 b3@2 ~ g3@2 g4@2 d4@2 ~ b3@2 g4@2 d4@2 c#4@2 ~ a3@2 c#4@2 d4@2 ~ a3@2 e4@2 a3@2 d4@2 ~ b3@2 d4@2 g4@2 ~ b3@2 a4@2 b3@2 c#4@2 ~ a3@2 c#4@2 d4@2 ~ a3@2 e4@2 a3@2 d4@2 ~ b3@2 d4@2 g4@2 ~ b3@2 a4@2 b3@2 c#4@2 ~ a3@2 c#4@2 d4@2 ~ a3@2 e4@2 a3@2 d4@2 ~ b3@2 d4@2 g4@2 ~ b3@2 a4@2 b3@2 c#4@2 ~ a3@2 c#4@2 d4@2 ~ a3@2 e4@2 a3@2 d4@2 ~ b3@2 d4@2 g4@2 ~ b3@2 a4@2 b3@2 c#4@2 ~ a3@2 c#4@2 d4@2 ~ a3@2 e4@2 a3@2 d4@2 ~ b3@2 d4@2 g4@2 ~ b3@2 a4@2 b3@2 c#4@2 ~ a3@2 c#4@2 d4@2 ~ a3@2 e4@2 a3@2 d4@2 ~ b3@2 d4@2 g4@2 ~ b3@2 a4@2 b3@2 c#4@2 ~ a3@2, ~@5 c3@18 b2@18 g2@18 a2@16 g2@16 a2@16 g2@16 a2@16 g2@16 a2@16 g2@16 a2@16 g2@16 a2@16 g2@16 a2@5]/8",
  F: "[c#4@2 d4@2 ~ a3@2 e4@2 a3@2 d4@2 ~ b3@2 d4@2 g4@2 ~ b3@2 a4@2 b3@2 c#4@2 ~ a3@2 c#4@2 d4@2 ~ a3@2 e4@2 a3@2 d4@2 ~ b3@2 d4@2 g4@2 ~ b3@2 a4@2 b3@2 f#4@5 d4@2 a4@5 d4@2 f#4@2 d4@2 ~ g4@4 c4@2 ~ e4@4 c4@2 f#4@2 ~ g4@2, ~@11 g2@16 a2@16 g2@16 d3@18 ~ c3@18]/3",
  G: "[f#4@5 d4@2 g4@4 d4@2 ~ f#4@2 d4@2 f#4@5 d4@2 g4@5 d4@2 f#4@2 d4@2 ~ f#4@4 d4@2 a4@5 d4@2 f#4@2 ~ d4@2 g4@4 c4@2 ~ e4@4 c4@2 ~ f#4@2 g4@2 f#4@5 d4@2 g4@5 d4@2 f#4@2 d4@2 f#4@5 d4@2 g4@5 d4@2 f#4@2 d4@2 ~ f#4@4 d4@2 ~ a4@4 d4@2 f#4@2 ~ d4@2, b2@18 f#2@18 ~ d3@18 c3@18 b2@18 f#2@18 ~ d3@18]/4",
  H: "[g4@5 c4@2 e4@4 c4@2 ~ f#4@2 g4@2 f#4@5 d4@2 g4@5 d4@2 f#4@2 d4@2 ~ f#4@4 d4@2 g4@5 d4@2 f#4@2 ~ d4@2 f#4@4 d4@2 ~ a4@4 d4@2 ~ f#4@2 d4@2 g4@5 c4@2 e4@5 c4@2 f#4@2 g4@2 f#4@5 d4@2 g4@5 d4@2 f#4@2 d4@2 ~ d4@2 b3@2 g3@2 ~ g4@2 d4@2 b3@2 g4@2 ~ d4@2, c3@18 b2@18 ~ f#2@18 d3@18 c3@18 b2@18 ~ g2@18]/4",
  I: "c#4@2 a3@2 ~ c#4@2 d4@2 a3@2 e4@2 ~ a3@2 d4@2 b3@2 ~ d4@2 g4@2 b3@2 a4@2 ~ b3@2, a2 g2",
  J: "g4@2 e4@2 ~ a4@2 e4@2 b4@2 a4@2 ~ g4@2 a4@2 d4@2 ~ g4@2 d4@2 f#4@2 d4@2 ~ f#4@2, e3@16 d3@13 ~@3",
  K: "c5@2 e4@2 ~ b4@2 e4@2 a4@2 e4@2 ~ a4@2 b4@2 d4@2 ~ a4@2 d4@2 g4@2 d4@2 ~ g4@2, a2@16 g2@13 ~@3",
  L: "g5@2 a4@2 ~ f#5@2 a4@2 d5@2 a4@2 ~ d5@2 g5@2 c5@2 ~ f#5@2 c5@2 e5@2 c5@2 ~ e5@2, d3 c3",
  M: "[[g4,b4,e5]@37 [a4,d5,f#5]@36 [a4,c5,e5]@37 [b4,d5,f#5]@36 [g4,b4,e5]@37 [a4,d5,f#5]@36 [a4,c5,e5]@37]/8", // Em D Am Bm Em D Am
  N: "[[b4,d5,f#5]@37 [b4,e5]@36 [a4,d5,f#5]@37 [a4,c5,e5]@36 [g4,c5,e5]@36 ~ f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2, ~@183 d3@16 c3@16 a#2@16 c3@16 d3@9]/8", // Bm E5 D Am C
  O: "[d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2, ~@7 c3@16 a#2@16 c3@16 d3@16 c3@16 a#2@16 c3@16 d3@16 c3@16 a#2@16 c3@16 d3@16 c3@16 a#2@16 c3@16 d3@9]/8",
  P: "[d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 f4@2 d4@2 f4@2 ~ g4@2 d4@2 a4@2 ~ d4@2 g4@2 e4@2 g4@2 ~ c5@2 e4@2 g4@2 ~ e4@2 g5@2 a4@2 f#5@2 ~ a4@2 d5@2 a4@2 ~ d5@2 g5@2 c5@2 f#5@2 ~ c5@2 e5@2 c5@2 ~ e5@2 g5@2 a4@2 f#5@2 ~ a4@2 d5@2 a4@2 ~ d5@2 g5@2 c5@2 f#5@2 ~ c5@2 e5@2 c5@2 ~ e5@2 g5@2 a4@2 f#5@2 ~ a4@2 d5@2 a4@2 ~ d5@2 g5@2 c5@2 f#5@2 ~ c5@2 e5@2 c5@2 ~ e5@2 g5@2 a4@2 f#5@2 ~ a4@2 d5@2 a4@2 ~ d5@2 c6@2 ~@23, ~@7 c3@16 a#2@16 c3@16 d3@16 c3@16 a#2@16 c3@16 d3@16 c3@16 d3@16 c3@16 d3@16 c3@16 d3@14 ~@27]/8",
})).s("gm_piano").gain(0.45)

// other · trombone · "#TROMBONE1"
const trombone = note("<~@38 A B A B C@4 D E@4 F G H I J@4 K@2 ~@12 L M@3 N>".pickRestart({
  A: "g4@2 e4@2 ~ a4@2 e4@2 b4@2 a4@2 ~ g4@2 a4@2 d4@2 ~ g4@2 d4@2 f#4@2 d4@2 ~ f#4@2",
  B: "c5@2 e4@2 ~ b4@2 e4@2 a4@2 e4@2 ~ a4@2 b4@2 d4@2 ~ a4@2 d4@2 g4@2 d4@2 ~ g4@2",
  C: "g5@2 a4@2 ~ f#5@2 a4@2 d5@2 a4@2 ~ d5@2 g5@2 c5@2 ~ f#5@2 c5@2 e5@2 c5@2 ~ e5@2",
  D: "g4@2 e4@2 ~ f#4@2 g4@2 a4@2 b4@2 ~ e5 d5 e5 d5 b4@2 ~ d5@2 e5@2 g5@2 f#5@2 ~ e5@2",
  E: "[f#5@2 b5@2 ~ a5@13 g5@2 ~ f#5@4 e5@5 d5@4 c5@2 ~ d5@2 e5@2 c6@14 b5@2 a5@5 e5@4 c5@5 d5@2 e5@4 ~ d4@2 d4@2 e4@2 ~ f#4@2 g4@4 a4@2 ~ b4@4 d5@5 e5@4 d5@2 ~ a4@4 e5 b4 ~ d5 b4 a4 b4 d5 b4 e5 ~ b4 d5 b4]/4",
  F: "a4 b4 d5 b4 ~ e5 b4 d5 b4 a4 b4 d5 ~ b4 e5 b4 d5 b4 a4 b4 ~ d5 b4 f#5 b4 d5 b4 a4 ~ b4 d5 b4",
  G: "f#5 b4 d5 b4 ~ a4 b4 d5 b4 f#5 b4 d5 ~ b4 a4 b4 d5 b4 f#5 b4 ~ d5 b4 a4 b4 d5 b4 g5 ~ c5 e5 c5",
  H: "a4 c5 e5 c5 ~ g5 c5 e5 c5 a4 c5 e5 ~ c5 g5 c5 e5 c5 a4 c5 ~ e5 c5 g5 c5 e5 c5 a4 ~ c5 e5 c5",
  I: "d5@2 b5 f#5 ~ d5@2 f#5 d5 b4@2 d5 ~ b4 f#4@2 b4 f#4 d4@2 ~ f#4 d4 b3@2 d4@2 f#4@2 ~ d4@2",
  J: "[f#4@2 b4@2 ~ a4@2 e4@2 g4@2 e4@2 ~ f#4@2 e4@2 e5@2 ~ b4@2 g4@2 e4@2 g4@2 ~ e4@2 a4@2 e4@2 ~ b4@2 e4@2 d5@2 a4@2 ~ g4@2 ~@2 a4@2 ~ f#4@2 d5@2 a4@2 e4@2 ~ d4@2 e4@2 d4@2 ~ f#4@2 d4@2 g4@2 d4@2 ~ c5@2 a4@2 e4@2 ~ c5@2 a4@2 d4@2 [c5,b5]@2 ~ a4@2 c4@2 e4@2 ~ a4@2 e4@2 c4@2 [e4,d5]@2 ~ a4@2 c4@2 [g4,e5]@2 ~ [e4,c5]@2 [c4,g4]@2 [e4,c5]@2 [g4,e5]@2 ~ [e4,c5]@2, ~@5 e5@9 f#5@4 g5@23 f#5@7 d5@7 b4@23 c6@14 ~@2 a5@4 g5@5 e5@5 ~@2 c5@4 ~@14]/4", // Cmaj7 E7 C C5 C
  K: "[[g4,e5]@2 [c5,g5]@2 ~ [g4,e5]@2 [c5,g5]@2 [e5,c6]@2 [c5,g5]@2 ~ [g4,e5]@2 [c5,g5]@2 [g4,a5]@2 ~ [c5,e5]@2 a5@16 ~@25]/2", // C C5 C C5 C C5 C C5 …
  L: "~@23 g5@2 a4@2 f#5@2 ~ a4@2",
  M: "d5@2 a4@2 ~ d5@2 g5@2 c5@2 f#5@2 ~ c5@2 e5@2 c5@2 ~ e5@2 g5@2 a4@2 f#5@2 ~ a4@2", N: "d5@2 a4@2 ~ d5@2 c6@2 ~@23",
})).s("gm_trombone").gain(0.5)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@3 A B C D E F G H I J@2 K L@8 M@3 N O@3 P@4 Q R S T U V W X Y Z AA AB AC@5 AD AE AF AG@2 AH@2 AI AJ@3 AK AL AM AN AO
  AP AO AQ AO AR AS AT AU AV AW AX
>`.pickRestart({
  A: "~@23 b2@2 a2@2 g2@2 ~ f#2@2", B: "e2@2 d2@2 ~ g1@2 g1@2 a1@9 e2@7 g1@5 a1@2",
  C: "b1@5 d2@4 a1@9 e2@7 g1@4 ~ g1@2", D: "b1@5 g1@5 a1@8 e2@7 g1@4 ~ g1@2", E: "b1@4 ~ d2@4 ~ a1@9 e2@7 g2@4 f#2@2",
  F: "e2@4 ~ d2@5 a1@8 e2@7 g1@4 ~ g1@2", G: "b1@4 ~ d2@4 a1@9 e2@7 g1@4 ~ g1@2", H: "b1@5 e1@4 a1@9 e2@7 g1@4 ~ g1@2",
  I: "d2@5 d2@5 a1@9 e2@7 g1@4 a1@2", J: "[b1@5 c#2@4 d2@9 ~@3 a2@2 d3@2 a2@2 c2@16 f#2@2 ~ b1@16 a1@2]/2",
  K: "f#2@7 c#2@4 a1@2 ~ f#1@4 d2@14",
  L: "[~@2 a1@2 ~ c2@18 b1@18 g1@18 ~ a1@9 e2@7 g1@4 a1@3 b1@4 d2@5 a1@8 e2@7 g1@5 b1@2 d2@4 ~ d2@5 a1@8 e2@7 g1@5 d2@2 g2@5 d2@4 ~ a1@9 e2@6 ~ g2@4 e2@2 g1@5 e1@4 ~ a1@8 e2@8 g1@2 ~@2 g1@3 b1@4 d2@4 a1@9 ~ e2@6 g1@2 ~@3 g1@2 b1@5 e1@4 a1@5]/8",
  M: "[~@5 e2@6 g1@2 ~@3 g1@2 d2@5 d2@5 a1@9 e2@7 g1@4 a1@3 b1@5 c#2@3 ~@12 a2@2 d3@2 a2@2 ~ c2@16 f#2@2, ~@59 d2@16 ~@21]/3",
  N: "b1@16 a1@2 f#2@7 c#2@4 ~ a1@2", O: "[f#1@5 d2@18 c2@18 ~ b1@18 f#1@18 d2@18]/3",
  P: "[c2@17 f#1@2 b1@15 a1@3 f#1@4 f#2@7 e2@7 d2@18 c2@18 b1@7 d2@7 f#2@5 g2@2 f#2@2 e2@2 ~ d2@2 c2@2 b1@2 g1@2 ~ g1@2]/4",
  Q: "~ a1@8 e2@7 g1@4 a1@3 b1@4 d2@4 ~", R: "a1@9 e2@7 g1@5 g1@3 b1@4 d2@4",
  S: "a1@9 ~ e2@6 g1@4 ~ g1@2 g2@3 d2@2 g1@4", T: "~ a1@8 e2@7 g1@5 a1@2 b1@4 d2@5",
  U: "e2@4 ~ e2@3 ~ e2@3 ~@4 d2@4 ~ d2@4 d2@4 ~ d2@2, ~@7 e2@2 ~@7", V: "a1@4 ~ a1@4 a1@3 ~@2 a1@2 g1@5 a1@4 b1@5 d2@2",
  W: "e2@4 ~ e2@4 ~@2 f#2@3 g2@2 f#2@3 ~@2 e2@4 d2@5 b1@2, ~@9 e2@4 ~@19",
  X: "a1@4 ~ a1@4 a1@2 b1@2 ~ c2@2 g1@4 ~ g1@4 g1@2 a1@2 ~ b1@2", Y: "d2@3 ~@2 d2@11 c2@4 ~ c2@4 g1@4 ~ a1@2",
  Z: "d2@3 ~@2 d2@4 d2@7 c2@4 ~ c2@4 a2@2 f#2@2 ~ e2@2", AA: "d2@3 ~@2 d2@4 d2@7 c2@4 ~ c2@4 c2@7",
  AB: "d2@4 ~ d2@4 d2@7 c2@4 ~ b1@4 a1@5 g1@2",
  AC: "[e1@3 ~@2 e1@4 e2@7 e1@3 ~@2 e1@4 b1@2 ~ e2@7 ~@2 d2@4 d2@4 ~ d2@5 a1@2 d2@4 d2@4 ~ d2@6 c2@2 ~ b1@3 a1@8 a2@7 a1@2 ~@3 a1@3 e2@2 g2@2 ~ a2@4 g2@2 e2@2 b1@2 ~@3 b1@4 b2@6 ~ b1@4 b2@3 a2@2 f#2@3 b1@3 b1@4 ~@2 e1@2 ~@2 e1@4 e2@5]/5",
  AD: "~@2 e1@2 ~@3 e1@2 ~@2 e1@3 b1@3 ~ e1@2 b1@2 ~ d2@2 ~@2 d2@2 ~@3",
  AE: "d2@5 a1@2 d2@3 ~@2 d2@2 ~@3 d2 ~ d2@4 c2@2 b1@2 ~ a1@2 ~@2", AF: "a1@4 ~ a2@6 a1@4 ~ e2@4 c3@3 a2@4 g2@3 e2@2",
  AG: "[b1@3 ~@2 b1@8 f#2@3 b2@5 a2@2 f#2@3 b1@10 ~ e1@2 ~@2 e1@5 e2@6 e1@3 ~@2 e1@4 b1@3]/2",
  AH: "[e2@7 b1@2 ~ d2@2 ~@2 d2@2 ~@3 d2@5 ~@2 d2@2 ~@2 d2@4 a1@2 d2@5 c2@2 b1@2 ~ a1@2 ~@2 a1@5 a2@7 a1@2]/2",
  AI: "~@3 a1@3 ~ a2@4 g2@3 e2@2 d2@2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2 ~ c2@2",
  AJ: "[c2 ~ c2 ~@2 c2 ~ c2 ~ c2 ~ c2 ~@2 c2 ~ c2 ~@2 c2!2 ~@2 d2@16 c2@16 a#1@16 c2@16 d2@9]/3",
  AK: "a2@7 c2@2 ~@2 c2@2 ~ g2@4 c2@4 ~ a#1@9", AL: "f2@5 a#1@2 c2@2 ~@2 c2@2 ~ g2@2 c2@2 g2@2 ~ c2@2 d2@9",
  AM: "a2@7 c2@2 ~@2 c2@2 ~ g2@4 c2@5 a#1@4 f1@2 ~ g1@2",
  AN: "a#1@2 c2@2 ~ d2@2 c2@4 c2@2 ~ g2@2 a2@2 g2@2 ~ f2@2 d2@2 ~@2 d2@5",
  AO: "a2@7 c2@2 ~@2 c2@2 ~ g2@4 c2@2 ~@3 a#1@9", AP: "f2@7 c2@2 ~@2 c2@2 ~ g2@4 c2@5 d2@2 ~@2 d2@5",
  AQ: "f2@5 a#1@2 c2@2 ~@2 c2@2 ~ g2@2 ~@2 g2@2 ~ a2@2 d2@9",
  AR: "f2@7 c2@2 ~@2 c2@2 ~@3 e2@2 c2@5 d2@4 d2@5, ~@14 g2@5 ~@13",
  AS: "a2@7 c2@2 ~@2 c2@2 ~@3 c2@2 g2@5 a#1@2 ~@2 a#1@5",
  AT: "f2@5 ~@2 c2@2 ~@2 c2@2 ~@3 c2@2 c2@2 ~ c#2@2 ~ d2@2 ~@2 d2@2 ~@2",
  AU: "d2@6 ~ c2@2 ~@3 c2@2 ~@2 c2@2 ~ a1@2 c2@2 ~ d2@2 ~@2 d2@2 ~@2",
  AV: "d2@7 c2@2 ~@3 c2@4 g2@5 c2@2 ~ d2@2 ~@2 d2@4", AW: "a2@6 ~ c2@2 ~@3 c2@4 g2@3 e2@2 c2@3 d2@2 ~@2 d2@2 a2@2",
  AX: "~ d2@2 a1@2 d2 ~@2 c2@3 ~@21",
})).s("gm_electric_bass_finger").gain(0.8)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@4 A B C D E B F D G@2 ~@2 H I J I K I L I M@2 ~@3 N ~@3 O P Q R S ~@3 T U V W X ~@15 Y Z@2 AA AB Z@2 AA AB Z@2 AA
  AC@5
>`.pickRestart({
  A: "~@9 c#5@7 a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2", B: "a4@2 ~@3 a4@2 ~@2 c#5@6 ~ a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2",
  C: "d4@2 ~@3 d4@2 ~@2 c#5@7 a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2",
  D: "a4@2 ~@2 a4@2 ~@3 c#5@7 a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2", E: "e5@9 c#5@7 a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2",
  F: "d4@2 ~@3 d4@4 c#5@7 a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2", G: "[e5@9 d5@37 ~@18]/2", H: "~@9 a4@14 g4@4 c#5@5",
  I: "~@2 a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2 a4@2 ~@3 a4@2 ~@2 c#5@5",
  J: "~@2 a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2 d4@2 ~@3 d4@2 ~@2 c#5@5", K: "~@2 a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2 e5@9 c#5@5",
  L: "~@2 a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2 d4@2 ~@3 d4@4 c#5@5", M: "[~@2 a4@2 ~@3 g4@2 ~@2 f#4@4 ~ g4@2 e5@9 d5@37]/2",
  N: "~@5 e4@8 d4@19", O: "~@27 g4@4 ~, ~@7 a4@8 ~", P: "c#5@7 a4@2 ~@2 g4@2 ~@3 f#4@4 ~ g4@2 a4@2 ~@2 a4@2 ~@3",
  Q: "c#5@6 ~ a4@2 ~@2 g4@2 ~@3 f#4@4 g4@2 ~ d4@2 ~@2 d4@2 ~@3",
  R: "c#5@7 a4@2 ~@2 g4@2 ~@3 f#4@4 g4@2 ~ a4@2 ~@2 a4@2 ~@3", S: "c#5@7 a4@2 ~@2 g4@2 ~@3 f#4@4 g4@2 ~ e5@9",
  T: "~@16 [d3,f#4]@15 ~", U: "[d2,d3]@4 [c2,c3] ~@3", V: "[d2,d3]@8 [c2,c3]@3 ~@5", W: "[d2,d3]@2 c3 ~, ~@16 c2 ~@15",
  X: "[d2,d3]@2 [c2,c3] ~", Y: "~@23 a4@9",
  Z: "[g4@2 ~@3 c5@2 f4@2 ~@2 a4@5 e4@2 a4@4 ~ d4@8 ~ f4@7 e4@4 c4@5 g3@2 c4@2 g3 ~@2 a4@9, ~@31 e4@2 ~@31]/2",
  AA: "g4@2 ~@3 c5@2 f4@2 ~@2 a4@5 e4@2 a4@4 ~ d4@9", AB: "e4@2 f4@2 g4@2 a4@5 c5@2 ~ e5@2 e5@2 e5@2 f5@2 ~ a4@9",
  AC: "[e4@2 f4@2 g4@2 a4@5 c5@2 ~ e5@2 e5@2 e5@2 f5@2 ~ [d2,d3]@16 [c2,c3]@4 ~@12 [d2,d3]@16 [c2,c3]@4 ~@12 [d2,d3]@16 [c2,c3]@4 ~@12 [d2,d3]@16 [c2,c3]@4 ~@21]/5", // D C D C D C D C
})).s("gm_distortion_guitar").gain(0.4)

// chords · synth strings 1 · "SYN STR 2"
const synth_strings_1 = note("<~@46 A@8 B@6 ~@5 C@8 D ~@4>".pickRestart({
  A: "[[e4,g4,b4]@37 [d4,f#4,a4]@36 [c4,e4,a4]@37 [b3,d4,f#4]@36 [e4,g4,b4]@37 [d4,f#4,a4]@37 [c4,e4,a4]@36]/8", // Em D Am Bm Em D Am
  B: "[[b3,d4,f#4]@37 [e4,g4,b4]@36 [d4,f#4,a4]@37 [c4,e4,a4]@36 [c4,e4,g4]@37 ~@9]/6", // Bm Em D Am C
  C: "[~@23 [a3,d4,f4]@16 [g3,c4,e4]@16 [f3,a#3,d4]@16 [g3,c4,e4]@16 [a3,d4,f4]@16 [g3,c4,e4]@16 [f3,a#3,d4]@16 [g3,c4,e4]@16 [a3,d4,f4]@16 [g3,c4,e4]@16 [f3,a#3,d4]@16 [g3,c4,e4]@16 [a3,d4,f4]@16 [g3,c4,e4]@16 [f3,a#3,d4]@9]/8", // Dm C A# C Dm C A# C …
  D: "~@7 [g3,c4,e4]@16 ~@9", // C
})).s("gm_synth_strings_1").gain(0.6)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note("<~@12 A@2 B@3 ~@7 C@2 D@4 E@4 ~@44>".pickRestart({
  A: "[~@9 [a4,d5,f#5]@18 ~ [c5,e5,g5]@18 [b4,d5,f#5]@18]/2", // D C Bm
  B: "[[f#4,a4,c#5]@18 [a4,d5,f#5]@18 ~ [c5,e5,g5]@18 [b4,d5,f#5]@18 [g4,b4,d5]@18 ~@5]/3", // F#m D C Bm G
  C: "[~@28 [a4,d5,f#5]@17 ~ [c5,e5,g5]@18]/2", // D C
  D: "[~ [b4,d5,f#5]@17 ~ [f#4,c#5]@18 [a4,d5,f#5]@18 [c5,e5,g5]@18 [b4,d5,f#5]@18 ~ [f#4,a4,c#5]@18 [a4,d5,f#5]@18, ~@9 a4@9 ~@46]/4", // Bm F#5 D C Bm F#m D
  E: "[[c5,e5,g5]@18 [b4,d5,f#5]@18 ~ [a4,c#5,f#5]@18 [a4,d5,f#5]@18 [c5,e5,g5]@18 ~ [b4,d5,f#5]@18 [b4,d5,g5]@18]/4", // C Bm F#m D C Bm G
})).s("gm_synth_strings_2").gain(0.55)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B@7 C D E F G H@8 D I F J D K L J ~ M@4 I ~ N@2 O@3 P Q R S T U V W X Q R S T Y Z ~ Z AA@3 AB AA@7 AC AD@2 AE ~
>`.pickRestart({
  A: "~@9 x ~@15 x ~@4 x ~", B: "x ~@8 x ~@15 x ~@4 x ~", C: "x ~@8 x ~@17 x ~@4", D: "~@7 x ~@8", E: "~@9 x ~@6",
  F: "~@5 x ~@17 x ~@8", G: "~@27 x ~@4", H: "~@11 x ~@4 x ~ x ~@8 x ~@4", I: "x", J: "~@9 x ~@17 x ~@4",
  K: "x ~@8 x ~@6", L: "~@5 x ~@3 x ~@13 x ~@8", M: "x ~@15 x ~@4 x ~ x ~@8",
  N: "x ~@4 x ~@3 x ~@4 x ~ x ~@4 x ~@3 x ~@4 x ~", O: "x ~@4 x ~@10 x ~@4 x ~@10",
  P: "x ~@4 x ~@10 x ~@4 x ~@3 x ~@4 x ~", Q: "x ~@4 x ~@10 x ~@4 x ~@3 x ~@6", R: "~@5 x ~@3 x ~@11 x ~@3 x ~@4 x ~",
  S: "~@9 x ~@4 x ~@10 x ~@4 x ~", T: "~ x ~@5 x ~ x ~@5 x", U: "~@2 x ~@4 x ~@10 x ~@4 x ~@8",
  V: "~@2 x ~@4 x ~@3 x ~@11 x ~@3 x ~@4", W: "~@7 x ~@3 x ~@4 x ~@10 x ~@4", X: "x ~@10 x ~@4 x ~@4 x ~@10",
  Y: "~@2 x ~@4 x ~@10 x ~@13", Z: "~@23 x ~@8", AA: "~@7 x ~@3 x ~@2 x ~@8 x ~@8", AB: "~@21 x ~ x ~@8",
  AC: "~@7 x ~@3 x ~@2 x ~@8 x ~@3 x ~@4", AD: "~@7 x ~@3 x ~@11 x ~@3 x ~@4", AE: "~@7 x ~@3 x ~@11 x ~@8",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<~@12 A B C D E ~@8 B F D G H ~@48>".pickRestart({
  A: "~@9 x ~@6", B: "~@5 x ~@17 x ~@8", C: "~@27 x ~@4", D: "~@7 x ~@8", E: "x", F: "~@9 x ~@22", G: "x ~@8 x ~@6",
  H: "~@5 x ~@26",
})).gain(0.8)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B C B D B@4 E F G H I J I@6 K L D G E M N O ~ P I P I G@2 Q ~ R@3 S ~@15 T N U V T N@3 U N@3 W X@2 Y ~
>`.pickRestart({
  A: "~@9 x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~", B: "x ~ x ~@6 x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~",
  C: "x ~ x ~@6 x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~@3 x ~@2 x ~",
  D: "~@5 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~",
  E: "x ~ x ~@2 x ~ x ~@3 x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~", F: "~@18 x ~@2 x ~ x ~ x ~ x ~@2 x ~",
  G: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~", H: "x ~ x ~@2 x ~ x ~@19 x ~@2 x ~",
  I: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~@5 x ~@2 x ~",
  J: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~@6 x ~ x ~ x ~@2 x ~",
  K: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~@4 x ~", L: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~@15",
  M: "x ~ x ~@2 x ~ x ~ x ~ x ~@4 x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~",
  N: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~@4 x ~ x ~ x ~ x ~@2 x ~",
  O: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~@3 x ~@6",
  P: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~@6", Q: "x",
  R: "~@2 x ~@4 x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~", S: "~@2 x ~@4 x ~@24", T: "~@23 x ~ x ~ x ~@2 x ~",
  U: "x ~ x ~@2 x ~ x ~ x ~ x ~@6 x ~@2 x ~ x ~ x ~ x ~@2 x ~", V: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~@4 x ~@10",
  W: "x ~ x ~@2 x ~ x ~ x ~ x ~@6 x ~@2 x ~@3 x ~@4 x ~",
  X: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~@3 x ~@4 x ~", Y: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~@10",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@4 A ~@3 B ~@7 C ~ D ~@14 E ~ F ~ F ~@7 G ~@4 H ~@4 I ~@2 J K ~@2 L M N O L@3 M L@3 M ~@2 N P
>`.pickRestart({
  A: "x ~ x ~@2 x ~ x ~@24", B: "~@5 x!2 ~@25", C: "~@18 x!2 ~ x!2 ~@9", D: "~@23 x!2 ~@7",
  E: "x!2 ~@5 x!2 ~@5 x ~@8 x!5 ~@2 x ~", F: "~@27 x ~ x ~@2", G: "~@9 x!3 ~ x ~@18", H: "~@14 x!2 ~@16", I: "x!3 ~@29",
  J: "~@25 x ~ x ~@2 x ~", K: "x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~@10", L: "~@31 x", M: "~@18 x!2 ~@12",
  N: "~@27 x ~@2 x ~", O: "~@7 x!3 ~@6", P: "x ~ x ~@2 x ~@26",
})).gain(0.64)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@58 [~@18 x ~@2 x ~ x ~@8] ~@19>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A B A C A@4 D E ~ D F G F@6 H I C ~ D J G K ~ H F H F ~@2 L M N@4 ~ O ~@3 P ~@5 Q ~@4 G J R P G@3 J G@3 S K@2 F ~
>`.pickRestart({
  A: "~@5 x ~@26", B: "~@5 x ~@19 x ~@6", C: "x", D: "~@9 x ~@22", E: "x ~@6 x ~@6 x ~@17", F: "~@23 x ~@8",
// … 27 more lines

More by Marillion