Strudelify

Splintering Heart

Marillion

KeyG minorTempo98 bpm
0:00/0:00
// Splintering Heart — Marillion
// 98 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 9, 4/4 at bar 10, 3/4 at bar 77, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 169 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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.

// other · piano · "PRG.CHANGE"
const piano = note(`<
  ~@15 A B A C D E F G D H@2 I ~@4 J@2 K@3 L@2 M N O N P Q R@2 S@2 T@4 U@2 V W X@2 Y@2 Z@2 AA@2 ~@20 AB AC@7 AD ~@76
>`.pickRestart({
  A: "~@21 g3@6 e3@5", B: "g3@3 a3@3 ~ a3@7 ~@2", C: "g3@6 a3@4 ~ a3@8 ~ d3@12", D: "~@27 g3@2 e3@3",
  E: "g3@6 a3@5 a3@5 a3@5 ~ a3@8 ~@2", F: "~@27 g3@3 a3@2", G: "c4@6 b3@5 a3@5 g3@16",
  H: "[g3@5 a3@3 ~@3 a3@3 ~@2 a3@3 a3@27 ~@15 a3@3]/2", I: "e4@3 ~@2 e4@5 ~ d4@2 b3@3 c4@16",
  J: "[~@27 g3@2 ~@3 g3@5 a3@5 ~ a3@5 a3@16, ~@29 e3@5 ~@30]/2",
  K: "[~@27 g3@2 ~@3 g3@5 a3@3 ~@3 a3@5 d3@43 g3@2 e3@3, ~@29 e3@5 ~@62]/3",
  L: "[g3@5 a3@3 ~@3 a3@3 ~@2 a3@3 ~@2 a3@27 ~@11 a3@2 a3@3]/2", M: "e4@8 d4@3 c4@2 d4@3 c4@16", N: "~@21 g4@5 ~ e4@5",
  O: "g4@5 a4@3 ~@3 a4@3 ~@2 a4@16", P: "g4@11 gb4@5 ~@5 e4@5 ~ e4@5, ~@2 gb4 ~", Q: "d4@19 ~@2 g4@5 ~ e4@5",
  R: "[g4@5 gb4@16 d4@3 e4@29 g4@5 ~ e4@3 ~@2]/2", S: "[g4@5 gb4@6 d4@3 ~@2 d4@5 c4@32 g4@3 g4@5 e4@3]/2",
  T: "[g4@5 a4@3 a4@3 ~@2 a4@5 ~ a4@40 g4@2 ~@3 g4@5 a4@5 ~ a4@3 ~@2 a4@5 d4@37 ~ g4@2 e4@3, ~@61 e4@8 ~@59]/4",
  U: "[g4@5 a4@3 a4@3 ~@2 a4@5 ~ a4@27 ~@13 a4@2 a4@3]/2", V: "a4@5 ~@3 a4@3 a4@2 a4@8 ~@11", W: "~@27 e4@2 e4@3",
  X: "[e4@5 f4@5 ~ e4@5 d4@5 c4@32 g4@5 ~@3 g4@3]/2", Y: "[g4@5 d4@6 e4@5 d4@27 ~@18 e4@3]/2",
  Z: "[f4@8 e4@8 d4@5 c4@35 a4@8]/2", AA: "[g4@5 e4@3 d4@35 a4@2 a4@3 a4@3 a4@2 a4@5 ~@6]/2", AB: "~@27 g3@3 e3@2",
  AC: "[~ g3@6 a3@5 ~@2 a3@2 ~ a3@51 c4@3 a3@3 d4@5 ~ d4@5 ~ d4@3 b3@48 g3@2 ~@4 e3@3 g3@5 ~ a3@5 ~ a3@6 c4@3 a3@45 ~ g3@3 a3@3 e4@5, ~@140 g3@5 ~@79]/7",
  AD: "~@5 d4@3 ~@8, ~ d4@9 ~@22, ~@7 c4@5 ~@20",
})).s("gm_piano").gain(0.8)

