Strudelify
Prelude in C Major cover art

Prelude in C Major, BWV 846

Prelude in C Major

Bach Johann Sebastian

KeyE♭ majorTempo90 bpm
0:00/0:00
// Prelude in C Major — Bach Johann Sebastian
// 90 bpm, 9/8, 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: metre changes (9/8 at bar 1, 2/2 at bar 77) are rendered on a constant 9/8 grid of one bar per cycle
// note: Full arrangement: all 124 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/4.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.

// other · vibraphone
const vibraphone = note(`<
  A B C D E F G H ~@2 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 ~@3 AO AP AQ AR AS
  AT AU AV AW AX AY N AZ@3 BA BB BC BD BE BF@2 BG@2 BH ~ BI@2 ~@51
>`.pickRestart({
  A: "~@5 eb4@6 d4@5 eb4@5 bb3@5 ~ g3@5 eb3@8 ~@8", B: "~@5 bb3@5 ~ a3@5 bb3@5 f3@6 d3@5 bb2@7 ~@9, ~@11 ab3 ~@36",
  C: "f3@6 ~@10 bb3@6 ~@10 bb2@7 ~@9", D: "~@5 eb3@5 ~ d3@5 eb3@5 bb2@6 g2@5 eb2@10 ~@6",
  E: "~@27 eb2@4 ~ eb2@7 ~@4 eb2@5", F: "eb2@12 ~@15 eb2@4 ~ eb2@8 ~@3 eb2@5", G: "eb3@16 ~@27 eb2@5", H: "eb2@7 ~@9",
  I: "bb3@12 ~@4 eb3@11 ~@5 f3@10 ~@6", J: "~@5 bb3@5 ~ a3@5 bb3@5 f3@5 ~ d3@5 bb2@16", K: "~@27 bb2@5 bb2@9 ~@2 bb2@5",
  L: "bb2@16 ~@11 bb2@4 ~ bb2@10 ~ bb3@4 ~", M: "bb3@17 ~@26 bb2@5", N: "bb2 ~@2",
  O: "~@5 bb3@5 ~ a3@5 bb3@5 f3@5 ~ d3@5 bb2@7 ~@9", P: "~@5 bb3@6 ab3@5 bb3@5 g3@5 ~ eb3@5 bb2@7 ~@9",
  Q: "~@5 bb2@6 a2@5 bb2@5 d3@5 ~ c3@5 d3@5 f3@6 eb3@5", R: "f3@5 ab3@5 ~ g3@5 ab3@9 ~@7 b2@9 ~@7",
  S: "c3@8 ~@8 c4@8 ~@8 bb3@7 ~@9", T: "ab3@8 ~@8 ab2@9 ~@7 eb3@9 ~@7", U: "f3@4 ~@4 gb3@4 ~@4 g3@3 ~@5",
  V: "c3@21 eb3@6 g3@5 bb3@5 a3@5 ~ g3@5", W: "a3@12 ~@25 c4@6 f3@5", X: "bb3@10 ~@27 ab3@6 f3@5",
  Y: "g3@8 ~@29 bb3@6 eb3@5", Z: "ab3@8 ~@29 g3@5 ~ eb3@5", AA: "f3@9 ~@23 g3@7 ~@9", AB: "e3@4 ~@12 f3@3 ~@5",
  AC: "d3@7 ~@9 eb3@8 ~@8 a2@8 ~@8", AD: "bb2@9 ~@12 d3@6 c3@5 d3@5 f3@6 ab3@4 ~",
  AE: "bb2@5 d3@6 c3@5 d3@5 f3@6 eb3@5 f3@5 d3@6 bb2@5", AF: "~@11 f3@5 g2@11 eb3@5 f2@10 ~ d3@5",
  AG: "eb2@11 ~@10 g3@6 f3@5 g3@5 bb3@5 ~ db4@5", AH: "eb3@5 g3@6 f3@5 g3@5 bb3@6 ab3@5 bb3@5 g3@6 eb3@5",
  AI: "~@11 bb3@5 c3@10 ~ ab3@5 bb2@10 ~ g3@5", AJ: "ab2@9 ~@12 c4@6 bb3@5 c4@10 ~@6",
  AK: "~@11 c3@5 d4@11 bb2@5 c4@11 a2@5", AL: "bb2@8 ~@13 d4@6 c4@5 d4@10 ~@6",
  AM: "~@11 d3@5 eb4@9 ~@2 c3@5 d4@10 ~ b2@5", AN: "c3@9 ~@12 eb4@5 ~ d4@5 eb4@7 ~@9", AO: "~@27 d2@5 e2@11 gb2@5",
  AP: "g2@7 ~@9 g3@9 ~@7 f3@8 ~@8", AQ: "eb3@8 ~@8 eb2@8 ~@8 bb2@9 ~@7", AR: "c3@8 ~@8 db3@8 ~@8 d3@9 ~@7",
  AS: "g2@20 ~ bb2@6 d3@5 f3@5 e3@5 ~ d3@5", AT: "e3@14 ~@23 g3@6 c3@5", AU: "f3@13 ~@24 c3@6 eb3@5",
  AV: "d3@13 ~@24 d4@5 ~ bb3@5", AW: "eb4@11 ~@26 g3@5 ~ eb3@5",
  AX: "ab3@5 eb3@5 ~ db3@5 c3@5 bb2@6 ab2@5 g2@5 c3@6 bb2@5", AY: "a2@5 bb2@3 a2@2 g2@3 a2@3 bb2@13 ~@19",
  AZ: "bb2@11 ~@37", BA: "~@5 bb3@5 ~ ab3@5 bb3@5 g3@5 ~ eb3@5 bb2@9 ~@7, g3 ~@2",
  BB: "~@5 bb3@6 a3@5 bb3@5 f3@5 ~ d3@5 bb2@10 ~@6", BC: "~@11 g3@5 f3@10 ~ eb3@5 d3@11 bb2@5",
  BD: "eb2@7 ~@4 f3@5 eb3@11 db3@5 c3@11 ab2@5", BE: "d2@8 ~@3 eb3@5 d3@10 ~ c3@5 bb2@11 g2@5",
  BF: "[c2@11 db3@5 c3@11 bb2@5 ab2@14 g2@9 ab2@30 ~@11]/2",
  BG: "[d3@5 eb3@6 f3@2 ~ g3@2 ab3@3 bb3@3 c4@2 d4@3 eb4@5 ab3@5 ~ bb3@16 bb2@16 eb3@18 ~@8]/2", BH: "~@23 eb3@20 ~@5",
  BI: "[~@5 eb2@48 ~@43]/2",
})).s("gm_vibraphone").gain(0.26).pan(0.2)

