Strudelify
Menuet in G-Major cover art

1999 · Learning by Example, Vol. 1

Menuet in G-Major

Bach Johann Sebastian

KeyG majorTempo116 bpm
0:00/0:00
// Menuet in G-Major — Bach Johann Sebastian
// 116 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 9 "BASSSOON" named as a bass, played on electric bass finger (its bassoon patch is not one)
// note: Full arrangement: all 80 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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, A@4 for four bars: edit a riff to change every repeat.

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A@3 B@3 C D E@5 F G@2 A@3 B@3 C D E@5 F H@2 I J K L M@2 N@3 O P Q@2 R@2 S E@5 F G@2 I J K L M@2 N@3 O P Q@2 R@2 S E@5
  F G@2
>`.pickRestart({
  A: "[g2@15 ~ d3@5 ~@2 g2@3 ~ b2@3 ~ d3@3 ~ g3@3 ~ d3@2 ~@2 b2@3 ~ g2@15 ~ d3@6 ~@3]/3",
  B: "[g2@3 b2@3 ~ d3@3 ~ g3@3 ~ d3@3 b2@4 ~ [c2,c3]@23 ~@2 b1@21 ~@3, ~@47 b2@22 ~@3]/3", // C
  C: "[a1,a2] ~ [f#2,f#3] ~ g3 ~, ~@15 g2@4 ~@5", D: "d3@4 ~@3 e3@4 ~@5 f#3@6 ~@2, d2@2 ~",
  E: "[g2@15 d3@7 ~ g2@3 ~ b2@3 ~ d3@3 ~ g3@3 ~ d3@2 ~@2 b2@3 ~ g2@15 ~ d3@6 ~@2 g2@4 b2@3 ~ d3@3 ~ g3@3 ~ d3@3 ~ b2@3 ~ [c2,c3]@7 ~@2 [e2,e3]@4 ~@4 g3@4 ~@4, ~@37 g2 ~@2]/5", // C E
  F: "[b1,b2]@7 ~ [d2,d3]@4 ~@4 g2@3 ~@5, ~@15 g3@4 ~@5", // B D
  G: "[[c2,c3]@4 ~@4 [d2,d3]@12 ~@4 g3@4 ~@4 d3@4 ~@4 [g1,g2]@5 ~@3, ~@23 g2@4 ~@4 d2@4 ~@13]/2", // C D G
  H: "[[c2,c3]@4 ~@4 [d2,d3]@12 ~@4 g3@4 ~@3 d2@4 ~@5 g1@5 ~@3, ~@23 g2@4 ~@21]/2", I: "e2@7 d#2@7 ~ b1@7 ~@2",
  J: "e2@11 ~", K: "e2@7 ~ g2@6 ~ b2@7 ~@2", L: "b1@7 ~", M: "[e2@7 ~ g2@7 b2@7 ~ b1@8 a2@7 ~@2 g2@6 ~@2]/2",
  N: "[a2@5 ~@2 b2@16 e2@20 ~@4 b1@6 ~@3 d2@5 ~@2 g2@7 ~@2]/3", O: "c2@3 ~ d2@3 ~ e2@3 ~",
  P: "a1@5 ~@2 b1@5 ~@4 c2@5 ~@3", Q: "d2@7 ~", R: "[d2,d3]@11 ~", S: "[d2,d3]@7 ~",
})).s("gm_string_ensemble_1").gain(0.24)

// other · piano · "A.PIANO 1"
const piano = note(`<
  A B C B D E F G A B C B H I J K A B C B D E F G A B C B H I J L M N O P Q R S T I U V W X Y Z AA A B C B H I J AB AC N
  O P O AD S AE I U V W X Y Z AA A B C B H I J AF
>`.pickRestart({
  A: "g3@15 ~ d3@8", B: "g2@4 b2@4 d3@4 g3@4 d3@3 ~ b2@4", C: "g2@2 d3", D: "c3", E: "b2",
  F: "a2@6 ~@2 f#3@5 ~@3 g3@5 ~@3", G: "d3@6 ~@2 e3@6 ~@2 f#3@7 ~", H: "c3@7 ~ e3@8 g3@8", I: "b2@7 ~ d3@8 g3@8",
  J: "c3 d3@2", K: "g3@5 ~@3 d3@3 ~@5 g2@4 ~@4", L: "g3@7 ~ d3@7 ~ g2@4 ~@4", M: "e3@6 ~@2 d#3@7 ~ b2@8", N: "e3@3 ~",
  O: "e3@6 ~@2 g3@7 ~ b3@7 ~", P: "b2@3 ~", Q: "e3 g3 b3", R: "b2@4 a3@2 ~@2 g3@3 ~", S: "a3 b3@2", T: "e3@7 ~",
  U: "c3@8 d3@8 e3@7 ~", V: "a2@8 b2@7 ~ c3@8", W: "d3@19 ~@5", X: "[d3,f#3]@19 ~@5", Y: "[d3,g3]@19 ~@5",
  Z: "[d3,f#3]@2 g3", AA: "[d3,f#3]@23 ~", AB: "g3@6 ~@2 d3@5 ~@3 g2@4 ~@4", AC: "e3@5 ~@3 d#3@5 ~@3 b2@7 ~",
  AD: "b2@7 ~ a3@5 ~@3 g3@5 ~@3", AE: "e3@23 ~", AF: "g3@7 ~ d3@6 ~@2 g2@7 ~",
})).s("gm_piano").gain(0.36)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note(`<
  ~ A@2 B@2 C@2 ~ D@3 E F@2 G H ~ A@2 B@2 C@2 ~ D@3 E F@2 G H ~@12 I J K L D@3 E F@2 G H ~@12 I J K L D@3 E F@2 G H
