Strudelify

Menuet (From Anna Magdelena)

Bach Johann Sebastian

KeyG majorTempo132 bpm
0:00/0:00
// Menuet (From Anna Magdelena) — Bach Johann Sebastian
// 132 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 65 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/3)

// 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 · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A@2 B C D E F G@3 H@2 I J@2 K A@2 B L M E F G@3 H@2 I N O P Q R S T U V W X Y Z AA AB AC AD AE AF Q R S T U V W X AG Z
  AA AB AC AH AI AJ AK
>`.pickRestart({
  A: "[g2@22 ~ g2@4 ~@4 g3@2 ~@7 g2@3 ~@5]/2", B: "c3@23 ~", C: "b2@7 g3@2 ~@6 b2@2 ~@7", D: "a2@14 ~@2 f#2@7 ~",
  E: "g2@15 ~ b2@5 ~@3", F: "d3@3 ~@5 b2@2 ~@6 g2@2 ~@6",
  G: "[d2@10 ~@2 c3@3 ~ b2@2 ~ a2@3 ~ g2@15 ~@2 a2@2 ~@5 b2@10 ~@7 b2@2 ~@6]/3",
  H: "[c3@14 ~@2 c3@7 b2@7 ~ g3@2 ~@6 g2@3 ~@6]/2", I: "a2@7 ~ f#2@4",
  J: "[g2@14 ~ g2@5 ~@3 c3@8 ~ d3@3 ~@5 d2@4 ~@4]/2", K: "g2@7 ~ d2@3 ~@4 g1@6 ~@3", L: "b2@7 g3@2 ~@7 b2@2 ~@6",
  M: "~ a2@14 ~ f#2@7 ~", N: "g2@14 ~ g2@5 ~@4", O: "c3@8 d3@3 ~@5 d2@4 ~@4", P: "g2@7 ~ d2@3 ~@5 g1@6 ~@2",
  Q: "g2@23 ~", R: "f#2@11 ~", S: "e2@4 ~@4 g2@3 ~@5 e2@4 ~@4", T: "a2@19 ~@5", U: "a2@11 ~",
  V: "b2@3 ~@5 d3@3 ~@5 c#3@3 ~@5", W: "d3@3 ~@5 f#2@2 ~@6 a2@3 ~@5", X: "d2@17 ~@7", Y: "b2@11 ~", Z: "c3@5 ~",
  AA: "b2@3 ~@5 a2@3 ~@5 g2@3 ~@5", AB: "d3@8 a2@3 ~@5 d2@3 ~@5", AC: "d2@15 ~ f#2@4 ~@4",
  AD: "e2@4 ~@4 g2@3 ~@5 f#2@3 ~@5", AE: "g2@2 ~@6 b1@4 ~@4 d2@3 ~@5", AF: "g2@3 ~@5 d2@3 ~@5 g1@4 ~@4", AG: "b2@23 ~",
  AH: "e2@4 ~@4 g2@4 ~@5 f#2@3 ~@4", AI: "~ g2@3 ~@6 b1@4 ~@6 d2@4", AJ: "~@6 g2@4 ~@7 d2@4 ~@3", AK: "~@2 g1@3 ~@7",
})).s("gm_string_ensemble_1").gain(0.28)

// other · piano · "A.PIANO 1"
const piano = note(`<
  A@2 B C D E F G H I J@4 K L A@2 B I D M F N H I B I D M O P Q R S T U V W X Y B Z AA AB AC AD L AE AF AG AH@2 AI AJ AK
  Y B AL AA AM AN AO AP AQ
