Strudelify

Carrossel

public domain

KeyG majorTempo110 bpm
0:00/0:00
// Carrossel — public domain
// 110 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/1715111; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 55 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · "Alto Saxophone"
const soprano_sax = note("<A B@2 C@3 ~@16 D@4 E F G H I F J K L M N O P ~@3 Q R S T U V W X Y V Z X AA>".pickRestart({
  A: "~@3 a#4@5", B: "[~@2 a4@11 ~@11 a4@22 g4@11 ~@7]/2", C: "[~@4 g4@16 f4@11 f4@11 f4@5 ~ a4@11 g4@33 ~@4]/3",
  D: "[~@6 d#4@21 f4@19 g4@9 c5@4 a#4@4 ~]/4", E: "~@3 a4@4 a#4@4 a4@13 f4@2 g4@2 a#4@2 g4@2",
  F: "d#4@3 g4@3 c5@6 f4 g4 a#4 g4", G: "f4@3 f4@3 d4@3 a#3 g3@2 f4 g4 a#4 g4", H: "d#4@4 f4@2 d4@3 c4 a3@4 a#3@2",
  I: "c4@2 ~@2 d4@8 f4 g4 a#4 g4", J: "d5@4 c5@2 a#4@3 c5 a#4@2 f4 g4 a#4 g4", K: "d#4@4 f4@2 a4@3 a#4 c5@4 f5@2",
  L: "f5 ~ d5@6", M: "~@2 a#3 g3 ~ d#3 g3 ~ a#3!2 ~ a#3 g3@2 d#3@2", N: "~@2 c4 a3 ~ f3 a3 ~ a3 f3 ~ f3 a3@2 c4@2",
  O: "~@2 d#4 g4 ~ d#4 g4 ~ g4!2 ~ g4 d#4@2 d#4@2", P: "~@2 a4!2 ~ a4!2 ~@3 a#4@2 a4@2 g4@2",
  Q: "~@4 a4@4 a#4@4 a4 a#4@7 a4@12", R: "g4@5 a4 a#4 g4", S: "a4!3 a#4 a4@2 c4@2", T: "~@4 d#4 f4 g4 a#4",
  U: "~@2 a4@2 a#4@2 a4@6 f4 g4 a#4 g4", V: "a#4@3 a#4@3 a4@6 f4 g4 a#4 g4", W: "a4@3 a4@3 g4@3 f4 d4@2 f4 g4 a#4 g4",
  X: "g4@4 g4@2 f4@3 d#4 c4@4 c4@2", Y: "a4@2 ~@2 g4@8 f4 g4 a#4 g4", Z: "d5@4 c5@2 g4@3 f4 d4@2 f4 g4 a#4 g4",
  AA: "a4 ~ a#4@6",
})).s("gm_soprano_sax").gain(0.24).pan(0.3)

// other · soprano sax · "Alto Saxophone" · soft notes
const soprano_sax_soft = note("<~@5 A@2 B C@2 D E F@2 G H I@2 J@3 K ~@17 L M L ~@13>".pickRestart({
  A: "[~@14 g3@11 ~@7]/2", B: "~@4 g3@11 ~", C: "[~@9 a#4@5 d5@5 ~ d#5@5 d5@5 ~ a#4@5 g4@5 ~ d#4@5 ~@17]/2",
  D: "g3@11 ~@5", E: "~ a#4@5 d5@5 ~ d#5@5 d5@5 ~ a#4@5 g4@4", F: "[~@2 d#4@5 ~@17 c4@22 ~@18]/2",
  G: "~@4 d#5@5 d5@5 ~ c5@5 a#4@5 ~ a#4@5 ~", H: "~@16 f4@5 ~@11", I: "[~@6 a4@5 f4@5 ~@12 a#3@22 ~@14]/2",
  J: "[~@8 d5@5 a4@5 ~ g4@5 f4@5 ~ d4@5 ~@17 a#3@22 ~@22]/3", K: "c4@11 ~@5", L: "a#3!2", M: "c4!2",
})).s("gm_soprano_sax").gain(0.16).pan(0.3)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<A B@2 C@3 ~@16 D@4 E F G H I F J K L M N O P ~@3 Q R S T U V W X Y V Z AA AB>".pickRestart({
  A: "~@3 g4@5", B: "[~@2 f4@11 ~@11 d4@22 a#3@11 ~@7]/2", C: "[~@4 d4@16 c4@11 a3@11 a3@5 ~ d4@11 d4@33 ~@4]/3",
  D: "[~@6 a#3@21 a#3@19 a#3@9 d#4@4 d#4@4 ~]/4", E: "~@3 f4@4 f4@4 f4@13 ~@8", F: "a#4@3 a#4@3 a4@6 ~@4",
  G: "a4@3 a4@3 g4@6 ~@4", H: "g4@2 ~ f4@2 f4@2 f4", I: "f4 ~ g4@4 ~@2", J: "f4@3 g4@3 ~@2", K: "g4@3 f4@3 ~@2",
  L: "f4@2 ~@2 g4@8 a#4!4", M: "~@2 d#4 g4 ~ g4 d#4 ~ d#4 d4 ~ d4 d#4@2 g4@2",
  N: "~@2 f4 a4 ~ a4 f4 ~ f4 c4 ~ c4 f4@2 a4@2", O: "~@2 d#3 g3 ~ a#3 d4 ~ d#4!2 ~ d#4 g4@2 a#4@2",
  P: "~@2 f4!2 ~ f4!2 ~@3 d4@2 d#4@2 d#4@2", Q: "a3 ~@7", R: "d#3 g3 a#3 d4 d#4 d4 a#3 g3",
  S: "a#3 d4 f4 a#4 f4 d4 a#3 f3", T: "g3 d#3 g3 a#3 d#4 a#3 d#4 g4", U: "a4@2 f4@2 g4@2 f4@6 f4 g4 a#4 g4",
  V: "g4@3 g4@3 f4@6 f4 g4 a#4 g4", W: "f4@3 f4@3 d4@3 c4 a#3@2 f4 g4 a#4 g4", X: "d#4@4 d#4@2 c4@3 a#3 a3@4 a3@2",
  Y: "f4@2 ~@2 d4@8 f4 g4 a#4 g4", Z: "a#4@4 f4@2 d4@3 c4 a#3@2 f4 g4 a#4 g4", AA: "d#4@4 d#4@2 c4@3 a#3 a3@4 f3@2",
  AB: "f4 ~ d4@6",
})).s("gm_alto_sax").gain(0.3).pan(0.7)