>`.pickRestart({
  A: "[b3@3 d4@3 ~ g4@4 b4@4 g4@3 ~@5 b3@16 ~@9]/2", B: "[b3@3 d4@3 ~ g4@4 b4@3 ~ g4@3 ~ d4@4 g4@22 ~@3]/2",
  C: "[g4@22 ~ f#4@15 ~@2 g4@8]/2", D: "[~@23 b3@3 ~ d4@3 ~ g4@4 b4@3 ~ g4@3 ~@5 b3@17 ~@8]/3",
  E: "b3@3 d4@3 ~ g4@4 b4@3 ~ g4@3 ~ d4@4 ~", F: "[c4@22 ~ b3@22 ~@3]/2", G: "c4@2 ~ d4@2 e4@2 ~ f#3@4 ~@4 c4@2 ~@6",
  H: "b3@11 ~", I: "[f#3,d4]@5 ~@3", J: "[g3,d4]@17 ~@7", K: "[a3,d4]@7 ~ g3@3 ~", L: "f#3@11 ~",
})).s("gm_string_ensemble_1").gain(0.24).pan(0.3)

// other · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note("<~ A ~@5 B ~ A ~@7 A ~@5 B ~ A ~@20 C B ~ A ~@20 C B ~ A ~@6>".pickRestart({
  A: "~@19 d4@4 ~", B: "d4@23 ~", C: "~@8 d4@3 ~",
})).s("gm_string_ensemble_1").gain(0.16).pan(0.3)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1_3 = note(`<
  A B C@3 D@3 E@2 F@3 G H I A B C@3 D@3 E@2 F@3 G H I J@2 K@2 L@3 M N O P@2 Q R S T E@2 F@3 G H I J@2 K@2 L@3 M N O P@2
  Q R S T E@2 F@3 G H I
>`.pickRestart({
  A: "g4@3 b4@3 ~@2 d5@3 g5@3 ~ a4@3 ~ f#5@3 ~@2", B: "g5@8 g4@4 ~@3 g4@3 ~@6",
  C: "[g4@4 b4@3 d5@3 ~ g5@3 ~ a4@4 f#5@3 ~ g5@8 ~ g4@3 ~@4 g4@3 ~@5 e5@4 ~@5 e5@3 ~@5 e5@3 g5@4 ~]/3",
  D: "[d5@3 ~@5 d5@3 ~@5 d5@4 g5@3 c5@5 ~@3 d5@4 c5@3 ~ b4@3 ~ c5@4 a4@21 ~@4]/3",
  E: "[g4@4 b4@3 d5@3 ~ g5@3 ~ a4@4 f#5@3 ~ g5@8 g4@3 ~@6 g4@3 ~@5]/2",
  F: "[g4@4 b4@3 d5@3 ~ g5@3 ~ a4@4 f#5@3 ~ g5@8 ~ g4@3 ~@4 g4@4 ~@4 e5@7 ~@2 d5@3 ~ c5@3 b4@4 a4@3 ~@2]/3",
  G: "d5@7 ~ c5@3 b4@3 ~ a4@4 g4@3 ~@2", H: "a4@2 b4@2 ~ c5@2 ~ d4@6 ~ f#4@7 ~@2", I: "g4@11 ~",
  J: "[g4@3 ~ a4@3 b4@4 a4@4 g4@4 f#4@4 g4@8 e4@3 ~@5 e4@3 ~@6]/2",
  K: "[g5@4 f#5@3 e5@3 ~ g5@4 f#5@4 e5@4 f#5@8 ~ b4@3 ~@5 b4@3 ~@5]/2",
  L: "[g5@3 f#5@4 e5@4 ~ g5@4 f#5@3 e5@3 ~ f#5@8 b4@7 ~@2 e5@5 ~@2 f#5@2 ~ g5@2 ~ a5@3 b4@7 d#5@7 ~@2]/3",
  M: "e5@8 d#5@4 e5@3 ~ f#5@6 ~@2", N: "g5@6 ~@2 g5@4 f#5@3 ~ e5@4 d5@3 ~", O: "e5@6 ~ e5@4 ~ d5@3 c5@4 b4@4 ~",
  P: "[c5@6 ~ c5@4 ~ b4@3 a4@4 g4@3 ~ f#4@8 e4@4 f#4@4 d4@5 ~@4]/2", Q: "a4@7 ~ d4@3 ~@5 d4@3 ~@5",
  R: "b4@7 ~ d4@3 ~@5 d4@3 ~@5", S: "c5@7 d5@4 c5@4 b4@4 c5@4 ~", T: "a4@7 ~",
})).s("gm_string_ensemble_1").gain(0.28).pan(0.6)

// other · oboe
const oboe = note(`<
  ~@16 A B A C@2 D E F A B G@3 H I J ~@7 K@2 L M N ~@2 O P A B G@3 H I J ~@7 K@2 L M N ~@2 O P A B G@3 H I J