// other · flute · "PRG.CHANGE"
const flute = note("<~@93 A B@2 C@3 D@3 E ~@31 F@2 G H ~ I J K@2 ~ L@2 M N@2 O P Q@7 ~@11>".pickRestart({
  A: "~@29 d5@3", B: "[c5@3 d5@9 f5@6 g5@6 f5@6 d5@21 ~@13]/2",
  C: "[~@5 c5@3 bb4@3 ~ c5@11 d5@3 f5@3 d5@16 ~@2 d5@3 eb5@2 d5 c5@18 ~@6 d5@3 c5@3 ~ d5@12]/3",
  D: "[f5@3 g5@3 f5@3 d5@27 ~@18 c5@3 bb4@3 c5@11 ~ d5@3 f5@3 d5@16 ~@2]/3", E: "d5@3 eb5@2 ~ c5@18 ~@8, ~@5 d5@2 ~@25",
  F: "[~@3 f5 ~ f5@3 d5@2 f5@6 g5@6 ~ g5@7 ~ g5@19 ~@14]/2", G: "~@20 f5@3 d5@3 f5@6", H: "~ g5@6 ~@2 g5@5 f5@3 d5@15",
  I: "~@3 f5 ~ f5@2 d5@3 f5@6 g5@2 ~ g5@5 ~@2 g5@6", J: "~ g5@8 ~@7",
  K: "[~@19 g5 ~@2 g5@4 bb5@10 g5@3 ~ f5@2 g5@3 f5@13 ~@6]/2", L: "[~@6 f5@3 d5@2 f5@4 ~ g5@7 ~@2 g5@26 ~@13]/2",
  M: "~@21 f5@3 d5@4 f5@4", N: "[~ g5@6 ~@2 g5@5 ~ f5@5 d5@15 ~ d5@3 eb5@2 d5 c5@22]/2",
  O: "~@5 g5 ~ g5@3 ~@3 bb5@9 g5@3 f5@3 g5@4", P: "~@3 f5@16 ~@13",
  Q: "[~@21 g5 ~ g5@4 ~@2 g5@7 f5@20 bb5@3 ~ a5@14 bb5@2 a5@128 ~@20]/7",
})).s("gm_flute").gain(0.6)

// other · pad bowed · "PRG.CHANGE"
const pad_bowed = note("<~@28 A B C D E@2 F@2 E@2 F@2 ~@129>".pickRestart({
  A: "[c4,c5] [b3,b4]", B: "[a3,a4] [g3,g4]", C: "[gb3,gb4] [g3,g4]", D: "[a3,a4] [b3,b4]", E: "[e3,e4]/2",
  F: "[d3,d4]/2", // D
})).s("gm_pad_bowed").gain(0.32)

// other · synth brass 1 · "PRG.CHANGE"
const synth_brass_1 = note("<~@56 A@2 B@2 A@2 B@2 ~@105>".pickRestart({
  A: "f5/2", B: "g5/2",
})).s("gm_synth_brass_1").gain(0.28)

// chords · synth strings 1 · "PRG.CHANGE"
const synth_strings_1 = note(`<
  ~@8 A@5 ~@27 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 D@2 E@2 D@2 E@2 F G H G F G H G F G H G ~@9 I@8 J K@8 L M@8 N@2 ~@56
>`.pickRestart({
  A: "[[a4,e5]@139 ~@21]/5", B: "[a3,c4,e4]/2", C: "[a3,d4,gb4]/2", D: "[f2,f3,a3,c4,f4]/2", E: "[g2,g3,b3,d4,g4]/2",
  F: "[d4,g4,bb4]", G: "[eb4,g4,bb4]", H: "[f4,a4,c5]", I: "[~ e5@39 ~ gb5@36 g5@36 gb5@36 e5@36 gb5@36 g5@35]/8",
  J: "~ gb5@15",
  K: "[~@3 [g4,bb4,d5]@36 [eb4,g4,bb4,d5]@36 [d4,f4,a4,c5]@36 [eb4,g4,bb4,d5]@36 ~ [g4,bb4,d5]@36 [eb4,g4,bb4,d5]@36 [d4,f4,a4,c5]@36]/8", // Gm Ebmaj7 Dm7 Ebmaj7 Gm Ebmaj7 Dm7
  L: "[eb4,g4,bb4,d5]", // Ebmaj7
  M: "[~@4 [g4,bb4,d5]@36 [eb4,g4,bb4,d5]@36 ~ [d4,f4,a4,c5]@36 [eb4,g4,bb4,d5]@36 [g4,bb4,d5]@36 [eb4,g4,bb4,d5]@36 [d4,f4,a4,c5]@35]/8", // Gm Ebmaj7 Dm7 Ebmaj7 Gm Ebmaj7 Dm7
  N: "[~ [eb4,g4,bb4,d5]@18 ~@13]/2", // Ebmaj7
})).s("gm_synth_strings_1").gain(0.4)

// chords · drawbar organ · "PRG.CHANGE"
const drawbar_organ = note("<~@123 A@2 ~@44>".pickRestart({
  A: "[~@28 c2 ~@5 e3 f3 g3 [a3,b3] c4 d4 ~@24, ~@14 d2 g2 c3 ~@15, ~@29 [e2,f2]@2 [a2,b2]@2 d3@2 ~@29]/2", // Asus2 Fmaj7 Asus2
})).s("gm_drawbar_organ").gain(0.4)

