Strudelify

Prelude and Fugue in C-sharp major BWV 848

Johann Sebastian Bach

KeyD♭ majorTempo106 bpm
0:00/0:00
// Prelude and Fugue in C-sharp major BWV 848 — Johann Sebastian Bach
// 106 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/34649; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 56 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(106/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · piano
const piano = note(`<
  ~@2 A B C D E F G H I J K L ~ M N O P Q R S T U V@2 W X Y Z AA AB AC AD ~@9 AE B C D AF AG AH AI AJ AK AL AM@2
>`.pickRestart({
  A: "~@6 db4@2 f4 eb4 db4 eb4 c5 ~ ab4 ~", B: "eb4@2 db4 c4 db4 ~ bb4 ~ c4 ~ ab4 ~ bb3 ~ g4 ~",
  C: "ab3 ~ ab4 g4 ab4 bb4 c5 ab4 db5 c5 bb4 c5 db5 c5 bb4 ab4", D: "bb4@5 ab4 gb4 bb4 ab4 gb4 f4 ab4 gb4 f4 gb4 eb4",
  E: "f4@4 ~@2 ab4@2 db5@6 db5 bb4", F: "eb4@4 ~@2 g4 ~ c5@6 c5 ab4", G: "db4@4 ~@2 f4 ~ bb4@5 db5 eb5 bb4",
  H: "c5@4 ~@2 ab4@3 g4 f4 g4 ab4 gb4 f4 eb4", I: "f4@5 eb4 db4 f4 eb4 db4 c4 eb4 db4 c4 db4 bb3",
  J: "c4@2 eb4@2 ab4@4 ~@2 b3 ab3 f3@4", K: "~@2 f3 ab3 b3@4 bb3@2 b3@2 bb3@2 d3@2", L: "eb3 ~@3",
  M: "db4@4 ~@2 f4@2 bb4@5 db5 eb5 bb4", N: "c5@2 ~@4 eb4 ~ ab4@5 c5 db5 ab4", O: "bb4@2 ~@4 db4 ~ g4@5 bb4 c5 g4",
  P: "ab4@4 ~@2 c4@2 db4 c4 bb3 c4 ab4 ~ f4 ~", Q: "c4@2 bb3 ab3 bb3 ~ g4 ~ ab3 ~ f4 ~ g3 ~ e4@2",
  R: "f3@3 e3 f3 e3 f3 bb3", S: "ab3@2 g3 f3 g3@2 bb3@2 ab3 bb3 c4 ab3 f3 gb3 ab3 f3",
  T: "d3 eb3 f3 d3 ab2 d3 f3 bb3 eb3 gb3 bb3 d4 eb4 f4 gb4 eb4", U: "c4 db4 eb4 c4 ab3@5 ab3 bb3 c4 db4@2 ~@2",
  V: "[~@4 c5@8 bb4@6 ab4@2 g4@2 bb4@2 eb4 ~@5 ab3@2]/2", W: "bb3 ab3 gb3 ab3 f4 ~ db4 ~ ab3@2 gb3 f3 gb3 ~ eb4 ~",
  X: "f3 ~ db4 ~ eb3 ~ c4 ~ db4@4 ~@2 ab5 f5", Y: "db5@4 ~@2 db5 bb4 g4@4 ~@2 db5@2", Z: "b4@2 bb4@2 ab4 ~@3",
  AA: "~@2 b3 ab3 f3 ~@5 bb3 gb3 eb3 ~@3", AB: "~@2 bb3 gb3 eb3 ~@5 ab3 f3 d3 ~@3",
  AC: "~@2 ab3 f3 d3 ~@5 gb3 eb3 c3 ~@3", AD: "~@2 gb3 eb3 c3 ~@11", AE: "~@6 db4 eb4 f4 eb4 db4 eb4 c5 ~ ab4 ~",
  AF: "f4@5 db4 gb4 f4", AG: "gb4@6 gb4 eb4 ab3@4 ~@2 ab3@2", AH: "f4@6 f4 d4 bb3@4 ~@2 bb3@2",
  AI: "eb4@5 gb4 ab4 eb4 f4@4 ~@2 db4@2", AJ: "~ c4 bb3 c4 db4 c4 bb3 ab3 bb3@5 ab3 gb3 bb3",
  AK: "ab3 gb3 f3 ab3 gb3 f3 eb3 gb3 f3 ab3 bb3 c4 db4 c4 bb3 ab3", AL: "g3 ab3 bb3 g3 eb3@5 eb3 f3 gb3 ab3 bb3 c4 bb3",
  AM: "[db4@2 db4@2 eb4@4 [db4,f4,ab4]@11 ~@13]/2", // Db
})).s("gm_piano").gain(0.3)

