Strudelify

Sinfonia No 3

J.C. Bach

KeyG majorTempo120 bpm
0:00/0:00
// Sinfonia No 3 — J.C. Bach
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5461043; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 230 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A B C ~@3 D E F G A B C ~@3 D E H I J K L M N O ~@10 P Q R S T P Q R U V W ~ X ~@3 A B C ~@3 D E F G A B C ~@3 D E H I
  J K L M N O ~@10 P Q R S T P Q R U V W ~ X ~@3 Y Z Y AA AB AC AD AE ~@7 AF AG AH ~@4 AI A B C ~@3 D E H I J K L M N AJ
  ~@5 AK@2 AL AM AN AO AP AQ AM AN AO AR AS AT AS AT AU ~@2 Y Z Y AA AB AC AD AE ~@7 AF AG AH ~@4 AI A B C ~@3 D E H I J
  K L M N AJ ~@5 AK@2 AL AM AN AO AP AQ AM AN AO AR AS AT AS AT AU ~@2
>`.pickRestart({
  A: "a#4@4 f4@3 d4", B: "a#3 f3 a#3 d4", C: "a#3 ~", D: "~@12 a#4@3 a#4", E: "a4@6 a#4 c5 a#4@2 f4@2 a#4@2 d5@2",
  F: "c5@6 d5 d#5 d5@2 ~@6", G: "~@13 d#5 d5 c5", H: "c5@6 d5 d#5 d5@2 a#4@2 d5@2 f5@2",
  I: "f5@3 d#5 d5@8 f5 d#5 d5 c5", J: "a#4 ~@3", K: "~@2 d5@2 d5@2 d5@2 c5 d5 c5 d5 d#5@2 d#5@2", L: "d5 ~@3",
  M: "~@2 a#4@2 a#4@2 a#4@2 a4 a#4 a4 a#4 c5@2 c5@2", N: "a#4 f4 a#4 f4 d4 f4 d4 a#3", O: "f4@4 f4@3 f4 f4@4 ~@4",
  P: "~@8 c5 a#4 a4 a#4 c5@2 c5@2", Q: "f5@2 d5 ~@5", R: "~@8 f4 g4 a4 a#4 c5 d5 e5 f5", S: "f5 d5 c5 a#4!2 a4!2 g4",
  T: "a#4 a4 d5 c5 c5@2 ~@2", U: "f5@4 e5 d5 c5 a#4 a4@4 g4 [g4,a4]!3", V: "a4 ~@15",
  W: "~@2 c5@2 c5@6 d5 c5!2 a#4 a4 g4", X: "~@2 c5@8 d5 c5!2 a#4 a4 g4", Y: "f5@5 d#5 d5 c5", Z: "c5 b4 a4@3 c5 d5 d#5",
  AA: "c5@2 b4@2 b4@6 c5 ~ d5 ~ d#5 ~", AB: "f5@2 ~@3 d5 f5 d5", AC: "d#5@2 ~@3 g4 c5 d#5", AD: "d#5 d5 c5@4 b4@2",
  AE: "c5 ~@3", AF: "~@10 d5 c5 a#4@2 a#4@2", AG: "a#4@10 d5 c5 a#4@2 a#4@2", AH: "a#4 d#5@2 d5@2 c5@2 a#4",
  AI: "~@3 f4 f5 d#5 c5 a4", AJ: "f4 ~@3", AK: "[~ d#5@2 d5@2 c5@2 a#4]/2", AL: "a#4@2 a4 ~",
  AM: "~@8 f4 d#4 d4 d#4 f4@2 f4@2", AN: "a#4@2 g4 ~@5", AO: "~@8 f4 g4 a4 a#4 c5 d5 d#5 f5",
  AP: "f5 g4!2 d#5!2 d5!2 c5", AQ: "c5@6 d5 d#5 d5@4 ~@4", AR: "f5 g4 d#5 c5!2 a#4!2 a4", AS: "a#4@2 ~@3 c5 d#5 c5",
  AT: "f5@3 d5 a#4@2 a#4@2 a#4@2 c5 d5!2 c5 a#4 a4", AU: "a#4@3 ~@5",
})).s("gm_alto_sax").gain(0.35)

// other · alto sax · "Alto Saxophone" · soft notes
const alto_sax_soft = note(`<
  ~@2 A B C D E ~ F G ~@3 H I D E ~@9 J K L M N O P Q R S ~ T U ~@3 T U ~ V ~ V ~ W@2 X ~@2 A B C D E ~ F G ~@3 H I D E
  ~@9 J K L M N O P Q R S ~ T U ~@3 T U ~ V ~ V ~ W@2 X ~@8 Y ~ Y Z AA AB AC AD ~@2 AE@2 AF@3 ~@2 AG AH C D E ~@8 AI AJ
  AK J K AL AM ~@3 AN AO ~@3 AP AO ~@5 AQ AR AS ~@8 Y ~ Y Z AA AB AC AD ~@2 AE@2 AF@3 ~@2 AG AH C D E ~@8 AI AJ AK J K
  AL AM ~@3 AN AO ~@3 AP AO ~@5 AQ AR AS