// chords · church organ · "PRG.CHANGE"
const church_organ = note("<~@124 A@4 B@5 C@5 D@5 E@5 F@5 G@6 ~@10>".pickRestart({
  A: "[~ [g5,bb5,d6]@5 [g5,bb5,eb6]@5 [g5,bb5,d6]@5]/4", // Gm Eb Gm
  B: "[[f5,a5,d6]@40 [g5,bb5,d6]@40 ~ c6@20 bb5@20 [g5,bb5,eb6]@39, ~@81 [eb5,g5]@40 ~@39]/5", // Dm Gm Eb
  C: "[~ [a5,c6,f6]@40 [g5,bb5,d6]@40 [g5,bb5,eb6]@40 ~ [g5,bb5,d6]@38]/5", // F Gm Eb Gm
  D: "[~ [f5,a5,d6]@20 [g5,bb5,d6]@20 c6@10 bb5@10 [g5,bb5,eb6]@19, ~@41 [eb5,g5]@20 ~@19]/5", // Dm Gm Eb
  E: "[~@3 [a5,c6,f6]@40 [g5,bb5,d6]@40 [g5,bb5,eb6]@40 [g5,bb5,d6]@37]/5", // F Gm Eb Gm
  F: "[~@3 [f5,a5,d6]@40 ~ [g5,bb5,d6]@40 c6@20 bb5@20 [g5,bb5,eb6]@36, ~@21 [eb5,g5]@10 ~@9]/5", // Dm Gm Eb
  G: "[~@2 [a5,c6,f6]@85 ~@9]/6", // F
})).s("gm_church_organ").gain(0.4)

// bass · synth brass 2 · "PRG.CHANGE"
const bass = note("<~@8 A@56 B C D C B C D C B C D C ~@93>".pickRestart({
  A: "a1 ~@2 a1 ~@12 a1 ~@4 a1@11", B: "g1", C: "eb1", D: "f1",
})).s("gm_electric_bass_finger").gain(0.6)

// other · epiano1 · "PRG.CHANGE"
const epiano1 = note("<~@2 A B@5 C@56 ~@92 D E F G@4 H I J ~@3>".pickRestart({
  A: "~@5 a1@3 g3@3 a2@2 a1@3 a3@3 a2@2 a1@3 g3@3 a2@2 a1@3",
  B: "g3@3 a2@2 a1@3 g3@3 a2@2 a1@3 a3@3 a2@2 a1@3 g3@3 a2@2 a1@3",
  C: "a3@3 a2@2 a1@3 g3@3 a2@2 a1@3 g3@3 a2@2 a1@3 g3@3 a2@2 a1@3",
  D: "g2@3 g1@2 f3@3 g2@3 g1@2 g3@3 g2@3 g1@3 f3@2 g2@3 g1@3 f3@2",
  E: "g2@3 g1@3 f3@2 g2@3 g1@3 g3@2 g2@3 g1@3 f3@3 g2@2 g1@3 f3@2",
  F: "~ g2@2 g1@3 f3@3 g2@2 g1@3 g3@3 g2@2 g1@3 f3@3 g2@3 g1@2 f3@2",
  G: "[~ g2@3 g1@2 f3@3 g2@3 g1@2 g3@3 g2@3 g1@2 f3@3 g2@3 g1@3 f3@2 g2@3 g1@3 f3@2 g2@3 g1@3 g3@2 g2@3 g1@3 f3@3 g2@2 g1@3 f3@3 g2@2 g1@3 f3@3 g2@2 g1@3 g3@3 g2@2 g1@3 f3@3 g2@3 g1@2 g3@3 g2@3 g1@2 f3@3 g2@3 g1@2 f3@3 g2@3 g1@2 f3@3 g2@3 g1@3]/4",
  H: "g3@2 g2@3 g1@3 f3@2 g2@3 g1@3 f3@2 g2@3 g1@3 f3@3 g2@2 g1@3",
  I: "g3@3 g2@2 g1@3 f3@3 g2@2 g1@3 f3@3 g2@2 g1@3 f3@3 g2@3 g1@2", J: "g3@3 g2@3 g1@3 ~@23",
})).s("gm_epiano1").gain(0.5)

