Strudelify

Tubular Bells, Part 1 (live)

Mike Oldfield

KeyE majorTempo160 bpm
0:00/0:00
// Tubular Bells, Part 1 (live) — Oldfield, Mike
// 160 bpm, 4/4, key E major. 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 (7/8 at bar 1, 9/8 at bar 4, 7/8 at bar 6, 9/8 at bar 8, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 769 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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(`<
  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 T U V AI AJ AK AL AM AN AO AP AQ AR AS AT
  AU AV AW AX X Y Z AA AB AC AD AE AF AG AH T U V W X Y Z AA AB AC AD AE AF AG AH T U V W X Y Z AA AB AC AD AE AF AG AH
  T U V AY ~@7 AZ BA BB BC BD BE BF BG BH ~@30 BI BJ BK@8 BL@8 BM@2 BN BO BP BQ BR BS BQ BR BS BQ BT BU BV BW@5 BX@2 BY
  BZ@5 CA@2 CB CC@5 CD@2 CB CC@5 CE ~@27 CF@2 CG CH CI CJ CK CL@2 CM CN CO CP CQ@2 CF@2 CG CH CI CJ CR CS@2 CM CN CO CP
  CT@2 CU CP CV@3 CW CX CY CZ DA@2 ~@494
>`.pickRestart({
  A: "~@6 a5@2 ~@4 b5@2 ~@4 g5@2 ~ a5@3", B: "e5@2 ~ c6@2 ~ e5@3 d6@2 ~@4 b5@3 c6@2 ~ e5@2 ~",
  C: "a5@2 ~ e5@2 ~ b5@2 ~@4 g5@2 ~ a5@3 e5@2 ~ c6@2 ~", D: "e5@3 d6@2 ~ e5@3 b5@3 c6@2 ~ e5@3 b5@2 ~ e5@2 ~",
  E: "a5@2 ~ e5@2 ~ b5@2 ~@4 g5@2 ~ a5@3 ~@3 c6@2 ~", F: "~@3 d6@2 ~@4 b5@3 ~@6 a5@2 ~@4",
  G: "b5@2 ~@4 g5@3 a5@3 ~@3 c6@2 ~@4 d6@3", H: "~@3 b5@3 c6@2 ~@4 b5@3 e5 ~@2 a5@2 ~ e5@2 ~",
  I: "b5@2 ~ e5@3 g5@2 ~ a5@3 e5@2 ~ c6@2 ~ e5@3 d6@2 ~", J: "e5@3 b5@3 c6@2 ~ e5@2 ~ a5@2 ~ e5@2 ~ b5@2 ~ e5@3",
  K: "g5@2 ~ a5@3 e5@2 ~ c6@2 ~ e5@3 d6@2 ~ e5@3 b5@3", L: "c6@2 ~ e5@3 b5@2 ~ e5@2 ~ a5@2 ~ e5@2 ~ b5@2 ~@4",
  M: "g5@2 ~ a5@3 e5@2 ~ c6@2 ~ e5@2 ~ d6@2 ~@4 b5@3", N: "c6@2 ~ e5@3 a5@2 ~@4 b5@2 ~@4 g5@3 a5@3",
  O: "e5@2 ~ c6@2 ~@4 d6@3 e5@3 b5@3 c6@2 ~ e5@3", P: "b5@3 e5 ~@2 a5@2 ~ e5@2 ~ b5@2 ~@4 g5@2 ~ a5@3",
  Q: "e5@2 ~ c6@2 ~ e5@2 ~ d6@2 ~@4 b5@3 c6@2 ~ e5@3", R: "a5@2 ~@4 b5@2 ~@4 g5@3 a5@3 e5@2 ~ c6@2 ~",
  S: "~@3 d6@3 e5@3 b5@3 c6@2 ~ e5@3 b5@3 e5 ~@2", T: "a5@2 ~@4 b5@2 ~@4 g5@2 ~ a5@3 ~@3 c6@2 ~",
  U: "~@3 d6@2 ~ e5@2 ~ b5@3 c6@3 e5@3 a5@3 e5@2 ~", V: "b5@3 ~@3 g5@3 a5@3 e5@2 ~@2 c6@2 e5@3 ~ d6@2",
  W: "e5@2 ~ b5@3 c6@3 e5@3 b5@3 e5@2 ~ a5@2 ~@4", X: "b5@2 ~@4 g5@2 ~ a5@3 ~@3 c6@2 ~@4 d6@2 ~",
  Y: "e5@2 ~ b5@3 c6@3 e5@3 a5@3 e5@2 ~ b5@3 ~@3", Z: "g5@3 a5@3 e5@2 ~@2 c6@2 e5@3 ~ d6@2 e5@2 ~ b5@3",
  AA: "c6@3 e5@3 b5@3 e5@2 ~ a5@2 ~@4 b5@2 ~@4", AB: "g5@2 ~ a5@3 ~@3 c6@2 ~@4 d6@2 ~ e5@2 ~ b5@3",
  AC: "c6@3 e5@3 a5@3 e5@2 ~ b5@3 ~@3 g5@3 a5@3", AD: "e5@2 ~@2 c6@2 e5@3 ~ d6@2 e5@2 ~ b5@3 c6@3 e5@3",
  AE: "b5@3 e5@2 ~ a5@2 ~@4 b5@2 ~@4 g5@2 ~ a5@3", AF: "~@3 c6@2 ~@4 d6@2 ~ e5@2 ~ b5@3 c6@3 e5@3",
  AG: "a5@3 e5@2 ~ b5@3 ~@3 g5@3 a5@3 e5@2 ~@2 c6@2", AH: "e5@3 ~ d6@2 e5@2 ~ b5@3 c6@3 e5@3 b5@3 e5@2 ~",
  AI: "e5@2 ~ b5@3 c6@3 e5@3 b5@3 e5@2 ~ a5@2 ~ e5@2 ~", AJ: "b5@2 ~ e5@2 ~ g5@2 ~ a5@3 e5@2 ~ c6@2 ~ e5@2 ~ d6@3",
  AK: "e5@2 ~ b5@3 c6@3 e5@3 a5@3 e5@2 ~ b5@3 e5@3", AL: "g5@3 a5@3 e5@2 ~ c6@2 ~ e5@3 d6@2 ~ e5@2 ~ b5@3",
  AM: "c6@3 e5@3 b5@3 e5@2 ~ a5@2 ~ e5@2 ~ b5@2 ~ e5@2 ~", AN: "g5@2 ~ a5@3 e5@2 ~ c6@2 ~ e5@2 ~ d6@3 e5@2 ~ b5@3",
  AO: "c6@3 e5@3 a5@3 e5@2 ~ b5@3 e5@3 g5@3 a5@3", AP: "e5@2 ~ c6@2 ~ e5@3 d6@2 ~ e5@2 ~ b5@3 c6@3 e5@3",
  AQ: "b5@3 e5@2 ~ a5@2 ~ e5@2 ~ b5@2 ~ e5@2 ~ g5@2 ~ a5@3", AR: "e5@2 ~ c6@2 ~ e5@2 ~ d6@3 e5@2 ~ b5@3 c6@3 e5@3",
  AS: "a5@3 e5@2 ~ b5@3 e5@3 g5@3 a5@3 e5@2 ~ c6@2 ~", AT: "e5@3 d6@2 ~ e5@2 ~ b5@3 c6@3 e5@3 b5@3 e5@2 ~",
  AU: "a5@2 ~ e5@2 ~ b5@2 ~ e5@2 ~ g5@2 ~ a5@3 e5@2 ~ c6@2 ~", AV: "e5@2 ~ d6@3 e5@2 ~ b5@3 c6@3 e5@3 a5@3 e5@2 ~",
  AW: "b5@3 e5@3 g5@3 a5@3 e5@2 ~ c6@2 ~ e5@3 d6@2 ~", AX: "e5@2 ~ b5@3 c6@3 e5@3 b5@3 e5@3 a5@2 ~@4",
  AY: "e5@2 ~ b5@3 c6@3 e5@3 b5@3 e5@2 ~@7",
  AZ: "~@2 [b3,d4,f4] [g3,b3,d4] [b3,d4,f4] [g3,b3,d4] [b3,d4,f4] [g3,b3,d4]", // Bdim G Bdim G Bdim G
  BA: "[b3,d4,f4] [g3,b3,d4] [b3,d4,f4] [g3,b3,d4] [b3,d4,f4] [g3,b3,d4] [b3,d4,f4] [g3,b3,d4]", // Bdim G Bdim G Bdim G Bdim G
  BB: "[b3,d4,f4] [g3,b3,d4] [f3,a3,c4] [e3,f3,a3] [f3,a3,c4] [e3,f3,a3] [f3,a3,c4] [e3,f3,a3]", // Bdim G F Fmaj7 F Fmaj7 F Fmaj7
  BC: "[f3,a3,c4] [e3,f3,a3] [f#3,a#3,c#4] [f3,f#3,a#3] [f#3,a#3,c#4] [f#3,a#3] [f#3,a#3,c#4] [f#3,a#3]", // F Fmaj7 F# F#maj7 F#
  BD: "[f#3,a#3,c#4] [f#3,a#3] [d3,f#3,b3] [b2,d3,f#3] [d3,f#3,b3] [b2,d3,f#3] [d3,f#3,b3] [b2,d3,f#3]", // F# Bm
  BE: "[d3,f#3,b3] [b2,d3,f#3] [d3,f#3,b3] [b2,d3,f#3] [d3,f#3,b3] [b2,d3,f#3] [d3,f#3,b3] [b2,d3,f#3]", // Bm
  BF: "[d3,f#3,b3] [b2,d3,f#3] [d3,f#3] [f#3,b3] [f#3,b3,c#4] [f#3,b3] [d3,f#3] [f#3,b3]", // Bm D B5 F#sus4 B5 D B5
  BG: "[f#3,b3,c#4] [f#3,b3] [d3,f#3] [f#3,b3] [f#3,b3,c#4] [f#3,b3] [d3,f#3] [f#3,b3]", // F#sus4 B5 D B5 F#sus4 B5 D B5
  BH: "[f#3,b3,c#4] [f#3,b3] ~@6", BI: "~@3 f#3", BJ: "b3 f#3 ~ f#3, ~ b2",
  BK: "[b3@2 f#3@2 ~@2 c#3@2 a#3@2 c#3@2 g#3@2 c#3@2 a#3@2 c#3@2 ~@2 f#3@2 b3@2 f#3@2 ~@2 f#3@2 b3@2 f#3@2 ~@2 c#3@2 a#3@2 c#3@2 g#3@2 c#3@2 a#3@2 c#3 ~@3 f#3@2 b3@2 f#3@2 ~@2 f#3@2, ~@12 f#2@47 ~ b2@23 ~ b2@24 f#2@45 ~@3 b2@21 ~@3 b2@12]/8",
  BL: "[b3@2 f#3@2 ~@2 c#3@2 a#3@2 c#3@2 g#3@2 c#3@2 a#3@2 c#3@2 ~@2 f#3@2 b3@2 f#3@2 ~@2 f#3@2 b3@2 f#3@2 ~@2 c#3@2 a#3@2 c#3@2 g#3@2 c#3@2 a#3@2 c#3 ~@3 d#3@2 g#3@2 d#3@2 f#3@2 d#3@2, ~@12 f#2@47 ~ b2@23 ~ b2@24 f#2@45 ~@3 f#2@18 ~@18]/8",
  BM: "[g#3 d#3 ~ c#3 g#3 c#3 f#3 c#3, ~@12 g#2@17 ~@19]/2", BN: "a#3 c#3 ~ c#3, ~ f#2", BO: "f#3!2",
  BP: "g#3@6 [a4,a5] c#6 e6 a5 c#6 e6, ~@4 [c#4,c#5] [e4,e5]", // A C# E
  BQ: "a5 c#6 e6 a5 c#6 e6 a5 c#6 e6 a5 c#6 e6, [d4,d5] [b3,b4] [g3,g4] [b3,b4] [d4,d5] [c#4,c#5]", // D B G B D C#
  BR: "a5 c#6 e6 a5 c#6 e6 [d4,d5,a5] c#6 [b3,b4,e6] a5 c#6 e6, [a3,a4] [c#4,c#5] [e4,e5] ~@2 [g3,g4]", // D5 E5 A C# E G
  BS: "a5 c#6 e6 a5 [c#4,c#5,c#6] e6 [a3,a4,a5] c#6 [c#4,c#5,e6] a5 [e4,e5,c#6] e6, [b3,b4] [d4,d5] ~@4", // C# A C#m B D
  BT: "a5@2 c#6@2 e6@2 a5@2 c#6@2 e6@2 [a3,c4] ~@2 [a3,c4]@2 ~ e3@3 [a3,c4]@3, [a3,a4]@4 [c#4,c#5]@4 [e4,e5]@4 e3@3 ~@9", // Am A C# E
  BU: "e3@2 [a3,c4] ~ [a3,c4] ~ e3 [a3,c4], ~@9 g3 ~@2, ~@18 b3 ~@5", // Am
  BV: "e3@6 [a3,c4]@3 ~@3 [b3,d4]@3 f#3@2 ~ f#3@3 [b3,d4]@3", // Am Bm
  BW: "[~@6 e4@3 f#3@3 [b3,d4]@3 f#3@3 [b3,d4]@2 ~ [b3,d4]@6 f#3@3 [b3,d4]@6 g3@3 [c4,e4]@2 ~ [c4,e4]@3 g3@6 [c4,e4] ~@2 [c4,e4]@3 g3@3 [b3,d4]@5 ~ b3 ~@2 [b3,d4]@7 ~@2 [b3,d4]@4 ~@2 [a3,c4]@6 e3@2 ~ [a3,c4]@6 e3@3 [a3,c4]@3 e3@3 [a3,c4]@3 e3@3 [g3,b3]@3 e3@3, f#3@6 ~@59 f3@6 ~@6 f3@6 ~ e3@3 ~@6 e3@3 ~@24, ~@3 b3@6 ~@36 c4 ~@74]/5", // Bm C Bm Am G
  BX: "[[f3,a3]@3 e3@3 [g3,b3]@3 ~@3 [c4,e4]@6 a3@3 [c4,e4]@6 a3@2 ~ b3@3 ~@3 c4@3 a3@2 ~ d4@3 a3@3, ~@3 a3 ~@8]/2", // F G C
  BY: "e4 a3 c4 ~ d4@2 ~ [d4,f#4], ~@3 f#4 ~@2", // D
  BZ: "[~@3 d4@2 ~ [d4,g4]@4 ~@2 [d4,f#4]@6 b3 ~@2 d4@6 ~@3 e4@2 ~@4 [e4,g4]@6 b3@2 ~ [e4,g4]@6 b3@3 [e4,g4]@3 b3@2 ~ [d4,f#4]@6 b3@2 ~ d4@6 ~@3 [d4,f#4]@3 ~@3 [c4,e4]@7 ~@2 [c4,e4]@6 a3@2 ~ [c4,e4]@5 ~ a3@3 b3@2 ~ a3@2 ~ c4@3, ~@3 f#4 ~@23 f#4@5 ~@4 b3@4 ~@5 b3@4 ~@35 a3@5 ~@4 a3@3 ~@24]/5", // G5 D Em D C
  CA: "[a3@3 d4@5 ~@4 [b3,d#4]@6 g#3@3 [b3,d#4]@6 g#3@2 ~ a#3@3 ~@3 b3@3 g#3@2 ~ c#4@3 g#3@3, ~@3 g#3 ~@8]/2", // B
  CB: "d#4 g#3 b3 ~ a3@2 ~ [g3,c4], ~@3 c4 ~@2", // C5
  CC: "[~@3 g3@2 ~ [g3,d4]@4 ~@2 [a3,c4]@6 f#3 ~@2 a3@6 ~@3 b3@2 ~@4 [e3,e4]@6 b3@2 ~ [g#3,e4]@6 b3@3 [e3,e4]@3 b3@2 ~ [a#3,f4]@6 ~@3 d4@6 ~@3 [g#3,d4]@3 ~@3 [b3,c#4]@7 ~@2 [b3,c#4]@6 g#3@2 ~ [b3,c#4]@5 ~ g#3@3 a#3@2 ~ g#3@2 ~ b3@3, ~@3 c4 ~@23 c#4@5 ~@4 b3@4 ~@5 b3@4 ~@17 a#3@6 ~@12 g#3@5 ~@4 g#3@3 ~@12 c#4@7 ~@5]/5", // G5 Am E C#m E A#5 G#dim Bsus2
  CD: "[g#3@3 c#4@5 ~@4 [b3,d#4]@6 g#3@3 [b3,d#4]@6 g#3@2 ~ a#3@3 ~@3 b3@3 g#3@2 ~ c#4@3 g#3@3, ~@3 g#3 ~@8]/2", // B
  CE: "g#3@3 c#4@5 ~@16", CF: "[~@2 [a2,e3]@3 a2!3, ~@30 e3@2 ~@4 e3 ~@5 e3@2 ~@4]/2",
  CG: "~@3 a2 ~@2 [a2,e3] ~@2 [b2,e3] ~@2, ~@6 e3 ~@17", CH: "[c3,e3]@2 ~@4 [g2,d3]@3 ~@9 [g2,d3]@2 ~@4",
  CI: "[b2,f#3]@15 ~@3 b2@2 ~@4, ~@18 f#3 ~@5", CJ: "[b2,f#3] ~@2 b2 ~@5 [b2,f#3] ~@2, ~@6 f#3 ~@17",
  CK: "[b2,f#3]@5 ~ f#3@2 ~@4 [d3,f#3]@2 ~@4 [a2,e3]@2 ~@4, ~@6 c#3 ~@17", // B5 D A5
  CL: "[~@6 [a2,e3]@2 ~@4 [g2,d3]@14 ~@4 g2@2 ~@4 [g2,d3] ~@5 [g2,d3] ~@5, ~@30 d3 ~@17]/2", // A5 G5
  CM: "~@6 [g2,d3] ~@5 [g2,d3]@6 [a2,d3]@5 ~", CN: "[a#2,d3] ~ [a2,e3]@3 ~ [a2,e3]@2",
  CO: "[b2,f#3]@17 ~ [b2,f#3]@3 ~@3", CP: "[b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~",
  CQ: "[~ [a2,e3,e4,g4,b4]@2 ~]/2", CR: "[b2,f#3]@5 ~ f#3@2 ~@4 [d3,f#3]@2 ~@4 [a2,e3]@2 ~@4",
  CS: "[~@6 [a2,e3]@2 ~@4 [g2,d3,a#3]@14 ~@4 g2@2 ~@4 [g2,d3] ~@5 [g2,d3] ~@5, ~@30 d3 ~@17]/2", // A5 Gm G5
  CT: "[~@12 [b2,f#3]@35 ~]/2", CU: "[b2,f#3]@6 [b2,f#3] ~",
  CV: "[~@12 [b2,f#3]@24 ~@6 [c#3,c#4]@17 ~ [c#3,c#4]@3 ~@3 [c#3,c#4]@3 ~@3]/3", // B5 C#
  CW: "[c#3,c#4] ~ [c#3,c#4] ~ [c#3,c#4] ~@3", CX: "[c#3,c#4]@5 ~", CY: "[c#3,c#4]@17 ~ [c#3,c#4]@3 ~@3",
  CZ: "[c#3,c#4] ~ [c#3,c#4] ~ [c#3,c#4] ~ [c#3,c#4] ~", DA: "c#3/2",
})).s("gm_piano").gain(0.31).pan(0.8)

// other · piano · "PRG.CHANGE" · soft notes
const piano_soft = note(`<
  A B C ~ D E F G ~@3 H I J K L M N O P Q R H S T ~ U V W ~ J X C ~ P Q R ~@15 H S T ~ U V W ~ J X C ~ P Q R H S T ~ U V
  W ~ J X C ~ P Q R H S T ~ U V W ~ J X C ~ P Q R ~@47 Y@2 ~@29 Z AA ~@9 AB ~ AC ~@5 AB ~ AD ~@5 AB ~ AD ~@50 AE ~@513
