Strudelify

Menuet G-dur, BWV Anh

Bach Johann Sebastian

KeyG majorTempo86 bpm
0:00/0:00
// Menuet G-dur, BWV Anh — Bach Johann Sebastian
// 86 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 85 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(86/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@5 A B C D E F G H A B C D E F G C ~@16 I J K L M N O H I J K L M N O H P ~@3 Q ~@3 P ~@3 Q ~@3 A B C D E F G H ~@8
>`.pickRestart({
  A: "g1 ~ b1 ~ d2 ~", B: "g2 ~ g1 ~@3", C: "d2 ~ d2 ~@3", D: "g1 ~ g1 ~@3", E: "g1 ~ b1 ~ d#2 ~", F: "e2 ~ f#2 ~ g2 ~",
  G: "a2 ~@3 a1 ~", H: "d2 ~ d1 ~@3", I: "g1 ~ d2 ~ g2 ~", J: "c2 ~ d2 ~ f#2 ~", K: "b1 ~ d2 ~ g2 ~",
  L: "f#2 ~ a2 ~ c3 ~", M: "g2 ~ b2 ~ b1 ~", N: "e2 ~ c#2 ~ d2 ~", O: "g1 ~@3 a1 ~", P: "d2 ~@5", Q: "g1 ~@5",
})).s("gm_acoustic_bass").gain(0.2).pan(0.6)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A B C D E F G H I J K L M F G H I J K L N O P Q R S T U V O W X R S T U V ~@16 Y Z AA AB AC AD AE AF Y Z AA AB AC AD
  AE AG F G H I J K L N O P Q R S T AH@2
>`.pickRestart({
  A: "~@8 [g4,b4]@3 [a4,c5]", B: "[b4,d5]@3 [a#4,c#5] [b4,d5]@3 [a#4,c#5] [b4,d5]@3 [a#4,c#5]",
  C: "[b4,d5]@8 [c5,e5]@3 [g#4,b4]", D: "[a4,c5]@8 [f#4,d5]@3 [c4,f#4]", E: "[b3,g4]@4 ~@4 g4@3 a4",
  F: "b4@3 a#4 b4@3 a#4 b4@3 a#4", G: "b4@8 c5@3 g#4", H: "a4@8 b4@3 f#4", I: "g4@6 ~@2 b3@3 d4",
  J: "g4@3 f#4 g4@3 f#4 g4@3 f#4", K: "g4@16 f#4@4 e4@3 ~", L: "e4@4 d4@3 ~ d4@4 f#4@4 e4@8", M: "d4@4 ~@4 g4@3 a4",
  N: "d4 ~@2", O: "d5 c5 b4", P: "a4", Q: "a4@4 g4@3 ~ c5@3 a4", R: "g4@4 f#4@2 ~@2 b3@3 c4",
  S: "d4@3 c#4 d4@3 c#4 d4@3 c#4", T: "d4@8 e4@3 d4", U: "c4@8 d4@3 c4", V: "b3 ~@2", W: "a4@23 ~",
  X: "a4@7 ~ g4@6 ~@2 c5@6 a4@2", Y: "~@3 d4 c#4 d4", Z: "e4 c4 a3 b3 a#3 b3", AA: "c4@8 d4@11 ~ d4@3 ~", AB: "d4@23 ~",
  AC: "d4", AD: "e4", AE: "f#4@2 d4 e4 f4 f#4", AF: "f#4@2 g4 ~@3", AG: "f#4@4 g4@2 ~@2 g4@3 a4",
  AH: "[c4@16 d4@7 c4@2 b3@10 ~@13]/2",
})).s("gm_string_ensemble_1").gain(0.3).pan(0.3)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note(`<
  ~ A B C D ~@16 E@2 F G H I J D E@2 F G H I J D ~@17 K L M N O P Q ~ K L M N O P Q ~@8 E@2 F G H I J R
>`.pickRestart({
  A: "[g2,b3] [b2,b3] [d3,b3]", B: "[g3,b3] [f3,a3,c4] [e3,g#3,b3]", C: "e3 [d#3,g3] [d3,f#3], a3", D: "g3 ~@2",
  E: "[g4 f#4 g4 f#4@3, d4]/2", F: "d4@2 e4, g3", G: "d4 c#4 d4 ~@3", H: "g2 b2 d3", I: "g3 [f3,c4] [e3,b3]",
  J: "[e3,a3] [d#3,g3] [d3,f#3]", K: "~@12 g3@7 ~ g3@4", L: "f#3 a3 f#3 g3 f#3 g3", M: "a3 f#3 d3 d4 c#4 c4",
  N: "b3@16 g3@7 ~", O: "g3@3 g#3 a3 b3", P: "c4@2 f#3 g3 g#3 a3", Q: "c4@2 b3 ~@3", R: "~ g3@10 ~@13",
})).s("gm_string_ensemble_1").gain(0.29).pan(0.6)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  ~@5 A B C D E F G H A B C D E F G H ~@16 I J K L M N O P I J K L M N O P ~@16 A B C D E F G H ~@8
>`.pickRestart({
  A: "[d3,g3] ~@7 [g3,b3] ~@7 [b3,d4] ~@7", B: "[d4,g4] ~@7 [g3,d4] ~@15", C: "[a3,f#4] ~@7 [f#3,d4] ~@15",
  D: "[b3,g4] ~@7 [g3,d4] ~@15", E: "[d3,g3] ~@7 [g3,b3] ~@7 [b3,d#4] ~@7", F: "[b3,e4] ~@7 f#4 ~@7 g4 ~@7",
  G: "a3 ~@15 [g3,c#4] ~@7", H: "[f#3,d4] ~@7 d3 ~@15", I: "[d4,b4] ~@7 [b3,g4] ~@7 [g3,d4] ~@7",
  J: "[f#4,c5] ~@7 [c4,a4] ~@7 [a3,f#4] ~@7", K: "[g4,d5] ~@7 [d4,b4] ~@7 [b3,g4] ~@7",
  L: "[f#4,c5] ~@7 [d4,a4] ~@7 [a3,f#4] ~@7", M: "[d4,b4] ~@7 [b3,g4] ~@7 [d#4,a4] ~@7",
  N: "[e4,g4] ~@7 [a3,g4] ~@7 [a3,f#4] ~@7", O: "[b3,e4] ~@15 [a3,g4] ~@7", P: "[a3,f#4] ~@23",
})).s("gm_pizzicato_strings").gain(0.25)

// other · french horn · "FR.HORN"
const french_horn = note("<~@9 A@2 B C ~@4 A@2 B C ~@4 D E F G ~@4 D E F G ~@36 A@2 B C ~@4 D E F H>".pickRestart({
  A: "b3/2", B: "a3@4 b3 c#4", C: "d4 ~@2", D: "b3@7 ~ b3@7 ~ b3@7 ~", E: "b3 a3 g#3", F: "a3", G: "g3 ~",
  H: "~ g3@15 ~@8",
})).s("gm_french_horn").gain(0.27).pan(0.4)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1_3 = note(`<
  ~ A B@2 C ~@16 D E F G A B@2 C D E F H A I@2 J ~@16 K L M N O P Q R K L M N O P Q R ~@8 D E F H A I@2 S
>`.pickRestart({
  A: "g1 b1 d2", B: "[g2 f2 e2@2 d#2 d2]/2", C: "g2@3 ~@5 g2@7 ~@9", D: "b2 a2 g2", E: "f#2 d2 f#2", F: "g2@2 c3",
  G: "d3@2 ~", H: "d3@7 ~@5", I: "[g2@8 f2@8 e2@15 ~ d#2@8 d2@8]/2", J: "g2@3 ~ g1@4 ~@4", K: "d3@4 c#3 d3",
  L: "e3 c3 a2 b2 a#2 b2", M: "c3 a2 f#2 g2 f#2 g2", N: "a2@4 f#2@4 d2@3 ~ [d2,d3]@4 [e2,e3]@4 [f#2,f#3]@4",
  O: "[g2,g3]@2 [b1,b2]", P: "[c2,c3]", Q: "[d2,d3]", R: "[g2,g3] ~", S: "~ g2@7 ~@3 g1@10 ~@3",
})).s("gm_string_ensemble_1").gain(0.29).pan(0.7)

stack(bass, string_ensemble_1, string_ensemble_1_2, pizzicato_strings, french_horn, string_ensemble_1_3)

More by Bach Johann Sebastian