Strudelify

2-Part Invention No. 4 in D minor, BWV 775

Bach Johann Sebastian

KeyD minorTempo84 bpm
0:00/0:00
// 2-Part Invention No. 4 in D minor, BWV 775 — Bach Johann Sebastian
// 84 bpm, 3/8, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 53 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(84/1.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.

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F G H I J K L M N@2 O P Q R S T@2 U V W X Y Z AA AB AC AD AE@2 AF AG AH AI AJ AK AL AM AN E AO AP@2 AQ AR AS
  AT@3
>`.pickRestart({
  A: "d4@3 e4@2 f4@2 ~ g4@3 a4@2 bb4@3", B: "db4@3 bb4@2 a4@3 g4@3 f4@2 e4@3",
  C: "[d3,f4]@3 e3@2 [f3,a4]@3 g3@3 [a3,d5]@2 bb3@3", D: "[db3,g4]@3 bb3@2 [a3,db5]@3 g3@2 ~ f3@2 e3@3, ~@5 e5 ~@2",
  E: "[f3,d5]@3 e5@2 [a3,f5]@3 g5@3 [d4,a5]@2 bb5@3", F: "[e3,db5]@2 bb5@3 [g3,a5]@3 g5@3 [db4,f5]@2 e5@3",
  G: "[d3,f5]@2 d5@3 e5@3 f5@3 g5@2 a5@3, ~@5 d4 ~@5 f3@5", H: "~@3 a5@2 g5@3 f5@3 e5@2 d5@3, [g3,bb4]@5 a3@5 ~ bb3@5",
  I: "[c3,e5]@3 c5@2 ~ c4@2 e5@3 f5@2 g5@3, ~@5 d5@3 ~@3 e3@5", J: "~@3 g5@2 f5@3 e5@2 d5@3 c5@3, [f3,a4]@5 g3@5 a3@6",
  K: "[bb3,d5]@3 [g3,e5]@2 [a3,f5]@3 [bb3,d5]@3 [c4,e5]@2 [d4,f5]@3", L: "e3@3 d4@2 c4@3 bb3@2 ~ a3@2 g3@3, g4@3 ~@5",
  M: "[a3,c5]@3 [f3,d5]@2 [g3,e5]@3 [a3,c5]@2 ~ bb3@2 [c4,e5]@3, ~@10 d5@3 ~@3", // Am Dm C Am C
  N: "[d3@3 c4@2 bb3@3 a3@2 ~ g3@2 f3@3 e3@3 c3@2 bb4 a4 bb4 [e3,a4]@2 ~ f3@2 g3@3, f4@5 ~@6 bb4@9 ~ d3@2 ~@3 g4@6]/2", // A5
  O: "[a2,c5]@3 [g3,bb4]@2 [f3,a4]@3 [e3,g4]@2 ~ d3@2 [c3,e4]@3, ~@10 f4@3 ~@3", // Am Gm F Em C
  P: "[d3,f4]@2 [bb2,g4]@3 a4 g4 ~ a4 [g4,a4] ~ g4@2 f4@2 ~, ~@5 c3@6 c2@5", // Dm Eb Gsus2
  Q: "f2@3 g2@2 [a2,c5]@3 bb2@3 [c3,c5]@2 d3@3, f4@5 ~@11", // Am C
  R: "d5 c5 d3@2 c5 d5 c5 ~ d5 c5 a2@2 c5 d5 c5 ~, e2@2 d5 ~@2 c3@3 bb2@2 d5 ~@2 g2@3",
  S: "d5 c5 bb2@2 c5 d5 c5 ~ d5 c5 e3@2 c5 d5 c5@2, a2@2 d5 ~@2 c3@3 d3@2 d5 ~@2 f3@3",
  T: "[d5 c5 ~ d5 c5 e3@2 c5 d5 c5 [c3,d5]@2 ~ bb2@3 a2@3 [bb2,bb4]@2 [c3,a4]@3 [a2,g4]@2 [bb2,f4]@3 [c3,e4]@3, g2@3 f3@2 d5 ~@2 d3@2 ~@2 c5@7 ~@13]/2", // Csus2 Bb F A7 Bb5 C
  U: "c5@3 d4@2 e4@3 gb4@3 g4@2 a4@3, gb2@5 ~@11", V: "[g2,bb4]@3 [a2,a4]@2 [bb2,g4]@3 [g2,f4]@3 [a2,e4]@2 [bb2,d4]@3",
  W: "bb4@3 c4@2 d4@3 e4@3 f4@2 g4@3, e2@5 ~@11", X: "[f2,a4]@3 b4@2 [f3,c5]@3 d5@3 [d3,e5]@2 f5@3",
  Y: "[b2,ab4]@3 f5@2 [ab2,e5]@3 d5@3 [e2,c5]@2 b4@3", // E Dbm C
  Z: "[a2,c5]@2 ~ b4@2 [a2,d5]@3 [b2,c5]@3 [c3,b4]@2 [d3,a4]@3, ~@2 ab2@3 ~@11", // Am D5 Cmaj7 D5
  AA: "f3 e3 a4@2 e3 f3 e3 ~ f3 e3 e4@2 e3 f3 e3 ~, ab4@2 f3 ~@2 ab4@3 gb4@2 f3 ~@2 d4@3",
  AB: "~ e3 [f3,d4]@2 e3 f3 e3 ~ f3 e3 [f3,ab4]@2 e3 [f3,a4]@2 e3, [f3,c4]@3 ~@2 e4@3 gb4@3 ~@5", // Dm Fm F F5
  AC: "f3 e3 ~@2 e3 ~ f3 e3 ~ e3 ~ f3 e3 gb4@2 e3, d4@3 [f3,c5]@3 b4@2 [f3,a4]@3 ab4@2 f3 ~@2", // F5 F
  AD: "f3 e3 ~ f3 e3 ab4@2 e3 f3 e3 ~ f3 e3 ~ e3 ~, e4@3 gb4@2 f3 ~@2 a4@2 b4@3 [f3,c5]@3", // F5
  AE: "[f3 e3 [f3,e5]@2 e3 ~ e3 ~@2 e3 b4@2 ~ a4@3 ab4@3 a4@2 [e4,b4]@3 c5@3 [d4,d5]@2 e5@3, gb4@3 ~@2 [f3,d5]@3 [f3,c5]@2 f3 ~ e3@10 ~@10]/2", // Fmaj7 E5 D Dm F5
  AF: "a4@3 f5@2 ~@3 d5@3 c5@2 b4@3, c4@5 [b3,e5]@6 a3@5", AG: "a5@3 ab5@2 gb5@3 e5@2 ~ f4@5, d4@5 e4@5 a5@6",
  AH: "~@3 d5@2 c5@2 b4 c5 b4 c5 ~@2 a4@2 ~, d4@5 e4@5 b4@3 ~@3, ~@11 e3@5",
  AI: "a3@2 a2@3 bb2@3 [c3,a4]@2 [d3,bb4]@2 ~ [eb3,c5]@3, a4@3 ~@5", // F Gm Cm
  AJ: "gb2@2 ~ eb3@2 [d3,gb4]@3 c3@3 ~@2 a2@3, d4@5 ~@6 [bb2,a4]@4 ~", // D Bbmaj7
  AK: "bb4@2 g4@3 a4@3 [g2,bb4]@3 [a2,c5]@2 [bb2,d5]@3, g2@3 ~@5", AL: "[c2,e4]@2 d5@3 [g2,c5]@3 bb4@3 [c3,a4]@2 g4@3",
  AM: "[f3,a4]@3 g3@2 ~ a3@2 [b3,e5]@3 db4@2 d4@3, ~@5 f5@3 ~@3 f5@5", AN: "[e3,g4]@3 d4@2 [db4,e5]@3 b3@3 a3@2 g3@3",
  AO: "[e3,db5]@3 bb5@2 [g3,a5]@3 g5@3 [db4,f5]@2 e5@3", // Dbm Gsus2 Db
  AP: "[[d3,f5]@3 e3@2 [f3,d5]@3 g3@3 a3@2 bb3@3 db3@2 ~ bb3@2 [a3,db5]@3 [g3,e5]@2 ~ f3@2 [e3,db5]@3, ~@11 g4@7 d5@3 ~@5 a4@3 ~@3]/2", // Dm A C Dbm
  AQ: "[f3,d5]@3 [g3,b4]@2 ~ db5 ~ [db5,d5] d5 db5@3 d5@2 ~, ~@5 a3@6 ~@5, ~@5 d5@2 ~@3 a2@6", // Dm G Dmaj7
  AR: "d5@3 c5@3 bb4@2 [c3,a4]@3 [bb2,g4]@2 [a2,f4]@3, bb2 ~", // F Eb Dm
  AS: "[g2,bb4]@3 [bb3,db4]@2 [a3,d4]@3 [g3,e4]@2 [f3,f4]@3 [e3,g4]@3", // Gm Bbm D5 C F Em
  AT: "[[f3,a4]@3 [g3,d5]@2 g4 f4 g4 f4@3 e4@3 d4@3 [d2,d4]@22 ~@9, ~@5 a3@6 a2@11 ~@26]/3", // F G5 D
})).s("gm_piano").gain(0.25)

stack(piano)

More by Bach Johann Sebastian