// other · piano
const piano_2 = note(`<
  ~@4 A B C D E F G H I J K L M N O P Q R ~ S T U@3 V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK@2 AL B AM AN AO AP AQ AR
  AS AT@2
>`.pickRestart({
  A: "~@6 ab3@2 bb3 ab3 gb3 ab3 f4 ~ db4 ~", B: "ab3@2 gb3 f3 gb3 ~ eb4 ~ f3 ~ db4 ~ eb3 ~ c4 ~",
  C: "db3@2 db4 c4 db4 eb4 f4 db4 bb3 c4 db4 bb3 g3 ab3 bb3 g3",
  D: "c3@2 c4 bb3 c4 db4 eb4 c4 ab3 bb3 c4 ab3 f3 g3 ab3 f3",
  E: "bb2@2 bb3 ab3 bb3 c4 db4 bb3 g3 ab3 bb3 g3 eb3 f3 g3 eb3", F: "ab2 ~ ab3 bb3 c4 ~ ab3@2 db4@4 c4@4",
  G: "bb3 ab3 g3@2 ab3@2 eb3@2", H: "ab3@4 ~@2 eb4 c4 ab3@4 ~@2 ab3 f3", I: "d3@2 ~ f3 gb3 ab3 bb3 bb2",
  J: "eb2@4 ~@2 eb3@2 gb3 f3 eb3 f3 db4@2 bb3@2", K: "f3@2 eb3 db3 eb3 ~ c4 ~ db3 ~ bb3 ~ c3 ~ a3 ~",
  L: "bb2 ~ bb3 a3 bb3 c4 db4 bb3 g3 ab3 bb3 g3 eb3 f3 g3 eb3",
  M: "ab2 ~ ab3 g3 ab3 bb3 c4 ab3 f3 gb3 ab3 f3 db3 eb3 f3 db3", N: "g2 ~ g3 f3 g3 ab3 bb3 g3 e3 f3 g3 e3 c3 db3 e3 c3",
  O: "f2 g2 ab2 bb2 c3 d3 e3 c3 f3 e3 d3 e3 f3 eb3 db3 c3", P: "db3@5 c3 bb2 db3 c3 bb2 ab2 c3 bb2 ab2 bb2 g2",
  Q: "ab2 db3 g2 c3 f2 bb2 ab2 db3", R: "c3@2 f3 ~", S: "~@5 ab2 bb2 c3 db3@5 eb3 f3 g3",
  T: "ab3 g3 f3 g3 ab3 g3 f3 eb3 f3@5 eb3 db3 f3",
  U: "[eb3 db3 c3 eb3 db3 c3 db3 bb2 c3@2 eb3@2 gb3@8 f3@8 eb3@6 db3@2 eb3@2 ab2@2 db3 eb3 f3 gb3 f3 eb3 db3 f3]/3",
  V: "bb3 ab3 g3 bb3 db4 c4 bb3 db4 e4@2 eb4 db4 c4 bb3 ab3 g3",
  W: "ab3 b3 bb3 ab3 g3 f3 eb3 db3 b2 db3 eb3 b2 ab2@2 ab3 f3", X: "b2@2 ~@4 db3 bb2 gb2 ~@5 gb3 eb3",
  Y: "db3 ~@5 c3 ab2 f2 ~@5 f3 d3", Z: "bb2 ~@5 bb2 gb2 eb2 ~@5 eb3 c3", AA: "ab2 ~@5 ab2 f2 db2@4 ~@4",
  AB: "~@2 b3 db3 bb3 db3 ab3 db3 gb3 db3 f3 eb3 f3 ~ ab2 ~",
  AC: "~@2 bb3 db3 ab3 db3 gb3 db3 f3 db3 eb3 db3 eb3 ~ ab2 ~",
  AD: "~@2 ab3 ab2 gb3 ab2 f3 ab2 eb3 ab2 db3 c3 db3 ab2 f3 eb3",
  AE: "f3 ab2 ab3 gb3 ab3 ab2 bb3 ab2 c4 db4 eb4 c4 ab3 c4 eb4 f4",
  AF: "gb4 f4 eb4 f4 db5 ~ ab4 ~ f4@2 eb4 db4 eb4 ab3 c4 eb4",
  AG: "f4 eb4 db4 eb4 c5 ~ ab4 ~ eb4@2 db4 c4 db4 ab3 c4 db4",
  AH: "gb4 f4 eb4 f4 db5 ~ ab4 ~ db4@2 c4 bb3 c4 ab3 bb3 c4",
  AI: "db4 eb4 f4 eb4 gb4 f4 eb4 db4 gb4@2 bb3 c4 db4 c4 bb3 ab3",
  AJ: "bb3@5 ab3 gb3 bb3 ab3 gb3 f3 ab3 gb3 f3 gb3 eb3",
  AK: "[f3@3 ab3 bb3 c4 db4@2 db4@4 c4@8 bb3@6 ab3@2 bb3@2 eb3@2]/2", AL: "ab3@4 ~@2 ab3@2 bb3 ab3 gb3 ab3 f4 ~ db4 ~",
  AM: "db3 ab2 db3 eb3 f3 gb3 ab3 f3 gb3 gb2 gb3 f3 gb3 ab3 bb3 gb3",
  AN: "eb3 f3 gb3 eb3 c3 db3 eb3 c3 f2@2 f3 eb3 f3 gb3 ab3 f3",
  AO: "d3 eb3 f3 db3 bb2 c3 db3 bb2 eb2@2 eb3 db3 eb3 f3 gb3 eb3",
  AP: "c3 db3 eb3 c3 ab2 bb2 c3 ab2 db2@2 db3 eb3 f3@2 db3@2", AQ: "gb3@2 f3@2 eb3 db3 c3@2", AR: "db3@2 ab2@2 bb2 ~@3",
  AS: "~@5 db3 c3 bb2 ab2@4 ~@4", AT: "[~@2 f2@2 gb2@2 ab2@2 db2@11 ~@13]/2",
})).s("gm_piano").gain(0.3)

stack(piano, piano_2)

More by Johann Sebastian Bach