>`.pickRestart({
  A: "~@10 f4 ~ a#4 ~ d5 ~", B: "d5@3 c5 a#4@4 ~@2 a#4 ~ d5 ~ f5 ~", C: "f5@3 d#5 d5@4 ~@2 f5@2 f5@2 d5@2",
  D: "a#4@6 c5 a#4 a4@4 g4@4", E: "a4 g4@2 f4 f4@4 ~@8", F: "~@5 a#4 d5 f5", G: "f5@3 d#5 d5@8 f5 ~@3",
  H: "~@4 a#4@3 a#4 a#4@4 ~@4", I: "~@4 a#4@3 a#4 a#4@2 f4@2 f4@2 d4@2", J: "c5@4 c5@6 d5 c5 a#4@2 a4@2",
  K: "a#4 c5 d5 c5 a#4@2 ~@2", L: "a#4@4 a#4@6 c5 a#4 a4@2 g4@2", M: "a4 a#4 c5 a#4 a4@2 ~@2",
  N: "f4 g4 f4 g4 a4 a#4 a4 a#4 c5 d5 c5 d5 e5 f5 e5 f5", O: "f5@3 g4 g4@8 f5@3 f5",
  P: "f5@2 d5@4 b4@4 f4@2 g4 f4 e4 f4", Q: "c5@5 c5 f5 a4", R: "g4 c5@2 c5@2 c5 f5 a4", S: "g4@4 c5@3 c5 c5@4 ~@4",
  T: "~@8 a#4 a4 g4 a4 a#4@2 g4@2", U: "c5@2 a4 ~@5", V: "f4@2 a4 ~ a#4 ~ c5 ~ d5@2 ~@6",
  W: "f4@6 g4 a4 a#4@2 a#4@2 g4@2 e4@2", X: "f4 ~ a4 ~ f4 ~@3", Y: "~@4 c5@3 d5 c5@4 ~@4", Z: "~ c5 d#5 c5 d#5@2 ~@2",
  AA: "~ d5 f5 d5 f5@2 ~ d5", AB: "d5 c5 a#4@4 a4@2", AC: "a#4@10 d5 c5 a#4@2 a#4@2", AD: "a#4@5 ~@3", AE: "f5/2",
  AF: "[f4@3 ~]/3", AG: "~@5 f4 a#4 d5", AH: "d5@3 c5 a#4@4 ~@2 a#4@2 d5@2 f5@2", AI: "~@3 f4 g4 a4 a#4 c5",
  AJ: "d5@4 d5@6 d#5 d5 c5@2 b4@2", AK: "c5 d5 d#5 d5 c5@2 ~@2", AL: "a#4 c5 a#4 c5 d5 d#5 d5 d#5 f5@2 f5@2 d5@2 a#4@2",
  AM: "a4 g4 ~@6", AN: "~@8 d#4 d4 d#4 f4 d#4@2 c4@2", AO: "f4@2 d4 ~@5", AP: "~@8 d#4 d4 c4 d4 d#4@2 c4@2",
  AQ: "~@6 c5 d5 d#5@2 d#5@2 c5@2 a4@2", AR: "a#4@6 c5 d5 d#5@2 d#5@2 c5@2 a4@2", AS: "a#4 ~ d5 ~ a#4 ~@3",
})).s("gm_alto_sax").gain(0.2)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A B C ~@3 D E@2 ~ A B C ~@4 E@2 F G H I H J K ~@7 L@2 M ~@2 N O P ~@2 N O P Q P Q ~@3 A B C ~@3 D E@2 ~ A B C ~@4 E@2
  F G H I H J K ~@7 L@2 M ~@2 N O P ~@2 N O P Q P Q ~@10 R S R S T U V W X Y Z P ~@4 A B C ~@3 D E@2 AA G H I H J P ~@6
  AB AC ~@3 AD E ~@3 AD AE AF AE AF AG ~@9 R S R S T U V W X Y Z P ~@4 A B C ~@3 D E@2 AA G H I H J P ~@6 AB AC ~@3 AD E
  ~@3 AD AE AF AE AF AG ~@2
>`.pickRestart({
  A: "a#3@4 f4@3 d4", B: "a#3 f3 a#3 d4", C: "a#3 ~", D: "~@12 a#3@3 a#3", E: "c4@2 d4 ~", F: "~@4 d4@3 d4 d4@4 c4@4",
  G: "a#3 d4!2 a#3!2 f3!2 d3", H: "d3 ~@3", I: "~ d4!2 a#3!2 f3!2 d3", J: "~ f4 a#4 f4 d4 f4 d4 a#3",
  K: "f3@4 f3@3 f3 f3@4 ~@4", L: "~@2 e4@2 f4 e4 d4 e4 f4@4 ~@4", M: "c4@4 c4@3 c4 c4@4 ~@4", N: "~@5 c4!3",
  O: "d4 ~ c4!2", P: "f3 ~@3", Q: "c4@4 c4@3 c4 c4@4 c4@4", R: "d#4@5 d4 c4 a#3", S: "a#3 a3 a3@3 a#3 c4 d4",
  T: "d#4@4 ~ c4!3", U: "d4@2 ~@3 d4!3", V: "f4 d#4 d4@4 c4@2", W: "a#3 c4 d4 c4 a#3@2 a#3@2 a#3@8",
  X: "c4 d4 d#4 d4 c4@2 c4@2 c4@8", Y: "d4 d#4 f4 d#4 d4@2 d4@2 d4@8", Z: "a#3 ~ f3!2", AA: "~ d4@2 c4", AB: "~@3 a#3",
  AC: "a#3@2 f3 ~", AD: "~@2 f3!2", AE: "a#3 d4 f4 d4 c4@2 ~@2", AF: "~ a#3@2 c4", AG: "a#3 ~@3",
})).s("gm_tenor_sax").gain(0.4)