>`.pickRestart({
  A: "~@3 e5@2 ~@4 e5@2 ~@4 e5@3 ~@6", B: "~@4 e5 ~@3", C: "~@3 e5 ~@4", D: "~@9 e5@2 ~@7 e5@2 ~@4",
  E: "e5@2 ~@4 e5@2 ~@4 c6@2 ~ e5@3 ~@3 e5@2 ~", F: "~@3 e5@2 ~@7 e5@2 ~@4 e5@3 ~@3", G: "e5 ~@2 e5 ~@4",
  H: "~@21 e5@2 ~", I: "~@9 e5 ~@2", J: "~@9 e5@2 ~@4 e5@2 ~@7", K: "~@2 e5 ~@5", L: "~@15 e5@2 ~@7", M: "~@6 e5 ~@5",
  N: "~@3 e5@2 ~@4 e5@2 ~@13", O: "e5 ~@7", P: "~@3 e5@2 ~@4 e5@2 ~@7 e5@2 ~@4", Q: "e5 ~@11", R: "~ e5 ~@6",
  S: "~@3 e5@2 ~@7 e5@2 ~@4 e5@2 ~@4", T: "~@7 e5", U: "~@15 e5@2 ~@4 e5@2 ~", V: "~@3 e5 ~@2 e5 ~@5", W: "~@5 e5 ~@2",
  X: "e5 ~@2 e5 ~@8", Y: "[~@12 b2@17 ~@19]/2", Z: "~@6 e3 ~@5", AA: "~@9 e3@2 ~@13", AB: "~@18 e4 ~@5", AC: "~ b3 ~@6",
  AD: "~ a#3 ~@6", AE: "~@6 c#3 ~@17",
})).s("gm_piano").gain(0.15).pan(0.8)

// other · acoustic guitar nylon · "PRG.CHANGE"
const acoustic_guitar_nylon = note("<~@307 A B C@2 A D E@2 A B C@2 A D E@2 ~@446>".pickRestart({
  A: "~@4 a3@3 g3", B: "a3@3 g3@2 ~ a3@6 c4@6 e4@6", C: "[d4@9 e4@2 ~ c4@6 d4@12 e4@11 ~@7, ~@11 d4@2 ~@35]/2",
  D: "a3 g3 a3@2 c4@2 e4@2", E: "[d4@8 ~ e4@2 d4 c4@6 d4@18 ~@12]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.41).pan(0.4)

// other · electric guitar jazz · "PRG.CHANGE"
const electric_guitar_jazz = note(`<
  ~@326 A B C D E F G H I B C D E F G H J K L M N O P Q R S T U V K L M N ~@410