// other · tuba
const tuba = note(`<
  A B C D E F G H I@2 J K L M N O P Q R S ~@22 T U V W ~@9 X Y Z AA AB AC AD ~@4 AE AF@2 ~@55
>`.pickRestart({
  A: "g4@22 ~@15 g4@11", B: "f4@7 ~@9", C: "~@8 d4@8 bb3@7 ~", D: "[bb3,eb4]@7 ~@9", E: "~@32 eb4@11 db4@5",
  F: "c4@10 ~ eb4@5 ab3@11 bb3@5 c4@11 ab3@5", G: "f4@10 ~ ab4@5 d4@11 eb4@5 f4@10 ~ d4@5",
  H: "eb4@10 ~ f4@5 g4@10 ~ bb4@5 g4@11 d4@5",
  I: "[eb4@11 g4@5 c4@10 d4@5 ~ eb4@3 d4@2 c4@2 d4@3 eb4@5 f3@6 f4@5 ~ eb4@5 f4@5 c4@5 ~ a3@5 f3@8 ~@8]/2", J: "~@2 c4",
  K: "d4@5 ~@11", L: "~@5 bb2@6 a2@5 bb2@5 d3@5 ~ c3@5 d3@5 f3@5 ~ ab3@5",
  M: "g3@5 bb3@5 ~ ab3@5 bb3@5 g3@6 f3@5 g3@5 bb3@5 ~ d4@5", N: "c4@5 eb4@6 d4@5 eb4@5 c4@5 ~ bb3@5 c4@5 bb3@6 a3@5",
  O: "bb3@5 d4@5 ~ c4@5 d4@5 f4@5 ~ eb4@5 f4@5 ab4@5 ~ g4@5", P: "ab4@16 ~@21 eb4@4 ~@2 d4@5",
  Q: "eb4@16 ~@21 f4@6 g4@5", R: "ab4@9 ~@18 ab4@3 ~@2 ab4@11 f4@5", S: "d4 ~@2",
  T: "~@5 ab4@5 ~ g4@5 ab4@5 eb4@5 ~ c4@5 g4@5 d4@5 ~ bb3@5", U: "gb4@5 c4@5 ~ a3@5 eb4@5 bb3@6 g3@5 d4@5 a3@6 gb3@5",
  V: "g3@7 ~@9 c3@9 ~@7 db3@11 ~@5", W: "d3@5 ~@19", X: "~@32 ab3@5 g3@6 f3@5", Y: "g3@13 ~@19 g3@5 f3@6 eb3@5",
  Z: "d3@11 ~@21 ab3@5 g3@5 ~ f3@5", AA: "eb3@11 ~@21 bb3@5 ab3@6 g3@5", AB: "f3@11 ~@21 c4@5 bb3@6 ab3@5",
  AC: "eb4@16 ~@21 g4@11", AD: "f4 ~@2", AE: "~@7 bb3@30 ~@11",
  AF: "[bb4@3 ~@2 bb4@10 ~@17 ab4@6 g4@16 f4@16 g4@11 ~@15]/2",
})).s("gm_tuba").gain(0.26).pan(0.7)

// chords · harpsichord
const harpsichord = 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 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@3 AX@4 AY AZ BA BB BC BD BE BF BG BH@2 BI@2 BJ BK@3 ~@2 BL@2 BM BN BO@2 BP BQ BR BS@3 BT@3 BU@3 BV@2 BW BX BY@2
  BZ@2 CA@3 CB CC@8 CD@2 CE@5 CF@4
