Strudelify

Air 'on the G string' Orchestral Suite No. 3 in D major BWV 1068

Johan Sebastian Bach

KeyG majorTempo152 bpm
0:00/0:00
// Air 'on the G string' Orchestral Suite No. 3 in D major BWV 1068 — Johan Sebastian Bach
// 152 bpm, 2/2, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/2 at bar 1, 2/2 at bar 2, 1/2 at bar 11, 2/2 at bar 12, ...) are rendered on a constant 2/2 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5935018; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 143 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(152/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 · recorder · "Alt-blokfluit"
const recorder = note(`<
  A B C D E B F G H I J B C D E B F G H I K L M N O P Q R S T U V W X Y Z AA L M N O P Q R S T U V W X Y Z AB AC AD AE
  AF AG AH AI AJ AK AL AM AN AO AP AQ AR AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AS AT AU@2 AV AW AX AY AZ BA BB BC
  BD AI BE BF BG AT AU@2 AV AW AX AY AZ BA BB BC BD AI BE BF BH B C D E B F G H I K L M N O P Q R S T U V W X Y Z BI
>`.pickRestart({
  A: "~@4 d5@2 d6 b5", B: "c6@4 d5@2 c6 a5", C: "a5@2 b5@2 d5@2 a5 f#5", D: "g5@2 f#5 e5 d5 e5 c5@2",
  E: "b4 [b4,c5]!3 a4@2 g4@2 d5@4 d6@2 b5@2, ~@4 c5 ~@11", F: "b5@4 c#6@2 e6 c#6", G: "d6@2 c#6 b5 a5 b5 g5@2",
  H: "f#5@2 b5 g5 a5@2 g5 f#5", I: "e5@2 f#5@2 d5@4 a4@4 c5 [c5,d5]!3", J: "d5@4 d5@2 d6 b5", K: "d5@4 a5@2 a4 c5",
  L: "b4@4 g5@2 b4 d5", M: "c5@4 f#5@2 d#5 f#5", N: "e5@2 f#5 g5 f#5 e5 c6@2",
  O: "c6 [c6,d6]!3 b5@4 b4@4 b5@2 g5@2, ~@4 d6 ~@11", P: "a5@4 b4@2 a5 f#5", Q: "g5@2 e5 g5 f#5 d#5 e5@2",
  R: "b5@2 c6 b5 a5 g5 f#5 g5", S: "g5@4 e5@2 e6 c6", T: "d6@4 e5@2 d6 b5", U: "c6@4 f#5@2 c6 a5",
  V: "b5@2 a5 g5 a5 f#5 g5@2", W: "f#5 [f#5,g5]!3 e5@2 d5@2 d6@4 d5@2 f5@2, ~@4 g5 ~@11", X: "e5@4 c6@2 d5 g5",
  Y: "f#5@2 a5 e5 d5@2 c6 a5", Z: "b5@2 a5@2 g5@2 a5@2 [a5,b5] a5 [a5,b5]!2 a5 [a5,b5] g5@2", AA: "g5@4 a5@2 a4 c5",
  AB: "g5@4 g5 f#5 g5@2", AC: "b4 a4 b4@2 d5 b4 d5@2", AD: "g4@4 g5 a5 b5 g5", AE: "a5@2 a5@2 a5 b5 c6 a5",
  AF: "b5@2 g5@2 g5 f#5 g5@2", AG: "b4 a4 b4@2 d5 c5 d5@2", AH: "g4@4 b5 a5 g5 f#5", AI: "e5@2 e5@2 e5 f#5 g5 e5",
  AJ: "a5@2 a4@2 a5 g5 f#5 e5", AK: "d5@2 d5@2 d5 e5 f#5 d5", AL: "g5@2 g4@2 g5@3 d5", AM: "g5@3 a5 g5 a5 g5 a5",
  AN: "g5@4 e5 d5 e5 f#5", AO: "f#5 e5 f#5 a5 g#5 f#5 g#5 b5", AP: "e6 d6 c#6 b5 a5@2 d6@2",
  AQ: "a5@4 d6@4 f#5 [f#5,g5]!3 e5@2 f#5@2, ~@12 g5 ~@3", AR: "d5@4 g5 f#5 g5@2", AS: "d5@4 a5@3 d6",
  AT: "a5@3 b5 a5 b5 a5 b5", AU: "[[a5,b5]!8 c6@4 b5@8 a5@8 g5@4]/2", AV: "g5 [g5,a5]!3 f#5@4 b5@6 g6@2, ~@4 a5 ~@11",
  AW: "b5@3 c6 b5 c6 b5 c6", AX: "g5@4 c6 b5 a5 c6", AY: "b5 e5 f#5 d#5", AZ: "e5@4 b4 a4 b4 c5",
  BA: "d5 c5 d5 e5 f5 e5 f5 g5", BB: "f#5 e5 f#5 b5 f#5 e5 f#5 d6", BC: "e5 d5 e5 d6 c6 b5 a5 g5",
  BD: "f#5@2 d5@2 b5 a5 g5 f#5", BE: "a5 g5 f#5 e5 d5@2 g5@2", BF: "d5@4 g5@4 b5 [b5,c6]!3 a5@2 b5@2, ~@12 c6 ~@3",
  BG: "g5@4 a5@3 d6", BH: "g5@4 d5@2 d6 b5", BI: "g5 ~",
})).s("gm_recorder").gain(0.3)