// other · epiano1 · "PRG.CHANGE" · soft notes
const epiano1_soft = note("<A B C ~@151 D E ~@9 F G H@2>".pickRestart({
  A: "~@16 a3@3 a2@2 a1@3 g3@3 a2@2 a1@3", B: "g3@3 a2@2 a1@3 g3@3 a2@2 a1@3 a3@3 a2@2 a1@3 g3@3 a2@2 a1@3",
  C: "g3@3 a2@3 ~@26", D: "~@13 g3@2 g2@3 g1@3 f3@3 g2@2 g1@3 f3@3",
  E: "g2@2 g1@3 f3@3 g2@2 g1@3 g3@3 g2@2 g1@3 f3@3 g2@3 g1@2 f3@3",
  F: "~@8 f3@3 g2@3 g1@2 f3@3 g2@3 g1@2 f3@3 g2@3 g1@2",
  G: "~ g3@2 g2@3 g1@3 f3@2 g2@3 g1@3 f3@2 g2@3 g1@3 f3@2 g2@3 g1@2",
  H: "[~ g3@3 g2@2 g1@3 f3@3 g2@2 g1@3 f3@3 g2@2 g1@3 f3@3 g2@3 g1@3 ~@30]/2",
})).s("gm_epiano1").gain(0.2)

// other · distortion guitar · "PRG.CHANGE"
const distortion_guitar = note("<~@64 A B C B A B C B A B C B D@3 ~@45 E@4 F@5 G@5 H@5 I@5 J@7 ~@14>".pickRestart({
  A: "[g1,g2]", B: "[eb2,eb3]", C: "[f2,f3]", D: "[[a1,a2]@3 ~]/3", E: "[~ [g1,g2]@5 [eb2,eb3]@5 [g1,g2]@5]/4",
  F: "[~ [d2,d3]@40 [g2,g3]@40 [c2,c3]@40 [eb2,eb3]@39]/5", G: "[~ [f2,f3]@40 ~ [g1,g2]@40 [eb2,eb3]@40 [g1,g2]@38]/5",
  H: "[~@2 [d2,d3]@40 ~ [g2,g3]@40 [c2,c3]@40 [eb2,eb3]@37]/5", // D G C Eb
  I: "[~@3 [f2,f3]@40 [g1,g2]@40 ~ [eb2,eb3]@40 [g1,g2]@36]/5", // F G Eb G
  J: "[~@4 [d2,d3]@40 [g2,g3]@40 [c2,c3]@40 ~ [eb2,eb3]@40 [f2,f3]@40 ~@19]/7", // D G C Eb F
})).s("gm_distortion_guitar").gain(0.5)

// other · overdriven guitar · "PRG.CHANGE"
const overdriven_guitar = note("<~@112 A@3 B@2 C@7 ~@45>".pickRestart({
  A: "[~@2 d5@12 a4@4 g4@13 c4]/3", B: "[d4@3 bb3@24 ~@5]/2",
  C: "[~@27 f4@48 a4@4 bb4@4 c5@4 d5@48 f5@18 c5@24 ~ f5@6 g5@35 ~@5]/7",
})).s("gm_overdriven_guitar").gain(0.5)

// other · piano · "PRG.CHANGE"
const piano_2 = note("<~@48 A@8 B@8 C D E D C D E D C D E D ~@93>".pickRestart({
  A: "a1 ~@2 a1 ~@12 a1 ~@4 a1 ~@10", B: "a1 ~@2 a1 ~ a1 ~@2 a1 ~@2 a1 ~ a1 ~@2 a1 ~@2 a1 ~ a1 ~@2 a1 ~@2 a1 ~ a1 ~@2",
  C: "[a4,d5]@3 bb4@2 g4@3 [a4,d5]@3 bb4@2 g4@3 [a4,d5]@3 bb4@2 g4@3 [a4,d5]@3 bb4@2 g4@3", // D5
  D: "[a4,eb5]@3 bb4@2 g4@3 [a4,eb5]@3 bb4@2 g4@3 [a4,eb5]@3 bb4@2 g4@3 [a4,eb5]@3 bb4@2 g4@3", // Adim
  E: "[a4,f5]@3 bb4@2 g4@3 [a4,f5]@3 bb4@2 g4@3 [a4,f5]@3 bb4@2 g4@3 [a4,f5]@3 bb4@2 g4@3", // Dm
})).s("gm_piano").gain(0.8)