>`.pickRestart({
  A: "g4@4 b4@3 ~ d5@3 ~ g5@4 a4@3 f#5@4 ~", B: "g5@7 g4@3 ~@5 g4@3 ~@6",
  C: "[g5@7 ~ g4@3 ~@5 g4@3 ~@4 e5@5 ~@4 e5@4 ~@4 e5@3 g5@4 ~]/2", D: "d5@4 ~@4 d5@4 ~@4 d5@4 g5@3 ~",
  E: "c5@6 ~@2 d5@4 c5@4 b4@3 c5@4 ~", F: "a4@11 ~",
  G: "[g4@3 b4@4 d5@4 g5@4 a4@4 f#5@4 g5@8 g4@3 ~@5 g4@3 ~@5 e5@8 ~ d5@3 ~ c5@4 b4@4 a4@3 ~]/3",
  H: "d5@7 ~ c5@4 b4@3 a4@4 ~ g4@3 ~", I: "a4@2 b4@3 c5@3 d4@5 ~@3 f#4@5 ~@3", J: "g4@11 ~",
  K: "[~@23 b5@6 ~@3 b5@4 a5@4 g5@4 f#5@4]/2", L: "g5@3 ~ g5@2 f#5@2 e5@2 d5@2", M: "e5@3 ~ e5@2 d5@2 c5@2 b4@2",
  N: "a4@7 g4@3 ~ a4@4 ~ f#4@5 ~@3", O: "a4@7 ~ b4@4 a4@4 g4@4 a4@4", P: "f#4@7 ~",
})).s("gm_oboe").gain(0.24).pan(0.6)

// other · flute
const flute = note("<~@32 A@2 B@2 C@2 D@2 E F G@2 ~@2 H I ~@8 A@2 B@2 C@2 D@2 E F G@2 ~@2 H I ~@8>".pickRestart({
  A: "[g4@3 a4@4 b4@4 a4@4 g4@4 f#4@4 g4@8 ~ e4@2 ~@6 e4@3 ~@5]/2",
  B: "[g5@4 f#5@3 e5@4 g5@4 f#5@4 e5@4 f#5@8 ~ b4@2 ~@6 b4@3 ~@5]/2",
  C: "[g5@4 f#5@4 e5@4 g5@4 f#5@3 e5@4 f#5@7 ~ b4@8 e5@5 ~@4]/2",
  D: "[f#5@2 g5@3 a5@2 ~@2 b4@5 ~@2 d#5@6 ~ e5@7 ~@2 d#5@3 e5@4 f#5@6 ~@3]/2", E: "g5@7 ~ g5@4 f#5@4 e5@4 d5@4",
  F: "e5@6 ~@2 e5@4 d5@3 c5@4 b4@4 ~", G: "[c5@6 ~@2 c5@4 b4@3 a4@3 ~ g4@4 f#4@8 ~ e4@3 f#4@4 ~ d4@5 ~@3]/2",
  H: "c5@7 ~ d5@4 c5@4 b4@3 c5@5", I: "a4@17 ~@7",
})).s("gm_flute").gain(0.2).pan(0.8)

// bass · electric bass finger · "BASSSOON"
const bass = note("<~@16 A@3 B@3 C D E@5 F G H ~@16 E@5 F G H ~@16 E@5 F G H>".pickRestart({
  A: "[g2@14 ~@2 d3@5 ~@2 g2@3 ~ b2@3 ~ d3@3 ~ g3@2 ~@2 d3@3 ~ b2@3 ~ g2@16 d3@6 ~@3]/3",
  B: "[g2@3 b2@3 ~ d3@3 ~ g3@3 ~ d3@3 ~ b2@4 c3@23 ~ b2@21 ~@4]/3", C: "a2 ~ f#3 ~ g3 ~",
  D: "d3@4 ~@3 e3@4 ~@5 f#3@6 ~@2",
  E: "[g2@14 ~ d3@6 ~@2 g2@3 ~ b2@3 ~ d3@3 ~ g3@2 ~@2 d3@3 ~ b2@3 ~ g2@16 d3@6 ~@2 g2@3 ~ b2@3 ~ d3@3 ~ g3@3 ~ d3@3 ~ b2@3 ~ c3@7 ~@2 e3@4 ~@4 g3@3 ~@5]/5",
  F: "b2@7 ~ d3@4 ~@3 g3@4 ~@5", G: "c3@4 ~@4 d3@11 ~@5", H: "g3@4 ~@4 d3@4 ~@4 g2@5 ~@3",
})).s("gm_electric_bass_finger").gain(0.28).pan(0.6)

stack(string_ensemble_1, piano, string_ensemble_1_2, string_ensemble_1_soft, string_ensemble_1_3, oboe, flute, bass)

More by Bach Johann Sebastian