// other · recorder · "Alt-blokfluit"
const recorder_2 = note(`<
  A B C D E B F G H I J B C D E B F G H I K L M N O P Q R S T U V W X Y Z AA L M N O P Q R S T U V W X Y Z AB AC AD@2 AE
  AF AG AH AI@2 AJ AK AL AM AN AO AP AC AD@2 AE AF AG AH AI@2 AJ AK AL AM AN AO AQ ~ AR@2 AS@2 AT AU AV AW AX@2 AY AZ BA
  BB BC ~ AR@2 AS@2 AT AU AV AW AX@2 AY AZ BA BB BD B C D E B F G H I K L M N O P Q R S T U V W X Y Z BC
>`.pickRestart({
  A: "~@4 b4@2 b5 g5", B: "a5@4 a4@2 a5 f#5", C: "g5@2 g4 a4", D: "b4 a4 b4 a4", E: "g4@4 b4@2 b5 g5", F: "g5@2 g5 e5",
  G: "a5@2 g5 f#5 e5@2 c#5@2", H: "d5!4", I: "b4!2 a4!2", J: "a4@4 b4@2 b5 g5", K: "a4@2 a4 a5",
  L: "a5@2 b4 a4 b4@2 b5@2", M: "b5@2 c5 b4 c5@2 b4@2", N: "e5 d#5 e5!2", O: "e5 d#5 g4 g5",
  P: "g5@2 f#5 e5 f#5@2 d#5@2", Q: "e5@2 g4@2 a4@2 b4 c5", R: "b4 e5!2 d#5", S: "b4@4 b4@2 g5 e5",
  T: "f5@4 b4@2 b5 g#5", U: "a5@2 a4 a5", V: "g5 b4 e5!2", W: "d5@2 d5 d6", X: "c6@2 c5 b4 c5@2 a4@2", Y: "d5@2 a5 f#5",
  Z: "g5@2 e5@2 d5 b4 d5@2", AA: "d5@2 a4 a5", AB: "d5@4 g5 f#5 g5@2", AC: "b4 a4 b4@2 d5 c5 d5@2",
  AD: "[g4@4 d5@2 g5@4 f#5 e5 f#5 g5 a5 f#5]/2", AE: "g5@2 d5@2 g5@2 g5 ~", AF: "b4@2 b4 ~ d5@2 d5 ~", AG: "g4 ~",
  AH: "e5 d5 c#5 b4 a4@2 a4@2", AI: "[a4 b4 c#5 a4 d5@5 c#5 b4 a4 g4@2 g4@2]/2", AJ: "g4 a4 b4 g4 g5 f#5 g5@2",
  AK: "c#5 b4 c#5@2 e5 d5 e5@2", AL: "c#5@4 c#5@2 c#5 ~", AM: "d5@2 d5 ~ d5@2 d5 ~", AN: "e5 f#5 g5@2 f#5@2 a5@2",
  AO: "f#5@2 d5@2 d5@2 c#5 d5", AP: "a4@4 g5 f#5 g5@2", AQ: "a4 ~", AR: "[~@2 a5 g5@2 f#5@2 e5]/2",
  AS: "[e5 [e5,f#5]!3 d#5@4 e5@16 f#5@8, ~@4 f#5 ~@27]/2", AT: "g#5@2 a5 d#5", AU: "e5 g4 c5 b4", AV: "g4@2 e5 g5",
  AW: "g5 b5!2 d6", AX: "[d6@4 d5@2 d5@4 c5 b4 a4@2 d5@2]/2", AY: "d5 c5 b4 a4 g4@2 g4@2", AZ: "g4 a4 b4 g4 c5@2 c5@2",
  BA: "c5@2 b4 d5", BB: "b4@2 g4@2 g5@2 f#5 g5", BC: "d5 ~", BD: "d5@4 b4@2 b5 g5",
})).s("gm_recorder").gain(0.3)