// chords · electric bass pick · "PRG.CHANGE"
const electric_bass_pick = note("<~@76 A@3 B@7 C@8 D@8 E@3 F@6 G H I@7 J@5 ~@44>".pickRestart({
  A: "[~@11 a3 ~@11 c4 ~@7 a3, c4@2 c4@2 c4@2 c4@2 c4@2 c4@7 c4@6 ~ c4@2 c4@2 c4@2 c4@2, ~ a3@4 a3@2 a3@4 ~ a3@6 a3@6 ~ a3@2 ~@2 a3@2 ~, ~@3 g4@6 g4@3 ~ gb4@3 gb4@3 gb4@3 gb4@2 ~@3 g4@5, ~@15 e4@6 e4@8 ~@3]/3",
  B: "[~@10 a3@3 ~@33 c4@3 ~@33 a3@3 ~@33 c4@3 ~@33 a3@3 ~@33 c4@3 ~@6 c4@4 ~@18 g4@3, c4@6 ~ c4@21 c4@18 ~@3 c4@6 c4@6 c4@6 c4@6 c4@6 c4@21 c4@18 ~@3 c4@6 c4@6 c4@6 c4@6 c4@6 c4@21 c4@18 ~@4 c4@5 ~@7 c4@6 c4@6 c4@6, ~@3 g4@9 ~ a3@18 a3@18 ~@3 a3@6 ~@6 a3@6 a3@12 ~@3 a3@18 a3@18 ~@3 a3@6 ~@6 a3@6 a3@12 ~@3 a3@18 a3@18 ~@3 a3@6 ~@7 a3@6 a3@9, ~@16 gb4@9 gb4@9 gb4@9 gb4@6 ~@9 g4@18 g4@9 ~@3 gb4@9 gb4@9 gb4@9 gb4@6 ~@9 g4@18 g4@9 ~@3 gb4@9 gb4@9 gb4@9 gb4@6 ~@10 g4@18 ~@3, ~@11 e4@9 e4@12 ~@15 e4@9 e4@12 ~@15 e4@9 e4@12 ~@8]/7",
  C: "[~@3 a3@3 ~@33 c4@3 ~@33 a3@3 ~@33 c4@3 ~@33 a3@3 ~@34 c4@3 ~@33 a3@3 ~@30 gb4@3, c4@21 c4@18 ~@3 c4@6 c4@6 c4@6 c4@6 c4@6 c4@21 c4@18 ~@3 c4@6 c4@6 c4@6 c4@6 c4@6 c4@21 c4@18 ~@4 c4@6 c4@6 c4@6 c4@6 c4@6 c4@21 c4@18, ~@6 a3@18 a3@18 ~@3 a3@6 ~@6 a3@6 a3@12 ~@3 a3@18 a3@18 ~@3 a3@6 ~@6 a3@6 a3@12 ~@3 a3@19 a3@18 ~@3 a3@6 ~@6 a3@6 a3@12 ~@3 a3@18 a3@15, ~@9 gb4@9 gb4@9 gb4@9 gb4@6 ~@9 g4@18 g4@9 ~@3 gb4@9 gb4@9 gb4@9 gb4@6 ~@9 g4@18 g4@9 ~@3 gb4@9 gb4@9 ~ gb4@9 gb4@6 ~@9 g4@18 g4@9 ~@3 gb4@9 gb4@9 gb4@9 ~@3, ~@15 e4@18 e4@24 ~@30 e4@18 e4@24 ~@30 e4@18 ~ e4@24 ~@30 e4@18 e4@6]/8",
  D: "[c4@3 ~@142 f3@3 ~@105 f3@3, ~@3 g3@6 g3@6 g3@6 g3@6 g3@6 g3@6 g3@6 g3@9 eb3@27 g3@3 d4@18 d4@18 ~ d4@27 ~@9 d4@18 d4@15 ~@3 eb4@21 d4@6 g3@3 f3@9 g3@6 g3@6 g3@6 g3@6, ~@6 f3@12 f3@6 f3@12 f3@6 f3@15 g3@3 f3@12 bb3@42 ~@25 f4@9 ~@48 bb3@12 g3@3 f4@24 f3@6 f3@12 ~@3, ~@12 d4@18 d4@15 ~@3 eb4@21 d4@6 g3@3 f3@9 g3@6 g3@6 g3@6 g3@6 g3@6 ~ g3@6 g3@6 g3@6 g3@6 g3@6 g3@6 g3@6 g3@6 g3@6 g3@6 g3@6 g3@6 g3@9 eb3@27 g3@3 d4@18 d4@9, ~@51 bb3@12 g3@3 f4@24 f3@6 f3@12 f3@6 f3@12 ~ f3@6 f3@12 ~@6 f3@12 f3@6 f3@12 f3@6 f3@15 g3@3 f3@12 bb3@39]/8",
  E: "[~@33 f3@3 ~@30 a4@3 f4@3 eb4@7 ~@8 d4@4 d5@5, g3@6 g3@6 g3@6 g3@6 g3@6 g3@6 ~@18 d5@9 f5@9 d5@10 ~@14, ~ f3@4 f3@2 f3@4 ~@21, ~@9 d4@27 ~@6 d4@9 f4@9 ~@19 d4@6 ~@11, ~@27 f4@9 g4@10 bb4@9 ~@5 a4@6 ~@16 bb4@9 ~@5]/3",
  F: "[d4@4 ~@5 f4@4 ~@6 a4@2 ~@3 a4@3 f4@3 d5@7 d4@3 ~@2 d4@3 f4@3 ~@7 a4@4 ~@4 f4@4 ~@41 a4@4 ~@3 a4@3 f4@3 eb4@6 ~@9 d4@4 ~@8 bb4@6 f4@4 ~@6 a4@2 ~@3 a4@3 f4@3 ~@6 d4@3 ~@3 d4@3 f4@2, ~@4 bb4@8 ~ d5@9 f5@9 ~@9 bb4@9 d5@9 ~ f5@9 ~@5 d4@6 d4@6 g4@10 bb4@8 d5@9 f5@9 d5@9 bb4@9 ~ d5@9 ~@9 d5@9 f5@9 ~@16, ~@60 a4@6 ~ d5@9 bb4@6 bb3@6 ~@3 d4@8 f4@9 ~@19 d4@6 ~@12 d4@6 ~@24 d5@9 bb4@8]/6",
  G: "~@7 a4@4 ~@5 f4@4 ~@5 d4@4 bb4@2 d4, ~@2 d5@9 f5@9 d5@9 ~@3, ~@13 a4@6 ~@13",
  H: "~ bb3@2 ~@12 a4, ~@3 d5@9 d5@4, ~@9 g4@12 f4@11, ~@6 d4@3 d4@6 ~, ~@15 c5@12 bb4@5",
  I: "[~@64 g4@6 ~@24 a4@4 ~@123 d4@3, ~ f5@12 ~@9 d5@6 ~@3 c5@12 bb4@12 bb4@6 bb4@12 ~@3 d4@6 d4@12 ~@13 d5@12 d5@12 ~@6 d5@12 ~@6 d5@6 ~@6 d5@18 d5@12 ~@3 bb4@6 bb4@6 ~@12, ~@4 a4@12 g4@9 g4@12 f4@12 f5@12 ~@9 d5@12 ~@6 d5@12 ~ a4@18 ~@3 g4@12 f4@6 f4@12 f4@6 f4@12 g4@12 f4@12 ~@9 g5@12 ~@9, ~@7 bb4@6 bb4@6 ~@9 d4@6 d4@12 a4@6 a4@12 ~@9 g4@12 f4@6 f4@12 ~ f4@6 f4@12 ~@3 d4@6 d4@12 ~@3 f5@12 ~@18 c5@12 bb4@6 f5@12 ~@9 d5@9, ~@10 g5@12 ~@18 d5@12 ~@6 g5@12 ~@9 c5@12 ~@7 f5@12 ~@18 c5@12 ~@3 a4@6 a4@12 ~@12 d4@6 d4@12 a4@6 a4@12 g4@9 g4@6]/7",
  J: "[~@33 d4@6 ~@30 a4@4 ~@57 f4@6 ~@24, c5@12 bb4@12 f4@12 ~@6 d4@6 ~@3 d4@12 a4@6 ~@4 f4@6 ~@3 f4@12 g4@12 d5@12 ~@6 d5@6 ~@30, ~@3 d4@12 a4@6 a4@12 ~@15 c5@12 bb4@12 ~@7 a4@12 d4@9 d4@9 ~@3 a4@6 a4@6 ~@3 a4@6 ~@27, ~@6 f4@12 f5@12 g4@12 ~@3 g4@12 d5@12 ~@7 d5@6 ~@6 d5@12 ~@3 f4@12 f5@12 ~@33, ~@9 d5@12 ~@6 d5@6 ~@6 d5@12 ~@3 f4@12 f5@12 ~@19 c5@12 bb4@12 f4@6 ~@33]/5",
})).s("gm_electric_bass_pick").gain(0.15)

