Strudelify
KeyG majorTempo120 bpm
0:00/0:00
// odeon — Ernesto Nazareth
// 120 bpm, 2/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/89463; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 101 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/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · soprano sax · "Soprano Sax."
const soprano_sax = note(`<
  A B C D E F G H I J K D E F L M N O P D E F G H I J K D E F L M N O Q R S T U V W X Y R Z AA AB V W AC AD R S T U V W
  X Y R Z AA AB V W AC C AE AF@2 AG AH AF@2 AI AJ AK AI@2 AL AG AM AN AO AF@2 AG AH AF@2 AI AJ AK AI@2 AL AG AP B C P
>`.pickRestart({
  A: "f4 c4 f4 a4 c5 f5 a4 c#5", B: "e5 d5 a4 c5 a#4 e4 a4 g4", C: "f4 f5 ~@2", D: "~@2 d5 ~@3 e5 ~",
  E: "~@2 f5 ~@3 f#5 ~", F: "~@2 g5 ~@3 a5 ~", G: "~ a#5 ~ a#4 d5 g4 a#4 d5", H: "g5@3 g5 f5@3 f5",
  I: "e5@3 e5 d5@3 d5", J: "c#5@3 c#5 ~ a4 f5 c#5", K: "e5 d5 f5 d5 a4 ~@3", L: "~@2 a#5 ~@3 g5 ~",
  M: "~ a#4@2 a4 ~ f5@2 c#5", N: "~ e5@2 d5 ~ c5@2 a#4", O: "~ a#4@2 a4 ~ f5@2 e5", P: "d5@4 d6 ~@3",
  Q: "d5@8 ~@2 c5 e5 d5@2 c5@2", R: "b4 a5@2 g5 a#4 a5@2 g5", S: "a4 g5@2 f5 ~@4", T: "a#4 g4",
  U: "a4 a4@2 a4 ~ d6@2 c6", V: "~ c6@2 a#5 ~ a5@2 g5", W: "~ g5@2 f5 ~ e5@2 d5", X: "~ d5@2 c5 ~ g4@2 g#4",
  Y: "a4@2 f4@4 d4@2 c4@2 c5 e5 d5@2 c5@2", Z: "a4@2 g5@4 f5@2 ~@2 f5 a5 g5@2 f5@2", AA: "e4 d5@2 c5 e4 d5@2 c5",
  AB: "d#4 d5@2 c5 ~ d6@2 c6", AC: "~ c5@2 b4 a#4 a4@2 g4", AD: "f4@4 f5@4 ~@2 c5 e5 d5@2 c5@2", AE: "d5@4 ~ c5!3",
  AF: "c5@6 c5 ~@3 c5@2 c5@2 c5@2", AG: "~ e5!3 ~ d5!3", AH: "~ c5!3 ~ c5!3", AI: "~ a5!3 ~ g5!3", AJ: "~ c5!3 ~ a5!3",
  AK: "~ a#5!3 ~ a5!3", AL: "~ g5!3 ~ f5!3", AM: "~ c5!3 ~ a4!3", AN: "~ a4!3 ~ g4!3", AO: "~ g4!2 c5 ~ c5!3",
  AP: "f4 c4 f4 a4 c5 a5 a4 c#5",
})).s("gm_soprano_sax").gain(0.3)

