Strudelify

Small Town Boy

Bronski Beat

KeyE♭ majorTempo134 bpm
0:00/0:00
// Small Town Boy — Bronski Beat
// 134 bpm, 8/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 12 "Bass 2" acoustic bass (copy of ch 1 "Bass" fretless bass)
// note: Full arrangement: all 86 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(134/8)

// 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 · fretless bass · "Bass"
const bass = note(`<
  A B C D E@2 F@2 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 AY AZ BA BB BC BD BE BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD CE ~
>`.pickRestart({
  A: "~@15 c2@2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~@2 bb1@2 ~ bb2@2 ~",
  B: "bb1@2 ~ bb2@2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~@2 bb2@2 ~ f2@2 ~ f3@2 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~@2 f2@2 ~ f3@2 ~ eb2@2",
  C: "~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~@2 eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~@2 c2@2 ~ c3@2 ~@2 c2@2 ~",
  D: "c3@2 ~ bb1@2 ~ bb2@2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ f2@2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~@2 f2@2 ~ f3@2",
  E: "[~ f2@2 ~ f3@2 ~@2 eb2@2 ~ eb3@2 ~ eb2@2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~@2 d2@2 ~ d3@2 ~ c2@2 ~ c3@2 ~@2 c2@2 ~ c3@2 ~ c2@2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~@2 f2@2 ~ f3@2 ~ f2@2 ~]/2",
  F: "[~ f3@2 ~ f2@2 ~ f3@2 ~@2 f2@2 ~ f3@2 ~ eb2@2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~@2 eb3@2 ~ d2@2 ~ d3@2 ~@2 c2@2 ~ c3@2 ~ c2@2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~@2]/2",
  G: "f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~@2 eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  H: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 c2@2 ~ c3 ~@2 bb1 ~@2 bb2@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  I: "~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ d2@2 ~ d3@2",
  J: "~ c2 ~@2 c3 ~@2 c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  K: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ eb2 ~@2 eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 d2@2 ~ d3@2",
  L: "~ c2 ~@2 c3@2 ~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1 ~@2 bb2@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2 ~",
  M: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ eb2 ~@2 eb3@2 ~ d2@2 ~ d3@2",
  N: "~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2@2",
  O: "~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  P: "~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2@2",
  Q: "~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 d2@2 ~ d3 ~",
  R: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  S: "~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ d2 ~@2 d3@2",
  T: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2@2",
  U: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  V: "~ c2 ~@2 c3@2 ~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  W: "~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  X: "~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  Y: "~ f2 ~@2 f3 ~@2 f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  Z: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ bb1 ~@2 bb2@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  AA: "~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ d2@2 ~ d3 ~",
  AB: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2@2",
  AC: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ f2 ~@2 f3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  AD: "~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1 ~@2 bb2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2@2",
  AE: "~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~ d2@2 ~ d3 ~",
  AF: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2",
  AG: "~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ eb2@2 ~ eb3 ~@2 eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~ d2 ~@2 d3@2",
  AH: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2",
  AI: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 d2@2 ~ d3@2",
  AJ: "~ c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 bb1 ~@2 bb2@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2 ~",
  AK: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2 ~@2 f3 ~@2 f2@2 ~ f3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3 ~@2 d2@2 ~ d3@2",
  AL: "~ c2 ~@2 c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2 ~",
  AM: "~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ eb2 ~@2 eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  AN: "~ c2 ~@2 c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2@2",
  AO: "~ f2@2 ~ f3@2 ~ f2 ~@2 f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ d2@2 ~ d3 ~",
  AP: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  AQ: "~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ d2 ~@2 d3@2",
  AR: "~ c2 ~@2 c3@2 ~ c2 ~@2 c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2@2",
  AS: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2 ~@2 f3@2 ~ eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~ d2@2 ~ d3 ~",
  AT: "~ c2 ~@2 c3@2 ~ c2 ~@2 c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2",
  AU: "~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ d2 ~@2 d3@2",
  AV: "~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2 ~",
  AW: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ eb2 ~@2 eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 d2@2 ~ d3@2",
  AX: "~ c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~",
  AY: "~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2 ~@2 f3 ~@2 ab1@2 ~ ab2@2 ~ ab1@2 ~ ab2@2 ~ ab1 ~@2 ab2@2 ~ bb1@2 ~ bb2@2",
  AZ: "~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3 ~",
  BA: "~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ ab1@2 ~ ab2@2 ~ ab1@2 ~ ab2 ~@2 ab1@2 ~ ab2@2 ~ bb1@2 ~ bb2@2",
  BB: "~ c2 ~@2 c3@2 ~ c2@2 ~ c3 ~@2 c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2",
  BC: "~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 ab1@2 ~ ab2@2 ~ ab1 ~@2 ab2 ~@2 ab1@2 ~ ab2@2 ~ bb1@2 ~ bb2@2",
  BD: "~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2",
  BE: "~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ ab1@2 ~ ab2 ~@2 ab1@2 ~ ab2 ~@2 ab1@2 ~ ab2@2 ~ bb1 ~@2 bb2 ~",
  BF: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  BG: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2 ~@2 f3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ d2 ~@2 d3@2",
  BH: "~ c2@2 ~ c3@2 ~ c2 ~@2 c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  BI: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ f2 ~@2 f3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ d2@2 ~ d3@2",
  BJ: "~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2 ~@2 c3@2 ~ bb1 ~@2 bb2 ~@2 bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2@2",
  BK: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ eb2 ~@2 eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  BL: "~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  BM: "~ f2@2 ~ f3@2 ~ f2 ~@2 f3@2 ~ f2 ~@2 f3@2 ~ f2@2 ~ f3 ~@2 eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ d2@2 ~ d3@2",
  BN: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2 ~",
  BO: "~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  BP: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2 ~@2 bb1 ~@2 bb2@2",
  BQ: "~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~ d2@2 ~ d3 ~",
  BR: "~ c2 ~@2 c3@2 ~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2",
  BS: "~ f2@2 ~ f3 ~@2 f2 ~@2 f3@2 ~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ eb2@2 ~ eb3@2 ~ d2 ~@2 d3@2",
  BT: "~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  BU: "~ f2 ~@2 f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ eb2@2 ~ eb3 ~@2 eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3 ~@2 d2 ~@2 d3@2",
  BV: "~ c2@2 ~ c3@2 ~ c2 ~@2 c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2 ~",
  BW: "~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ f2 ~@2 f3 ~@2 f2@2 ~ f3 ~@2 eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ eb2 ~@2 eb3@2 ~ d2@2 ~ d3@2",
  BX: "~ c2@2 ~ c3 ~@2 c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2",
  BY: "~ f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  BZ: "~ c2@2 ~ c3@2 ~ c2@2 ~ c3@2 ~ c2 ~@2 c3 ~@2 c2 ~@2 c3 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2",
  CA: "~ f2 ~@2 f3 ~@2 f2@2 ~ f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 eb2@2 ~ eb3 ~@2 eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3@2 ~ d2@2 ~ d3@2",
  CB: "~ c2 ~@2 c3@2 ~ c2@2 ~ c3 ~@2 c2 ~@2 c3 ~@2 c2@2 ~ c3@2 ~ bb1 ~@2 bb2@2 ~ bb1 ~@2 bb2 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2",
  CC: "~ f2 ~@2 f3 ~@2 f2@2 ~ f3@2 ~ f2@2 ~ f3 ~@2 f2 ~@2 f3@2 ~ eb2 ~@2 eb3@2 ~ eb2@2 ~ eb3 ~@2 eb2@2 ~ eb3 ~@2 d2@2 ~ d3@2",
  CD: "~ c2 ~@2 c3@2 ~ c2 ~@2 c3@2 ~ c2@2 ~ c3@2 ~ c2@2 ~ c3 ~@2 bb1 ~@2 bb2 ~@2 bb1 ~@2 bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2 ~",
  CE: "~ f2 ~@2 f3@2 ~ f2 ~@2 f3@2 ~ f2 ~@2 f3@2 ~ f2@2 ~ f3@2 ~ eb2@2 ~ eb3 ~@2 eb2 ~@2 eb3@2 ~ eb2 ~@2 eb3 ~@2 d2@2 ~ d3@2",
})).s("gm_fretless_bass").gain(0.3).pan(0)

