Strudelify

Orchestral Suite No.2 in B minor BWV 1067

J. S. Bach

KeyF majorTempo80 bpm
0:00/0:00
// Orchestral Suite No.2 in B minor BWV 1067 — J. S. Bach
// 80 bpm, 2/4, key F 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 (3/4 at bar 1, 1/4 at bar 73, 2/4 at bar 73, 1/4 at bar 85, ...) are rendered on a constant 2/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/3408791; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 136 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/2)

// 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 · harpsichord · "Piano"
const harpsichord = note(`<
  A B@2 C D@2 E F G H I@2 A B@2 C D@2 E F G H I@2 J K@2 L M@2 N O P Q R@2 S T@2 U V@2 W X Y Z AA@2 J K@2 L M@2 N O P Q
  R@2 S T@2 U V@2 W X Y Z AA@2 AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AB AR@2 AS@2 AT AU AV AW AX AY@2 AZ BA BB
  BC BD BE BF@3 BG BH BI BJ BK ~ BL BM BN BO ~ BP BQ BR BS BT BU BV BW@2 BX BY BZ CA ~ CB CC
>`.pickRestart({
  A: "[d4,f4,a4] [d3,a4,d5]", B: "[[f3,a4,d5]@2 g3 a3 bb3 d4 ~ e4, ~ d5@3, ~ g4@2 g4]/2",
  C: "d4 ~@5 f5@6 e5@6 d5@6, g4 a4, e5 ~@3, ~ db4@23",
  D: "[e5 db5 [a4,d5]@2 ~ [d3,f4] [e3,g4] [f3,a4], [a3,a4]@2 d4@3 ~@3, ~@2 a4 d5]/2", // D5 Dm Em F A
  E: "[g3,g4,bb4,d5] [bb3,g4,d5,g5]", F: "[e3,d5,g5,bb5] [f3,a4,d5]", G: "[a3,a4,d5,f5] [d3,d5,f5,a5]",
  H: "[e3,g4,db5,g5] [db3,a4,e5]", I: "[[d3,a4,d5,f5]@2 a2@2 a3 b3 db4 a3, ~ [e4,a4,db5]@2 ~]/2",
  J: "[db3,e4,a4] [a2,a4,db5,e5]", K: "[[db3,e4,a4,e5]@2 d3 e3 f3 a3 d4 d3, ~ [a4,d5,f5]@3]/2",
  L: "[e3,g4,c5] [c3,e4,g4]", M: "[[e3,g4]@2 f3 g3 a3 c4 ~ f3, ~ [a4,c5]@3, ~ f4@2 f4]/2",
  N: "[bb3,f4,bb4,d5] [d4,f4,bb4]", O: "[g3,f4,bb4,d5] [a3,f4,c5]", P: "[c4,f4,a4] [f3,f4,a4,c5]",
  Q: "[d3,bb3,f4,bb4] [bb2,d4,f4,a4]", R: "[[c3,c4,e4,g4]@2 f2 a2 c3 f3 ~ c4, ~ f4@3, ~@2 c4@5 ~, ~ a3@2 a3]/2",
  S: "gb5 g5 [d4,c5,gb5,a5]@2, [d3,c5] ~", T: "[[gb3,c5,d5,a5]@2 g3 a3 bb3 d4 g4 g3, ~ [bb4,d5,g5]@3]/2",
  U: "[c4,g4,bb4] [e3,g4,bb4,c5]", V: "[[c3,g4,bb4,e5]@2 f2 g2 a2 c3 f3 a3, ~ [a4,c5,f5]@3]/2",
  W: "[e3,bb4,g5] [a2,a4,db5]", X: "[d3,f4,a4] [g2,g4,bb4], d5", Y: "bb3 a3 g3 a3, [d5,g5] [db5,bb5]",
  Z: "[f3,f5,a5] [g3,e5,g5] [d5,f5] e5, d5 [a3,a4]", AA: "[d5 db5 [d3,f4,a4,d5]@6, [a2,e4,a4] ~@3]/2",
  AB: "[d3,f5,a5,d6]@5 d3@5 [f3,d5,f5,a5]@4 d3@5 [a3,a4,d5,f5]@5", // Dm
  AC: "f3@5 d4@5 a3@4 [f3,f4,a4,d5]@5 [d3,a4,d5,f5]@5, ~@5 [f4,a4,d5]@9 ~@10", // Dm
  AD: "[g3,bb4,d5,e5]@5 [e3,g4,d5,e5]@5 [a3,a4,db5,e5]@4 [a2,a4,db5,g5]@5 d3@2 ~ e3@2, ~@19 [a4,d5,f5]@5", // Em7b5 Em7 A A7 Dm
  AE: "f3@2 e3@2 ~ [d3,f5,a5,d6]@5 d3@4 [f3,d5,f5,a5]@5 d3@5, [f4,a4,d5]@5 ~@19", // Dm
  AF: "[a3,a4,d5,f5]@5 f3@5 d4@4 a3@5 [d4,a4,d5,f5]@5, ~@5 [f4,a4,d5]@5 ~@2", // Dm
  AG: "f4@2 d4@2 ~ [b3,g4,d5]@5 d4@2 b3@2 [g3,b4,d5]@5 b3@2 ~ g3@2, f5@10 f5@9 ~@5, [a4,d5]@5 ~@5 [b4,d5]@4 ~@5 [g4,d5,f5]@5", // G D5 Bm G7
  AH: "[c4,g4,c5,f5]@5 e4@2 c4@2 ~ [f4,a4,c5,a5]@4 a4@2 ~ f4@2 [d4,b4,f5]@5, ~@5 [g4,c5,e5]@5 ~@4 a5@10, ~@14 c5@5 ~@5", // Csus4 F Bdim C
  AI: "f4@2 d4@2 ~ [b3,d5,f5]@5 d4@2 b3@2 e4@2 ~ f4@2 e4@2 ~ d4@2, a5@10 ~@4 [b4,e5,a5]@5 [b4,e5,ab5]@5, [d5,f5]@5 ~@5 [b4,f5,a5]@5 ~@9", // Bdim Esus4 E Dm Bm7b5
  AJ: "[c4,a4,e5,a5]@5 [a3,e5,a5,c6]@5 [d4,f5,a5,b5]@4 [b3,f5,a5,b5]@5 [e4,e5,ab5,b5]@5", // Am Bm7b5 E
  AK: "[g3,e5,ab5,d6]@5 [a3,e5,a5,c6]@5 a5@2 ab5@2 [a3,c5,e5,a5]@5 [c4,e5]@5, ~@10 [a2,c5,e5]@5 ~@9", // E7 Am C Am
  AL: "[f3,a4,d5,a5]@5 [d4,d5]@5 [e3,c5,a5]@4 [e4,c5]@5 [d3,b4,d5,a5]@5", // Dm D Am C Bm7
  AM: "[f4,d5]@5 [d4,b4,d5,a5]@5 [b3,d5,f5,ab5]@4 [c4,c5,e5,a5]@5 [d4,d5,f5,b5]@5", // Dm Bm7 Bdim Am Bdim
  AN: "[e4,c5,e5]@5 [e3,d5,e5,ab5]@5 [a3,c5,e5,a5]@9 [d3,f5,a5,d6]@5", // C E7 Am Dm
  AO: "d3@5 [f3,d5,f5,a5]@5 d3@4 [a3,a4,d5,f5]@5 f3@5", // Dm
  AP: "d4@5 a3@5 [f3,f4,a4,d5]@4 [d3,a4,d5,f5]@5 [g3,bb4,d5,e5]@5, [f4,a4,d5]@5 ~@7", // Dm Em7b5 Dm
  AQ: "[e3,g4,d5,e5]@5 [a3,a4,db5,e5]@5 [a2,a4,db5,g5]@4 d3@2 ~ e3@2 f3@2 ~ e3@2, ~@14 [a4,d5,f5]@5 [f4,a4,d5]@5", // Em7 A A7 Dm
  AR: "[f3@5 d4@5 a3@4 [d4,a4,d5,f5]@5 f4@2 ~ d4@2 [b3,g4,d5]@5 d4@2 b3@2 ~ [g3,b4,d5]@4 b3@2 ~ g3@2 [c4,g4,c5,f5]@5, ~@5 [f4,a4,d5]@10 ~@4 f5@10 f5@9 ~@10, ~@19 [a4,d5]@5 ~@5 [b4,d5]@5 ~@4 [g4,d5,f5]@5 ~@5]/2", // Dm G Csus4 Dm D5 Bm G7
  AS: "[e4@2 c4@2 ~ [f4,a4,c5,a5]@5 a4@2 f4@2 [d4,b4,f5]@5 f4@2 ~ d4@2 [b3,d5,f5]@5 d4@2 b3@2 ~ e4@2 f4@2 e4@2 ~ d4@2 [c4,a4,e5,a5]@5, [g4,c5,e5]@5 ~@5 a5@9 a5@10 ~@9 [b4,e5,ab5]@5 ~@5, ~@10 c5@5 ~@4 [d5,f5]@5 ~@5 [b4,f5,a5]@5 [b4,e5,a5]@5 ~@9]/2", // F Bdim Am C E Dm Bm7b5 Esus4
  AT: "[a3,e5,a5,c6]@5 [d4,f5,a5,b5]@5 [b3,f5,a5,b5]@4 [e4,e5,ab5,b5]@5 [g3,e5,ab5,d6]@5", // Am Bm7b5 E E7
  AU: "[a3,e5,a5,c6]@5 a5@2 ab5@2 ~ [a3,c5,e5,a5]@4 [c4,e5]@5 [f3,a4,d5,a5]@5, ~@5 [a2,c5,e5]@5 ~@14", // Am C Dm Am
  AV: "[d4,d5]@5 [e3,c5,a5]@5 [e4,c5]@4 [d3,b4,d5,a5]@5 [f4,d5]@5", // D Am C Bm7 Dm
  AW: "[d4,b4,d5,a5]@5 [b3,d5,f5,ab5]@5 [c4,c5,e5,a5]@4 [d4,d5,f5,b5]@5 [e4,c5,e5]@5", // Bm7 Bdim Am Bdim C
  AX: "[e3,d5,e5,ab5]@5 [a3,c5,e5,a5]@9 [a2,c5,e5,a5]@5 a2@5", // E7 Am
  AY: "[[c3,a4,c5,e5]@5 a2@5 [e3,d4,a4,c5]@4 a2@5 [a3,c4]@5 ~@2 a3@2 ~@20, ~@19 [e4,a4]@10 ~@19, ~@24 c4@5 ~@19]/2", // Am A5
  AZ: "~@19 [g3,d5,g5,bb5]@5", BA: "bb3@2 g3@2 ~ [e3,c5,g5,bb5]@5 c3@4 [g3,c5,e5,g5]@5 e3@5",
  BB: "bb3@5 g3@5 [a3,c5,f5]@4 [d4,a4,f5,a5]@5 [bb3,d5,f5,g5]@5, [g4,c5,e5]@5 ~@7", // F Dm Gm7 C
  BC: "[g3,bb4,f5,g5]@5 [c4,c5,e5,g5]@5 [c3,c5,e5,bb5]@4 [f3,c5,f5,a5]@5 f5@2 ~ e5@2, ~@19 [f2,a4,c5]@5", // Gm7 C C7 F
  BD: "[eb3,a4,c5,f5]@5 [a3,c5]@5 [d3,f4,bb4,f5]@4 [bb3,bb4]@5 [c3,a4,f5]@5", // F7 Am Bb F
  BE: "[c4,a4]@5 [bb2,g4,bb4,g5]@5 [d4,g4]@4 [bb3,g4,d5,f5]@5 [g3,bb4,e5,g5]@5", // F Eb G5 Gm7 Edim
  BF: "[[a3,a4,c5,g5]@5 [bb3,bb4,d5,g5]@5 [c4,a4,c5]@4 [c3,bb4,c5,e5]@5 f3@5 c3@2 a2@2 ~ [f2,c5,f5,a5]@5 f4@2 c4@2 [a3,c5,f5]@5 c4@2 ~ a3@2 [f3,c5,f5]@5 c4@2 a3@2 ~ [c4,f5,a5]@4 g3@2 ~ e3@2 [db3,a4,e5]@5, ~@19 [a4,c5,f5]@10 ~@5 a5@9 a5@10 ~@9 g5@10, ~@34 [c5,f5]@4 ~@5 [c5,f5]@5 ~@5 [c5,f5,a5]@5 c5@10 ~@4, ~@62 e5@5 ~@5]/3", // Am7 Gm F C7 F F5 F A …
  BG: "g4@2 e4@2 ~ [db4,db5,e5]@5 e4@2 db4@2 [a3,db5,e5]@5 db4@2 ~ a3@2, g5@10 g5@9 ~@5, [db5,e5]@5 ~@5 [a4,e5]@5 ~@4 [a4,e5,g5]@5", // Dbm A Dbm A5 A7
  BH: "[d4,e5,g5]@5 [a3,d5,f5]@5 f3@4 d3@5 g3@5, a4@5 ~@7", // Em7 Dm
  BI: "[d5,bb5]@2 g5@2 ~ [g3,bb4,d5]@5 g2@4 g3@5 [bb4,g5]@2 ~ d5@2, g3@5 ~@14 g3@5", // Gm Eb
  BJ: "[g3,g4,bb4]@5 g2@5 g3@4 [g3,g4,bb4,eb5]@5 [g3,bb4,eb5,g5]@5", // Gm Eb
  BK: "[g2,eb5,g5,bb5]@5 bb5 ~@4 g4@2 e4@2 ~@10, ~@5 g3@5 ~@14, ~@2 [db5,e5,a5]@3 ~@3", // Eb A
  BL: "~@14 [f3,a5,d6]@5 d3@2 ~ f3@2, ~@19 [d5,f5,a5]@5", // Dm
  BM: "[a3,e4,a4,d5]@5 [a2,e4,a4,db5]@5 [d3,f4,a4,d5]@9 [a2,c5,e5,a5]@5", // Asus4 A Dm Am
  BN: "a2@5 [c3,a4,c5,e5]@5 a2@4 [e3,d4,a4,c5]@5 a2@5", BO: "[a3,c4]@5 ~@2 a3@2 ~@15, [e4,a4]@5 ~@7, ~@5 c4@5 ~@14",
  BP: "[g3,d5,g5,bb5]@5 bb3@2 g3@2 ~ [e3,c5,g5,bb5]@4 c3@5 [g3,c5,e5,g5]@5", // Gm C7 C
  BQ: "e3@5 bb3@5 g3@4 [a3,c5,f5]@5 [d4,a4,f5,a5]@5, ~@5 [g4,c5,e5]@10 ~@9", // F Dm C
  BR: "[bb3,d5,f5,g5]@5 [g3,bb4,f5,g5]@5 [c4,c5,e5,g5]@4 [c3,c5,e5,bb5]@5 [f3,c5,f5,a5]@5", // Gm7 C C7 F
  BS: "f5@2 e5@2 ~ [eb3,a4,c5,f5]@5 [a3,c5]@4 [d3,f4,bb4,f5]@5 [bb3,bb4]@5, [f2,a4,c5]@5 ~@19", // F7 Am Bb F
  BT: "[c3,a4,f5]@5 [c4,a4]@5 [bb2,g4,bb4,g5]@4 [d4,g4]@5 [bb3,g4,d5,f5]@5", // F Eb G5 Gm7
  BU: "[g3,bb4,e5,g5]@5 [a3,a4,c5,g5]@5 [bb3,bb4,d5,g5]@4 [c4,a4,c5]@5 [c3,bb4,c5,e5]@5", // Edim Am7 Gm F C7
  BV: "f3@5 c3@2 a2@2 ~ [f2,c5,f5,a5]@4 f4@2 ~ c4@2 [a3,c5,f5]@5, [a4,c5,f5]@5 ~@2 a5@5, ~@14 [c5,f5]@5 ~@5", // F F5
  BW: "[c4@2 a3@2 ~ [f3,c5,f5]@5 c4@2 a3@2 [c4,f5,a5]@5 g3@2 ~ e3@2 [db3,a4,e5]@5 g4@2 e4@2 ~ [db4,db5,e5]@4 e4@2 ~ db4@2 [a3,db5,e5]@5, a5@10 ~@9 g5@10 g5@9 g5@10, [c5,f5]@5 ~@5 [c5,f5,a5]@4 c5@10 ~@5 [db5,e5]@5 ~@4 [a4,e5]@5 ~@5, ~@19 e5@5 ~@24]/2", // F5 F A Dbm A F5 F Dbm …
  BX: "db4@2 a3@2 ~ [d4,e5,g5]@5 [a3,d5,f5]@4 f3@5 d3@5, [a4,e5,g5]@5 a4@10 ~@9", // Em7 Dm A7
  BY: "g3@5 [d5,bb5]@2 g5@2 ~ [g3,bb4,d5]@4 g2@5 g3@5, ~@5 g3@5 ~@14", // Gm
  BZ: "[bb4,g5]@2 d5@2 ~ [g3,g4,bb4]@5 g2@4 g3@5 [g3,g4,bb4,eb5]@5, g3@5 ~@19", // Eb Gm Eb
  CA: "[g3,bb4,eb5,g5]@5 [g2,eb5,g5,bb5]@5 bb5 ~@3 g4@2 ~ e4@2 ~@5, ~@10 g3@5 ~@9, ~@11 [db5,e5,a5]@9 ~@4", // Eb A
  CB: "~@19 [f3,a5,d6]@5", CC: "d3@2 f3@2 ~ [a3,e4,a4,d5]@5 [a2,e4,a4,db5]@5 ~@9, [d5,f5,a5]@5 ~@19",
})).s("gm_harpsichord").gain(0.33)

