Strudelify

Orchestral Suite No.2 in B minor BWV 1067

Johann Sebastion Bach

KeyD majorTempo116 bpm
0:00/0:00
// Orchestral Suite No.2 in B minor BWV 1067 — Johann Sebastion Bach
// 116 bpm, 2/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 2/4 at bar 2, 1/4 at bar 17, 2/4 at bar 18, ...) are rendered on a constant 2/4 grid of one bar per cycle
// note: ch 1 "Flute" named as a pipe, played on flute (its tremolo strings patch is not one); ch 2 "Violin I" named as a string part, played on violin (its harpsichord patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/1060576; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 33 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(116/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · violin · "Violin I"
const violin = note("<A B C D E B F G H I J K L M N O P B C D E B F G H I J K L M N O Q>".pickRestart({
  A: "~@4 [d4,f#4,b4]@2 b2 ~, ~@4 [b2,b5] ~@3", B: "[d4,f#4,b4]@2 b2 ~ [d4,f#4,b4]@2 d3 ~, [d3,f#5] ~@3 [f#3,d5] ~@3",
  C: "b3 ~ f#3 ~ [d4,f#4,b4]@2 [d4,f#4,b4]@2, [d4,f#4,b4]@4 d3 ~ [b2,d5] ~", // Bm
  D: "[e3,c#4,g4,b4,c#5] ~ [c#3,e4,g4,b4,c#5] ~ [f#3,e4,f#4,a#4,c#5] ~ [f#2,c#4,f#4,b4,e5] ~", // C#m7b5 F#7 F#sus4
  E: "[b2,d5] c#3 [d3,b4] c#3 [d4,f#4,b4]@2 b2 ~, [d4,f#4]@4 [b2,b5] ~@3, b4 ~@3", // Bm G Bm D B
  F: "b3 ~ f#3 ~@2 c#5 d4 b3, [d4,f#4,b4] [f#4,b4], ~@2 [b3,d5] d5", // Bm B5 Bm
  G: "~ c#5 b3 g#3 ~ b5 g#3 e3, [e4,b4] [g#4,b4], [g#3,d5] d5 [e3,d5] d5", // E5 G#m G#dim E7
  H: "~ e5 d5@2 c#4@2 a3@2 ~@2 f5@2 f#4@2 d4@2, [e4,a4]@2 [d4,f#5] f#5, a3 ~@3, d5 ~ c#5@2 a4@4", // A5 D
  I: "~ f5 d4 b3 ~ d6 b3 g#3, [g#4,d5] [b4,d5], [b3,f#5] f#5 [g#3,f#5] f#5", // G#dim Bm B5 G#7
  J: "~ g5 [d4,f#5]@2 c#4@2 b3@2 [a3,f#4,c#5,f#5]@2 ~@2 [f#3,f#4,a4,c#5,a5]@2 ~@2, [g#4,c#5] ~, [c#4,f#5] ~ f5@2 ~@4", // D F#m C#5 F#5
  K: "[b3,f#4,g#4,d5,g#5] ~ [g#3,f#4,g#4,b4,g#5] ~ [c#4,f4,g#4,g#5] ~ [c#3,c#4,f4,g#4,b5] ~", // G#m7b5 G#m7 C# C#7
  L: "a5@2 [f#2,f#5] f5 [f#3,c#4,f#4,a4] ~ [a3,c#4,f#4] ~, [c#4,f#4,a4]@2 f#5 c#5, f#3 ~@7", // F# F#m
  M: "[d3,d4,f#4,b4,f#5] ~ [b3,d4,f#4,b4] ~ [c#3,f#4,a4,c#5,f#5] ~ [c#4,f#4,a4] ~", // Bm F#m
  N: "[g#4,d5]@2 [d4,g#4] ~ [b3,f#4,g#4,d5,f#5] ~ [g#3,f4,b4,d5,f5] ~, f#4 ~, [b2,f#5] ~ b4@2 ~@4", // G#dim Ddim G#m7b5 G#dim B5
  O: "[a3,c#4,f#4,c#5,f#5] ~ [b3,d4,g#4,b4,g#5] ~ [c#4,f#4,a4,c#5] ~ [c#3,b3,f4,g#4,f5] ~", // F#m G#dim F#m C#7
  P: "[f#3,a3,c#4,f#4,f#5]@4 [d4,f#4,b4]@2 b2 ~, ~@4 [b2,b5] ~@3", Q: "[f#3,a3,c#4,f#4,f#5] ~",
})).s("gm_violin").gain(0.18)