>`.pickRestart({
  A: "~@16 a3@3 ~ c4@3 ~", B: "e4 ~@2 e4 d4 c4", C: "e4@3 ~@3 e4@9 ~ a3@3 ~ c4@4", D: "e4@4 ~@8 e4@4 d4@3 ~ c4@3 ~",
  E: "d4@15 ~ g#3@3 ~ b3@4", F: "d4@4 ~@8 d4@4 c4@4 b3@3 ~", G: "d4@4 ~@4 d4 ~@3 d4@4 g#3@4 b3@2 ~@2",
  H: "d4@4 g4@3 ~ d4@4 f#4@4 d4@4 f4@3 ~", I: "e4@9 ~@7 a3@3 ~@2 c4@3", J: "e4@9 ~@3 e4@3 ~ d4@3 ~@2 c4@3",
  K: "g3 ~ a3@2 b3 c#4", L: "d4@14 ~@2 b3@3 ~ c#4@4", M: "d4@6 ~@2 c#4@8 b3@4 a3@3 ~", N: "c#4@11 ~ g3@10 ~@2",
  O: "c4 ~ d4@2 e4 f#4", P: "g4@14 ~@2 e4@4 f#4@3 ~", Q: "g4@6 ~@2 f#4@8 e4@4 d4@3 ~", R: "f#4@3 c4@2 ~",
  S: "d4 ~ e4@2 f#4 g#4", T: "a4@13 ~@3 a4@2 ~@2 a4@2 ~@2", U: "b4@3 ~ e3@4 ~@4 g3@4 ~@4 b3@4",
  V: "~@8 c#4@4 ~@2 a3@7 ~@3",
})).s("gm_electric_guitar_jazz").gain(0.36).pan(0.7)

// chords · piano · "PRG.CHANGE"
const piano_2 = note("<~@435 A B C D E F G H A B C D E F G H ~@318>".pickRestart({
  A: "e4@4 ~@4 e3@2 ~@2 e4@4 d4@3 ~ [e3,c4]@3 ~, c3 ~@5 g3 ~@5", B: "d4@7 ~ [e3,g4]@3 ~ d4@8 b2@2 ~@2, b2 ~@5 b2 ~@5",
  C: "b3@3 ~ b2 ~ [d3,b3]@2 a3@2 g3@2, g2 ~@9 b2 ~", D: "c4@4 c3 ~ c4@4 c3 ~, a2 ~@5 e3 ~@5",
  E: "a3@6 ~@2 a2@2 ~@2 a3@4 g3@3 ~ f3@4, f2@3 ~@9 c3@2 ~@6 a2@2 ~@2",
  F: "b3@8 [b2,e4]@3 ~ e3@2 ~@6 b2@2 ~@2, g2@2 ~@10 b3@11 ~", G: "e2 ~@3 g2 ~ b2 ~@3 g2 ~, g3",
  H: "a3@4 ~@4 g2@2 ~@2 a2@2 ~@2 c4@3 ~ d4@2 ~@2, f2@2 ~@6 b3@6 ~@6 b2 ~@3",
})).s("gm_piano").gain(0.41).pan(0.7)

// bass · tuba · "PRG.CHANGE"
const bass = note("<~@466 A B C D E F G H I J K ~@292>".pickRestart({
  A: "~@2 a1", B: "d2@2 g1 ~ c2 ~", C: "a1@2 d2@2 g1 ~", D: "c2 ~@3 a1@4 e2@4", E: "b1@3 ~@2 a1@3 a1@2 e1@2",
  F: "e1@2 b1@2 b1 d2@3 a1@2 ~@2", G: "g1@2 ~@2 d1 ~@3 e1@2 ~@2", H: "a1!2 g1!2 d1!2", I: "f1 a#1@2 ~ a1@2 a1@2 g1!3 ~",
  J: "d1 ~@3 e1@2 ~@2 a1@2 ~@2", K: "d2 ~@3 g1 ~@7",
})).s("gm_tuba").gain(0.31).pan(0.7)

// bass · tuba · "PRG.CHANGE" · soft notes
const bass_soft = note("<~@467 A B C D ~ E ~ F G H ~@292>".pickRestart({
  A: "~@5 a1", B: "~@5 g1", C: "~ a1@2 ~@9", D: "~@3 d2@2 ~@7", E: "~@2 g1@2 ~ g1@3 ~@2 d1@2", F: "~@3 a#1 ~@7 g1",
  G: "~ g1@3 ~@2 d1@2 ~@2 a1@2", H: "~ d2@2 d2 ~ a1@7",
})).s("gm_tuba").gain(0.15).pan(0.7)

// other · drawbar organ · "PRG.CHANGE"
const drawbar_organ = note("<~@275 A@4 B@2 C@2 D@4 B@2 C@2 ~@191 E@8 ~@12 F G@2 H@4 I@5 J ~@254>".pickRestart({
  A: "[f#2@95 ~]/4", B: "g#2/2", C: "f#2/2", D: "[f#2@47 ~]/2", E: "[~@3 [b3,f#4]@61]/8", F: "~@8 f#5@5 g#5@5 ~ a5@5",
  G: "[b5@5 c#6@21 ~ b5@5 a#5@5 b5@5 ~ c#6@5]/2",
  H: "[d#6@21 f5@5 ~ c5@5 c#5@5 d#5@5 ~ f5@21 ~@5 g4@5 ~ g#4@5 a#4@5 c5@5 ~ a4@5]/4",
  I: "[g4@2 g#4@2 ~ f4@5 ~ [g4,b4]@42 d#2@66 ~, ~@2 g4 ~@57]/5", J: "e2 ~@7",
})).s("gm_drawbar_organ").gain(0.2).pan(0.7)

// other · piano · "PRG.CHANGE"
const piano_3 = note("<~@593 A@7 B@6 C@4 ~@159>".pickRestart({
  A: "[~@12 e4@35 f#4@5 a4@9 g#4@9 ~ f#4@10 e4@11 f#4@2 g#4@33 e4@2 f#4@3 a4@9 ~ g#4@9 f#4@9 ~ e4@7, ~@6 d4 ~@77]/7",
  B: "[~@3 f#4@2 e4@2 f#4@32 ~ d4@2 f#4@2 e4@15 d4@5 g#4@10 d4@7 ~@3 d4@6 f#4@3 e4@10 ~ b3@15 c#4@5 d4@16 c#4@4, ~@39 b3@2 ~@103]/6",
  C: "[~ g#4@9 d4@7 ~@3 d4@40 c#4@36]/4",
})).s("gm_piano").gain(0.41).pan(0.6)

// chords · rock organ · "PRG.CHANGE"
const rock_organ = note("<~@626 A@4 B@3 C@7 D@4 ~@125>".pickRestart({
  A: "[~@20 d4@2 e4@33 f#4@5 a4@10 g#4@10 f#4@9 ~ e4@6, ~@5 [e3,b3]@19]/4", // E5
  B: "[~@4 f#4@2 g#4@33 e4@2 f#4@3 a4@10 g#4@10 f#4@8, ~ [e3,b3]@17]/3", // E5
  C: "[~@2 e4@10 f#4@2 e4@2 ~ f#4@35 e4@15 d4@5 g#4@10 d4@7 ~@3 d4@7 f#4@3 e4@10 ~@15 c#4@5 d4@15 c#4@5 g#4@10 d4@6, ~@3 c#4@20 b3@5 b3@5 ~@9, ~@6 f#3@39 ~ e3@38]/7",
  D: "[~@2 d4@20 a2@19 ~@7, ~@4 a3@79 ~@13, ~@2 f#3@19 ~ c#4@18 ~@8]/4",
})).s("gm_rock_organ").gain(0.41).pan(0.6)

// other · tubular bells · "PRG.CHANGE"
const tubular_bells = note(`<
  ~@482 A@2 B@2 C@2 ~@172 D E@2 F G@2 H I J K L M N O ~ P Q@2 R@2 S T@2 U ~ V W X Y Z AA AB ~ AC@3 AD@2 AE@2 AF AG AH AI
  AJ AK AL ~ AM ~ AN ~@58