// other · orchestral harp · "Hi Harp"
const orchestral_harp = note(`<
  ~@2 A B C@2 D@2 E ~@4 F G H@2 ~@4 I@2 ~@6 J@2 K@2 ~@30 L M@2 G ~@4 N@2 O@2 P Q R@2 F S T@2 U V ~
>`.pickRestart({
  A: "~@28 c5@3 eb5@4 ~@3 c5@3 eb5@4 ~@3", B: "eb5@4 ~@2 c5@4 d5@4 ~@2 c5@4 d5@4 ~@2 d5@4 ~@3 c5@3 bb4@4 ~@3 c5@4 ~",
  C: "[~@5 c5@4 ~@2 bb4@3 c5@4 ~@6 c5@4 ~@9 c5@4 eb5@4 ~@2 c5@4 eb5@4 ~@2 eb5@4 ~@3 c5@3 d5@4 ~@3 c5@3 d5@4 ~@2 d5@4 ~@3 c5@3 f5@3]/2",
  D: "[~@4 c5@3 f5@4 ~@3 f5@4 ~@3 c5@3 eb5@4 ~@2 c5@4 eb5@4 ~@2 d5@4 ~@3 c5@3 eb5@4 ~@3 c5@3 eb5@4 ~@2 eb5@4 ~@3 c5@3 d5@4 ~@3 c5@3 d5@4 ~@2 d5@4]/2",
  E: "~@3 c5@3 bb4@4 ~@2 c5@4 ~@2 c5@3 bb4@4 ~@3 bb4@3 c5@3 ~@6 bb4@3 c5@3 c5 ~",
  F: "~@4 c5@3 eb5@3 ~@3 c5@3 eb5@3 ~@3 eb5@3 ~@3 c5@3 d5@3 ~@3 c5@3 d5@4 ~@2 d5@2",
  G: "~@4 c5@3 f5@3 ~@3 c5@3 f5@3 ~@3 f5@3 ~@3 c5@3 eb5@3 ~@3 c5@3 eb5@4 ~@2 d5@2",
  H: "[~@4 c5@3 eb5@3 ~@3 c5@3 eb5@4 ~@2 eb5@3 ~@3 c5@3 d5@4 ~@2 c5@3 d5@4 ~@2 d5@4 ~@2 c5@3 f5@3 ~@3 c5@3 f5@3 ~@3 f5@4 ~@2 c5@3 eb5@3 ~@3 c5@3 eb5@3 ~@3 d5@2]/2",
  I: "[~@4 c5@3 eb5@4 ~@2 c5@3 eb5@3 ~@3 eb5@3 ~@3 c5@3 d5@4 ~@2 c5@3 d5@3 ~@3 d5@4 ~@2 c5@3 f5@3 ~@3 c5@3 f5@3 ~@3 f5@4 ~@2 c5@3 eb5@3 ~@3 c5@3 eb5@3 ~@3 d5@2]/2",
  J: "[~@4 c5@3 eb5@4 ~@2 c5@3 eb5@4 ~@2 eb5@4 ~@2 c5@3 d5@4 ~@2 c5@3 d5@4 ~@2 d5@4 ~@2 c5@3 f5@4 ~@2 c5@3 f5@4 ~@2 f5@4 ~@2 c5@3 eb5@4 ~@2 c5@3 eb5@4 ~@2 d5@2]/2",
  K: "[~@4 c5@3 eb5@4 ~@2 c5@3 eb5@3 ~@3 eb5@4 ~@2 c5@3 d5@4 ~@2 c5@3 d5@3 ~@3 d5@4 ~@2 c5@3 f5@3 ~@3 c5@3 f5@3 ~@3 f5@3 ~@3 c5@3 eb5@3 ~@3 c5@3 eb5@3 ~@3 d5@2]/2",
  L: "~@4 c5@3 eb5@3 ~@3 c5@3 eb5@4 ~@2 eb5@4 ~@2 c5@3 d5@4 ~@2 c5@3 d5@4 ~@2 d5@2",
  M: "[~@4 c5@3 f5@4 ~@2 c5@3 f5@3 ~@3 f5@4 ~@2 c5@3 eb5@3 ~@3 c5@3 eb5@3 ~@3 d5@4 ~@2 c5@3 eb5@4 ~@2 c5@3 eb5@3 ~@3 eb5@3 ~@3 c5@3 d5@3 ~@3 c5@3 d5@3 ~@3 d5@2]/2",
  N: "[~@4 c5@3 eb5@3 ~@3 c5@3 eb5@4 ~@2 eb5@3 ~@3 c5@3 d5@3 ~@3 c5@3 d5@3 ~@3 d5@4 ~@2 c5@3 f5@4 ~@2 c5@3 f5@4 ~@2 f5@4 ~@2 c5@3 eb5@3 ~@3 c5@3 eb5@4 ~@2 d5@2]/2",
  O: "[~@4 c5@3 eb5@4 ~@2 c5@3 eb5@4 ~@2 eb5@4 ~@2 c5@3 d5@4 ~@2 c5@3 d5@3 ~@3 d5@4 ~@2 c5@3 f5@3 ~@3 c5@3 f5@3 ~@3 f5@4 ~@2 c5@3 eb5@3 ~@3 c5@3 eb5@3 ~@3 d5@2]/2",
  P: "~@4 c5@3 eb5@3 ~@3 c5@3 eb5@4 ~@2 eb5@3 ~@3 c5@3 d5@4 ~@2 c5@3 d5@4 ~@2 d5@2",
  Q: "~@4 c5@3 f5@3 ~@3 c5@3 f5@4 ~@2 f5@3 ~@3 c5@3 eb5@4 ~@2 c5@3 eb5@4 ~@2 d5@2",
  R: "[~@4 c5@3 eb5@3 ~@3 c5@3 eb5@4 ~@2 eb5@4 ~@2 c5@3 d5@4 ~@2 c5@3 d5@3 ~@3 d5@4 ~@2 c5@3 f5@4 ~@2 c5@3 f5@3 ~@3 f5@4 ~@2 c5@3 eb5@3 ~@3 c5@3 eb5@3 ~@3 d5@2]/2",
  S: "~@4 c5@3 f5@4 ~@2 c5@3 f5@4 ~@2 f5@3 ~@3 c5@3 eb5@3 ~@3 c5@3 eb5@4 ~@2 d5@2",
  T: "[~@4 c5@3 eb5@4 ~@2 c5@3 eb5@3 ~@3 eb5@4 ~@2 c5@3 d5@4 ~@2 c5@3 d5@4 ~@2 d5@4 ~@2 c5@3 f5@4 ~@2 c5@3 f5@4 ~@2 f5@3 ~@3 c5@3 eb5@4 ~@2 c5@3 eb5@3 ~@3 d5@2]/2",
  U: "~@4 c5@3 eb5@3 ~@3 c5@3 eb5@3 ~@3 eb5@4 ~@2 c5@3 d5@3 ~@3 c5@3 d5@3 ~@3 d5@2",
  V: "~@4 c5@3 f5@3 ~@3 c5@3 f5@4 ~@2 f5@4 ~@2 c5@3 eb5@3 ~@3 c5@3 eb5@3 ~@3 d5@2",
})).s("gm_orchestral_harp").gain(0.25).pan(0.3)

