Strudelify

Fugue in G Minor

J. S. Bach

KeyG minorTempo103 bpm
0:00/0:00
// Fugue in G Minor — J.S. Bach
// 103 bpm, 4/4, key G minor. 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/4871728; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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 · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@5 A B C D E F G H I J K L ~@4 M@3 N ~@7 O P Q R S T U V W X Y Z AA AB AC AD AE@2 AF AG@3 AH ~ AI AJ AK@2 AL AM AN AO
  AP AQ AR AS@3
>`.pickRestart({
  A: "d4@2 a4@2 f4@3 e4", B: "d4 f4 e4 d4 db4 e4 a3@2", C: "d4@2 a3@2 e4@2 a3@2 f4@2 e4 d4 e4@2 a3@2",
  D: "d4@2 a3 d4 e4@2 a3 e4 f4@2 e4 d4 e4 a3 a4 g4", E: "f4 e4 d4 f4 e4 d4 db4 e4 d4 a3 d4 e4 f4 g4 a4 b4",
  F: "c5 bb4 c5 d5 c5 bb4 a4 c5 bb4 a4 bb4 c5 bb4 a4 g4 bb4", G: "a4 g4 gb4 d4 ~@4",
  H: "~@2 d4@2 g4@2 a4@2 bb4 c5 bb4 c5 [c5,d5] c5@2 [bb4,c5]", I: "d5 c5 d5 eb5 d5 c5 bb4 a4 d4@2 ~@2 c4@2 ~@2",
  J: "d4 ~ c4 ~@5", K: "~@2 d4 c4", L: "bb3 ~@3", M: "[~ a4 d5 c5 bb4@5 g4 c5 bb4 a4@6 g4@4 gb4@2]/3", N: "g4 ~@7",
  O: "bb3@2 f4@2 d4@3 c4", P: "bb3 d4 c4 bb3 a3 c4 f3@2", Q: "bb3@2 f3@2 c4@2 f3@2 d4@2 c4 bb3 c4@2 f3@2",
  R: "bb3@2 f3 bb3 c4@2 f3 c4 d4@2 c4 bb3 c4 f3 f4 eb4", S: "d4 c4 bb3 d4 c4 bb3 a3 c4 bb3@2 g4@2 ~@2 g3@2",
  T: "a3 f4 ~ f3 g3 f4 c4 e4", U: "f4 eb4 f4 g4 f4 eb4 d4 f4 eb4 d4 eb4 f4 eb4 d4 c4 eb4",
  V: "d4 c4 d4 eb4 d4 c4 bb3 d4 c4 bb3 c4 d4 c4 bb3 a3 c4", W: "bb3 c4 d4 bb3 c4 d4 eb4 c4 d4 c4 bb3 c4 d4 eb4 d4 eb4",
  X: "f4 g4 f4 g4 [g4,a4]!3 [f4,g4] a4 g4 a4 bb4 a4 g4 f4 eb4", // Gsus2 Fsus2
  Y: "d4 f4 eb4 f4 a3 f4 eb4 f4 bb3 f4 eb4 f4 a3 f4 eb4 f4",
  Z: "d4 bb4 a4 bb4 eb4 bb4 a4 bb4 f4 bb4 a4 bb4 eb4 bb4 a4 bb4", AA: "bb4 d5 c5 bb4 a4 g4 f4 eb4 d4@2 f4@2 bb4@2 a4@2",
  AB: "g4@5 c4 a4 g4", AC: "f4@5 bb3 g4 f4", AD: "eb4@9 eb4 d4 c4 b3@4",
  AE: "[c4@4 ~@6 c4@2 ab4@2 f4@7 f4 eb4 d4 eb4 d4 c4 eb4 d4 c4 b3 d4]/2",
  AF: "c4 g3 c4 d4 eb4 f4 eb4 f4 g4 eb4 c4 g4 ab4 f4 g4 ab4", AG: "[d4 eb4 d4 c4 b3@2 d4@2 g3@34 g4@2 f4 eb4 d4 f4]/3",
  AH: "eb4 ~@3", AI: "~ eb5 c5 eb5 a4 c5 e4 g4 gb4 a4 gb4 a4 d4 gb4 a3 c4", AJ: "bb3 g4 a3 gb4 g4@2 ~@2",
  AK: "[bb3 d4 a3 d4@2 g4 c4 f4@2 f4 d4 g4@2 g4 e4 a4]/2", AL: "~ eb5 d5 c5 bb4 d5 a4 d5 g4 ab5 g5 f5 g5 f5 eb5 d5",
  AM: "eb5 d5", AN: "c5@8 bb4 d5 c5 bb4 a4 bb4 g4 a4", AO: "bb4 c5 bb4 c5 d5 eb5 d5 c5 bb4@2 d5@2 c5@2 bb4@2",
  AP: "a4@6 d4@2 [d4,eb4]!8", AQ: "[d4,eb4]!16", AR: "[d4,eb4]!2 d4 [d4,eb4]!3 eb4 [d4,eb4] d4 eb4 d4@3 eb4@3",
  AS: "[c4@3 d4@3 ~ d5@27 ~@14]/3",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@11 A B C D E F G H I J K L M N O P Q R S T U V W@3 ~@8 X@4 Y Z ~@4 AA AB AC AD AE ~ AF AG AH AI AJ AK AL AM@3
>`.pickRestart({
  A: "~@2 g3 d4", B: "bb3@3 a3 g3 bb3 a3 g3", C: "gb3 a3 d3@2 g3 d3 a3 d3",
  D: "bb3@2 a3 g3 a3@2 d3@2 g3@2 d3 g3 a3@2 d3 a3", E: "bb3@2 a3 g3 a3 d3 d4 c4 bb3 a3 g3 bb3 a3 g3 gb3 a3",
  F: "g3 d3 g3 a3 bb3 c4 d4 e4 f4 e4 d4 f4 e4 d4 db4 e4", G: "d4 ~ a3@2 d4@2 e4@2 f4 g4 f4 g4 [g4,a4]!3 [f4,g4]",
  H: "a4 g4 a4 bb4 a4 g4 f4 e4 f4 a4 g4 a4 db4 a4 g4 a4", I: "d4 a4 g4 a4 db4 a4 g4 a4 f4 d4 db4 d4 g4 d4 db4 d4",
  J: "a4 d4 db4 d4 g4 d4 db4 d4 f4@2 e4 d4 db4@4", K: "d4 c4 d4 eb4 d4 c4 bb3 a3 g3 f3 g3 a3 g3 f3 eb3 d3",
  L: "c4 bb3 c4 d4 c4 bb3 a3 g3 f3 eb3 f3 g3 f3 eb3 d3 c3", M: "bb2 bb3 c4 d4 eb4@5 a3 bb3 c4 d4@4",
  N: "g3@2 d4@2 bb3@3 a3", O: "g3 bb3 a3 g3 gb3 g3 e3 gb3 g3 d3 e3 gb3 g3 d3 g3 a3",
  P: "bb3 c4 bb3 c4 [c4,d4]!3 [bb3,c4] d4 c4 d4 eb4 d4 c4 bb3 a3", // Csus2 Bbsus2
  Q: "bb3 d4 c4 d4 gb3 d4 c4 d4 g3 d4 c4 d4 gb3 d4 c4 d4", R: "bb3 g3 gb3 g3 c4 g3 gb3 g3 d4 g3 gb3 g3 c4 g3 gb3 g3",
  S: "g3@2 bb3@2 c4 bb3 a3 c4 bb3@5 d4 c4 bb3", T: "a3@5 c4 bb3 a3 g3@5 bb3 a3 g3", U: "f3@3 e3 f3 eb3 d3 c3",
  V: "bb2@2 ~@3 c4 bb3 a3", W: "[g3@4 f3@2 ~ f4@17]/3",
  X: "[~@4 d3@5 g3 c4 bb3 a3@5 f3 bb3 a3 g3@5 eb3 ab3 g3 f3@2 g3@2]/4", Y: "~ g3 a3 b3 c4 d4 eb4 c4 ab3@8",
  Z: "g3 a3 b3@2 c4@2 ~@2", AA: "~@5 c4 a3 f3", AB: "bb3@5 bb3 g3 eb3", AC: "a3@5 a3 gb3 d3",
  AD: "g3@4 ~@4 g3 bb3 a3 g3 d4 a3 d3 c4", AE: "bb3 ~@3", AF: "~@2 eb4 gb4 g4@2 a4 bb4",
  AG: "c5 g4 f4 eb4 c5 a4 f4 a4 bb3 f4 eb4 d4 bb4 g4 eb4 g4",
  AH: "a3 eb4 d4 c4 a4 gb4 d4 gb4 g3 bb3 d4 g4 gb4 g4 e4 gb4", AI: "g4@3 gb4 g4@2 a4 d4", AJ: "d4@3 f3 g3 ~ c4 ~",
  AK: "bb3 ~ c4 ~ bb3 ~ a3 ~", AL: "bb3@2 ~@2 a3@2 ~@4 g3@3 bb3@3", AM: "[eb3@3 a3@3 ~ b3@27 ~@14]/3",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@16 A B C D E F ~@3 G H ~ I J@2 K ~@8 L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF ~ AG AH AI AJ AK AL@3
>`.pickRestart({
  A: "~@2 d3 a3", B: "f3@3 e3 d3 f3 e3 d3", C: "db3 e3 a2@2 d3 a2 e3 a2",
  D: "f3@2 e3 d3 e3@2 a2@2 d3@2 a2 d3 e3@2 a2 e3", E: "f3@2 e3 d3 e3@2 a2@2 d3@2 g2@2 a2@4", F: "d2 ~@3",
  G: "~@5 g2 g3 f3", H: "eb3 ~ eb2@2 d2 ~@3", I: "~@2 [d3,eb3]!14", J: "[[d3,eb3]!8 d3@4 c3@8 bb2@8 a2@4]/2",
  K: "bb2 a2 g2@2 f2@2 ~@2", L: "bb2@2 f3@2 d3@3 c3", M: "bb2 d3 c3 bb2 a2 c3 f2@2",
  N: "bb2@2 f2@2 c3@2 f2@2 d3@2 c3 bb2 c3@2 f2@2", O: "bb2@2 f2 bb2 c3@2 f2 c3 d3@2 c3 bb2 c3@2 f2@2",
  P: "d3 eb3 f3 f2 bb2@2 ~@2", Q: "c3 f2", R: "bb2 eb2", S: "ab2@2 d2 g2", T: "c2 f2", U: "g2",
  V: "c2 g2 c3 d3 eb3@2 f3@2", W: "g3@5 g3 f3 g3 eb3 g3 f3 g3 b2 g3 f3 g3",
  X: "c3 g3 f3 g3 b2 g3 f3 g3 eb3 c4 b3 c4 f3 c4 b3 c4", Y: "g3 c4 b3 c4 g3 b3 a3 b3 c3@2 eb3@2 f3@2 g3@2",
  Z: "c3 g3 eb3 c3 f3@2 ~@2", AA: "~ f3 d3 bb2 eb3@2 ~@2", AB: "~ eb3 c3 a2 d3@2 ~@2",
  AC: "g2 bb2 a2 g2 d3 a2 d2 c3 bb2@2 d3@2 gb2@2 d3@2", AD: "g3 gb3 g3 a3", AE: "bb3 b3 c4 db4", AF: "d4 ~@3",
  AG: "~@2 g3 d4", AH: "bb3@3 a3 g3 bb3 a3 g3", AI: "gb3 a3 d3@2 g3 d3 a3 d3",
  AJ: "bb3@2 a3 g3 a3@2 d3@2 g3@2 d3 g3 a3@2 d3 a3", AK: "bb3@2 a3 g3 a3@2 ~ d3@3 g3@3 eb3@3",
  AL: "[c3@3 d3@3 ~ g2@27 ~@14]/3",
})).s("gm_baritone_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone" · soft notes · Ebmaj7
const baritone_sax_soft = note("<~@26 [~@10 d3@2 [d3,eb3]!4] [[d3,eb3]!16] [[d3,eb3]!2 ~@14] ~@41>")
  .s("gm_baritone_sax").gain(0.2)

stack(alto_sax, tenor_sax, baritone_sax, baritone_sax_soft)

More by J. S. Bach