Strudelify

Toccata and Fugue in D minor BWV 565

J. S. Bach

KeyF majorTempo72 bpm
0:00/0:00
// Toccata and Fugue in D minor BWV 565 — J. S. Bach
// 72 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 17, 4/4 at bar 17, 5/4 at bar 22, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/153273; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 34 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/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.

// other · piccolo
const piccolo = note("<A@2 ~@2 B@3 C@2 D@2 E F G@2 ~ H@2 I J@3 K@2 ~@2 L M N@2 O P Q@2>".pickRestart({
  A: "[~@28 a6 ~ g6 a6@6 ~@3 g6 ~ f6 e6 ~ d6 db6@6 d6@12 ~@32]/2",
  B: "[~@4 e5@12 e5@12 g5@12 bb5@12 db6@12 e6@12 d6@33 ~@35]/3",
  C: "[~@39 db6@2 d6@2 ~ db6@2 ~ e6@2 ~ d6@2 e6@2 ~ d6@2 e6@2 ~@2 g6@2 ~ f6@2 g6@2 ~ f6@2 ~ e6@2 f6@2 g6@2 ~@2 bb6@2 ~ a6@2 ~ g6@2 a6@2 ~ g6@2 a6@2 ~, ~@43 e6@2 ~ d6@2 ~ db6@2 ~@3 db6@2 ~@4 f6@2 ~ e6@2 ~@3 e6@2 ~ g6@2 ~@6 a6@2 ~ g6@2 ~ bb6@2 ~@3 bb6@2 ~@4]/2",
  D: "[~@18 a6@2 g6@2 ~ e6@2 ~ bb6@2 e6@2 ~ a6@2 ~ f6@2 ~ d6@2 ~ g6@2 c6@2 ~ g6@2 ~ d6@2 ~ bb5@2 d6@2 ~ bb5@2 ~ e6@2 ~ c6@2 e6@2 ~ bb5@2 ~ g5@2 ~ d6@2 ~ c6@2 ~@18, ~@22 bb6@2 ~ g6@2 ~@3 f6@2 ~ d6@2 ~ a6@2 ~ e6@2 ~@3 e6@2 ~ c6@2 ~ f6@2 ~@3 f6@2 ~ c6@2 ~ a5@2 ~@3 a5@2 ~ d6@2 ~ bb5@2 ~ g5@2 ~@19]/2",
  E: "~@27 bb6@9 ~ a6 g6 ~ f6 e6 d6 ~ db6 b5 ~ db6",
  F: "a5@2 ~ e6@2 g6@2 [f6,g6] f6 g6 f6 g6 e6@2 f6@14 ~@10 a5@2 ~ d6 ~ a5@2 e6 a5@2, ~ db6 ~@22", // Fsus2
  G: "[f6 a5@2 d6 ~@2 e6 ~ a5@2 f6 a5@2 g6 ~@2 e6 ~@2 f6 ~ a5@2 g6 a5@2 a6 ~@2 f6 ~ a5@2 g6 a5@2 a6 a5@2 bb6 ~@2 g6 ~ a5@2 a6 a5@2 f6 ~@2 g6 ~@2 e6 ~ a5@2 f6 a5@2 d6 ~@2 e6 ~ a5@2 db6 a5@2 d6@3 ~@21, ~@5 a5@2 ~@8 a5@2 ~ a5@2 ~@8 a5@2 ~@11 a5@2 ~@8 a5@2 ~ a5@2 ~@8 a5@2 ~@30]/2",
  H: "[~@47 f6@2 bb6@2 ~ c6@2 ~ a6@2 e6@2 ~ d6@2 g6@2 ~ a5@2 db6@2 ~ a6@2 ~@3 d6@3 ~@4 a5@3 ~@3 bb5@3 db6@5, ~@46 d6@2 ~@3 f6@2 ~ e6@2 ~@3 bb5@2 ~@3 d6@2 ~@3 e6@2 ~@25]/2",
  I: "~@2 d6@2 ~ bb6@2 f6@2 ~ e6@2 ~ e6@2 bb5@2 ~ g6@2 d6@2 ~ db6@2 e6@2 a6@2 ~@2 d6@3 ~@4 d6@3 ~@4 d6@3, ~@4 f6@2 ~@3 c6@2 ~ a6@2 ~@3 d6@2 ~@3 a5@2 ~@24",
  J: "[db6@7 ~@40 b5@2 db6@2 ~ e6@2 ~ g6@2 a6@2 ~@3 d6@3 ~@4 a5@3 ~@3 bb5@3 db6@7 d6@2 ~ bb6@2 ~ c6@2 e6@2 ~ e6@2 bb5@2 ~ g6@2 d6@2 ~ db6@2 ~ a6@2 ~@3 d6@3 ~@4 a5@3 ~@3 bb5@3 ~ db6@6 b5@7, ~@46 a5@2 ~@3 d6@2 ~ f6@2 ~@31 f6@2 ~ f6@2 ~@3 a6@2 ~@3 d6@2 ~@3 a5@2 ~ e6@2 ~@34]/3",
  K: "[db6@10 b5@3 a5@2 ~ e6@2 ~ bb6@7 a6 g6 [e6,f6] f6 e6 d6 db6 [c6,d6] bb5 a5 g5@2 ~ e6@13 db6@2 ~ db6@2 ~ db6@2 bb5@2 ~ e6@2 ~ bb5@2 ~ bb5@2 db6@2 ~ db6@2 ~ db6@2 ~ db6@2 ~ db6@2 bb5@2 ~ bb5@2 ~@6, ~@15 db6@2 ~ g6@2 ~@34 e6@2 ~ bb5@2 ~@3 db6@2 ~ db6@2 ~ db6@2 ~@3 e6@2 ~ bb5@2 ~ bb5@2 ~ e6@2 ~@3 db6@2 ~@7]/2", // Fmaj7 Csus2
  L: "~@29 db6@2 ~ db6@2 ~ db6@2 e6@2 ~ bb5@2 ~ e6@2 ~ e6@2, ~@31 bb5@2 ~ e6@2 ~@3 db6@2 ~ db6@2 ~ db6@2 ~", M: "a6!2",
  N: "g6 ~", O: "~@7 db6", P: "d6 f6 e6@2", Q: "[d6@31 ~@17]/2",
})).s("gm_piccolo").gain(0.3)