// other · string ensemble 2 · "Hi Strings"
const string_ensemble_2 = note("<~@2 A B C@4 D@2 ~@76>".pickRestart({
  A: "~@25 c6@18 ~@5", B: "~ bb5@18 ~@9 f5@18 ~@2",
  C: "[~@6 eb5@18 ~@8 c6@18 ~@9 bb5@18 ~@8 f5@18 ~@9 eb5@18 ~@8 c6@18 ~@10 bb5@18 ~@8]/4",
  D: "[f6@17 ~@6 eb6@16 ~@7 c6@8 ~@42, ~@41 d6@8 ~@47]/2",
})).s("gm_string_ensemble_2").gain(0.41)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@15 A B ~@4 C D ~@6 A E F D ~@4 A G A H A D A E F D I D I G ~@8 C D A D I G A D ~@4 A D C D I D J G A D A H A D ~
>`.pickRestart({
  A: "[eb4,g4]@3 ~ [d4,f4]@3 ~", B: "~ ab4@17 ~@7 [eb4,g4]@17 ~@6, f4@3 ~@5", C: "[eb4,g4]@17 ~@7 [d4,f4]@17 ~@7",
  D: "[f4,ab4]@3 ~ [eb4,g4]@3 ~", E: "[f4,ab4]@18 ~@6 [eb4,g4]@17 ~@7", F: "[eb4,g4]@17 ~@7 [d4,f4]@18 ~@6",
  G: "[f4,ab4]@17 ~@7 [eb4,g4]@18 ~@6", H: "[f4,ab4]@17 ~@7 [eb4,g4]@17 ~@7", I: "[eb4,g4]@18 ~@6 [d4,f4]@17 ~@7",
  J: "~ g4@17 ~@6 [d4,f4]@17 ~@7, eb4@3 ~@5", // Dm
})).s("gm_string_ensemble_1").gain(0.3).pan(0.6)

// other · xylophone · "Block"
const xylophone = note(`<
  ~@51
  [~@4 g6@2 ~ f6@2 ~ g6@2 ~ bb6@2 ~@2 bb6@2 ~@9 g6@2 ~ f6@2 ~ g6@2 ~ bb6@2 ~@2 bb6@2 ~@5, ~@8 c7 ~@11 c7 ~@3]!12
  ~@23
