Strudelify

boogie wonderland

E. Gammasge

KeyG majorTempo140 bpm
0:00/0:00
// boogie wonderland — E. Gammasge
// 140 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Soprano Saxophone" named as a reed, played on soprano sax (its piano patch is not one); ch 3 "Alto Saxophone" named as a reed, played on alto sax (its piano patch is not one); ch 4 "Tenor Saxophone" named as a reed, played on tenor sax (its piano patch is not one); ch 5 "Baritone Saxophone" named as a reed, played on baritone sax (its piano patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5905511; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · soprano sax · "Soprano Saxophone"
const soprano_sax = note(`<
  A B C D A E F G A H I J K L F M A N O P Q N O R@2 S T U V W@2 X Y Z I J K L F M A N O P Q N O R@2 AA T U V AB AC AD AE
  AC AD AE AC AD AF AG AH P AE AI H I J K L F M AJ
>`.pickRestart({
  A: "g4@2 g4@2 a4@2 a4 d5", B: "~ f5 e5 f5 ~ d5 e5@2", C: "f5!2 e5 f5 ~ d5 e5@2", D: "f5@12 d5 c5 a4 f4",
  E: "~@10 c5 c5@2 c5 c5@2", F: "~@8 f4 g4 a4 c5 d5 e5 f5 g5", G: "a5!2 ~@6 c6!2 c6@2 ~@4", H: "a5 f5 e5 f5 ~ d5 e5@2",
  I: "f5!2 e5 f5 a5 g5 f5 g5", J: "a#5 c6 a#5@2 a5 a#5 a5@2 g5@4 ~@4", K: "d5 ~ f5 ~", L: "a5@2 ~@8 c5 c5@2 c5 c5@2",
  M: "a5!2 d5 c5@2 d5 c5@2 c6!2 c6@2 ~@4", N: "e5", O: "d5 e5 f5 c6", P: "a5", Q: "a#5 a5 g5 f5",
  R: "[a5@28 d5 a#4 a4 f4]/2", S: "d4@2 ~ a4 ~ a4 ~ a4", T: "~@2 c5!2 c5@2 a4@2 ~@2 a4@2 ~@2 a4@2",
  U: "~ a#4 ~ a#4 ~ a#4 ~ a#4", V: "~ d5 ~ a4 ~ a4 ~ a4", W: "[~ f5@2 e5@2 d5@2 d5@2 f5@2 e5@2 d5@2 f5]/2",
  X: "d5 a#4 ~ a#4 ~ a#4 ~ a#4", Y: "a5!4 a5@2 a5!4 a5@2 d6 a#5 a5 f5", Z: "d5 f5 e5 f5 ~ d5 e5@2",
  AA: "a4 c5 ~ a4 ~ a4 ~ a4", AB: "~@4 c5 a#4 a4 c5 d5 c5 a#4 d5 e5 d5 c5 e5",
  AC: "f5 e5 d5 f5 g5 f5 e5 g5 a5 g5 f5 g5 a#5 a5 g5 a#5", AD: "c6@3 d6", AE: "f5", AF: "c6 a5", AG: "g5 d5", AH: "a#5",
  AI: "d5 ~ f5@6", AJ: "g5@2 g5@2 a5@2 a5 d6",
})).s("gm_soprano_sax").gain(0.4)

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

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A B C D A E F G H E F G H E I G H E J G H E F G H E J G H E K G H E J G H E J G H E L G H E M G H E F G H N@2 O P N O
  Q N O R S T U P V E F G H E I G W
>`.pickRestart({
  A: "a2@2 a2@2 a2@2 a2 d3", B: "~@2 a2@2 d2@2 ~ a2", C: "d2 ~ e2 f2", D: "g2@2 ~ g2 f2 g2 ~ f2",
  E: "~ d3 c3 d3 ~ c2 d2 c2", F: "d2!2 e2@2 f2@2 f2 g2", G: "~ g2 f2 g2 ~ d2 f2 g2", H: "a2@2 a2@2 c3@2 c3 d3",
  I: "d2@2 ~ e2 f2!3 g2", J: "d2!2 e2!2 f2!3 g2", K: "d2!2 c2 d2 f2!2 f#2 g2", L: "d2@2 e2@2 f2@2 f2 g2",
  M: "d2@2 e2!2 f2!3 g2", N: "c3!8", O: "a2!4 d3!4", P: "g2!8", Q: "g2 g3 g2 g3 g2 g3 g2 g3", R: "g2!4 c3!4",
  S: "e3!4 a2!4", T: "d2 d3 d2 d3 d2 d3 d2 d3", U: "c2 c3 c2 c3 c2 c3 c2 c3", V: "a2!3 ~@2 a2!2 ~",
  W: "a2@2 a2@2 ~@2 a2 d2",
})).s("gm_baritone_sax").gain(0.47)

stack(soprano_sax, alto_sax, baritone_sax)