>`.pickRestart({
  A: "[~@8 e4@25 ~@15]/2", B: "[e4@5 ~@3]/2", C: "[~@8 e4@31 ~@9]/2", D: "~ e4@5",
  E: "[~@15 f#4@3 ~@2 a4@7 ~@3 g#4@4 ~@6 f#4@4 ~@4]/2", F: "~@2 e4@3 ~@7 f#4 ~ g#4@6 ~@4",
  G: "[~@23 e4@2 f#4@2 ~ a4@6 ~@4 g#4@4 ~@6]/2", H: "f#4@3 ~@7 e4@2 ~@8 f#4@2 e4 ~", I: "~ f#4@4 ~@19", J: "~@4 e4 ~@3",
  K: "~@3 d4@3 ~@2 g#4@5 ~@5 d4@2 ~@4", L: "~@4 d4@3 ~@4 f#4@2 ~ e4@2 ~@8", M: "b3@6 ~@9 c#4 ~@4 d4@2 ~@2",
  N: "~@11 c#4@2 ~@3 g#4@2 ~@6", O: "~@2 d4@3 ~@7 d4@3 ~@9", P: "~@2 c#4 ~@9", Q: "[~@20 e4@21 ~@7]/2",
  R: "[~@7 f#4@3 ~@2 a4@7 ~@3 g#4@4 ~@6 f#4@4 ~@6 e4@3 ~@3]/2", S: "~@4 f#4 ~ g#4@6 ~@12",
  T: "[~@15 e4@2 f#4@2 ~ a4@6 ~@4 g#4@4 ~@6 f#4@3 ~@5]/2", U: "~@2 e4@2 ~@8 f#4@2 e4 ~@2 f#4@4 ~@3",
  V: "~@4 e4@3 ~@12 d4@3 ~@2", W: "g#4@5 ~@5 d4@2 ~@8 d4@3 ~", X: "~@3 f#4@2 ~ e4@2 ~@8 b3@6 ~@2",
  Y: "~@7 c#4 ~@4 d4@2 ~@10", Z: "~@3 c#4@2 ~@3 g#4@2 ~@8 d4@3 ~@3", AA: "~@2 d4 ~@9", AB: "~@10 c#4 ~",
  AC: "[~@12 e4@21 ~@14 f#4@3 ~@2 a4@7 ~@3 g#4@4 ~@6]/3", AD: "[f#4@4 ~@6 e4@3 ~@7 f#4 ~ g#4@6 ~@20]/2",
  AE: "[~@7 e4@2 f#4@2 ~ a4@6 ~@4 g#4@4 ~@6 f#4@3 ~@7 e4@2 ~@4]/2", AF: "~@4 f#4@2 e4 ~@2 f#4@4 ~@11",
  AG: "~@20 e4@3 ~", AH: "~@11 d4@3 ~@2 g#4@5 ~@3", AI: "~@2 d4@2 ~@8 d4@3 ~@4 f#4@2 ~ e4@2", AJ: "~@8 b3@6 ~@9 c#4",
  AK: "~@4 d4@2 ~@13 c#4@2 ~@3", AL: "g#4@2 ~@8 d4@3 ~@7 d4@3 ~", AM: "~@6 c#4 ~@5", AN: "~@4 e4@3 ~@17",
})).s("gm_tubular_bells").gain(0.41).pan(0.2)

// other · music box · "PRG.CHANGE"
const music_box = note(`<
  ~@7 A B C D E F G H I H J K L M N O B C D E F G H I H J K L M N P Q R S T U V W X Y Z AA AB AC AD AE B C D E F G H I H
  J K L M N O B C D E F G H I H J K L M N O B C D E F G H I H J K L M N AF ~@512 AG@3 AH AI@3 AJ AK AL AM AN@2 AO@2 AP
  ~@143