>`).s("gm_xylophone").gain(0.46)

// other · tuba · "Mid Synth"
const tuba = note("<~@47 A B C D ~@26 E F G H I J K L ~>".pickRestart({
  A: "~@4 c5 ~@2 bb4 ~@2 c5 ~@2 eb5@2 ~ f5@6 c5@3 ~@3 c5@2 ~ bb4@2 ~ c5@2 ~ eb5 ~@2 f5@7 ~",
  B: "~@4 c5 ~@2 bb4 ~@2 c5 ~@2 eb5 ~@2 f5@6 eb5@4 ~@2 gb5@3 f5@3 eb5@3 gb5@2 f5@2 eb5@7",
  C: "~@4 c5@2 ~ bb4@2 ~ c5@2 ~ eb5@2 ~ f5@6 c5@3 ~@3 c5@2 ~ bb4 ~@2 c5 ~@2 eb5 ~@2 f5@7 ~",
  D: "~@4 c5 ~@2 bb4@2 ~ c5@2 ~ eb5@2 ~ f5@6 eb5@4 ~@2 gb5@3 f5@3 eb5@3 gb5@2 f5@2 eb5@7",
  E: "~@4 c5 ~@2 bb4 ~@2 c5@2 ~ eb5@2 ~ f5@6 c5@3 ~@3 c5@2 ~ bb4 ~@2 c5 ~@2 eb5@2 ~ f5@7 ~",
  F: "~@4 c5@2 ~ bb4@2 ~ c5 ~@2 eb5 ~@2 f5@6 eb5@4 ~@2 gb5@3 f5@3 eb5@3 gb5@2 f5@2 eb5@7",
  G: "~@4 c5 ~@2 bb4@2 ~ c5@2 ~ eb5@2 ~ f5@6 c5@3 ~@3 c5@2 ~ bb4@2 ~ c5@2 ~ eb5@2 ~ f5@7 ~",
  H: "~@4 c5@2 ~ bb4@2 ~ c5 ~@2 eb5@2 ~ f5@6 eb5@4 ~@2 gb5@3 f5@3 eb5@3 gb5@2 f5@2 eb5@7",
  I: "~@4 c5 ~@2 bb4@2 ~ c5@2 ~ eb5 ~@2 f5@6 c5@3 ~@3 c5@2 ~ bb4 ~@2 c5 ~@2 eb5 ~@2 f5@7 ~",
  J: "~@4 c5 ~@2 bb4 ~@2 c5 ~@2 eb5@2 ~ f5@6 eb5@4 ~@2 gb5@3 f5@3 eb5@3 gb5@2 f5@2 eb5@7",
  K: "~@4 c5@2 ~ bb4@2 ~ c5@2 ~ eb5 ~@2 f5@6 c5@3 ~@3 c5 ~@2 bb4 ~@2 c5@2 ~ eb5@2 ~ f5@7 ~",
  L: "~@4 c5 ~@2 bb4 ~@2 c5@2 ~ eb5@2 ~ f5@6 eb5@4 ~@2 gb5@3 f5@3 eb5@3 gb5@2 f5@2 eb5@7",
})).s("gm_tuba").gain(0.3).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@9 A B A B A B A B C@12 A@38 C@6 A@12 ~>".pickRestart({
  A: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4", B: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@2 x ~",
  C: "~ x ~@11 x ~@5 x ~@5 x ~@11 x ~@10",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B@3 C B D B@2 ~@4 E F E@5 G B@3 H B@3 D B@3 H B H B@3 D B D B H B@15 I ~@3 J B@5 D B D B H B C B H ~
>`.pickRestart({
  A: "~@31 x ~@2 x ~@5 x ~@2 x ~@2 x!2", B: "~@7 x ~@11 x ~@11 x ~@11 x ~@4", C: "~@7 x ~@11 x ~@11 x ~@11 x ~@2 x!2",
  D: "~@7 x ~@11 x ~@11 x ~@11 x ~@2 x ~", E: "~@13 x ~@23 x ~@10", F: "~@13 x ~@23 x!2 ~@9",
  G: "~@13 x ~@17 x ~@8 x ~@2 x ~@2 x!2", H: "~@7 x ~@11 x ~@11 x ~@8 x ~@2 x ~@2 x!2",
  I: "~@7 x ~@11 x ~@11 x ~@11 x!2 ~@3", J: "~@43 x ~@2 x ~",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@52 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@19>".pickRestart({
  A: "~@40 x!2 ~ x!2 ~ x ~",
})).gain(0.25)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@52 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@19>".pickRestart({
  A: "~@47 x",
})).gain(0.15)

// drums · hihat
const hihat = s("hh").struct("<~@9 A B A B A B A B C@4 A@64 ~>".pickRestart({
  A: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@5 x ~",
  B: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@4",
  C: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
})).gain(0.2)
// … 31 more lines