>`.pickRestart({
  A: "[g3,b3]/2", B: "c4", C: "b3@23 ~", D: "a3", E: "g3@11 ~", F: "d4@4 ~@4 b3@3 ~@5 g3@3 ~@5",
  G: "[d3,f#3]@6 ~@2 d3@4 c4@4 b3@3 ~ a3@4", H: "[g3,b3]@2 a3", I: "b3",
  J: "[[c4,e4]@23 [b3,d4]@8 [d4,g4]@2 ~@6 [g3,b3]@3 ~@5 [a3,c4]@15 ~ [f#3,a3]@7 ~@2 g3@14 ~ [e3,b3]@8 ~, ~@71 b3@14 ~@11]/4", // C Bm G5 G Am F#m E5
  K: "~@16 d3@3 ~@5", L: "g3 ~@3 d3 ~@3 g2 ~@3", M: "g3@7 ~", N: "[d3,f#3]@7 ~ d3@4 c4@3 ~ b3@3 ~ a3@3 ~",
  O: "c4@3 ~@5 d4@3 ~@5 d3@2 ~@6", P: "g3@2 ~@6 d3@2 ~@6 g2@3 ~@5", Q: "g3", R: "f#3@23 ~",
  S: "e3@4 ~@4 g3@3 ~@5 e3@3 ~@5", T: "a2@7 ~", U: "a2@23 ~", V: "b2@5 ~@3 d3@3 ~@5 c#3@3 ~@5",
  W: "d3 ~@3 f#2 ~@3 a2 ~@3", X: "d3@17 ~@7", Y: "[b3,d4]", Z: "b3@3 ~@5 a3@3 ~@5 g3@2 ~@6", AA: "d4",
  AB: "d3@13 ~@3 f#3@3 ~@5", AC: "e3@3 ~@5 g3@2 ~@6 f#3@2 ~@6", AD: "g3 ~@3 b2 ~@3 d3 ~@3", AE: "~ g3@23", AF: "f#3",
  AG: "e3@5 ~@3 g3@3 ~@5 e3@3 ~@5", AH: "a2@5 ~", AI: "b2@3 ~@5 d3@3 ~@5 c#3@3 ~@5", AJ: "d3@4 f#2 ~@3 a2 ~@3",
  AK: "d3@3 ~", AL: "b3@4 ~@4 a3@3 ~@5 g3@3 ~@5", AM: "d3@12 ~@4 f#3@3 ~@5", AN: "e3@2 ~@6 g3@2 ~@7 f#3@2 ~@5",
  AO: "~ g3@3 ~@6 b2@2 ~@8 d3@2 ~@2", AP: "~@6 g3@3 ~@8 d3@2 ~@5", AQ: "~ g2 ~@4",
})).s("gm_piano").gain(0.36)

// other · piano · "A.PIANO 1"
const piano_2 = note(`<
  A B C D E F G H A B I J E F K L A B C D E F G H A B I J E F K L M N O P Q R S T U V W X Y Z AA AB AC AD O AE Q AF AG
  AH AI AJ W AK AL AM AN AO@2
>`.pickRestart({
  A: "d5@2 g4 a4 b4 c5", B: "d5@8 g4@5 ~@3 g4@8", C: "e5@7 ~ c5@4 d5@4 e5@4 f#5@4", D: "g5@8 g4@5 ~@3 g4@7 ~",
  E: "c5@2 d5 c5 b4 a4", F: "b4@2 c5 b4 a4 g4", G: "f#4@2 g4 a4 b4 g4", H: "a4@23 ~", I: "e5@2 c5 d5 e5 f#5",
  J: "g5@8 g4@5 ~@3 g4@8", K: "a4@8 b4@4 a4@3 ~ g4@4 f#4@4", L: "g4@3 ~", M: "b4@7 ~ g4@3 ~ a4@3 ~ b4@4 g4@3 ~",
  N: "a4@7 ~ d4@3 ~ e4@3 ~ f#4@3 ~ d4@2 ~@2", O: "g4@2 e4 f#4 g4 d4", P: "c#4@7 ~ b3@4 c#4@4 a3@6 ~@2",
  Q: "a3 b3 c#4 d4 e4 f#4", R: "g4@4 ~@4 f#4@4 ~@4 e4@5 ~@3", S: "f#4@8 a3@7 ~ c#4@3 ~@5", T: "d4@17 ~@7",
  U: "d5@2 g4 f#4 g4@2", V: "e5@7 ~ g4@4 f#4@4 g4@5 ~@3", W: "d5@3 ~@5 c5@3 ~@5 b4@3 ~@5",
  X: "a4@3 ~ g4@4 f#4@3 ~ g4@4 a4@8", Y: "d4 e4 f#4 g4 a4 b4", Z: "c5@3 ~@5 b4@3 ~@5 a4@3 ~@5",
  AA: "b4@4 d5@4 g4@3 ~@5 f#4@2 ~@6", AB: "g4@17 ~@7", AC: "b4@7 ~ g4@4 a4@4 b4@4 g4@4", AD: "a4@2 d4 e4 f#4 d4",
  AE: "c#4@7 ~ b3@4 c#4@4 a3@5 ~@3", AF: "g4@4 ~@4 f#4@2 ~@6 e4@3 ~@5", AG: "f#4@4 a3@2 ~@2 c#4 ~@3", AH: "d4@19 ~@5",
  AI: "d5@7 ~ g4@4 f#4@4 g4@8", AJ: "e5@8 g4@4 f#4@4 g4@7 ~", AK: "a4 g4 f#4 g4 a4@2",
  AL: "d4@4 e4@4 f#4@3 ~ g4@4 a4@4 b4@4", AM: "c5@4 ~@4 b4@3 ~@6 a4@3 ~@4", AN: "~ b4@5 d5@4 g4@3 ~@7 f#4@3 ~",
  AO: "[~@7 g4@28 ~@13]/2",
})).s("gm_piano").gain(0.36)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note(`<
  A B C@5 D E@2 F G H I J@2 A K L@4 M D N O P Q H I J@2 R@2 S T@2 U@2 V W X Y Z AA@3 AB AC@2 AD AE AF AG@2 V AH AI AJ AK
  AL AM AN AO@2