>`.pickRestart({
  A: "~@9 a4 ~@2", B: "b4@2 ~@4 g4@2 ~@7 c5@2 ~@4 d5@3", C: "~@3 b4@3 c5@2 ~@4 a4@2 ~@4 b4@3 ~@3",
  D: "g4@3 ~@6 c5@2 ~@4 d5@3 ~@3 b4@3", E: "c5@2 ~@4 b4@3 ~@3 a4@2 ~@4 b4@2 ~@4", F: "g4@2 ~@7 c5@2 ~@4 d5@3 ~@3 b4@3",
  G: "c5@2 ~@4 a4@2 ~@4 b4@3 ~@3 g4@3 ~@3", H: "~@3 c5@2 ~@4 d5@3 ~@3 b4@3 c5@2 ~@4",
  I: "b4@3 ~@3 a4@2 ~@4 b4@2 ~@4 g4@2 ~@4", J: "a4@2 ~@4 b4@3 ~@3 g4@3 ~@6 c5@2 ~",
  K: "~@3 d5@3 ~@3 b4@3 c5@2 ~@4 b4@3 ~@3", L: "a4@2 ~@4 b4@2 ~@4 g4@2 ~@7 c5@2 ~",
  M: "~@3 d5@3 ~@3 b4@3 c5@2 ~@4 a4@2 ~@4", N: "b4@3 ~@3 g4@3 ~@6 c5@2 ~@4 d5@3",
  O: "~@3 b4@3 c5@2 ~@4 b4@3 ~@3 a4@2 ~@4", P: "~@3 b4@3 c5@2 ~@4 b4@3 ~@3 a4@2 ~ e4@2 ~",
  Q: "b4@2 ~ e4@2 ~ g4@2 ~ a4@3 e4@2 ~ c5@2 ~ e4@2 ~ d5@3", R: "e4@2 ~ b4@3 c5@3 e4@3 a4@3 e4@2 ~ b4@3 e4@3",
// … 989 more lines

More by Mike Oldfield