>`.pickRestart({
  A: "~@5 eb4@6 d4@5 eb4@5 bb3@5 ~ g3@5 ~@11 eb5@4 ~, [g4,bb4]@11 ~@5 eb3@4 ~@4, ~@37 g4@11", // Gm
  B: "~@5 bb3@5 ~ a3@5 bb3@5 f3@6 d3@5 bb2@5 f4@6 g4@5, f4@7 ~@9, eb5@11 d5@11 ~@26, ~@11 ab3 ~@36",
  C: "[f3,ab4]@5 c4@5 ~ eb4@5 bb3@5 f4@5 ~ bb4@5 bb2@5 f4@6 ab4@5, ~@8 d4@8 bb3@7 ~", // Fm
  D: "~@5 eb3@5 ~ d3@5 eb3@5 bb2@6 g2@5 ~@5 eb3@5 ~ d3@5, [bb3,eb4]@21 ~@11 eb2@10 ~@6, ab4@11 g4@11 ~@26", // Eb5
  E: "eb3@5 g3@5 ~ f3@5 g3@5 bb3@5 ~ [eb2,ab3]@5 [eb2,bb3]@5 db4@5 ~ [eb2,db4]@5, ~@32 eb4@11 g3@3 ~@2", // Ab5 Eb5 Eb7
  F: "[ab3,c4]@5 c4@5 ~ [bb3,eb4]@5 c4@5 eb4@5 ~ [eb2,bb3,db4]@5 ~@5 ab4@5 ~ [eb2,ab3,c4]@5, eb2@12 ~@4 ab3@11 ~@5 c4@11 ~@5, ~@4 [eb2,eb4] ~", // Ab Eb5 Eb7 Ab Eb
  G: "[d4,f4]@5 f4@5 ~ [eb4,ab4]@5 f4@5 ab4@5 ~ [eb4,g4]@5 ab4@5 f5@5 ~ [eb2,d4]@5, eb3@16 d4@11 ~@5 f4@11 ab4@3 ~@2", // Dm Ab5 Eb Ebmaj7
  H: "g4@5 bb4@6 [f4,ab4]@5 bb4@5 eb5@5 ~ [bb4,d5]@5 eb5@5 g5@5 ~ [d4,f5]@5, eb2@7 ~@9, eb4@10 ~@6 g4@10 ~@6 g4@11 ~@5", // Fm Bb Dm
  I: "[g5@5 eb5@5 ~ [g4,d5]@5 ~@5 c5@5 ~ bb4@5 eb4@3 d4@2 c4@2 d4@3 ~ g4@4 ~@6 f4@5 ~ eb4@5 f4@5 c4@5 ~ a3@5 ~@11 eb5@5, eb4@11 ~@5 eb5@48 ~@32, ~@16 c4@10 d4@5 ~ c5@32 ~@32, ~@37 a4@5 eb4@5 f3@6 ~@27 f3@8 ~@8, ~@48 a4@16 ~@21 a4@11]/2", // G5
  J: "[bb4,d5]@5 ~@6 f4@5 g4@5 eb4@6 d4@5 ~@5 bb4@5 ~ a4@5, bb3@12 ~@4 eb3@11 ~@5 c4@16, ~@5 bb4@27 f3@10 ~@6", // Bb
  K: "~@5 bb3@5 ~ a3@5 bb3@5 f3@5 ~ d3@5 ~@5 bb3@5 ~ a3@5, [d4,bb4]@17 ~@15 bb2@16", // Gm
  L: "bb3@5 [bb2,d4]@6 [a2,c4]@5 [bb2,d4]@5 [d3,f4]@5 ~ [bb2,c3,eb4]@5 [d3,f4]@5 [f3,ab4]@6 [bb2,ab3,d4]@5, ~@32 bb2@9 ~@7", // Bb Am Bb Dm Cm7 Dm Fm Bb7
  M: "[g3,eb4]@5 [bb3,g4]@5 ~ [ab3,f4]@5 [bb3,g4]@5 [g3,bb4]@6 [bb2,f3,ab4]@5 [g3,bb4]@5 [bb3,eb5]@5 ~ [bb3,d4]@5, bb2@8 ~@8 bb2@5 ~@3, ~@11 g4 ~@31 g4@3 ~@2", // Cm Eb Db Eb Gm Bb7 Gm Eb5 …
  N: "[c4,a4]@5 [eb4,c5]@6 [d4,bb4]@5 [eb4,c5]@5 [c4,eb5]@5 ~ [bb3,d5]@5 [c4,eb5]@5 [bb3,c6]@6 [bb2,a3]@5, bb3@17 ~@26 eb5@2 ~@3", // F Cm Gm Cm Bb Cm Bbsus2 Bbmaj7
  O: "[bb3,d5]@5 [d4,bb4]@5 ~ [c4,a4]@5 [d4,bb4]@5 [f4,d5]@5 ~ [eb4,c5]@5 [f4,d5]@5 [ab4,f5]@5 ~ [g4,eb5]@5, bb2 ~@2", // Bb Gm F Gm Dm Cm Dm Db …
  P: "~@5 bb3@5 ~ a3@5 bb3@5 f3@5 ~ d3@5 bb2@5 [eb4,g4]@5 ~ [d4,f4]@5, [ab4,f5] ~@2", // Eb Dm Db
  Q: "~@5 bb3@6 ab3@5 bb3@5 g3@5 ~ eb3@5 bb2@5 [f4,d5]@6 [g4,eb5]@5, [eb4,g4] ~@2", // Dm Cm Eb
  R: "~@5 bb2@6 a2@5 bb2@5 d3@5 ~ [c3,f5]@5 d3@5 f3@6 [eb3,f4,c5]@5, [ab4,f5]@11 ~@16 ab4@3 ~@2 [ab4,b4]@11 ~@5", // F5 F7 Db Abm
  S: "f3@5 ab3@5 ~ g3@5 ~@5 b3@6 d4@5 f4@5 eb4@5 ~ d4@5, [d4,b4]@16 ab3@9 ~@7 b2@9 ~@7", // G
  T: "~@5 g4@5 ~ c5@5 ~@5 d5@5 ~ c5@5 bb3@5 eb4@5 ~ c5@5, [c3,eb4] ~ [c4,eb5] ~@3", // Cm
  U: "~@5 ab4@6 c5@5 eb5@5 d5@5 ~ c5@5 ~@5 g4@6 c5@5, [ab3,f4]@8 ~@8 ab2@9 ~@7 eb3@9 ~@7", // Db
  V: "~@5 b4@6 c5@5 ~@5 d5@6 c5@5 g3@5 f4@5 ~ b4@5, [f3,ab4] ~ [gb3,eb5] ~@3", // Fm Ebm
  W: "c5@5 g4@6 eb4@5 ~@5 eb3@6 g3@5 bb3@5 a3@5 ~ g3@5, c3@11 ~@13, ~ c4 ~",
  X: "~@5 eb5@5 ~ d5@5 eb5@5 c5@5 ~ a4@5 ~@5 c4@6 f3@5, a3@12 ~@20 f4@11 ~@5",
  Y: "~@5 f4@5 ~ eb4@5 f4@5 bb4@6 [c4,c5]@5 ~@5 ab3@6 f3@5, bb3@10 ~@6 f3@27 ~@5, ~@7 bb3@9, ~@2 db4, ~@16 db5@5 ~@3", // C
  Z: "~@5 db5@5 ~ c5@5 db5@5 bb4@5 ~ g4@5 ~@5 bb3@6 eb3@5, g3@8 ~@24 eb4@9 ~@7",
  AA: "~@5 eb4@5 ~ db4@5 eb4@5 ab4@6 [bb3,bb4]@5 ~@5 g3@6 eb3@5, ab3@8 ~@8 eb3@27 ~@5, ~@21 ab3@23 ~@4, ~@8 c4@3 ~, ~@32 c5@9 ~@7", // Bb
  AB: "~@5 d4@5 ~ ab4@5 c5@5 bb4@6 ab4@5 g3@5 db4@5 ~ bb4@4 ~, f3@3 ~@13",
  AC: "~@5 c4@5 ~ g4@5 bb4@5 ab4@6 g4@5 f3@5 c4@5 ~ ab4@5, e3 ~@5",
  AD: "d3@5 bb3@6 ab4@5 ~@5 ab4@6 g4@5 ~@5 c5@5 ~ eb4@5, ~@2 eb3 ~ a2 ~",
  AE: "~@5 d4@5 ~ c4@5 d4@5 [d3,bb3]@6 [c3,a3]@5 [d3,bb3]@5 [f3,d4]@6 [ab3,f4]@5, bb2@3 ~@13", // Gm F Gm Dm Db
  AF: "[bb2,ab4]@5 [d3,f4]@6 [c3,eb4]@5 [d3,f4]@5 [f3,d4]@6 [eb3,c4]@5 [f3,d4]@5 [d3,f4]@6 [bb2,ab4]@5", // Bb7 Dm Cm Dm Cm Dm Bb7
  AG: "c5@5 eb4@5 ~ [f3,d4]@5 bb4@5 db4@5 ~ [eb3,c4]@5 ab4@5 b3@6 [d3,bb3]@5, ~@16 g2@11 ~@5 f2@10 ~@6", // Dm Cm Gm
  AH: "~@5 g4@5 ~ f4@5 g4@5 [g3,eb4]@6 [f3,d4]@5 [g3,eb4]@5 [bb3,g4]@6 [db4,bb4]@5, eb2@11 ~@26 f4 ~@10", // Cm Dm Cm Eb Gb
  AI: "[eb3,db5]@5 [g3,bb4]@6 [f3,ab4]@5 [g3,bb4]@5 [bb3,g4]@6 [ab3,f4]@5 [bb3,g4]@5 [g3,bb4]@6 [eb3,db5]@5", // Eb7 Gm Fm Gm Eb Db Eb Gm …
  AJ: "f5@5 ab4@5 ~ [bb3,g4]@5 eb5@5 gb4@6 [ab3,f4]@5 db5@5 e4@6 [g3,eb4]@5, ~@8 c3@5 ~@3 bb2@5 ~@3", // Eb Db Cm
  AK: "~@5 c5@5 ~ bb4@5 c5@5 [c4,ab4]@6 [bb3,g4]@5 ab4@5 c5@6 eb5@5, ab2@9 ~@23 c4@10 ~@6", // Fm Eb
  AL: "g5@5 bb4@5 ~ [c3,a4]@5 f5@5 ab4@5 ~ [bb2,g4]@5 eb5@5 gb4@5 ~ [a2,f4]@5, ~@16 d4@11 ~@5 c4@11 ~@5", // F Eb Dm
  AM: "~@5 d5@5 ~ c5@5 d5@5 [d4,bb4]@6 [c4,a4]@5 bb4@5 d5@5 ~ f5@5, bb2@4 ~@12 d4@5 ~@3", // Gm F
  AN: "ab5@5 c5@5 ~ [d3,b4]@5 g5@5 bb4@5 ~ [c3,a4]@5 f5@5 ab4@5 ~ [b2,g4]@5, ~@16 eb4@9 ~@7 d4@10 ~@6", // G F Em
  AO: "~@5 eb5@6 d5@5 eb5@5 [eb4,c5]@5 ~ [d4,b4]@5 [eb4,c5]@5 eb5@5 ~ g5@5, c3@3 ~@13", // Cm G Cm
  AP: "~@5 ab4@5 ~ [g4,b5]@5 [ab4,c6]@5 [eb4,g5]@6 [c4,ab5]@5 g4@5 [d4,gb5]@5 ~ [bb3,g5]@5, c6 ~@3", // G Ab Eb Fm D Eb
  AQ: "gb4@5 c4@5 ~ [a3,gb5]@5 [eb4,g5]@5 [bb3,d5]@6 [g3,eb5]@5 d4@5 [a3,db5]@6 [gb3,d5]@5, c6@11 ~@37", // D Eb Bb Cm A D
  AR: "[g3,bb5]@5 g5@5 ~ d5@5 eb5@5 g5@5 ~ c6@5 bb5@5 a5@5 ~ g5@5, ~@16 c3@9 ~@7 db3@11 ~@5", // Gm
  AS: "gb5@3 g5@2 a5@5 ~ d5@5 eb5@5 d5@5 ~ [d2,c5]@5 bb4@5 c5@5 ~ [gb2,a4]@5, d3@10 ~@22 e2@11 ~@5", // D7 Gbm
  AT: "[g2,bb4]@5 d5@5 ~ g5@5 bb5@5 a5@6 g5@5 ~@5 bb4@5 ~ g5@3 ~@2, ~@16 g3@9 ~@7 f3@8 ~@8", // Gm
  AU: "c5@5 eb5@5 ~ g5@5 ~@5 a5@6 g5@5 ~@5 d5@5 ~ g5@5, eb3@8 ~@8 [eb2,bb5]@8 ~@8 bb2@9 ~@7", // Eb5
  AV: "~@5 gb5@5 ~ g5@5 ~@5 a4@5 ~ g4@5 ~@5 c5@5 ~ gb4@5, [c3,eb5]@8 ~@8 [db3,bb4]@8 ~@8 d3@9 ~@7", // Cm Gb
  AW: "[g4@5 bb4@5 ~ d5@5 ~@5 bb2@6 d3@5 ~ bb4@2 c5@2 e3@5 ~ d3@5 ~@5 db5@5 ~ c5@5 db5@5 bb4@6 g4@5 ~@5 g3@6 c3@5 ~@5 ab4@5 ~ g4@5 ab4@5 c5@5 ~ f5@5 ~@5 c3@6 eb3@5, g2@20 ~@12 f3@6 ~@10 e3@14 ~@34 f3@13 ~@3 ab3@32, ~@16 g5@11 ~@5 c5@2 ~@3 bb4@16 ~@27 e4@11 bb4@11 ~@15 c4@27, ~@41 f4@7, ~@8 [ab4,ab5]]/3", // Ab
  AX: "[~@5 ab5@5 ~ g5@5 ab5@5 f5@5 ~ d5@5 ~@5 d4@5 ~ bb3@5 ~@5 g5@5 ~ f5@5 g5@5 eb5@5 ~ bb4@5 g4@5 [g3,bb4]@6 eb3@5 ab3@5 [eb3,c5]@6 [db3,bb4]@5 [c3,ab4]@5 [bb2,g4]@6 ab2@5 g2@5 [c3,eb4]@6 bb2@5 a2@5 bb2@3 a2@2 ~@3 a2@3 d4@5 c4@6 bb3@5 ab3@5 g3@6 f3@5, d3@13 ~@19 bb4@11 ab5@11 ~@37 db5@12 ~@51 g2@3 ~@3 bb2@13 ~@19, ~@48 eb4@11 ~@64 f4@11 ~@5 gb4@10 f4@6 eb4@6 ~@31]/4", // Gm Cm Gb Fm Eb Cm
  AY: "~@5 eb4@5 ~ d4@5 eb4@5 bb3@6 ab3@5 g3@5 f3@6 eb3@5, bb2 ~@2, g3@13 ~@35",
  AZ: "~@5 f4@5 ~ eb4@5 f4@5 d4@6 bb3@5 ab3@5 g3@5 ~ f3@5, [bb2,d3]@11 ~@37", // Bb
  BA: "~@5 g4@5 ~ f4@5 g4@5 eb4@5 ~ c4@5 bb3@5 ab3@6 g3@5, [bb2,eb3]@11 ~@37", // Eb5
  BB: "~@5 ab4@5 ~ g4@5 ab4@5 f4@5 ~ d4@5 c4@5 bb3@6 ab3@5, [bb2,f3]@11 ~@37", // Bb5
  BC: "~@5 bb3@5 ~ ab3@5 bb3@5 g3@5 ~ eb3@5 ~@11 eb5@5, g3@21 ~@11 bb2@9 ~@7, [eb4,bb4]@16 ~@21 [g3,g4]@11", // Eb5 G
  BD: "~@5 bb3@6 [a3,d5]@5 bb3@5 f3@5 ~ d3@5 ~@5 f4@6 g4@5, f3@10 ~@6 bb2@5 ~@3, f4 ~@2, eb5@11 ~@37", // D5
  BE: "ab4@5 c4@5 ~ [g3,eb4]@5 d4@5 f4@5 ~ [eb3,bb4]@5 bb3@5 f4@5 ~ [bb2,ab4]@5, ~@8 f3@5 ~@3 d3@6 ~@2", // Cm Eb5 Bb7
  BF: "[eb2,g4]@5 bb3@5 ~ [f3,db4]@5 c4@5 eb4@6 [db3,ab4]@5 ab3@5 eb4@6 ab2@5, ~@16 eb3@11 ~@5 c3@11 g4@2 ~@3", // Eb Db Db5
  BG: "f4@5 ab3@5 ~ [eb3,c4]@5 bb3@5 d4@5 ~ [c3,g4]@5 g3@5 d4@6 g2@5, d2@8 ~@8 d3@10 ~@6 bb2@11 f4@3 ~@2", // Cm C5
  BH: "[eb4@5 g3@6 [db3,bb3]@5 ab3@5 c4@6 bb2@5 f3@7 c4@7 [g2,eb4]@9 [ab2,bb3,d4]@30 ~@11, c2@11 ~@5 c3@11 f4@4 ~ ab2@15 ~@49]/2", // Gb Cm Bb7
  BI: "[[d3,ab4,ab5]@5 eb3@6 f3@2 ~ g3@2 ab3@3 bb3@3 c4@2 d4@3 eb4@5 [ab3,ab4,c5,f5]@6 [bb3,g4]@16 ~ d5@2 ~ d5@6 ~ eb5@4 ~ eb5@5 ~ bb4@5 ab4@5 bb4@6 g4@4, bb4@3 ~@2 [g4,bb4,g5]@11 ~@22 bb4@32 [eb3,g4]@18 ~@8, ~@38 eb5@12 ~@4 [bb2,f4]@17 ~@25, ~@54 eb5@2 ~ eb5@2 ~@37]/2", // Ddim Fm Eb Gm Eb Bb5
  BJ: "~ f4@6 g4@5 eb4@5 d4@5 ~ eb4@5 bb3@6 ab3@5 bb3@5 g3@4, ~@23 eb3@20 ~@5",
  BK: "[~@2 f3@6 g3@6 eb3@6 d3@6 f3@3 ~ eb3@3 f3@3 eb3@15 ~@2 eb2@48 ~@43]/3", BL: "[~@33 eb3@32 bb3@16 ~@8 ab3@7]/2",
  BM: "~ g3@8 c4@16 bb3@8 ab3@8 ab3@4 g3@3", BN: "~ ab3@8 c4@8 f3@8 bb3@16 ab3@7",
  BO: "[~ g3@8 g3@4 f3@4 g3@8 bb3@8 eb3@8 eb3@4 d3@4 eb3@8 g3@8 c3@8 d3@4 eb3@4 ~@8 eb4@7, ~@33 bb3@32 eb4@16 f3@15]/2",
  BP: "~ d4@8 ~@16 f4@8 eb4@8 eb4@4 d4@3, ~ bb2@16 bb3@31, ~@9 g4@16 ~@23",
  BQ: "~ [a3,eb4]@8 [g3,g4]@8 c4@8 ~@4 bb3@2 a3@2 g3@8 [a3,eb4]@7, ~@17 a3@12 ~@19, ~@25 f4@16 ~@7", // Adim G Adim
  BR: "~ [bb3,d4]@8 d4@4 c4@4 [bb3,d4]@8 [ab3,f4]@8 [g3,bb3]@8 bb3@4 ab3@3, ~@9 bb2@8 ~@24 g2@7", // Bb Db Gm
  BS: "[~ [g3,bb3]@8 [f3,d4]@8 [eb3,g3]@8 [f3,ab3]@4 [g3,bb3]@4 c4@8 bb3@4 c4@4 d4@8 g3@4 f3@4 [g3,bb3]@8 [bb3,d4,ab4]@8 [eb3,g4]@8 ab3@4 g3@4 ab3@8 [c4,bb4]@8 ab4@8 ab4@4 g4@4 [d4,ab4]@8 g3@4 ab3@3, ~@17 eb4@32 bb4@24 ~@16 c5@16 ~@8 f3@24 ~@7, ~@33 ab3@24 f4@8 ~@16 eb4@48 ~@8 [c4,c5]@7]/3", // Gm Dm Eb Fm Gm Bb7 Eb C7 …
  BT: "[~ f4@8 ~@4 eb4@2 d4@2 c4@8 [d4,ab4]@8 [eb4,g4]@8 [bb3,g4]@4 [ab3,f4]@4 g4@8 [d3,bb4]@8 eb4@8 [ab3,f4]@4 [g3,eb4]@4 f4@8 [f3,ab4]@8 d4@8 g3@8 f3@8 [bb3,d4]@8 c4@8 g4@7, ~ bb3@32 eb3@24 ~@8 c3@24 ~@8 bb2@47, ~ d4@12 ~@36 bb3@24 ~@8 ab3@24 eb4@16 ~@8 [g3,eb5]@15, ~@9 bb4@16 ~@72 bb4@32 ~@15]/3", // Ddim Eb Db Gm Db Cm Fm Bb …
  BU: "[~@9 eb5@8 d5@8 bb4@4 a4@4 ~@8 [g2,f5]@8 eb5@8 [c4,eb5]@4 [bb3,d5]@4 [a4,eb5]@8 [eb3,g4,g5]@8 c5@8 ~@4 [d4,bb4]@2 [c4,a4]@2 [bb3,g4]@8 [f3,c4,a4,eb5]@8 [bb3,d5]@8 d5@4 c5@4 [bb3,d5]@8 [a3,c4,f4,f5]@7, ~ [f3,c5]@24 g5@16 ~@8 c3@16 ~@16 f3@16 ~@24 f3@8 ~@15, ~ a2@16 bb2@16 g3@24 ~@8 c4@28 ~@20 [d4,bb4]@16 ~@15, ~@25 d3@8 bb4@32 ~@16 a4@12 ~@51, ~@89 f5@16 ~@39]/3", // G7 Cm Bb Adim Eb Gm F Eb …
  BV: "[~ [g3,bb4]@8 bb4@4 a4@4 [g3,bb4]@8 [f3,ab3,d4,d5]@8 [bb3,eb4,g4]@8 [c4,f4,a4]@8 ~@8 e3@8 c4@8 bb3@8 ~@8 eb4@7, ~ [d4,g4]@16 ~@32 bb4@32 [c4,a4]@15, ~@9 d3@8 ~@16 eb3@24 ~@8 f3@31, ~@49 [db4,g4]@16 f4@24 ~@7]/2", // Gm Ddim Eb F G5 F Dbdim
  BW: "~ [d4,bb4]@8 [f4,d5]@4 [g4,eb5]@4 f5@8 d5@8 bb4@8 [g4,eb5]@4 [ab4,f5]@3, ~ [bb2,bb3]@16 ab4@24 ~@7, ~@17 bb3@16 eb4@15", // Gm Dm Cm Db Bb
  BX: "~ [bb4,g5]@8 [eb4,g4,eb5]@8 [d4,f4,f5]@8 eb5@4 d5@4 [ab4,c5]@8 [ab3,f4,bb4,d5]@7, ~ eb3@16 bb3@16 ~@15, ~@25 g4@16 ~@7, ~@25 bb4@8 ~@15", // Eb Dm Ab Bb7
  BY: "[~ [g3,bb3,eb4,eb5]@8 eb4@4 d4@4 eb4@8 [bb3,g4]@8 [ab3,c4]@8 ab3@4 g3@4 ab3@8 [c4,eb4]@8 [f3,d4]@8 d4@4 c4@4 d4@8 [ab3,f4]@7, ~@9 c4@16 ~@16 f4@16 ~@16 bb3@16 ~@7]/2", // Eb Ab Cm Dm Db
  BZ: "[~ [g3,bb3]@8 [g3,bb3]@4 [f3,ab3]@4 [g3,bb3]@8 [bb3,d4]@8 eb3@8 eb3@4 d3@4 eb3@8 g3@8 ~@8 g4@4 f4@4 g4@8 [a4,eb5]@7, ~@33 bb4@32 eb5@24 ~@7, ~@33 g3@16 g4@24 ~@8 c4@15, ~@65 c3@16 ~@15]/2", // Gm Fm Gm Bb Adim
  CA: "[~ [bb3,bb4,d5]@8 [bb3,d4]@4 [ab3,c4]@4 [bb3,d4]@8 [d4,f4,f5,ab5]@8 [g4,eb5,g5]@8 [g4,eb5]@4 [f4,d5]@4 eb5@8 [e4,g5,bb5]@8 [f4,c5,ab5]@8 [f3,ab5]@4 [e3,g5]@4 [f3,ab5]@8 [a3,eb5,c6]@8 [d5,f5]@8 [f4,d5]@4 [eb4,c5]@4 d5@8 [d4,f5,ab5]@8 [eb4,bb4,g5]@8 [bb4,g5]@4 [ab4,f5]@3, ~ bb5@16 ~@24 c6@16 ~@16 f5@16 ~@8 bb3@16 f4@24 [eb3,bb3]@7, ~@9 g5@16 ~@8 eb4@16 g4@24 c4@8 f4@24 bb5@16 ~@23]/3", // Bb Ab Bb Ddim Cm Dm Edim Fm …
  CB: "~@5 d4@4 c4@4 bb3@4 [c4,g4,eb5]@8 [a4,eb5]@4 [b4,d5]@4 c4@4 bb3@4 ab3@4 g3@3, ~ [eb4,bb4,g5]@8 [d5,bb5]@8 ~@8 c3@8 [c5,eb5]@8 [b4,g5]@7", // Cm Adim Bm Eb Gm Cm Em
  CC: "[~ ab3@8 d5@4 eb5@4 ~@4 b4@4 [g3,c5]@4 [f3,d5]@4 b4@8 g4@8 eb5@4 d5@4 eb5@4 f5@4 ~@4 f3@4 g3@4 ab3@4 g3@4 f3@4 e3@4 d3@4 e5@8 c5@8 ab4@4 g4@4 ab4@4 bb4@4 ~@4 bb2@4 c3@4 d3@4 c3@4 bb2@4 a2@4 g2@4 a4@8 f4@8 d5@4 c5@4 d5@4 eb5@4 ~@4 eb3@4 f3@4 g3@4 f3@4 eb3@4 d3@4 c3@4 d5@8 bb4@8 g4@4 f4@4 g4@4 ab4@4 ~@4 ab3@4 bb3@4 c4@4 ~@4 ab3@4 g3@4 f3@4 [g3,bb4]@8 [ab3,c5]@8 d3@8 [e3,db4]@8 c4@8 ~@4 g4@4 ~@4 eb3@4 db3@4 c3@4 db4@8 db4@4 c4@4 ~@4 bb2@4 c3@4 db3@3, ~ c5@20 ~@28 c5@32 bb4@32 ~@16 g4@8 c5@16 bb4@8 ~@16 bb4@32 ab4@32 ~@16 f4@8 bb4@16 ab4@8 eb4@16 bb4@16 ab4@16 ab4@24 ~@16 [f4,ab4]@7, ~@9 ab2@8 f5@32 ~@16 d5@8 g5@16 f5@8 ~@16 f5@32 eb5@32 ~@16 c5@8 f5@16 eb5@8 ~@16 eb5@32 db5@24 ab4@16 g4@16 f4@16 eb4@8 ~@8 f4@8 [db4,bb4]@8 ~@7, ~@17 ab3@8 ~@8 g3@36 ~@28 c3@36 ~@28 f2@36 ~@28 bb2@36 ~@12 bb3@16 ~@32 f3@20 ~@12 bb2@20 ~@11]/8", // C5 Dm Gm Ab Dbm Fm Gb
  CD: "[~ [bb3,g4]@8 g4@4 f4@4 ~@4 eb2@4 f2@4 g2@4 ab2@4 bb2@4 [c3,c4]@4 [db3,bb3]@4 c4@8 [eb4,g4]@8 [ab3,f4]@8 [ab3,f4]@4 [g3,eb4]@4 [ab3,f4]@8 [bb3,g4]@4 [ab3,f4]@3, ~ eb3@20 ~@28 eb3@32 d3@15, ~@9 eb4@16 [db4,bb4]@8 [c4,eb4]@8 ~@55, ~@17 g4@8 ~@16 ab4@16 ~@8 bb4@31]/2", // Eb C Gb Eb Db Cm Db Eb …
  CE: "[~ [g3,eb4]@8 [bb3,g4]@4 [ab3,f4]@4 [bb3,g4]@8 a4@4 g4@4 [d4,f4,d5]@8 [d4,bb4]@4 [c4,ab4]@4 [d4,bb4]@8 [ab3,f4,d5,f5]@8 [g3,bb4,eb5]@8 eb5@4 d5@4 eb5@8 [bb3,g5]@8 [ab3,ab4,c5]@8 [ab3,c4]@4 [g3,bb3]@4 [ab3,c4]@8 [c4,eb4,g4,eb5]@8 [f3,f4,ab4,d5]@8 d5@4 c5@4 [g4,d5]@8 [ab3,d4,f5]@8 [g3,eb4,bb4]@8 g3@4 f3@4 g3@8 [bb3,f4,ab4]@8 eb3@8 eb3@4 d3@4 eb3@8 [g3,d4,f4]@8 c3@8 [d3,ab4]@4 [eb3,g4]@3, ~ eb3@32 ~@8 g5@16 ~@16 [g4,c5]@8 eb4@24 ~@32 [d4,f4]@8 ~@48 [eb4,g4]@16 ~@31, ~ eb5@16 ~@8 [c4,eb5]@8 bb3@16 ~@24 c4@16 ~@48 bb3@16 ~@72 [c4,eb4]@15, ~@81 g4@16 ~@8 [ab4,f5]@16 ~@24 bb4@16 ~@8 eb5@8 db5@24 c5@8 bb4@24 ~@7]/5", // Cm Eb Db Eb Dm Gm Fm Gm …
  CF: "[~@9 d4@4 c4@4 d4@8 bb3@8 ~@8 c4@9 f3@9 f3@5 eb3@5 f3@10 bb3@11 [eb2,g3,bb3,eb4]@78 ~@24, ~ ab4@32 eb4@36 d4@21 ~@102, ~ f3@16 [bb2,f3]@16 [a2,gb4]@17 [bb2,f4]@40 ~@102, ~@9 ab3@8 ~@175]/4", // Eb Bb5 D Bb5
})).s("gm_harpsichord").gain(0.22).pan(0.6)

// other · acoustic bass
const acoustic_bass = note(`<
  ~@75 A@2 B C D E F G H I@2 J K@2 L M N O P@2 Q R B C D S T U V W X@2 Y Z@3 AA@2 AB AC AD AE AF@2 AG AH AI@3