// bass · electric bass finger · "PRG.CHANGE"
const bass_2 = note(`<
  ~@64 A B C D A B C D A B C D E F G H I J K L M N O P Q R S@2 T@5 U V@4 W@5 X@3 Y@5 Z@3 AA@3 AB@4 AC AD AE AF@2 AG AH
  AI@3 AJ AK AL AM@2 AN AO@2 AP AQ AR AS@2 AT AU@2 AV@2 AW AX@6 ~@9
>`.pickRestart({
  A: "g1@5 g1@3 g1@8 g1@5 g1@3 g1@5 bb1@3", B: "eb2@5 eb2@3 eb2@8 eb2@5 eb2@3 eb2@3 d2@2 c2@3",
  C: "f2@5 f2@3 f2@8 f2@5 f2@3 f2@8", D: "eb2@5 eb2@3 eb2@8 eb2@5 eb2@3 eb2@5 bb1@3",
  E: "a1@2 ~ a1@14 ~ a1@2 ~ a1@3 ~@8", F: "~@4 a1@2 ~ a1@3 ~@22", G: "~@8 a1@2 ~ a1@3 ~@12 a1@2 ~ a1@3",
  H: "~@13 a1@2 ~ a1@3 ~@13", I: "~@17 a1@2 ~ a1@3 ~@9", J: "~@3 a1@2 ~ a1@3 ~@12 a1@2 ~ a1@3 ~@5",
  K: "~@25 a1@2 ~ a1@3 ~", L: "~@11 a1@2 ~ a1@3 ~@12 a1@2 ~", M: "a1@3 ~@5", N: "~ a1@2 ~ a1@3 ~@25",
  O: "~@6 a1@2 ~ a1@3 ~@3 a1@3 ~@14", P: "~@10 a1@2 ~ a1@3 ~@16", Q: "~@14 a1@2 ~ a1@3 ~@3 a1@3 ~@3 a1@3",
  R: "~@18 a1@2 ~ a1@3 ~@8", S: "[~@22 a1@2 ~ a1@3 ~@3 a1@3 ~@25 a1@2 ~ a1@2]/2",
  T: "[~@31 a1@2 ~ a1@3 ~@3 a1@3 ~@3 a1@21 g1@2 ~ g1@14 ~ g1@2 ~ g1@15 eb2@2 ~ eb2@12 bb1@3 eb2@2 ~ eb2@14 ~ d2@3 d2@14 ~ d2@2 ~]/5",
  U: "d2@12 ~@3 c2@2 ~ c2@14",
  V: "[~@2 c2@2 ~ c2@9 bb1@3 a1@3 g1@3 g1@14 ~ g1@2 ~ g1@12 bb1@3 eb2@2 ~ eb2@12 bb1@3 eb2@2 ~ eb2@14 ~ d2@2 ~ d2@12 a1@3 d2@2 ~ d2@12 eb2@2 d2]/4",
  W: "[c2 ~@2 c2@12 g1@2 ~ c2@2 ~ c2@6 c1@3 f1@3 gb1 ~@2 g1@2 ~ g1@12 ~@3 g1@2 ~@2 g1@12 bb1@3 eb2@2 ~ eb2@12 bb1@3 eb2@2 ~ eb2@14 ~ d2@2 ~ d2@14 ~ d2@2 ~ d2@15 c2@2 ~ c2@12]/5",
  X: "[~@3 c2@2 ~ c2@9 bb1@3 a1@3 g1@2 ~ g1@13 ~@2 g1@2 ~ g1@12 bb1@3 eb2 ~@2 eb2@12 bb1@3 eb2 ~@2 eb2@8 ~ bb2@3 a2@2 ~@2 d2@2]/3",
  Y: "[~ d2@14 ~ d2@2 ~ d2@9 f2@3 g2@2 ~ c2@3 c2@14 ~ c2@3 c2@12 d1@3 g1@2 ~ g1@14 ~ g1@2 ~ g1@14 ~@4 d2@3 f2@3 d2@2 ~ g1@2 ~ g1@14 ~ g1@2 ~ g1@14 ~ g1@3 a1@3, ~@106 c2@5 ~@49]/5",
  Z: "[bb1@6 c2@2 ~ c2@14 ~ c2@2 ~ c2@12 ~@4 f2@3 g2@3 bb2@3 g2@3 c2@2 ~ c2@13 ~@2 c2@2 ~ c2@6 d2@3 f2@3 g2@3 bb2@3 g2@2]/3",
  AA: "[~ f2@3 d2@3 g1@2 ~ g1@14 ~ g1@3 g1@12 ~@3 g1@2 ~ g1@3 c2@3 d2@3 g1@2 ~ g1@12 ~@3 g1@2 ~ g1@14 ~@4 a1@2, ~@91 g1@5]/3",
  AB: "[~ bb1@5 ~ eb2@2 ~ eb2@14 ~ eb2@2 ~ eb2@14 ~@2 eb2@2 ~ eb2@9 f2@2 ~ f2@12 c2@3 f2@2 ~ f2@14 ~ f1@12 g1@7 d2@3 g2@2 d2@3 g1@8 ~]/4",
  AC: "~ g1@2 g1@3 g2@5 c2@3 d2@3 eb2@7 bb1@3 eb2@2 ~@3", AD: "eb2@13 bb1@2 eb2@4 d2@2 ~ bb1@2 g1@8",
  AE: "d2@3 g2@4 g1@9 ~@2 g1 ~ g1@2 d2@4 ~ bb1 ~@2 c2@2",
  AF: "[d2@3 ~@2 f2@3 d2@5 ~@3 a2@3 ~@2 c3@2 a2@5 ~@3 d3@2 c3@3 a2@3 ~@2 g1@7 d2@3 g2@2 d2@3 g1@8]/2",
  AG: "~@2 g1@2 g1@3 d2@5 g1@2 bb1@3 c2@7 g1@3 c2@3 ~@2", AH: "~@10 g1@3 g1@2 c2@5 c2@3 d2@2 eb2@7, c2@13 ~@19",
  AI: "[~ bb1@2 eb2@2 ~@3 eb2@10 bb1 ~@2 bb1@2 eb2@5 f2@3 g2@2 f2@5 c2@3 f1@5 c2@3 f2@4 c2@3 f1@5 c2@2 f2@4 ~ f2@3 ~@2 g1@8 d2@3 g2@2 d2@3 g1@7]/3",
  AJ: "~@3 g1@2 g1@3 g2@5 c2@2 d2@3 ~ eb2@7 bb1@3 eb2@2 ~", AK: "~ eb2@13 bb1@2 eb2@4 ~ d2@2 bb1@3 g1@6",
  AL: "~@2 d2@2 g2@4 ~ g1@9 ~ g1 ~ g1@2 ~ d2@4 ~ bb1 ~@2",
  AM: "[c2@2 d2@3 a2@2 f2@3 c2@2 d2@4 ~ a2@12 ~ f2 d2@8 a1@2 ~ g1@8 d2@2 g2@3 d2@2 g1@7, ~@29 g2@2 ~@33]/2",
  AN: "~@3 g1@3 g1@2 d2@5 g1@3 bb1@3 c2@7 g1@3 c2@3",
  AO: "[~@12 g1@2 g1@3 c2@5 c2@2 d2@3 eb2@7 bb1@3 eb2@2 ~@3 eb2@10 bb1 ~ bb1@2 ~ eb2@5 f2@2, ~@2 c2@13 ~@49]/2",
  AP: "g2@2 ~ f2@5 c2@3 f1@5 c2@2 f2@5 c2@3 f1@4 c2@2", AQ: "~ f2@4 ~ f2@3 ~@2 g1@8 d2@2 g2@3 d2@2 g1@6",
  AR: "~@4 g1@3 g1@2 g2@5 c2@3 d2@3 eb2@7 bb1@3 eb2@2",
  AS: "[~@3 eb2@13 bb1@2 eb2@4 ~ d2@2 bb1@3 g1@7 d2@3 g2@4 ~ g1@9 ~ g1 ~ g1@2 ~ d2@4 ~ bb1]/2",
  AT: "~ c2@2 ~ d2@3 ~@2 f2@2 d2@5 ~@3 a2@3 ~@2 c3@2 a2@5 ~",
  AU: "[~@2 d3@2 c3@3 a2@3 ~@2 g2@5 f2@2 ~@3 c2@2 ~ bb1 ~ g1@10 f1@3 d1@2 g0@5 g1@3 bb1@2 c2@8 g1@2 c2@2, ~@19 d2@5 ~@40]/2",
  AV: "[~@13 g1@3 g1@2 c2@5 c2@3 d2@2 eb2@8 bb1@3 eb2@2 ~@2 eb2@10 ~ bb1 ~ bb1@2 ~ eb2@5, ~@3 c2@13 ~@48]/2",
  AW: "f2@2 g2@2 ~ f2@5 c2@2 f1@5 c2@3 f2@5 c2@2 f1@5", AX: "[c2@3 f2@164 ~@25]/6",
})).s("gm_electric_bass_finger").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A@56 B C B D C@2 B@6 E F G H I J K L M N O P Q R S T U V J W L X Y Z AA AB AC AD AE AF AG J W AH AI Y Z AJ G Z AK
  AE W AK AE W AL AA AM AN AO AP AQ AO AR AS AT AU AV AW AX AY AZ BA BB BC BD AW AX BE BF BG BE BC BH BI BG BJ ~@15
>`.pickRestart({
  A: "x ~@2 x ~@12 x ~@4 x ~@10", B: "x ~@4 x ~@10 x ~@4 x ~@10", C: "x ~@4 x ~@10 x ~@4 x ~@5 x ~@4",
  D: "x ~@4 x ~@10 x ~@4 x ~@7 x ~@2", E: "x ~@17 x ~@2 x ~@10", F: "~@4 x ~@2 x ~@24",
  G: "~@8 x ~@2 x ~@14 x ~@2 x ~@2", H: "~@13 x ~@2 x ~@15", I: "~@17 x ~@2 x ~@11", J: "~@3 x ~@2 x ~@14 x ~@2 x ~@7",
  K: "~@25 x ~@2 x ~@3", L: "~@11 x ~@2 x ~@14 x ~@2", M: "x", N: "~ x ~@2 x ~@27", O: "~@6 x ~@2 x ~@5 x ~@16",
  P: "~@10 x ~@2 x ~@18", Q: "~@14 x ~@2 x ~@5 x ~@5 x ~@2", R: "~@18 x ~@2 x ~@10", S: "~@22 x ~@2 x ~@5 x",
// … 127 more lines

More by Marillion