// other · alto sax · "Alto Saxophone" · soft notes
const alto_sax_soft = note("<~@5 A B C@3 D E F G@3 H I@3 J K L ~@16 M N M ~@13>".pickRestart({
  A: "~@7 d#4", B: "~ d4@5 ~ a#3@5 g3@5 ~ d#3@5 ~@9",
  C: "[~@19 a#3@5 d4@5 ~ d#4@5 g4@5 ~ a#4@5 ~@6 g3@22 d#4@5 d4@5 ~ a#3@5 ~@6]/3", D: "~@22 d#4@5 g4@5",
  E: "~ a#4@5 ~@6 a#3@20", F: "~@2 d#4@5 d4@5 ~ a#3@5 g3@5 ~ f3@5 ~@3",
  G: "[~@14 c4@5 f4@5 ~ a4@5 c5@5 ~ d#5@5 ~@17 a#4@5 g4@5 ~ d#4@5 d4@5 ~ c4@5 ~@6 f4@5]/3", H: "c4@5 ~@27",
  I: "[~@18 d#4@5 g4@5 ~ a#4@5 c5@5 ~ d5@5 ~@17 d4@5 a#3@5 ~ f3@5 ~@18]/3", J: "~@10 d#4@5 g4@5 ~ a#4@5 d#5@5 ~",
  K: "~@22 a4@5 c5@5", L: "~ f5@5 a5@5 ~@21", M: "g3!2", N: "a3!2",
})).s("gm_alto_sax").gain(0.2).pan(0.7)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A B@2 C@3 D@2 ~ E F ~ G@2 H I J K L M@2 N O P Q R S T U V W X Y Z AA AB AC AB AD AE AF AE AG AH AI AJ AK AL AM AN AO
  AL AP AN AQ