// other · tenor sax · "Tenor Sax."
const tenor_sax = note(`<
  A B C D E F G H I J K D E F L M N O P D E F G H I J K D E F L M N O Q R S T U V W X Y ~@3 Z AA AB AC AD R S T U V W X
  Y ~@3 Z AA AB AC AD AE AF AG AH AI AF AG AJ AK AL AM AN AM AO AM AP AQ AF AG AH AI AF AG AJ AK AL AM AN AM AO A B C P
>`.pickRestart({
  A: "f4 c4 f4 a4 c5 f5 a4 c#5", B: "e5 d5 a4 c5 a#4 e4 a4 g4", C: "f4 d5 ~@2", D: "~@2 f5 ~@3 g5 ~",
  E: "~@2 a5 ~@3 a5 ~", F: "~@2 a#5 ~@3 f#5 ~", G: "~ g5 ~ a#4 d5 g4 a#4 d5", H: "~ a#4@2 a#4 ~ a#4@2 a#4",
  I: "~ a#4@2 a#4 ~ f5@2 f5", J: "e5@3 e5 ~ a4 f5 c#5", K: "e5 d5 a5 g5 f5 ~@3", L: "~@2 g5 ~@3 f5 ~",
  M: "~ e5@2 e5 ~ g5@2 g5", N: "~ f5@2 f5 ~ d5@2 d5", O: "~ d5@2 d5 ~ c#5@2 c#5", P: "f5@4 a5 ~@3", Q: "f5 ~",
  R: "d5 c5", S: "c5 c5@2 c5 ~@4", T: "g5 e5", U: "f5 f5@2 f5 ~ d#5@2 d#5", V: "~ d5@2 d5 ~ e5@2 e5",
  W: "~ d5@2 d5 ~ b4@2 b4", X: "~ a#4@2 a#4 ~ e4@2 e4", Y: "a4 f4@2 d4 ~@4", Z: "g4 b4@2 d#5 ~ a5@2 a5",
  AA: "~ g5@2 g5 ~ a#5@2 a#5", AB: "~ a5@2 a5 ~ f5@2 f5", AC: "~ g5@2 f5 e5 c5@2 c5", AD: "c5 a5 ~@2",
  AE: "f5@4 ~ c5!3", AF: "a4@6 a4 ~@3 c5@2 c5@2 c5@2", AG: "a#4@6 a#4 ~@3 c5@2 c5@2 c5@2", AH: "~ a#4!3 ~ g4!3",
  AI: "~ a4!3 ~ c5!3", AJ: "~ e5!3 ~ e5!3", AK: "~ a4!3 ~ f4!3", AL: "~ f#5!3 ~ d#5!3", AM: "~ f5!3 ~ d5!3",
  AN: "~ d5!3 ~ c#5!3", AO: "~ g#4!3 ~ g#4!3", AP: "~ f5!3 ~ f5!3", AQ: "~ e4!2 a#4 ~ c5!3",
})).s("gm_tenor_sax").gain(0.35)

// other · tenor sax · "Tenor Sax." · soft notes
const tenor_sax_soft = note("<~@42 A B C D ~@12 A B C D ~@39>".pickRestart({
  A: "~@8 c4@2 c5 e5 d5@2 c5@2", B: "d5 d5@2 f5 g5 a#5@2 c6", C: "d5 c6@2 a5 ~@4", D: "d4 e4",
})).s("gm_tenor_sax").gain(0.2)

// other · baritone sax · "Baritone Sax."
const baritone_sax = note(`<
  A B C D E F G H I J K D E F L M N M O D E F G H I J K D E F L M N M P Q R S T U V W X Y Z AA R AB V AC AD Q R S T U V
  W X Y Z AA R AB V AC C AE AF AG AH AI AF AG AJ AK AL L M AM AN AO AP AQ AF AG AH AI AF AG AJ AK AL L M AM AN A B C P
>`.pickRestart({
  A: "f3 c3 f3 a3 c4 f4 a3 c#4", B: "e4 d4 a3 c4 a#3 e3 a3 g3", C: "f3@2 f3@2 ~ a4 g#4 g4", D: "f4@3 f4 e4@3 e4",
  E: "d4@3 d4 c4@3 c4", F: "a#3@3 a#3 a3@3 a3", G: "g3@3 ~@5", H: "g3 d4", I: "g3 a#3", J: "a3@3 a3 ~@4",
  K: "~@5 a4 g#4 g4", L: "g3@3 g3 f3@3 f3", M: "e3@3 e3 a3@3 a3", N: "d3@3 d3 g3@3 g3", O: "d4@2 a3@2 d4 a4 g#4 g4",
  P: "d4 a3 d3 ~", Q: "g3@3 g3 c4@4", R: "f3 f3@2 f3 ~@4", S: "c4@3 g3 c3@3 g3", T: "f3@3 f3 d#3@3 a3",
  U: "g3@3 g3 g3@3 e3", V: "c3@3 c4 b3@3 b3", W: "a#3@3 a#3 c4@4", X: "f3@2 a3@4 c4@2 f3@2 c5 e5 d5@2 c5@2",
  Y: "g4 b4@2 b4 e5 e5@2 a#4", Z: "c5 f4@2 c5 ~@4", AA: "e3 c4", AB: "g3@3 g3 g3@2 e3@2", AC: "c4@3 c4 c3@2 c3@2",
  AD: "f3!2 ~@2", AE: "d4@2 a3@2 d3 ~@3", AF: "f#3@6 f#3 ~@9", AG: "g3@6 g3 ~@9", AH: "c4@3 c4 c3@3 c3",
  AI: "f3@3 f3 ~@4", AJ: "c4@3 c4 c3@4", AK: "f3@3 c3 f3@3 f3", AL: "d3@3 d3 f#3@3 f#3", AM: "d3@3 a3 d3@3 c4",
  AN: "a#3@3 f3 a#3@3 f4", AO: "a3@3 c4 f3@3 c4", AP: "b3@3 d4 g3@3 f3", AQ: "e3 g3@2 c4 ~@4",
})).s("gm_baritone_sax").gain(0.3)

stack(soprano_sax, tenor_sax, tenor_sax_soft, baritone_sax)