// other · flute · "Alto Flute"
const flute = note("<A@2 B@2 C@3 D@2 ~ E@2 F ~ G@2 H@2 I J K@2 L@2 M@3 N O P Q R@3>".pickRestart({
  A: "[~@28 a4 ~ g4 a4@6 ~@3 g4 ~ f4 e4 ~ d4 db4@6 d4@12 ~@12 a4 ~ g4 a4@6 ~@6 e4@3 f4@2]/2",
  B: "[~ db4@3 d4@12 ~@12 a4 ~ g4 a4@6 ~@3 g4 ~ f4 e4 ~ d4 db4@6 d4@12 ~@32]/2",
  C: "[~@4 e4@12 g4@12 bb4@12 db5@12 bb4@12 g4@12 a4@33 ~@35]/3",
  D: "[~@39 db4@2 d4@2 ~ db4@2 ~ e4@2 ~ d4@2 e4@2 ~ d4@2 e4@2 ~@2 g4@2 ~ f4@2 g4@2 ~ f4@2 ~ e4@2 f4@2 g4@2 ~@2 bb4@2 ~ a4@2 ~ g4@2 a4@2 ~ g4@2 a4@2 ~, ~@43 e4@2 ~ d4@2 ~ db4@2 ~@3 db4@2 ~@4 f4@2 ~ e4@2 ~@3 e4@2 ~ g4@2 ~@6 a4@2 ~ g4@2 ~ bb4@2 ~@3 bb4@2 ~@4]/2",
  E: "[~@11 e5@2 ~ c5@2 e5@2 ~ bb4@2 ~ g4@2 ~ d5@2 ~ a4@2 c5@2 ~ a4@2 ~ f4@2 ~ bb4@2 e4@2 ~ bb4@2 ~ f4@2 ~ d4@2 f4@2 ~ d4@2 ~ g4@2 ~ e4@2 ~ db4@2 ~@9 e5@9 ~@12, ~@10 c5@2 ~ a4@2 ~@3 a4@2 ~ d5@2 ~ bb4@2 ~ g4@2 ~@3 f4@2 ~ c5@2 ~ g4@2 ~@3 g4@2 ~ e4@2 ~ a4@2 ~@3 a4@2 ~ e4@2 ~ db4@2 ~ g4@2 ~@31]/2",
  F: "~@7 d4@7 ~@10",
  G: "[~@37 a4@2 ~ f4@2 ~ g4@2 ~@2 e4@2 ~ f4@2 ~ d4@2 ~@2 g4@2 ~ e4@2 ~ f4@2 ~ d4@2 ~@2 e4@2 ~ db4@2 ~ d4@2 ~ a4 ~ a3@2 bb4 a3@2 g4 ~@2 a4 ~ a3@2 f4 a3@2, ~@44 a3 ~@3]/2",
  H: "[g4 a3@2 e4 ~@2 f4 ~ a3@2 d4 a3@2 g4 ~@2 e4 ~@2 f4 ~ a3@2 d4 a3@2 e4 ~@2 db4 ~ a3@2 ~@13 d4@6 c4@7 bb4@6 a4@7 ~@3 f4@3 ~@4 e4@3 ~@3 d4@3 e4@5, ~@5 a3@2 ~@8 a3@2 ~ a3@2 ~@8 a3@2 ~@66]/2",
  I: "~@2 d4@7 c4@6 bb4@7 a4@7 ~@2 d4@3 ~@4 a4@3 ~@4 bb4@3", J: "e4@7 ~@41",
  K: "[~@14 f4@3 ~@4 e4@3 ~@3 d4@3 e4@7 d5@3 f5@3 c5@3 ~ e5@3 bb4@3 d5@3 ~ a4@3 db5@3 ~@3 f4@3 ~@4 e4@3 ~@3 d4@3 ~ e4@6 f4@7]/2",
  L: "[a4@10 ~@26 g4 [e4,f4] d4 db4@13 ~@39 db5@2 ~ g4@2, ~@90 bb4@2 ~ bb4@2 ~]/2", // Fmaj7
  M: "[bb4@2 ~ bb4@2 ~ bb4@2 ~ bb4@2 g4@2 ~ db5@2 ~ g4@2 ~ g4@2 ~ db5@2 bb4@2 ~ bb4@2 ~ e4@2 ~ e4@2 db4@2 ~ db4@2 ~ g4@2 ~ db4@2 e4@2 ~ e4@2 ~ e4@2 ~ e4@2 ~ e4@2 g4@2 ~ db4@2 ~ db4@2 ~ g4@2 e4@2 ~ bb4@2 ~ e4@2 ~ e4@2 g4@2 ~ g4@2 ~ g4@2 ~ g4@2 ~ g4@2 e4@2 ~ e4@2 ~ bb4@2 g4@2 ~@37, ~@2 g4@2 ~ db5@2 ~ g4@2 ~@3 bb4@2 ~ bb4@2 ~ bb4@2 ~ bb4@2 ~@3 g4@2 ~ g4@2 ~ g4@2 ~@3 e4@2 ~ e4@2 ~ e4@2 ~@3 db4@2 ~ g4@2 ~ db4@2 ~ db4@2 ~@3 e4@2 ~ e4@2 ~ e4@2 ~@3 g4@2 ~ g4@2 ~ g4@2 ~@3 bb4@2 ~ e4@2 ~ e4@2 ~ bb4@2 ~@3 g4@2 ~ g4@2 ~@40]/3",
  N: "db5 d5", O: "bb4 ~", P: "db5 ~", Q: "~@7 a4", R: "[a4@12 a4@30 g4@18 f4@7 e4@8 f4@35 ~@34]/3",
})).s("gm_flute").gain(0.3)