// other · recorder · "Bas-blokfluit"
const recorder_3 = note(`<
  A@2 B C D@2 E F G H I@2 B C D@2 E F G H J K L M N O P Q R S T U V@3 W X K L M N O P Q R S T U V@3 W Y Z AA ~ AB ~ AA
  AC ~@2 AB AD AE@3 AF AG Z AA ~ AB ~ AA AC ~@2 AB AD AE@3 AF AH AI AJ ~ AK AL AM ~ AB Z AA ~@3 AN Z AO AI AJ ~ AK AL AM
  ~ AB Z AA ~@3 AN Z AP@2 B C D@2 E F G H J K L M N O P Q R S T U V@3 W AQ
>`.pickRestart({
  A: "[~@4 g4@6 f#4 e4 f#4@2 d4@2]/2", B: "g4@2 g3 a3 b3@2 c4 a3", C: "b3 c4 d4!2",
  D: "[g3@2 b3 d4 g4@6 f#4 e4 f#4@2 d4@2]/2", E: "g4 f#4 e4 a4", F: "f#4@2 e4 d4 c#4@2 a3@2", G: "d4 g3 f#3 b3",
  H: "g3 e4 a3!2", I: "[d4@4 g4@6 f#4 e4 f#4@2 d4@2]/2", J: "d4@2 d4 f#4", K: "g4 f#4 e4 g3", L: "a3 g3 a3 b3",
  M: "c4 b3 c4 a3", N: "b3@2 c#4 d#4 e4@2 d4@2", O: "c#4 f#4 d#4 b3", P: "e4@2 c4@2 a3@2 g3 f#3", Q: "g3 a3 b3!2",
  R: "e4@2 d5 b4 c5@4", S: "c5@2 b4 a4 g#4@2 e4@2", T: "a3@2 b3 c4 d4@2 f#4@2", U: "g4 e4 c4 c#4",
  V: "[d4@2 e4 f#4 g4@2 b3@4 a3 g3 a3 b3 c4@4 a3@2 f#4@2 d4@2]/3", W: "g4 c4 d4!2", X: "g4@2 d4 f#4",
  Y: "g4@4 g4 f#4 g4@2", Z: "b3 a3 b3@2 d4 c4 d4@2", AA: "g3 ~", AB: "~@4 g4 f#4 g4@2", AC: "c#4 ~@3",
  AD: "c#4 b3 c#4@2 e4 d4 e4@2", AE: "[a3@20 d4 c#4 d4@2]/3", AF: "f#4 e4 f#4@2 a3 g3 a3@2", AG: "d4@4 g4 f#4 g4@2",
  AH: "d4@4 d5 c#5 d5@2", AI: "f#4 e4 f#4@2 a4 g4 a4@2", AJ: "d4 ~", AK: "~@4 e4 d#4 e4@2",
  AL: "g3 f#3 g3@2 b3 a3 b3@2", AM: "e4 ~", AN: "~@4 g3 f#3 g3@2", AO: "g3@4 d5 c#5 d5@2",
  AP: "[g3@4 g4@6 f#4 e4 f#4@2 d4@2]/2", AQ: "g4 ~",
})).s("gm_recorder").gain(0.3)

