Strudelify

Fugue 14 F# Minor

Bach Johann Sebastian

KeyE♭ majorTempo120 bpm
0:00/0:00
// Fugue 14 F# Minor — Bach Johann Sebastian
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 57 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 D E F G@5 H@5 I@2 J@5 K@3 L@3 M@6 N@4 O@4 P@4 Q R@3 S@6>".pickRestart({
  A: "bb4@2 g4@3 f4@3 g4@3 eb4@3 ab4@3 g4@2 ab4@3 ~ c5@6 ~@3", B: "~@10 a4@3 f4@2 eb5@3 ~@4 d5@3 ~@2 d5 c5 d5 c5 d5",
  C: "c5 d5@2 c5 bb4 c5@2 bb4@3 f5@3 d5@3 bb4@2 ab4@2 ~ f5@3 d5@2 ~ ab4@2 ~ [eb4,g4]@2", // Eb
  D: "~ d4@3 c4@2 d4@3 bb3@3 eb4@3 d4@3 eb4@2 ~ eb5@3 c5@3 d5@3 eb5@2, ~@4 ab5@5 g5@6 f5@6 g4@6 ~@5",
  E: "~@7 d4@2 bb3@3 ~ ab4@2 eb5@3 f5@3 g5@3 g4 f4 ~ f5@2 g4 f4 g4, ~ f5@15 ~@2 g4@2 ~@4 ab5@3 g4 ~@2 bb4@2",
  F: "ab5@3 eb4@3 bb4@2 ~ eb5@3 g5@3 eb4@2 c5@3 ~ a4@3 ~@2 d4@3 ~@3, ~@3 g5@6 g4 ~@2 f4@2 ~ c6@17",
  G: "[d5@3 [eb4,f5]@3 db4@3 bb4@3 g4@2 ~ eb4@2 c4@3 g4@3 [eb4,c5]@3 eb5@2 ~ d4@2 bb4@2 ~ g5@2 ~ c5 ~@2 bb3@3 g3@2 f3@3 g3@2 ~ eb3@3 ab3@2 ~ d5@2 ab3@3 [c4,ab4]@3 g4@3 [bb3,ab4]@3 bb4@3 ~@6 a3@2 f3@2 ~ eb4@2 ~ bb4@3 [d4,c5]@3 d5@3 d4 ~@9 c4@2 ~@3 f4@2 d4@3 bb3@3 ab3@3 f4@3 d4@2 ~ ab3@2 ~ [g3,eb5]@2 bb5@3 [eb4,g5]@3 eb5@3 db5@3 bb5@3 ~@2 db5@3 [ab3,c5]@3 eb4@3, ~@6 bb5@18 ~@4 ab5@2 ~@4 eb4 ~@5 f5@11 ~@5 g3@3 ~@15 c5@15 ~@8 eb5@4 ~@3 c4@2 eb5@3 bb5@20 ~@31, ~@40 d5@5 db5@5 ~ [c5,g5]@6 ~@5 eb5@18 f5@5 g5@13 c4@2 d5@2 d4@3 d4@3 ~ [bb3,d5]@5 ~@6 d5@7 ~@33, ~@99 d4@2 c4@2 [f4,c5,a5]@7 ~@4 f5@7 ~@5 bb4@6 ~@17 [eb3,g5]@4 ~@7]/5", // Ebsus2 Cm Fm Bb7 D7 Cm Eb Ab …
  H: "[[c4,eb5]@2 ~ ab3@2 ~ g3@2 eb4@2 ~@4 g3@2 ~ [f3,d5]@3 ~@2 f5@3 d5@3 c5@3 ab5@3 [d3,f5]@3 c5@3 [g3,bb4]@2 d4 ~@3 bb3@2 g3@2 ~ f3@2 ~ db4@2 g4@6 ~ c5@5 bb4@6 f3@2 ~@4 d5@2 [f3,eb5]@3 d3@3 c5@3 f3@2 ~ d3@2 ~@6 eb5@9 d5@3 ~@3 d5@3 ~@3 eb5@2 ~@3 eb5@3 eb3@3 c3@2 ~ [d3,ab4]@3 [eb3,g4]@3 ab4@5 ~ [f4,d5]@3 bb4@2 ~ [d4,ab5]@3 eb3@2, ~@5 ab5@12 ~@3 ab5@4 ~@21 d5@3 ~@3 g5@26 [c4,c5]@4 ~@4 f5@18 ~@22 d5@3 ~@3 g5@5 ~ f5@11 ~@12, ~@6 c5@5 ab4@5 ~@35 bb4@5 ~@18 ab4@12 ~@5 bb4@4 ~@2 g4@10 ~@13 bb4@17 ~@23, ~@79 ab3@2 ~@12 ab4@3 eb3@4 ~@14 [ab3,c5]@5 ~@7 f3@5 ~@12 f3@11 ~@6]/5", // Cm Dm Gm F7 Ddim Eb Dm Ddim …
  I: "[f3@3 g3@2 ~ ab3@3 f3@2 ~ bb2@2 ab3@3 eb5@3 bb5@3 [bb3,g5]@3 eb5@3 ~ g3 ~ bb5@3 [eb3,g5]@2 db5@3 ~@3 eb4@2 ~ c4@2 ~ ab3@2 ~ g3@3 eb4@3 c4@3 g3@3, eb5@12 d5@7 ~@10 db5@3 ~@8 c5@5 ~ ab5@9 ~@9, g5@6 f5@11 g3@2 ~@10 eb4@12 ~@17 ab4@6]/2", // Eb
  J: "[[f3,d5]@2 ab5@4 [ab3,f5]@3 d5@2 ~ [f3,c5]@2 ab5@3 f5@3 c5@3 g3@3 d4@3 b3 ~@2 g3@2 ~ f3@2 d4@2 ~@4 f3@2 ~ [e3,c5]@3 g5@3 [g3,e5]@3 c5@2 bb4@3 g5@3 [c3,e5]@3 bb4@3 a4@3 g5@3 c5@2 g4@3 ~ ab4@3 f5@3 d5@2 ab4@2 ~@2 [d4,g4] ~@2 f5@3 d5@2 b4@2 ~ g4@3 eb5@3 c5@2 ~ g4@2 ~ gb4@2 eb5@2 ~ c5@3 a4@2 ~ f4@2 ~ d5@3 b4@2 g4@3 ~ e4@2 d5@2 ~ b4@3 g4@2 ~ eb4@2 ~ c5@2 ~@3 eb4@2, ~@11 d4@12 b4@5 ~ g5@9 ~@2 g4@6 ~@11 c4@23 ~ b3@5 ~ c4@5 ~@29 a3@6 b3@6 g3@5 c4@6 g3@6 ab3@6 ~@4, ~@17 d3 ~@51 f3@5 ~@19 b2@6 g2@5 c3@6 ~@46 [eb3,g4]@4]/5", // Dm Db F5 C G5 Eb
  K: "[~ d4@3 c5@3 [eb3,ab4]@3 [f3,f4]@3 d4@2 b4@3 a4@3 b4@3 ~@3 bb3@3 ab3@3 bb3@2 g3@3 c4@2 ~ b3@3 c4@3 c5@3 a4@3 b4@3 c5@2 ~@6 b3@2 g3@2 ~ f4@2 ~ c5@3 [eb4,d5]@3 eb5@2 eb4 ~ d4 eb4 d4 ~ eb4 d4 ~ d4 ~ [c4,eb5]@3 [b3,g5]@2, ~ f3@5 ~@7 g3 ~@4 g2 ~@5 [c3,c4,c5]@6 f5@5 eb5@6 d5@6 eb4@6 ~@5 d5@14 ~@9 f5@2 d5@2 ~ g4@2 [eb4,f5]@3 ~@5]/3", // Ab5 F Ebmaj7 Cm Em C Ebsus2
  L: "[~@3 [eb4,d5]@3 ~ c5@2 c6@3 ab5@3 f5@3 d5@3 f5@3 [bb3,d5]@2 ~ d4@2 ~@3 bb5@3 g5@2 eb5@3 ~ c5@2 eb5@3 c5@2 ~ bb4@3 ab4@2 ab5@3 ~@14 eb3@3 c3@3 f3@2 ~ eb3@2 f3@2 ~ ab3@3 eb4 ~@2 [f4,b4]@3 g4@2, ~ [c4,eb5]@4 ~ ab4@18 ~@2 c5@2 ~ bb4@3 ~@25 f5@11 d3@5 ~@23, ~@30 g4@16 ~@14 d5@13 ~ c5@17 ~@5, ~@63 b4@5 ab4@12 ~@16, ~@66 g4@8 ~@5 g4@5 ~@12]/3", // Ebmaj7 Bb Fdim Cm
  M: "[~@3 b4@3 c5@3 [d3,d5]@3 c4@2 ~ g4@2 ~ [bb3,a4]@2 bb4@3 a3 ~@2 a4@3 a3@2 ~ c5@3 g5@3 d5@3 c5@3 d5@2 ~@3 [ab3,e5]@3 [f3,d5]@3 [g3,e5]@3 [e3,g5]@2 ~ db5@2 c5@3 [f3,bb4]@3 ab4@3 [f3,g4]@3 [ab2,f4]@2 g4@2 ~ [f2,ab4,f5]@3 c5@3 bb4@2 [ab3,c5]@3 f3 ~@2 [g3,d5]@3 [eb3,c5]@2 ~ f3 ~ f5@3 [bb3,c5]@3 bb4@2 ~ eb3@2 g4@2 ~ [eb3,f4]@3 ~ g2 ~ f4@2 ~ eb2@2 bb4@3 eb5@3 c5@3 f3@5 ~@3 eb4@3 ab3@3 c5@3 ~@3 d5@3 ~@3 c5@3 a4@2 ~ f4@2 ~ bb3@2 d5@3 ~@3 eb5@3 ~@3 d5@3 b4@3 g4, c5@3 ~@3 gb3@2 ~@4 eb5@5 ~ d5@5 ~ [c5,e5]@5 ~@2 bb3@2 ~@2 g3@2 ~@4 ab3@2 ~@17 c4@2 ~ ab3 ~@5 c3 ~@7 c3 ~@5 ab3 ~@2 g3 ~@12 d5@3 d3 ~@5 g3 ~ ab4@2 ~@7 eb4@2 ~ bb2 ~@7 eb3@6 ~@5 g4@3 ~@48, ~ a4@12 ~@12 bb3@2 ~@2 [d4,gb5]@4 ~@2 bb4@8 ~@3 bb4@13 ~@4 f5@8 ~@20 ab4@15 ~@2 eb5@7 ~@9 g4@5 ~@7 db5@12 ~@5 f5@3 ~@3 eb5@11 ~@6 g5@3 ~@3 f5@10, ~@142 g3@5 ~@7 f3@5 g3@6 a3@5 ~@7 g3@6 ~@9]/6", // D Bbmaj7 Dbm Dm C Em Bb5 Fsus2 …
  N: "[~@2 c4@3 eb5@3 g5@2 bb5@3 [d3,ab5]@3 f5@3 bb4@3 g5@3 ~@2 d3@3 ~ c3@2 d3@3 ~@3 eb3@3 d3@3 eb3@3 ~@3 c5@2 ~@3 [g4,eb5]@2 ~ ab4@2 ~ d5@3 [d3,bb4]@2 [bb2,f4] ~@2 ab3@3 d5@2 ~ eb5@2 ~ g5 ~@4 f5@3 d4@3 ab5@3 eb4 ~@2 bb5@3 ~@3 eb5@3 ~@8 eb4@3 c5 ~@2 c6@3 ab5@3 f5@3, ~@19 eb3@11 ab5@6 [bb2,eb5,g5]@6 ~@6 [g3,bb4,eb5]@5 ~ [f3,d5]@5 ~@17 eb4@11 bb4@5 ~@13 db5@6 [g2,g4]@5 [ab2,ab3]@7 ~@5, ~@25 f5@6 f5@6 ~@5 [ab4,f5]@6 ~@5 ab4@5 ~ f5@14 ~@3 g3@5 ab5@4 ~@8 g5@6 ~@9 bb4@10 ~@10, ~@82 f3@11 ~@6 [eb2,g5]@6 f2@13 ~@4 f2@6]/4", // Ddim Cm Gm Bb5 Eb Dm G Ab …
  O: "[~@4 c5@3 ~@2 f4@2 ~ d5 ~@2 f5@2 ~@4 bb4@3 ~@3 f4@3 d4@5 ~@3 g4@3 ~@3 g4@3 ~@3 ab4@3 ~@2 ab4@4 ab3@2 g3@3 ab3@2 ~ bb3@3 ~@3 d3@3 [eb3,a4]@2 f4@3 ~@3 bb3@3 ~@3 [f3,d4]@3 d5 c5 ~ [c4,c5]@2 d5 c5 ~@3 c5@2 [bb2,bb4]@4 f3@2 d3@3 bb2@3 ~@6 d3@2 ab2@3, ~ eb5@11 ~@12 ab4@15 ~@2 f4@3 ~@15 c5@6 ~@5 c4@13 ~@4 [c4,d5]@6 eb4@3 ~@3 f3@5 ~@13 [ab2,d5]@7 ~@4, ~ g2@6 [a2,a4]@5 bb3@6 [bb2,d5]@6 ~@12 eb3@36 ~@6 f3 ~@3 g3@5 ~@6 eb3@7 ~ c5@2 ~@19 bb4@6, ~@42 db4@5 [c4,eb4]@6 [bb3,g4]@5 ~@6 bb4@7 ~@10 eb5@4 ~@11 d5 ~@3 d5@4 ~@7 f5@7 ~@10, ~@51 [eb4,bb4] ~@8 f3@2 ~@2]/4", // Ebdim Dm C Bb Csus2 Abdim A Bb …
  P: "[~@3 bb4@3 ~@3 g5@3 db5@2 bb4@3 ~ db5@2 g5@2 ~ ab2@3 eb3@3 ~ c3@2 ab2@2 ~ g2@3 eb3@3 c3@2 ~ g2@3 f2@3 ab4@3 d5@2 ~ f5@3 c5@2 ab4@3 c5@3 f5@2 ~@4 d3@3 bb2@3 ~@3 f2@3 d3@2 ~ bb2@3 f2@2 ~ e2@3 ~@6 e2@2 f2@3 ~@6 [f2,eb5]@2 ~@9 [d2,c5]@2 eb2, bb5@25 ~@4 eb5@7 ~@5 ab4@6 ~@23 bb4@6 d5@8 ~@3 g4@7 ~@6 bb4@6 ~@2 [c3,c5]@8 ~ f5@10 ~, g2@5 ~ eb5@5 ~@12 c5@7 ~@5 c5@7 ~@5 ab5@26 ~@9 bb4@7 ~@5 g5@15 ~@2 [ab2,d5]@5 d2@3 [bb2,eb5]@8 ~, ~@7 g3@5 ~@6 eb2@5 ~@30 f3@5 ~@21 g2@5 ~@21 ab4@21 ~@2, ~@122 [f2,d5]@5 ~]/4", // F7 D7 C Abdim Eb5 Dm
  Q: "[g4,bb4]@2 [bb2,ab4]@3 bb4@2 ~ c5@2 ~@3 d4@3 c4@2 ~ d4@3 [d3,bb3]@2 eb4@3 d4@2 ~ eb4@2, ~@5 eb4@6 bb2@5 f3@5 ~@6 [bb2,f4]@5, ~@5 g2 ~ eb2@3 f4@16 ~@6", // Gm Bb7 Gm Bb5
  R: "[~@9 [ab3,f4]@10 ab3@4 ~@15 [eb3,g4]@6 ~@6 [b3,d5]@8 eb5@4 g5@3 ~@9 c4@3 ~@3 f3@2 ~@3 f5@3 ~@3 bb4@3 g4@2, ~ [gb4,eb5]@12 ~@12 bb3@5 ab4@6 ~@2 eb5@16 ~@11 eb5@10 ~@21, ~@2 a3@12 ~@9 [f3,d4]@8 bb2@13 bb3@9 ~@5 [c4,eb4]@18 ~ [ab3,f4]@7 ~@4 [bb2,d5]@6 ~@2, ~@9 d5@8 ~@9 d3@8 ~@10 f4@16 ~@11 ab4@12 d3@6 ~@7, ~@30 f5@15 ~@23 c5@7 ~@7 bb3@14]/3", // Db Eb Bm Ebm Dm Cm Db Bb
  S: "[~ eb3@3 ~@3 ab2@4 ~@3 d4@4 ~@80 g3@64 ~@30, ~@4 f4@10 ~@4 eb4@6 f4@11 ab3@8 db4@15 c4@47 ~@87, ~@4 [c3,eb5]@7 bb2@36 bb3@12 ~@4 ab3@17 b3@25 ~@87, ~@11 g4@17 c4@24 g3@19 f3@34 ~@87, ~@21 bb3@10 d4@8 [eb2,eb4]@125 ~@28]/6", // Cm Eb
})).s("gm_piano").gain(0.26)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  A@2 ~ B C D E F ~@3 G H@2 I ~@2 J ~ K L M ~@2 N ~@2 O@2 P Q ~ R S T U ~ V@2 W@2 ~ X ~@2 Y Z ~@7 AA@3
>`.pickRestart({
  A: "[~@29 bb4@7 ~@28]/2", B: "~@27 f4@5", C: "~@28 f4 ~@3", D: "~ f4@2 ~@21 f4@3 ~@2 a4@3", E: "~ f4@2 ~@23 c4@2 ~@4",
  F: "~@12 bb4@3 ~", G: "~@11 c4 ~@11 d4@3 ~@6", H: "[~@25 bb3@2 ~ g3@2 ~ e3@2 ~ c4@3 g3 ~ e3@2 ~@15 bb3@3 ~@5]/2",
  I: "~@3 bb3@3 g3@2 ~ eb3@3 f4@8 ~@4 g3@5 ~@3, ~@6 bb2 ~@9", J: "~@8 ab3@3 ~@21", K: "~@9 b3 ~@16 e3@2 ~@4",
  L: "~@11 eb3@5 ~ d3@5 ~ c3@5 ab4 ~@3", M: "~@14 bb2@5 ~ a2@3 ~@9", N: "~@21 d4@5 ~@6",
  O: "[~@14 ab3@3 c4@2 ~@2 f4@5 ~@8 eb3@4 b4@4 ~@11 f4@3 ~@3 g3@4 ~, ~@31 g3@10 ~@23]/2", P: "~@26 a3@2 bb3 ~@3",
  Q: "a3@2 ~@4 bb3@3 ~@2 bb3@2 ~@2 g3@2 ~@15", R: "~@17 bb2 ~@14", S: "~@11 bb4@2 ~@19", T: "~@23 a3@6 b3@3",
  U: "~@8 c3@5 ~@19", V: "[~@7 d4@3 ~@20 eb3@5 ~@14 db5@4 ~@11]/2",
  W: "[~@13 bb2@2 ~@9 c3@5 ~@3 bb3@2 ~@30, ~@30 d3@5 ~@29]/2", X: "~@9 d4@2 ~@21", Y: "~ d2@5 g2@3 ~@23",
  Z: "~@2 g2@3 ~@11, ~ c3@9 ~@22", AA: "[~@2 bb3@65 ~@29]/3",
})).s("gm_piano").gain(0.15)

stack(piano, piano_soft)

More by Bach Johann Sebastian