// other · flute
const flute_2 = note("<~ A B@6 ~@3 C D@3 E F G H I J K L@2 M@2 N O P Q R S T@2>".pickRestart({
  A: "~@28 a4 ~ g4 a4@6 ~@6 e4@3 f4@2",
  B: "[~ db4@3 d4@12 ~@12 a4 ~ g4 a4@6 ~@3 g4 ~ f4 e4 ~ d4 db4@6 d4@12 ~@12 d4@96 d4@33 ~@17 db5@2 ~@2 e5@2 ~ d5@2 ~ db5@2 d5@2 ~ db5@2 d5@2 e5@2 f5@2 g5@2 ~ f5@2 ~ e5@2 ~ g5@2 e5@2 f5@2 g5@2 a5@2 ~ g5@2 ~ bb5@2 g5@2 ~ bb5@2 ~ a5@2 ~@10, ~@225 d5@2 ~ db5@2 ~ e5@2 ~@3 e5@2 ~@9 e5@2 ~ g5@2 ~ f5@2 ~@9 bb5@2 ~ a5@2 ~@3 a5@2 ~ g5@2 ~@11]/6",
  C: "~@18 d4@19 ~@11", D: "[~@14 d4@14 ~@13 a4@26 ~@27 a4@26 ~@24]/3",
  E: "~@31 a4@2 ~@2 bb4@2 ~ g4@2 ~ a4@2 ~@2 f4@2 ~",
  F: "g4@2 ~ e4@2 ~ f4@2 ~@2 d4@2 ~ g4@2 ~ e4@2 ~ f4@2 ~@2 d4@2 ~ e4@2 ~ db4@2 ~@2 d4@3 ~@12",
  G: "~@24 d5@6 c5@7 bb4@6 a4@5", H: "~@28 d5@7 c5@6 bb4@7", I: "a4@7 ~@41", J: "~@11 d5@6 c5@7 bb4@6 a4@7 ~@11",
  K: "~@15 d5@7 c5@6 bb4@7 a4@6 ab4@7", L: "[g4@10 ~@29 g4@13 ~@44]/2",
  M: "[~@31 g4@2 ~ g4@2 e4@2 ~ e4@2 ~ bb4@2 ~ e4@2 g4@2 ~ g4@2 ~ g4@2 ~ g4@2 ~ g4@2 bb4@2 ~ e4@2 ~ e4@2 ~@27, ~@33 bb4@2 ~@3 g4@2 ~ g4@2 ~ g4@2 ~@3 e4@2 ~ bb4@2 ~ e4@2 ~ e4@2 ~@3 g4@2 ~ g4@2 ~@28]/2",
  N: "~@10 e4@2 g4@2 ~ g4@2 ~ g4@2 ~ db5@2 bb4@2 ~ bb4@2 ~ e4@2 ~ e4@2 ~ e4@2 db4@2 ~ db4@2 ~ db4@2 ~ db4@2, ~@14 e4@2 ~ e4@2 ~ bb4@2 ~@3 db5@2 ~ db5@2 ~ db4@2 ~ db4@2 ~@3 e4@2 ~ e4@2 ~ e4@2 ~",
  O: "g4 f4", P: "bb4@6 a5 g5", Q: "a5@3 e5 f5 d5 e5 db5", R: "d5 b4 db5 a4 bb4 ab4 a4 g4", S: "f4 d4 a4@2",
  T: "[d4@31 ~@17]/2",
})).s("gm_flute").gain(0.3)

stack(piccolo, flute, flute_2)

More by J. S. Bach