Strudelify
2-Part Invention No. 1 in C major, BWV 772 cover art

2-Part Invention No. 1 in C major, BWV 772

Bach Johann Sebastian

KeyE majorTempo120 bpm
0:00/0:00
// 2-Part Invention No. 1 in C major, BWV 772 — Bach Johann Sebastian
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 83 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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.

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C@8 D@3 E@2 F@3 G@6 H I@4 J@2 K L M N@2 O@2 P Q R@6 S@7 T U@5 V@3 W X Y@2 Z AA@7 AB AC@5 AD@2 AE
>`.pickRestart({
  A: "~@3 g#3 ~@3 b4, e3@6 f#3@7 ~@6 a3@6 b3@6 ~, ~@3 e5@6 d#5@7 d5@6 c#5@6 ~@4",
  B: "~@12 e4@3 d#4@4 c#4@2 g#4 ~ a4 ~ e4@2 ~ b4 a4@2 e3, ~@2 a4@7 g#4@7 ~@8 g#4@4 ~@4, ~@6 d#4@6 ~@3 f#4@7 b3@2 ~@8",
  C: "[~@2 g#4 f#4 g#4@4 ~ [d#4,e4] ~@47 e5@3 d#5@4 c#5@3 [g#2,b4]@2 a2 [g#2,e5]@4 ~ a2 ~@4 g#2 f#2 g#2@4 e2 ~ d#2@2 ~@10 e5@4 ~@6 f#3@5 d#5 [a#3,e5]@4 c#5@3 a#4@4 ~@7 f#5@8 ~@3 d#3@7 e3@4 d#5 c#5 ~@4 b4@2 ~@2 g#4@4 ~@7 e5@7 ~@31 b3@3 ~@4 e3@3 ~@4 g#3@3 ~@4 f#3@4 e4 d#4@2 [a#3,e4] ~@3 [c#4,a#4] ~@2 e3 ~@2 [c#4,b4] a#4 ~, ~@11 e4@7 f#4@6 g#4@7 a4@6 b4@7 c#5@6 d#5@7 ~@19 e4@8 ~@9 g#5@8 ~@6 c#5@6 ~@17 d#2@7 ~@22 g#3@6 ~@5 e4@6 ~@8 c#5@7 a#4@7 g#5@7 f#5@7 e5@8 ~@5 c#5@7 ~@4 a#4 ~@4 c#4 ~@6 g#4@3 ~@5, ~@15 e3@5 ~ d#3@6 d3@7 c#3@7 b2@6 a2@6 g#2@7 f#2@7 ~@23 e2@6 ~ c#3@7 e3@6 ~@13 c#4@2 ~@2 f#4@6 ~@9 d#5@6 ~@25 c#2@7 ~@8 e3@6 f#3@7 g#3@7 a#3@7 ~@4 d#5@8 ~@22 a#4@2 ~@5]/8", // Emaj7 G#m C#m A#dim F# C#7
  D: "[[d#3,b4]@4 d#4@3 e3@4 b4 ~@2 [f#3,c#4]@4 a#4 ~@2 b4@4 ~ a#3@2 b3 ~@2 [f#3,b4]@2 e3 d#5@3 d#3 ~ c#3@2 d#3 ~@2 f#3 e3 ~ f#3 ~@4 c#3 f#5@4 b2 a#2 ~ b4@2 ~ f#4 ~@2 d#4 ~@3 b3 ~@3 b1@9 ~@13, ~@7 c#4@3 ~@11 b2 ~@3 b3@2 ~@7 f#3@2 ~@2 f#5@3 b5@7 ~@2 d#3@2 ~ d#3 ~@6 b2@7 ~@29, ~@17 b5 ~ d#5 ~@12]/3", // G#m F#5 B5
  E: "[~@8 d#5@8 ~@14 b4@7 a4@6 ~@4 e4@3 ~ d#4@3 c#4@3 g#4 b3 a4 ~ e4@2 ~, ~ e5@8 ~@7 d5@6 c#5@8 ~@13 g#4@8 ~@9 g#4@4, ~@5 f#3@8 ~@6 a3@7 b3@8 ~@16 f#4@7 ~@7]/2",
  F: "[~ b4 a4 e3@3 ~ g#4 ~ f#4 g#4@4 e4 d#4 ~@50 e5@3 ~ d#5@3 c#5@3 ~ [g#2,b4]@2 a2 [g#2,e5]@4 b2 a2 ~ b2@2 ~ g#2 ~ f#2 g#2@2 ~, ~@17 e4@7 f#4@7 g#4@7 a4@7 b4@7 c#5@7 d#5@8 ~@19 e4@10, ~@21 e3@7 d#3@6 d3@7 c#3@7 b2@7 a2@7 g#2@7 f#2@8 ~@19]/3", // G#m C#m
  G: "[~ e2 d#2 ~ e2@4 ~@21 e5 ~@6 c#5@3 ~ c#4@3 ~@7 f#5@8 ~@14 d#5 ~ c#5 ~@4 b4@3 ~@8 c#2@4 ~@39 b3@4 ~@3 e3@3 ~@4 g#3 ~@6 a#4 ~@3 [c#4,e4] d#4@2 [a#3,e4] ~@3 [c#4,a#4] g#4@2 a#4@2 ~ b4 c#4 a#4 ~ b4@3 d#4@3 ~ c#4@4 b4@3 [f#3,c#4]@3, ~@8 g#5@7 e5@7 c#5@7 ~@2 d#5@2 a#3@6 ~@8 d#2@7 ~@8 d#3@7 e3@6 ~@22 c#3@8 e3@6 f#3@8 g#3@7 a#3@7 ~@4 d#5@8 ~@47, ~@12 c#3@7 e3@7 f#3@6 e5@4 ~@3 a#4@4 f#4@7 ~@8 d#5@7 b4@7 ~@15 e4@6 ~ e5@7 c#5@7 a#4@7 g#5@7 f#5@7 ~ e5@8 ~@6 c#5@7 ~@17 e3 ~@6 d#3@7 e3@7 ~@3]/6", // C#m A#dim F# F#5
  H: "~ a#4@2 ~ b4@4 b3 a#3 ~ b3@2 ~@2 f#3 e3 ~ [f#3,d#5]@3 d#3@2 ~ d#3 ~@3 f#3 e3 ~ f#3, ~@4 b2@2 ~@9 b4@3 ~@3 f#5 ~ c#3@2 b5@7", // D#m
  I: "[~@2 d#3 ~ c#3 ~ f#5@2 ~ b2 a#2 ~ b2@4 f#4 ~@2 d#4 ~@2 b3 ~@4 b1@13 ~@3 b3@3 ~@18 e4@7 ~@21 b4@3 a#4@4 g#4@3 [d#3,f#4]@2 e3 ~ d#3 ~@2 f#3 ~ e3 f#3 ~@3 d#3 c#3 d#3@2 ~@2 b2 ~ a#2 ~@3, ~@3 b5@3 d#3 ~@2 d#5@3 b4 ~@33 b3@7 a#3@7 a3@7 ~@7 f#3@7 e3@7 d#3@7 c#3@7 ~@10 b3@10 ~@6, ~@49 c#4@8 d#4@7 ~@7 f#4@7 g#4@7 a#4@8 ~@12 b4@4 ~@19]/4", // D#m
  J: "[~@2 b5@7 ~@39 b3@3 a#3@3 ~ g#3@3 ~@2 e5 ~ [b3,d#5]@2, ~@9 a#5@7 a5@7 g#5@7 f#5@7 e5@7 d#5@8 ~@6 d#5@2 ~@4, ~@13 d#3@7 e3@6 f#3@8 g#3@7 a#3@7 ~@3 c#5@7 ~ f#3@2 ~@3]/2", // B
  K: "~@2 f#5 e5 [b2,f#5]@4 d#5 ~ c#5 d#5@4 b4 a#4 ~ b4@2 ~@2 d#5 ~ c#5@2 d#5@2 ~ g#5 ~ g5, ~@18 g#3 ~@13", // B5
  L: "g#5@3 ~ c#5 b4@2 [g3,c#5]@3 ~ e5 ~ d#5 [a#3,e5]@3 ~ a#5 g#5@2 a#5@4 d#5 c#5@2 [g#3,d#5]@3 ~, d#4 ~@20 d#4@2 ~@9", // Gdim A#dim G#5
  M: "~ g5@2 g#5@3 b5@2 ~@2 d#4@2 ~ d#5 ~ d5 d#5@3 ~ a#5 g#5@2 [d#4,a#5]@3 ~ g5 f5 ~ g5@2, g#5@2 ~ b3 ~@4 a#5@2 ~@6 d#3 ~@13 c#4 ~, ~@9 b5@3 ~@20", // D#5
  N: "[~ d#5 ~ d5 ~ d#5@4 a5@7 ~@11 g#3@4 ~ d#5@2 [c#4,e5]@4 ~ c5@2 c#5@4 e5 d#5@2 [a#3,e5]@4 ~@10 c#4@2, ~@16 g#5@8 f#5@7 e5@2 ~@5 c#5@2 ~@12 g#5@10 ~@2, ~@20 d#4@7 ~@14 b3@2 ~@16 f#5@5]/2", // C#m A#dim
  O: "[~@5 f#3@2 ~@2 d#5 c#5@2 d#5@4 b4 a#4 ~ [d#4,b4]@3 ~ c#5 ~@2 c#5@4 ~@22 a#4@2 ~ g#3@3 g#4 ~ g4 g#4@3, ~@2 e5@8 ~@20 e5@7 d#5@7 c#5@7 b4@2 ~ b4@4 ~@6, ~@33 g#3@7 ~ a#3@5 ~@2 d#3@5 ~@11]/2", // G#m
  P: "~ a4 g#4@2 a4@4 c#5 b4@2 c#5@4 a4 g#4@2 a4@3 ~@2 d#5@2 e5@2 ~ g4 ~ f4@2, ~@2 c#3@4 ~@3 c#4@7, ~@11 e5 ~@4",
  Q: "g4@2 ~ a#4@2 g#4 g3@4 b3 a#3@2 b3@2 ~ g#4@2 ~@2 c#3@3 c#4@2 ~@2 [d#3,a#3]@3 g4 ~, a#3@6 a#4@2 ~@5 g#3@7 e4 ~@11", // D#5
  R: "[~@2 g#4@3 d#4@2 ~@2 b3@2 ~ g#2@3 g#3@4 ~@28 a4@7 b4@7 ~@15 e5@3 d#5@4 c#5@3 [g#2,b4]@2 a2 ~ g#2@4 b2 a2 ~ b2@3 ~ [g#2,b4] f#2 a4 b4@4 g#4 d#2@2 e2@5 ~@28 b4@8 a4@7 ~@4 e3@3 d#3@3 ~ c#3@3 b2@2 a4 ~ g#4@3 ~ b4 a4@2 b4@3 g#4 b3 [a3,f#4] ~@2, ~@2 g#2@7 ~@3 g#3 ~@6 f#3@9 e3@8 d#3@7 d3@8 ~@14 a2@6 g#2@8 f#2@7 ~@18 g#2@2 ~@13 f#2@7 g#2@7 ~ a2@7 b2@8 ~@17 f#4@8 ~@3 e3@7 ~@8, ~@24 e4@8 f#4@7 g#4@8 ~@14 c#5@7 d#5@8 ~@14 e5@11 ~@8 f#4 ~ g#4@4 ~ e5@6 d#5@8 d5@7 c#5@8 ~@14 g#4@8 ~@6 g#4 ~@18]/6", // G#m D
  S: "[~@2 g#3 [f#3,d#4] ~ g#3@4 ~@14 f#3@4 ~@3 a3 g#3 ~ a3 ~@2 f#3 ~@3 f#5@4 ~@14 g#3@4 ~@4 e3@3 ~@3 g#3 ~ f#3 g#3 ~@3 e3 ~@2 e5@4 a2@4 ~@60 e3@4 d#3@2 ~ a3 g#3@2 a3@2 ~@2 d#3 ~@2 d#3 ~@3 g#3 f#3@2 ~@4 e5@4 d#5@3 c#5@4 ~@3 a4@3 ~@4 e4 d#4 ~ e4 ~@2 g#4 e4 ~@2 b3 ~@2 [g#3,b4] a4@2 b4@2 ~@2 b3 ~ g#4@2 ~, ~@5 e4@7 f#4@8 a4@7 b4@8 ~@5 d#3 ~@3 b2@5 ~@2 b3@7 ~@17 c#5@7 ~@8 c#4@7 f#4@7 a4@7 b4@7 c#5@7 d#5@7 e5@7 c#5@7 a4@7 ~ f#5@26 ~@16 e3@5 ~@7 g#4@2 ~@9 g#4@2 g#3 ~@2, ~@9 c#4@7 a3@7 ~@10 d#5@8 ~@6 d#4@8 e4@6 ~ g#4@7 a4@7 ~@6 c#3 ~@11 a3@6 ~ f#3@6 ~ d#3@7 c#4@7 b3@7 a3@7 g#3@7 f#3@7 ~@16 c#3@2 ~@6 g#3@8 a3@7 [b3,b4]@6 g#4@3 ~@9 f#4@2 ~@6 e3 ~@4 f#4@2 ~@2]/7", // D#m G#m B
  T: "~ e3 a4@2 [b2,b4] ~@2 g#2 d#5@2 e5@2 ~ b4 ~@3 g#4 ~@2 e4 ~@3 e3@7 ~, ~ b4@2 ~@4 e5@2 ~ e2@12 ~@10", // B
  U: "[~@28 e4@7 ~@22 b4@3 a#4@4 g#4@3 f#4@3 e3 [d#3,b4]@3 f#3 ~ e3 ~@4 d#3 ~ c#3 d#3@3 ~ b2 a#2 ~@52 b3@4 a#3@3 g#3@4 d#5 e5 ~ [b3,d#5]@2 ~@2, ~@13 c#4@7 d#4@7 ~@8 f#4@7 g#4@7 a#4@8 ~@10 d#3 ~@9 f#3@2 ~@12 b2@8 c#3@7 d#3@7 ~ e3@7 f#3@7 g#3@7 a#3@7 ~@11 f#3@2 ~@5, ~@17 a#3@7 a3@7 ~@7 f#3@7 e3@7 ~ d#3@7 c#3@8 ~@10 b3@10 ~@7 b5@8 a#5@7 a5@7 g#5@8 f#5@7 e5@6 d#5@8 c#5@8 ~@6]/5", // G#m B
  V: "[f#5 ~ e5 ~ f#5@3 ~ d#5 c#5 d#5@2 ~@2 b4 a#4 ~@2 g#3@3 d#5 ~ c#5@2 [b3,d#5]@2 ~ g#5@2 ~@2 d#4@3 c#5 ~ b4 ~ [g3,c#5]@3 ~ e5 d#5 ~ a#3@3 a#5@2 ~@2 d#4@3 d#5 c#5@2 [g#3,d#5]@3 ~@2 g5@2 [b3,g#5]@3 ~ b5 a#5@2 [d#4,b5]@3 d#5 c#5 ~ [d#3,d#5]@3 ~ a#5 ~@2 [d#4,a#5]@3 ~ g5 ~ f5 [c#4,g5]@3, ~@17 b4@2 ~@11 g5@2 ~@13 e5@3 ~@4 a#5@3 ~@41, ~@31 g#5@3 ~@17 g#5@2 ~@10 g#5@2 ~@20 g#5@3 ~@8]/3", // B Gdim G#5 E G#m D# D#5 C#dim
  W: "~ d#5 ~@2 d#5@4 ~ a5@7 g#5@7 ~@3 g#3@3 ~ e5@2, ~@3 d5@2 ~@18 f#5@7 ~@2",
  X: "d#5 e5@4 c#5 c5@2 c#5@4 ~ d#5@2 [a#3,e5]@4 g#5@7 ~@3 c#4@3, ~@4 b3 ~ e5 ~@6 f#5@3", // A#dim
  Y: "[~@4 f#3@3 ~ d#5 c#5@2 d#5@4 b4 a#4@2 b4@3 ~ c#5 ~@2 c#5@3 ~@19 d#3@3 b4 ~ a#4@2 [g#3,b4]@3 g#4 ~@3 b3@2 ~, ~ e5@7 ~@17 g3@7 g#3@7 ~ a#3@7 ~@13 g#4@4, ~@29 e5@7 d#5@7 c#5@8 ~@8 g4@2 ~@3]/2", // G#m
  Z: "a4 ~ g#4@2 a4@5 c#5 b4@2 c#5@3 a4 ~ g#4@2 a4@3 e5@2 d#5@2 e5@3 ~ g4 f4, ~@19 c#4@13",
  AA: "[~ g4@3 a#4@2 g#4@2 ~@4 a#3@2 b3@4 g#4@3 e4@4 c#4@3 a#3@3 ~ g4@3 g#4@4 d#4@3 b3@3 ~ [g#2,g#3]@4 g#3@4 ~@56 e5@4 d#5@3 c#5@4 ~ g#2@2 a2 g#2 ~@3 b2 a2 ~ b2@2 ~@2 [g#2,b4] ~ [f#2,a4] b4@4 [e2,g#4] ~ d#2@2 g#4@4 ~@30 b4@7 ~@11 e3@3 ~ d#3@3 c#3@3 ~ g#4 a4@2 e3@6 ~ b4 ~@3, ~ a#3@6 ~ [g3,a#4]@6 g#3@7 c#3@7 d#3@7 g#2@7 ~@12 f#3@16 ~@7 d3@8 c#3@9 ~@60 f#2@8 g#2@7 a2@7 ~ b2@9 ~@6 d#3@7 ~@11 b2@2 ~@12, ~@58 e4@11 ~@5 g#4@8 ~@6 b4@8 ~@7 d#5@8 ~@14 e5@12 ~@14 e5@8 ~@14 c#5@8 ~@7 a4@8 ~@6 f#4@8 ~@14, ~@63 e3@7 d#3@8 ~@14 b2@7 a2@7 g#2@7 ~ f#2@8 ~@17 g#2 ~@7 e2@8 ~@69, ~@66 f#4@12 ~@3 a4@8 ~@6 c#5@9 ~@17 b4@4 ~@20 f#4 ~@12 d#5@8 d5@9 ~@20 g#4@8 ~@10 g#4 ~@5 a4@2 ~@3]/7", // G# G#m F#m E Gm
  AB: "[b3,g#4] ~ [a3,f#4] g#4@2 ~@2 [g#3,e4] f#3@2 g#3@3 ~@15 f#3@4, ~@3 b3 ~@4 d#4 ~ e4@7 f#4@8 a4@7, ~@13 c#4@7 ~ a3@7 ~@4", // E D C#m
  AC: "[~@3 a3 ~ g#3 a3 ~@3 f#3 ~@3 d#3 ~@2 b2@4 ~@17 e3@4 ~@4 g#3 f#3 ~@5 e3 ~@2 e5@4 ~@62 e3@4 d#3@3 ~ a3 g#3 ~ a3@2 ~@2 d#3 c#3@2 d#3@2 ~ g#3 ~ f#3@2 ~@3 e5@4 ~@3 c#5@3, b4@6 d#5@7 f#5@4 ~@4 d#4@7 e4@7 g#4@8 ~@5 g#3@2 ~@6 c#3 ~@3 a2@5 ~@2 a3@7 f#3@7 d#3@7 c#4@7 b3@6 a3@7 g#3@7 f#3@8 ~@3 f#5@26 ~@8, ~@25 b3@7 g#3@6 ~@4 a4@7 c#5@7 ~@7 c#4@7 f#4@7 a4@7 b4@7 c#5@7 d#5@7 e5@7 c#5@7 a4@8 ~@20 g#3@7 [a3,d#5]@6]/5", // Adim
  AD: "[~@4 a4@3 ~ e3@3 e4 ~ d#4 e4 ~@3 [e4,g#4] f#4@2 g#4@2 ~ [g#3,b4] a4@2 ~ e3@3 b3 f#4@2 g#4@2 ~ b4@2 ~@2 b2 ~@2 g#2 d#5@3 e5@3 b4 ~@3 g#4@2 ~@2 e4@2 ~@3, ~ [b3,b4]@6 g#4@3 ~@11 b3 ~@5 b4@3 ~ g#4@2 ~ g#3 ~@2 e3 ~ a4@2 ~@7 e2@16, ~@20 b4 ~ e5 ~@9]/2", // E G#m B
  AE: "~ e3@19 ~@12",
})).s("gm_piano").gain(0.4)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  A@2 ~@2 B C D@2 ~ E ~@2 F@2 G H ~@3 I J ~ K ~@4 L M@2 ~ N ~@2 O P Q R ~@3 S ~ T U@3 ~@7 V@2 ~@3 W ~@2 X Y Z ~ AA AB
  ~@4 AC AD ~@9
>`.pickRestart({
  A: "[~@31 c#4@7 ~@24 b4@2]/2", B: "~@10 b2 ~ b2@3 ~@17", C: "~@18 e5 ~@13",
  D: "[~@10 b2@8 ~@3 b4@5 ~@4 d#5@4 ~@4 b3@4 ~@10 c#3@8 ~@4]/2", E: "~@9 b4@3 ~@20", F: "[~@30 e3@8 ~@6 g#3@7 ~@13]/2",
  G: "~ c#4@7 d#4@7 ~@17", H: "~@3 b4@4 ~@25", I: "~@11 b2@4 ~", J: "~@12 g#3@7 [b3,g#4]@4 ~@9, ~@11 d#5@4 ~@17",
  K: "~@22 b4@4 f#3 ~@5", L: "~@3 g#3@7 ~@22", M: "[~@29 b2@8 c#3@8 ~@19]/2", N: "~@25 b3 ~@6",
  O: "~@6 c4@7 c#4@7 ~@12", P: "~@23 b3@5 ~@4", Q: "~@6 b3 ~@5 b4 g3@3", R: "~@15 b3", S: "~@9 c#3@4 b2@3",
  T: "~@12 e2 ~@19", U: "[~@20 c#3@7 d#3@8 ~@28 b3@2 ~ e4 ~@29, ~@62 g#4@3 ~@31]/3",
  V: "[~@6 b3 ~@3 b3@8 ~@13 g#3@7 ~@26]/2", W: "~ b2 ~@6", X: "~@5 c4@7 c#4@7 d#4@7 ~@6", Y: "~ c#4@4 ~@17 b3@3 ~@7",
  Z: "~@11 b3@3 ~@4 d#4@3 ~@2 b4@3 ~@6", AA: "~@2 c#3@5 ~@9", AB: "~@11 b3 ~@20", AC: "~@24 c#3@7 ~", AD: "~@25 b4 ~@6",
})).s("gm_piano").gain(0.24)

stack(piano, piano_soft)

More by Bach Johann Sebastian