// other · cello · "Viola da gamba"
const cello = note(`<
  A@2 B C D E F G H I J@2 B C D E F G H I K L M N O P Q R S T U V W@3 X Y L M N O P Q R S T U V W@3 X Z AA AB ~ AC ~ AB
  AD ~@2 AC AE AF@3 AG AH AA AB ~ AC ~ AB AD ~@2 AC AE AF@3 AG AI ~ AI ~ AJ AK AL ~ AC AA AB ~@3 AM AA AB ~ AI ~ AJ AK
  AL ~ AC AA AB ~@3 AM AA AN@2 B C D E F G H I K L M N O P Q R S T U V W@3 X AO
>`.pickRestart({
  A: "[~@4 g3@6 f#3 e3 f#3@2 d3@2]/2", B: "g3@2 g2 a2 b2@2 c3 a2", C: "b2 c3 d3!2", D: "g2@2 b2 d3 g3@4",
  E: "g3@2 f#3 e3 f#3@2 d3@2", F: "g3 f#3 e3 a3", G: "f#3@2 e3 d3 c#3@2 a2@2", H: "d3 g2 f#2 b2", I: "g2 e3 a2!2",
  J: "[d3@4 g3@6 f#3 e3 f#3@2 d3@2]/2", K: "d3@2 d3 f#3", L: "g3 f#3 e3 g2", M: "a2 g2 a2 b2", N: "c3 b2 c3 a2",
  O: "b2@2 c#3 d#3 e3@2 d3@2", P: "c#3 f#3 d#3 b2", Q: "e3@2 c3@2 a2@2 g2 f#2", R: "g2 a2 b2!2", S: "e3@2 d4 b3 c4@4",
  T: "c4@2 b3 a3 g#3@2 e3@2", U: "a2@2 b2 c3 d3@2 f#3@2", V: "g3 e3 c3 c#3",
  W: "[d3@2 e3 f#3 g3@2 b2@4 a2 g2 a2 b2 c3@4 a2@2 f#3@2 d3@2]/3", X: "g3 c3 d3!2", Y: "g3@2 d3 f#3",
  Z: "g3@4 g3 f#3 g3@2", AA: "b2 a2 b2@2 d3 c3 d3@2", AB: "g2 ~", AC: "~@4 g3 f#3 g3@2", AD: "c#3 ~@3",
  AE: "c#3 b2 c#3@2 e3 d3 e3@2", AF: "[a2@20 d3 c#3 d3@2]/3", AG: "f#3 e3 f#3@2 a2 g2 a2@2", AH: "d3@4 g3 f#3 g3@2",
  AI: "d3 ~", AJ: "~@4 e3 d#3 e3@2", AK: "g2 f#2 g2@2 b2 a2 b2@2", AL: "e3 ~", AM: "~@4 g2 f#2 g2@2",
  AN: "[g2@4 g3@6 f#3 e3 f#3@2 d3@2]/2", AO: "g3 ~",
})).s("gm_cello").gain(0.3)

stack(recorder, recorder_2, recorder_3, cello)

More by Johan Sebastian Bach