>`.pickRestart({
  A: "[~@33 eb3@32 bb3@16 ~@8 ab3@7]/2", B: "~ g3@8 c4@16 bb3@8 ab3@8 ab3@4 g3@3", C: "~ ab3@8 c4@8 f3@8 bb3@16 ab3@7",
  D: "~ g3@8 g3@4 f3@4 g3@8 bb3@8 eb3@8 eb3@4 d3@3", E: "~ eb3@8 g3@8 c3@8 d3@4 eb3@4 f3@15", F: "~ bb2@16 bb3@31",
  G: "~ a3@8 g3@8 a3@12 bb3@2 a3@2 g3@8 a3@7", H: "~ bb3@8 bb2@8 bb3@8 ab3@8 g3@8 g2@7",
  I: "[~ g3@8 f3@8 eb3@8 f3@4 g3@4 ab3@24 g3@4 f3@4 g3@8 bb3@8 eb3@8 ab3@4 g3@3]/2", J: "~ ab3@8 c4@8 f3@24 g3@4 ab3@3",
  K: "[~ bb3@32 eb3@24 d3@8 c3@24 f3@7]/2", L: "~ bb2@47", M: "~ a2@16 bb2@16 ~@8 g2@7", N: "~ c3@16 ~@8 eb3@8 f3@15",
  O: "~@9 f3@8 bb3@8 f3@8 bb3@8 a3@7", P: "[~ g3@8 d3@8 g3@8 f3@8 eb3@24 e3@8 f3@31]/2", Q: "~ bb2@16 ~@31",
  R: "~ eb3@16 bb3@16 ~@8 ab3@7", S: "~ eb3@8 g3@8 c3@16 c4@15", T: "~ bb3@8 bb3@4 ab3@4 bb3@8 d4@8 eb4@15",
  U: "~@9 e4@8 f4@8 f3@4 e3@4 f3@8 a3@7", V: "~ bb3@16 ~@8 d4@8 eb4@8 eb3@7",
  W: "~ eb4@4 d4@4 c4@4 bb3@4 c4@8 c3@8 c4@4 bb3@4 ab3@4 g3@3",
  X: "[~ ab3@8 ab2@8 ab3@8 g3@4 f3@4 g3@36 f3@4 g3@4 ab3@4 g3@4 f3@4 e3@4 d3@3]/2", Y: "~ c3@36 bb2@4 c3@4 d3@3",
  Z: "[~ c3@4 bb2@4 a2@4 g2@4 f2@36 eb3@4 f3@4 g3@4 f3@4 eb3@4 d3@4 c3@4 bb2@36 ab3@4 bb3@4 c4@4 bb3@4 ab3@4 g3@4 f3@3]/3",
  AA: "[~ g3@8 ab3@8 d3@8 e3@8 f3@20 eb3@4 db3@4 c3@4 bb2@20 bb2@4 c3@4 db3@3]/2",
  AB: "~ eb3@20 eb2@4 f2@4 g2@4 ab2@4 bb2@4 c3@4 db3@3", AC: "~ eb3@32 d3@15", AD: "~ eb3@32 bb3@15",
  AE: "~@9 ab3@8 g3@8 c4@16 bb3@7", AF: "[~ ab3@8 ab3@4 g3@4 ab3@8 c4@8 f3@8 bb3@16 ab3@8 g3@8 g3@4 f3@4 g3@8 bb3@7]/2",
  AG: "~ eb3@8 eb3@4 d3@4 eb3@8 g3@8 c3@8 d3@4 eb3@3", AH: "~ f3@16 bb2@16 a2@15", AI: "[~ bb2@20 eb2@39 ~@12]/3",
})).s("gm_acoustic_bass").gain(0.19).pan(0.1)

// other · drawbar organ
const drawbar_organ = note(`<
  ~@79 A@2 B C D E F@2 G H@2 I@3 J K L M N@2 O P Q R@2 S ~@5 T U@2 V W X Y@2 Z AA@2 AB@3