// other · tenor sax · "Tenor Saxophone" · soft notes
const tenor_sax_soft = note(`<
  ~@3 A B ~@4 C ~@2 D E F ~@12 G H I H ~@5 J@3 ~@2 J@3 ~ K ~ K ~ L@2 M ~@3 A B ~@4 C ~@2 D E F ~@12 G H I H ~@5 J@3 ~@2
  J@3 ~ K ~ K ~ L@2 M ~ N ~ N O P ~@12 Q R S T U ~@3 A B ~@12 V W G X ~@3 Y@3 ~@2 Y@3 ~@5 Z AA AB ~ N ~ N O P ~@12 Q R S
  T U ~@3 A B ~@12 V W G X ~@3 Y@3 ~@2 Y@3 ~@5 Z AA AB
>`.pickRestart({
  A: "~@4 a#3@3 a#3 a#3@4 ~@4", B: "~@4 d4@3 d4 d4@4 ~@4", C: "~ d4@2 c4", D: "~@10 d3 ~ f3 ~ a#3 ~",
  E: "a#3@3 f3 d3@4 ~@2 f3@2 a#3@2 d4@2", F: "d4@3 c4 a#3@4 ~@8", G: "~@5 d4!3", H: "c4 ~@3", I: "~@5 c4!3",
  J: "[f3@5 ~]/3", K: "~@5 d4 f4 d4", L: "f3/2", M: "f3 ~ f3 ~ f3 ~@3", N: "d4 ~ d4 ~", O: "~ f4!3 f4@2 ~@2",
  P: "~ d#4!3 d#4@2 ~@2", Q: "~@8 c4@6 d4 c4", R: "a#3 f3 a#3 d4!2 c4!2 a#3", S: "f3 ~ c4@2",
  T: "d4 c4!2 a#3!2 d4 c4 a#3", U: "f3 ~@3", V: "~@5 d#4!3", W: "d#4 ~@3", X: "d4 ~@3", Y: "[a#3@11 ~]/3",
  Z: "~@2 d4!2 c4!4", AA: "a#3!2 d4!2 c4!4", AB: "a#3 ~ c4 ~ a#3 ~@3",
})).s("gm_tenor_sax").gain(0.2)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A B C ~@3 D E@2 ~ A B C ~@3 D E@2 F G H G H I J ~@7 K@2 L ~ M N O P Q M N O R S R S ~@3 A B C ~@3 D E@2 ~ A B C ~@3 D
  E@2 F G H G H I J ~@7 K@2 L ~ M N O P Q M N O R S R S ~@3 T U@3 V W X Y Z AA Z AB AC AD AE@3 AF AG ~ AG ~@2 A B C ~@3
  D E@2 AH G H G H AI AJ ~@5 AK AL AM AN AO AP AQ AR AN AO AP AQ AS AT AS AT ~@3 T U@3 V W X Y Z AA Z AB AC AD AE@3 AF
  AG ~ AG ~@2 A B C ~@3 D E@2 AH G H G H AI AJ ~@5 AK AL AM AN AO AP AQ AR AN AO AP AQ AS AT AS AT ~@3