>`.pickRestart({
  A: "~@3 g3@5", B: "[~@2 f3@11 ~@11 f3@22 d3@11 ~@7]/2", C: "[~@4 g3@16 f3@11 c3@11 a2@5 ~ d3@11 g3@33 ~@4]/3",
  D: "[~@18 d#3@5 d3@5 ~ a#2@5 d3@5 ~ d#3@5 g3@5 ~ a#3@5 ~@8]/2", E: "~@21 a#3@5 g3@5 ~",
  F: "d#3@5 g3@5 ~ a#3@5 d4@5 ~ d#4@5 ~@5", G: "[~@24 f3@5 c3@5 ~ f3@5 a3@5 ~ c4@5 ~@13]/2", H: "~@2 a#3@11 ~@3",
  I: "~@16 c4@5 a3@5 ~@6", J: "f3@16 ~ a3@5 f3@5 ~ d#3@4", K: "~ g3@5 ~ a#3@5 d4@5 ~ d#4@5 ~@9", L: "~@4 c4@11 ~",
  M: "[~@9 f3@5 c3@5 ~ a#2@5 d#3@5 ~ g3@5 a#3@5 ~ d#4@5 ~@17]/2", N: "f3@5 a3@5 ~ c4@5 f4@5 ~ a4@5 ~@5",
  O: "~@12 g3@5 d#3@5 ~ g3@5 d#3@4", P: "~@2 g3@5 d#3@5 g3@5 d#3@5 g3@5 f3@5", Q: "g3@5 f3@5 g3@5 f3@4 g3@5 f3@4 g3@4",
  R: "~ d#3@4 g3@4 ~ d#3@4 g3@4 a3@4 a#3@4 ~ c4@4 ~", S: "~@3 c4@4 d4@4 c4@13 ~@8", T: "g3@3 g3@3 f3@6 ~@4",
  U: "f3@3 f3@3 d3@6 ~@4", V: "d#3@2 c3 f3@2 f3@2 f3", W: "d3 ~ d3@4 ~@2", X: "g3@3 g3@3 c3@6 ~@4", Y: "f3@3 d3@3 ~@2",
  Z: "d#3@3 f3@3 ~@2", AA: "d3@2 ~@2 d3@8 a#3!4", AB: "~@2 d#3!2 ~ d#3!2 ~ d#3!2 ~ d#3 d#3@2 d#3@2",
  AC: "~@2 f3!2 ~ f3!2 ~ f3!2 ~ f3 f3@2 f3@2", AD: "~@2 c4!2 ~ c4!2 ~@3 d3@2 c3@2 a#2@2", AE: "d#3!2", AF: "f3!2",
  AG: "f3 ~@7", AH: "d#3 d#4 d#3 d#4 d#3 d#4 d#3 d#4", AI: "f3 f4 f3 f4 f3 f4 f3 f4",
  AJ: "d#3 a#3 d#3 a#3 g3 d#4 a#3 g4", AK: "f4@2 f3@2 g3@2 f3@6 f3 g3 a#3 g3", AL: "d4@3 d4@3 c4@6 f3 g3 a#3 g3",
  AM: "c4@3 c4@3 a#3@3 a3 g3@2 f3 g3 a#3 g3", AN: "a#3@4 c4@2 a3@3 g3 f3@4 f3@2", AO: "c4@2 ~@2 a#3@8 f3 g3 a#3 g3",
  AP: "f4@4 a3@2 a#3@3 a3 g3@2 f3 g3 a#3 g3", AQ: "c4 ~ a#3@6",
})).s("gm_tenor_sax").gain(0.25).pan(0.2)

// bass · baritone sax · "Baritone Saxophone"
const bass = note(`<
  A B@2 C@4 D@3 E F@3 G@2 H@2 I@3 J K L M@3 N O P Q N R P S T U T V W X W Y Z AA AB AC AD AE AF AG AD AH AI AJ
>`.pickRestart({
  A: "~@3 d#2@5", B: "[~@2 f2@11 ~@11 d2@22 g2@11 ~@7]/2", C: "[~@4 g2@16 f2@11 f2@11 f2@5 ~ a2@11 g2@33 d#2@33 ~@3]/4",
  D: "[~@8 d#2@33 ~@11 d#2@33 ~@11]/3", E: "d#2", F: "[~@12 d#2@33 ~@11 f2@33 ~@7]/3",
  G: "[~@4 d#2@33 ~@11 f2@5 ~@6 f2@5]/2", H: "[f2@27 ~ d#2@33 ~@3]/2", I: "[~@8 f2@33 ~@11 d#2@33 ~@11]/3", J: "f2",
  K: "~@12 d#2@11 d#2@9", L: "~ d#2@5 d#2@5 f2@5", M: "[f2@10 f2@9 f2@9 d#2@9 d#2@9 d#2@8 d#2@8 ~ c2@4 ~@29]/3",
  N: "d#2@3 d#2@3 f2@6 ~@4", O: "d2@3 d2@3 g2@6 ~@4", P: "c3@3 f2@3 f2@2", Q: "a2 ~ g2@4 ~@2", R: "d2@2 d2 g2@3 ~@2",
  S: "a2 ~ g2@6", T: "d#2 ~ d#2 ~ d#2 ~ d#2 ~", U: "f2 ~ f2 ~ f2 ~ f2 ~", V: "f2 ~@4 a#2 c3 a#2",
  W: "g2 ~ g2!3 a#2 a2 ~ f2 ~ g2 ~@3 d2 g2", X: "g2 ~ f2 g2 ~ a#2 a2 ~@7 d2 f2",
  Y: "c2 ~ c2!2 ~ c2 f2 ~@3 f2!2 d2 ~ d2 f2", Z: "d#2@2 d#2!2 d#2@2 d#2!2 d#2@2 d#2!2 d#2@2 d#2!2",
  AA: "f2@2 f2!2 f2@2 f2!2 f2@2 f2!2 f2@2 f2!2", AB: "g2@2 g2!2 g2@2 g2!2 g2@2 g2!2 g2@2 g2!2",
  AC: "f2@2 f2!4 f2@2 ~@4 f2 g2 a#2 g2", AD: "d#2@3 d#2@3 f2@6 f2 g2 a#2 g2", AE: "d2@3 d2@3 g2@3 g2 g2@2 f2 g2 a#2 g2",
  AF: "d#2@4 d#2@2 f2@3 f2 f2@4 f2@2", AG: "d2@2 ~@2 g2@8 f2 g2 a#2 g2", AH: "a#2@4 f2@2 g2@3 f2 g2@2 f2 g2 a#2 g2",
  AI: "d#2@4 c2@2 f2@3 g2 f2@4 f2@2", AJ: "d2 ~ g2@6",
})).s("gm_baritone_sax").gain(0.32).pan(0.8)

stack(soprano_sax, soprano_sax_soft, alto_sax, alto_sax_soft, tenor_sax, bass)