// other · violin · "Violin II"
const violin_2 = note("<A B C D E B C F G H I J K L M N O B C D E B C F G H I J K L M N P>".pickRestart({
  A: "~@4 f#5 ~@3", B: "d5 ~@3 b4 ~@3", C: "f#4@4 f#4 ~ b4 ~", D: "b4 ~ b4 ~ a#4 ~ a#4 ~", E: "b4 ~ f#4 ~ f#5 ~@3",
  F: "e4 ~ b4 ~ g#4 ~ b4 ~", G: "a4 ~ e4 ~ a4 ~ d5 ~", H: "g#4 ~ d5 ~ b4 ~ d5 ~", I: "c#5 ~ g#4 ~ c#5 ~ f#5 ~",
  J: "f#5 ~ f#5 ~ f5 ~ f5 ~", K: "f#5 ~ a4 ~ c#5 ~@3", L: "b4 ~@3 a4 ~@3", M: "g#4 ~@3 b4 ~ d5 ~",
  N: "c#5 ~ b4 ~ a4 ~ c#5 ~", O: "c#5@4 f#5 ~@3", P: "c#5 ~",
})).s("gm_violin").gain(0.41).pan(0.4)

// other · viola
const viola = note("<A B C D E B F G H I J K L M N O P B C D E B F G H I J K L M N O Q>".pickRestart({
  A: "~@4 d5 ~@3", B: "b4 ~@3 f#4 ~@3", C: "d4@4 d4 ~ f#4 ~", D: "g4 ~ e4 ~ f#4 ~ f#4 ~", E: "f#4 ~ d4 ~ d5 ~@3",
  F: "d4@4 b4 ~ f#4 ~", G: "b4 ~ g#4 ~ b4 ~ e4 ~", H: "e4 ~ a4 ~ f#4 ~ a4 ~", I: "d5 ~ b4 ~ d5 ~ g#4 ~",
  J: "g#4 ~ c#5 ~ a4 ~ c#5 ~", K: "d5 ~ d5 ~ c#5 ~ c#5 ~", L: "c#4 ~ c#5 ~ a4 ~@3", M: "f#4 ~@3 a4 ~@3",
  N: "b4 ~@3 g#4 ~ b4 ~", O: "a4 ~ d5 ~ c#5 ~ b4 ~", P: "a4@4 d5 ~@3", Q: "a4 ~",
})).s("gm_viola").gain(0.4).pan(0.7)

// other · cello · "Violoncello"
const cello = note("<A B C D E B F G H I J K L M N O P B C D E B F G H I J K L M N O Q>".pickRestart({
  A: "~@4 b2 ~ b2 ~", B: "d3 ~ b2 ~ f#3 ~ d3 ~", C: "b3 ~ f#3 ~ d3 ~ b2 ~", D: "e3 ~ c#3 ~ f#3 ~ f#2 ~",
  E: "b2 c#3 d3 c#3 b2 ~ b2 ~", F: "b3 ~ f#3 ~ b3@2 d4 b3", G: "g#3@2 b3 g#3 e3@2 g#3 e3", H: "a3@2 c#4 a3 d4@2 f#4 d4",
  I: "b3@2 d4 b3 g#3@2 b3 g#3", J: "c#4 d4 c#4 b3 a3 ~ f#3 ~", K: "b3 ~ g#3 ~ c#4 ~ c#3 ~", L: "f#3 ~ f#2 ~ f#3 ~ a3 ~",
  M: "d3 ~ b3 ~ c#3 ~ c#4 ~", N: "b2 ~ d4 ~ b3 ~ g#3 ~", O: "a3 ~ b3 ~ c#4 ~ c#3 ~", P: "f#3@4 b2 ~ b2 ~", Q: "f#3 ~",
})).s("gm_cello").gain(0.4).pan(0.8)

// bass · contrabass
const bass = note("<A B C D E B F G H I J K L M N O P B C D E B F G H I J K L M N O Q>".pickRestart({
  A: "~@4 b1 ~ b1 ~", B: "d2 ~ b1 ~ f#2 ~ d2 ~", C: "b2 ~ f#2 ~ d2 ~ b1 ~", D: "e2 ~ c#2 ~ f#2 ~ f#1 ~",
  E: "b1 c#2 d2 c#2 b1 ~ b1 ~", F: "b2 ~ f#2 ~ b2@2 d3 b2", G: "g#2@2 b2 g#2 e2@2 g#2 e2", H: "a2@2 c#3 a2 d3@2 f#3 d3",
  I: "b2@2 d3 b2 g#2@2 b2 g#2", J: "c#3 d3 c#3 b2 a2 ~ f#2 ~", K: "b2 ~ g#2 ~ c#3 ~ c#2 ~", L: "f#2 ~ f#1 ~ f#2 ~ a2 ~",
  M: "d2 ~ b2 ~ c#2 ~ c#3 ~", N: "b1 ~ d3 ~ b2 ~ g#2 ~", O: "a2 ~ b2 ~ c#3 ~ c#2 ~", P: "f#2@4 b1 ~ b1 ~", Q: "f#2 ~",
})).s("gm_contrabass").gain(0.42).pan(0.7)

stack(violin, violin_2, viola, cello, bass)