>`.pickRestart({
  A: "a#2@4 f3@3 d3", B: "a#2 f2 a#2 d3", C: "a#2 ~@7", D: "~ a#2 d3 f3 a#3 f3 d3 a#2", E: "f3 f2 a#2 ~",
  F: "a#2@4 a#2@3 d3 f3@4 f2@4", G: "a#2 a#3!2 f3!2 d3!2 a#2", H: "a#2!2 d3 a#2 f3 c3 a2 f2",
  I: "a#2 f3 a#3 f3 d3 f3 d3 a#2", J: "f3@4 f3@3 f3 f3@4 ~@4", K: "c3@2 ~ c3 f2 a2 c3 f3", L: "c3 c4 g3 e3 c3@2 ~@2",
  M: "f2 a#2 d3 f3 ~@4", N: "~@4 a2!4", O: "a#2!4 c3!4", P: "f3@2 f2@2 ~ a2 c3 a2", Q: "f2 ~@3", R: "f2 ~@7",
  S: "~ f2 a2 f2 a2!4", T: "~ a2", U: "g2!4", V: "g2 ~@2 g3", W: "c3 ~@2 c3", X: "f2!2 g2!2", Y: "c3!3 ~",
  Z: "d#3@5 d3 c3 a#2", AA: "a#2 a2 a2@3 a#2 c3 d3", AB: "a2 ~ f2 ~", AC: "a#2 ~ a#2 ~", AD: "d#3!2 f3!2", AE: "a#2!8",
  AF: "d#3 a#2 a2 a#2", AG: "f2 a2 c3 f3 ~@4", AH: "f3 f2", AI: "a#2 f3 a#3 f3 d3 a#2 d3 a#2", AJ: "f3 ~@3",
  AK: "~ d#3 a2 a#2", AL: "g2 a2 a#2!2", AM: "f2@3 f2 f3 d#3 d3 c3", AN: "a#2 ~@3", AO: "a#2 d#3 g3 a#3 ~@4",
  AP: "~@4 d3!4", AQ: "d#3!4 f3!4", AR: "a#2@2 a#2@2 a#2 f3 d3 f3", AS: "a#2 a#3 d4 a#3 f3@2 ~@2",
  AT: "~ a#2 d3 a#2 f3!2 f2!2",
})).s("gm_baritone_sax").gain(0.4)

// other · baritone sax · "Baritone Saxophone" · soft notes
const baritone_sax_soft = note(`<
  ~@2 A B@3 ~@3 C ~@2 A B@3 ~@10 D E F G H ~ I ~@5 J ~@4 J ~ K L K L M@2 N ~@2 A B@3 ~@3 C ~@2 A B@3 ~@10 D E F G H ~ I
  ~@5 J ~@4 J ~ K L K L M@2 N ~@18 O P O Q R ~@2 S T@3 ~@10 U V C W X ~@5 Y ~@4 Y ~@5 Z@3 ~@18 O P O Q R ~@2 S T@3 ~@10
  U V C W X ~@5 Y ~@4 Y ~@5 Z@3
>`.pickRestart({
  A: "~@2 a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~", B: "a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~", C: "f3 f2",
  D: "~ d3", E: "g3@2 ~@3 d3 a#2 g2", F: "c3!2", G: "f2@2 ~@3 f2 a2 c3", H: "a2 ~@3", I: "g2!4", J: "f2 a#2 d3 f3 ~@4",
  K: "~ f3 f2 f3 f2 f3 f2 f3", L: "f2 ~@7", M: "f2!8", N: "f2 ~ f2 ~ f2 ~@3", O: "~ f3", P: "d3 a#2 f2!2",
  Q: "a#3 f3!2 d3 d3@2 a#2@2", R: "f2 ~@3", S: "~ a#2!7", T: "a#2!8", U: "~ g3", V: "c3@2 ~@3 g3 d#3 c3",
  W: "a#2@2 ~@3 a#2 d3 f3", X: "d3 ~@3", Y: "a#2 d3 f3 a#3 ~@4", Z: "[a#2@17 ~ a#2 ~ a#2 ~@3]/3",
})).s("gm_baritone_sax").gain(0.2)

stack(alto_sax, alto_sax_soft, tenor_sax, tenor_sax_soft, baritone_sax, baritone_sax_soft)