>`.pickRestart({
  A: "[g3,b3]", B: "~@7 [b3,d4]@2 ~@7 g3@2 ~@6, ~@15 b3@2 ~@7",
  C: "[[c4,e4]@22 ~ [b3,d4]@13 ~@3 [b3,d4]@2 ~@6 [a3,c4]@14 ~@2 [f#3,c4]@3 ~@5 [g3,b3]@13 ~@4 [g3,b3]@3 ~@4 [d3,a3]@8 ~ b3@2 ~@6 [b2,g3]@2 ~@6, ~@103 g3@2 ~@15]/5", // C Bm Am F#dim G D5 Em
  D: "[f#3,a3]@17 ~@7", E: "[[g3,b3]@14 ~ [a3,c4]@6 ~@2 [b3,d4]@7 ~ [g3,b3]@2 ~@7 g3@2 ~@6, ~@39 b3@2 ~@7]/2",
  F: "[c4,e4]@13 ~@2 [c4,e4]@7 ~@2", G: "[b3,d4]@7 [d4,g4]@2 ~@6 [g3,b3]@3 ~@6",
  H: "~ e3@13 ~@2 f#3@7 ~, c4@14 ~ d4@8 ~", I: "[g3,b3]@14 ~@2 [e3,b3]@7 ~",
  J: "[[a3,c4]@7 [b3,d4]@3 ~ [a3,c4]@3 ~ [g3,b3]@3 ~ f#3@4 ~ g3@21 ~@3, ~@19 a3@2 ~@2 b3@21 ~@4]/2", // Am Bm Am G
  K: "~@4 [b3,d4] ~@3 g3 ~@3, ~@15 b3@2 ~@7", // Bm
  L: "[[c4,e4]@22 ~ [b3,d4]@13 ~@3 [b3,d4]@2 ~@6 [a3,c4]@14 ~@2 [f#3,c4]@3 ~@5 [g3,b3]@13 ~@4 [g3,b3]@3 ~@5]/4", // C Bm Am F#dim G
  M: "[d3,a3]@7 ~ b3@2 ~@6 [b2,g3]@2 ~@6, ~@7 g3@2 ~@15", N: "[g3,b3]@14 ~ [a3,c4]@6 ~@3",
  O: "[b3,d4]@7 ~ g3@2 ~@6 [g3,b3]@2 ~@6, ~@7 b3@2 ~@15", P: "[c4,e4]@13 ~@3 [c4,e4]@7 ~",
  Q: "[b3,d4]@7 ~ d4@2 ~@6 g3@3 ~@5, ~@7 g4@2 ~@6 b3@2 ~@7", // Bm
  R: "[d4@7 b3@2 ~@2 c4@2 ~@2 d4@2 ~@2 b3@2 ~@2 d4@7 ~ f#3@2 ~@3 g3@2 ~ a3@2 ~@2 f#3@2 ~@3]/2",
  S: "b3@7 ~ g3@2 ~@2 a3@2 ~ b3@3 ~ g3@3 ~@2",
  T: "[e3@7 ~ d3@2 ~@2 e3@2 ~@2 c#3@3 ~@4 c#3@3 ~ d3@3 ~ e3@3 ~ f#3@3 ~ g3@3 ~ a3@2 ~@3]/2",
  U: "[b3@2 ~@6 a3@2 ~@5 g3@2 ~@6 a3@3 ~ d4@3 ~ f#3@3 ~@6 g3@3 ~@5]/2", V: "f#3@19 ~@5",
  W: "g4@7 b3@3 ~ d4@3 ~ g3@3 ~@6", X: "g4@7 c4@4 e4@3 ~@2 g3@3 ~@5", Y: "b4@3 ~@5 a4@3 ~@4 g4@3 ~@6",
  Z: "f#4@3 e4@4 d4@3 ~ e4@4 f#4@3 ~@6",
  AA: "[f#3@3 g3@4 a3@4 b3@3 ~ c4@4 d4@4 e4@2 ~@6 d4@3 ~@5 c4@3 ~@5 d4@4 g4@4 ~ b3@2 ~@6 c4@2 ~@6]/3", AB: "b3@11 ~",
  AC: "[d4@7 ~ b3@2 ~ c4@2 ~@2 d4@2 ~@2 b3@2 ~@2 d4@7 ~@2 f#3@2 ~@2 g3@2 ~@2 a3@2 ~ f#3@2 ~@3]/2",
  AD: "b3@7 ~ g3@2 ~@2 a3@2 ~ b3@3 ~ g3@2 ~@3", AE: "e3@7 ~ d3@2 ~@2 e3@2 ~@2 c#3@3 ~@5",
  AF: "c#3@3 d3@3 ~ e3@3 ~ f#3@3 ~ g3@3 ~ a3@2 ~@3",
  AG: "[b3@2 ~@6 a3@2 ~@6 g3@2 ~@5 a3@3 ~ d4@3 ~ f#3@3 ~@6 g3@3 ~@5]/2", AH: "g4@7 ~ b3@3 d4@3 ~ g3@3 ~@6",
  AI: "g4@8 c4@3 e4@3 ~@2 g3@3 ~@5", AJ: "b4@3 ~@5 a4@3 ~@5 g4@3 ~@5", AK: "f#4@3 e4@4 d4@4 e4@4 f#4@3 ~@6",
  AL: "f#3@3 g3@4 a3@4 b3@3 ~ c4@4 d4@4 ~", AM: "e4@2 ~@6 d4@3 ~@5 c4@3 ~@5", AN: "d4@4 ~ g4@4 ~ b3@3 ~@6 c4@3 ~@2",
  AO: "[~ b3@5 ~@2]/2",
})).s("gm_string_ensemble_1").gain(0.28).pan(0.3)

// other · oboe
const oboe = note("<~@16 A B C D E F G H ~@4 I J K L ~@16 M N O P Q R S T U V W X Y Z AA AB@2>".pickRestart({
  A: "d5@7 ~ g4@4 a4@4 b4@3 ~ c5@4", B: "d5@7 ~ g4@2 ~@6 g4@2 ~@6", C: "e5@7 ~ c5@3 ~ d5@3 ~ e5@3 ~ f#5@3 ~",
  D: "g5@7 ~ g4@2 ~@5 g4@2 ~@7", E: "c5@8 d5@4 c5@4 b4@3 ~ a4@4", F: "b4@7 ~ c5@4 b4@4 a4@4 g4@4",
  G: "f#4@7 ~ g4@4 a4@4 b4@4 g4@4", H: "~ a4@21 ~@2", I: "e5@8 f#5@4 e5@4 d5@3 ~ c5@4", J: "d5@8 e5@4 d5@4 c5@4 ~ b4@3",
  K: "c5@7 ~ d5@4 c5@4 b4@4 a4@4", L: "b4@7 ~", M: "~ b4@9 g4@3 a4@3 b4@3 ~ g4@4", N: "a4@2 f#4 g4 a4 f#4",
  O: "g4@8 e4@3 ~ f#4@4 g4@4 e4@3 ~", P: "e4@8 d4@3 e4@4 ~ c#4@4 ~@4", Q: "c#4@3 ~ d4@3 e4@4 f#4@3 ~ g4@4 a4@4 ~",
  R: "b4@2 ~@6 a4@3 ~@5 g4@2 ~@6", S: "a4@4 d5@4 f#4@2 ~@6 g4@3 ~@5", T: "f#4@2 ~", U: "d5@8 g4@4 f#4@4 g4@5 ~@3",
  V: "e5@8 g4@3 f#4@4 ~ g4@4 ~@4", W: "d5@2 ~@6 c5@3 ~@5 b4@3 ~@5", X: "a4@4 g4@4 f#4@4 g4@4 a4@3 ~@5",
  Y: "d4@3 ~ e4@3 f#4@4 g4@4 a4@4 b4@4 ~", Z: "c5@3 ~@5 b4@3 ~@5 a4@3 ~@5", AA: "b4@5 d5@4 ~ g4@4 ~@6 f#4@3 ~",
  AB: "[~@6 g4@29 ~@13]/2",
})).s("gm_oboe").gain(0.24).pan(0.6)

// other · flute
const flute = note("<~@24 A B C D E F G H ~@16 I J K L M@2 N O@3 P Q R S T U@2>".pickRestart({
  A: "d6@8 g5@4 a5@3 ~ b5@4 c6@4", B: "d6@4 g5 ~@3 g5 ~@3", C: "e6@8 c6@4 d6@4 e6@4 f#6@3 ~", D: "g6@4 g5 ~@3 g5 ~@3",
  E: "c6@7 ~ d6@3 c6@4 ~ b5@3 a5@3 ~@2", F: "b5@8 c6@3 b5@5 a5@4 g5@4", G: "a5@7 ~ b5@4 a5@4 g5@4 f#5@4",
  H: "~ g5@20 ~@3", I: "d5@7 ~ b4@4 c5@4 d5@4 b4@4", J: "a4@3 ~ d5@2 e5@2 f#5@2 d5@2",
  K: "g5@7 ~ e5@3 f#5@4 g5@4 d5@4 ~", L: "c#5@7 ~ b4@4 c#5@4 a4@5 ~@3",
  M: "[a4@4 b4@4 c#5@3 d5@4 e5@4 f#5@3 ~ g5@3 ~@5 f#5@2 ~@6 e5@3 ~@6]/2", N: "f#5@2 ~@5 a4@3 ~@6 c#5@2 ~@6",
  O: "[d5@15 ~@8 g5@4 d5@4 b4@4 d5@4 ~ g4@5 ~@2 g5@5 e5@4 c5@4 e5@4 g4@4 ~@4]/3", P: "b5@2 ~@6 a5@2 ~@5 g5@3 ~@6",
  Q: "f#5@4 e5@4 d5@4 e5@4 f#5@3 ~@5", R: "f#4@3 ~ g4@4 a4@4 b4@3 c5@4 d5@4 ~", S: "e5 ~@3 d5 ~@3 c5 ~@3",
  T: "~ d5@4 g5@4 b4@3 ~@8 c5@3 ~", U: "[~@7 b4@29 ~@12]/2",
})).s("gm_flute").gain(0.24).pan(0.8)

// other · bassoon
const bassoon = note("<~@16 A@2 B C D E F G@3 H@2 I J K L ~@16 M N O P Q R S T U V W X Y Z AA AB AC>".pickRestart({
  A: "[g2@22 ~ g2@4 ~@4 g3@2 ~@7 g2@3 ~@5]/2", B: "c3@23 ~", C: "b2@7 g3@2 ~@7 b2@2 ~@6", D: "~ a2@14 ~ f#2@7 ~",
  E: "g2@15 ~ b2@5 ~@3", F: "d3@3 ~@5 b2@2 ~@6 g2@2 ~@6",
  G: "[d2@10 ~@2 c3@3 ~ b2@2 ~ a2@3 ~ g2@15 ~@2 a2@2 ~@5 b2@10 ~@7 b2@2 ~@6]/3",
  H: "[c3@14 ~@2 c3@7 b2@7 ~ g3@2 ~@6 g2@3 ~@6]/2", I: "a2@7 ~ f#2@4", J: "g2@14 ~ g2@5 ~@4",
  K: "c3@7 ~ d3@3 ~@5 d2@4 ~@4", L: "g2@7 ~ d2@3 ~ g2@6 ~@6", M: "g2@11 ~", N: "f#2@7 ~",
  O: "e2@4 ~@4 g2@3 ~@5 e2@4 ~@4", P: "a2@19 ~@5", Q: "a2@11 ~", R: "b2@3 ~@5 d3@3 ~@5 c#3@3 ~@5",
  S: "d3@3 ~@5 f#2@2 ~@6 a2@3 ~@5", T: "d2@17 ~@7", U: "b2@11 ~", V: "c3@5 ~", W: "b2@3 ~@5 a2@3 ~@5 g2@3 ~@5",
  X: "d3@8 a2@3 ~@5 d2@3 ~@5", Y: "d2@15 ~ f#2@4 ~@4", Z: "e2@4 ~@4 g2@3 ~@6 f#2@3 ~@4",
  AA: "~ g2@3 ~@6 b1@4 ~@6 d2@3 ~", AB: "~@6 g2@4 ~@7 d2@4 ~@3", AC: "~@2 g1@3 ~@7",
})).s("gm_bassoon").gain(0.28).pan(0.6)

stack(string_ensemble_1, piano, piano_2, string_ensemble_1_2, oboe, flute, bassoon)

More by Bach Johann Sebastian