// chords · harpsichord · "Piano" · soft notes
const harpsichord_soft = note("<~@99 A B ~@12 C D E ~@2 F G ~@12 H I J ~>".pickRestart({
  A: "~@5 [gb3,a4,c5]@5 a3@2 gb3@2 [d3,bb3,g4,bb4]@5 d3@5", B: "[d3,d4,gb4,a4]@5 d3@5 [g3,d4,g4]@4 d4@2 ~ bb3@2 ~@5",
  C: "~@14 [db4,e5,g5]@5 e4@2 ~ db4@2", D: "[a3,f4,d5,f5]@5 a3@5 [a3,a4,db5,e5]@4 a3@5 [d4,a4,d5]@5",
  E: "[f4,a4]@2 [d4,d5]@2 ~ f5@2 d5@2 ~ [d4,d5,f5]@2 [a3,f5,a5]@2 ~@10, ~@5 a3@5 ~@14", // F D Dm
  F: "~@10 [gb3,a4,c5]@4 a3@2 ~ gb3@2 [d3,bb3,g4,bb4]@5", G: "d3@5 [d3,d4,gb4,a4]@5 d3@4 [g3,d4,g4]@5 d4@2 ~ bb3@2",
  H: "~@19 [db4,e5,g5]@5", I: "e4@2 db4@2 ~ [a3,f4,d5,f5]@5 a3@4 [a3,a4,db5,e5]@5 a3@5",
  J: "[d4,a4,d5]@5 [f4,a4]@2 [d4,d5]@2 ~ f5@2 d5@2 [d4,d5,f5]@2 ~ [a3,f5,a5]@2 ~@5, ~@10 a3@5 ~@9", // D5 F D Dm
})).s("gm_harpsichord").gain(0.22)

stack(harpsichord, harpsichord_soft)

More by J. S. Bach