>`.pickRestart({
  A: "[~@33 bb3@32 eb4@16 ~@8 eb4@7]/2", B: "~ d4@8 g4@16 f4@8 eb4@8 eb4@4 d4@3", C: "~ eb4@8 g4@8 c4@8 f4@16 eb4@7",
  D: "~ d4@8 d4@4 c4@4 d4@8 f4@8 bb3@8 bb3@4 ab3@3", E: "~ bb3@8 d4@8 g3@8 ab3@4 bb3@4 c4@8 bb3@4 c4@3",
  F: "[~ d4@8 f4@8 bb3@8 d4@8 eb4@48 d4@8 c4@7]/2", G: "~ d4@12 eb4@2 d4@2 c4@8 d4@8 eb4@8 bb3@4 ab3@3",
  H: "[~ bb3@24 ab3@4 g3@4 ab3@24 g3@8 f3@8 bb3@8 g3@15]/2",
  I: "[~ f3@24 d3@8 g3@24 c4@4 bb3@4 c4@28 d4@2 c4@2 bb3@8 c4@8 d4@16 ~@8 c4@7]/3", J: "~ d4@16 ~@8 ab3@8 bb3@8 c4@7",
  K: "~ db4@16 c4@8 bb3@8 c4@15", L: "~ bb3@16 bb3@16 eb4@15", M: "~@9 eb4@8 d4@8 g4@16 f4@7",
  N: "[~ bb3@8 eb4@4 d4@4 eb4@8 g4@8 c4@8 f4@16 eb4@8 d4@8 d4@4 c4@4 d4@8 f4@7]/2",
  O: "~ bb3@8 bb3@4 ab3@4 bb3@8 d4@8 g3@15", P: "~ g4@24 g4@4 f4@4 g4@8 a4@7",
  Q: "~ bb4@8 d4@4 c4@4 d4@8 f4@8 g4@8 g4@4 f4@3", R: "[~ g4@24 c4@8 f4@24 f4@4 eb4@4 f4@24 bb3@7]/2",
  S: "~ eb4@8 ~@39", T: "~@11 bb3@5", U: "[~ eb4@16 ~@8 db4@8 c4@8 f4@16 eb4@8 db4@8 db4@4 c4@4 db4@8 f4@7]/2",
  V: "~ bb3@8 eb4@16 db4@8 c4@8 c4@4 bb3@3", W: "~ c4@8 eb4@8 ab3@8 ab3@4 g3@4 ab3@8 bb3@4 ab3@3",
  X: "~ g3@8 bb3@4 ab3@4 bb3@8 c4@8 d4@8 d4@4 c4@3",
  Y: "[~ d4@8 f4@8 bb4@8 g4@8 eb4@24 c4@4 bb3@4 c4@8 eb4@8 f4@8 d4@7]/2", Z: "~ g4@8 d4@8 eb4@8 ~@16 f4@7",
  AA: "[~ eb4@16 ~@8 d4@8 c4@24 ab3@8 f3@16 ~@8 c4@7]/2", AB: "[~@2 f3@9 f3@5 eb3@5 f3@10 bb3@11 g3@78 ~@24]/3",
})).s("gm_drawbar_organ").gain(0.19).pan(0.3)

// other · piccolo
const piccolo = note("<~@89 A B C@2 D E F G H ~@2 I J@2 K L M N O P Q R@2 ~@2 S T@2 U V@2 W X@3>".pickRestart({
  A: "~ bb4@32 eb5@15", B: "~@9 eb5@8 d5@8 g5@16 f5@7",
  C: "[~ eb5@8 eb5@4 d5@4 eb5@8 g5@8 c5@8 f5@16 eb5@8 d5@8 d5@4 c5@4 d5@8 f5@7]/2",
  D: "~ bb4@8 bb4@4 a4@4 bb4@8 d5@8 g4@8 a4@7", E: "~ bb4@32 a4@15", F: "~ bb4@8 d5@4 eb5@4 f5@8 d5@8 bb4@8 eb5@4 f5@3",
  G: "~ g5@8 eb5@8 f5@8 eb5@4 d5@4 c5@8 d5@7", H: "~ eb5@10 ~@37", I: "~@17 eb5@31",
// … 9 more lines

More by Bach Johann Sebastian