Strudelify

circles

Austin Post

KeyC majorTempo116 bpm
0:00/0:00
// circles — Austin Post
// 116 bpm, 4/4, key C 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/5931277; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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 · trombone
const trombone = note(`<
  A@5 B@5 C@2 D@2 E@2 F@2 ~@5 G H I J ~ K L@2 ~ M ~@2 N ~ O ~ P Q R@4 S ~ P Q T U V W X Y V W Z AA Z AA Z AA AB AC AD@2
  N ~ O ~ P Q R@4 S ~ P Q AE AF AG AH AI AF AG AH AJ@2 AK ~ O ~ P Q R@4 S AL P AM AN ~
>`.pickRestart({
  A: "[~@2 b3@17 b3@22 ~ a3@17 g#3@21]/5", B: "[~ b3@17 b3@22 ~ a3@30 ~@9]/5", C: "[g3@4 ~ g3 ~ g3@9]/2",
  D: "[a3@7 g#3@9]/2", E: "[g3@7 g3@9]/2", F: "[a3@12 b3@2 b3!2]/2", G: "~@2 d3@2 d3@2 d3@2 d3@3 d3@3 d3@2", H: "e3 ~",
  I: "~ c3!4 d3@2 d3", J: "c3 ~", K: "e4 d4 ~@2", L: "[~@2 c4!3 d4@2 c4@3 ~@6]/2", M: "~@2 e4 d4@2 c4!3",
  N: "g3 g3@2 a3@3 g3 e3", O: "g3 g3@2 a3@3 d4 e4", P: "g3!3 a3@3 g3 e3", Q: "~@6 c4 ~", R: "[~@3 c4 e4 f4 e4 g4@9]/2",
  S: "~ a3!3 b3!3 c4", T: "~@3 c4 ~@4", U: "a3@2 g3 ~@5", V: "~ g3!7", W: "g3 e3!2 ~ d3 ~@3", X: "~@7 e3",
  Y: "a3 ~ g3 ~@5", Z: "~@3 c4!5", AA: "e4@2 d4 ~@5", AB: "~@2 c4@2 c4@2 c4@2 c4@2 c4 ~ c4@2 c4 ~",
  AC: "c4@2 a3 ~ a3@2 g3 ~ g3@4 ~@4", AD: "[~@2 a3@2 a3 ~ c4@4 d4@4 e4@6 ~@12]/2", AE: "~@3 c4 e4 d4 d4@2", AF: "c4",
  AG: "b3", AH: "a3", AI: "g#3", AJ: "[~ a3!2 c4@2 d4@2 e4@9]/2", AK: "d4@6 d4 c4", AL: "~@2 c4 a3 a3@2 a3!2",
  AM: "~@2 a3 g3 g3@2 ~ a3", AN: "g3 g3@2 ~@5",
})).s("gm_trombone").gain(0.4)

// other · trombone
const trombone_2 = note(`<
  A@5 B@5 C@2 D@2 C@2 E@2 ~@8 F@2 D@2 F@2 G ~ H@2 D@2 H@2 D@2 I@8 ~@4 J@2 K@2 L@2 M@2 L@2 G ~ H@2 D@2 H@2 D@2 N@8 ~@8
  H@2 D@2 H@2 D@2 O@4 ~@5
>`.pickRestart({
  A: "[~@2 g3@17 g3@22 ~ f3@17 f3@21]/5", B: "[~ g3@17 g3@22 ~ f3@30 ~@9]/5", C: "[e3@7 d3@9]/2",
  D: "[f3@4 ~ f3 ~ f3@9]/2", E: "[f3@12 g3@2 g3!2]/2", F: "[e3@4 ~ e3 ~ d3@9]/2", G: "f3@4 ~ f3!3",
  H: "[e3@4 ~ e3 ~ d3@4 d3!2 ~ d3 ~]/2",
  I: "[g3@10 g3 ~ a3 ~ g3 e3@11 g3 ~ a3 ~ g3 e3@11 g3 ~ a3 ~ g3 e3@3 e3 d3@3 d3 e3@3 e3 d3@3 c3@2]/8", J: "[g3@3 e3]/2",
  K: "[f3@7 ~]/2", L: "[g3@4 ~ g3 ~ g3@5 e3@4]/2", M: "[f3@4 ~ f3 ~ f3@7 ~@2]/2",
  N: "[g3@10 g3 ~ a3 ~ g3 e3@11 g3 ~ a3 ~ g3 e3@11 g3 ~ a3 ~ g3 e3@3 e3 d3@3 d3 e3@3 e3 d3@3 b2@2]/8",
  O: "[g3@10 g3 ~ a3 ~ g3 e3@11 g3 ~ a3 ~ g3 e3]/4",
})).s("gm_trombone").gain(0.3)

// other · trombone · soft notes
const trombone_soft = note("<~@82 A@2 B@2 A@2 B ~@13 A@2 C@2 ~>".pickRestart({
  A: "g3", B: "f3", C: "f3/2",
})).s("gm_trombone").gain(0.2)

// other · trombone
const trombone_3 = note(`<
  A@5 B@5 C@2 D@2 E@2 F G ~@8 E@2 H@2 E@2 I ~ E@2 J@2 E@2 J@2 K L K L K L K L ~@4 M@2 N@2 O@2 P@2 Q R I ~ E@2 J@2 E@2
  J@2 K L K L K L K L ~@8 E@2 J@2 E@2 J@2 K L K L ~@5
>`.pickRestart({
  A: "[~@2 e3@17 d3@22 ~ c3@17 c3@21]/5", B: "[~ e3@17 d3@22 ~ c3@30 ~@9]/5", C: "[c3@7 b2@9]/2", D: "[c3@7 c3@9]/2",
  E: "[c3@4 ~ c3 ~ b2@9]/2", F: "c3", G: "c3@4 d3@2 d3!2", H: "[c3@4 ~ c3 ~ c3@9]/2", I: "c3@4 ~ c3!3",
  J: "[c3@4 ~ c3 ~ c3@4 c3!2 ~ c3 ~]/2", K: "c3 g3", L: "e3 d3", M: "[e3@3 b2]/2", N: "[c3@7 ~]/2",
  O: "[e3@4 ~ e3 ~ e3@5 b2@4]/2", P: "[c3@4 ~ c3 ~ c3@7 ~@2]/2", Q: "e3@4 ~ c3 e3 ~", R: "d3 b2",
})).s("gm_trombone").gain(0.3)

// other · trombone · soft notes
const trombone_soft_2 = note("<~@82 A B C@2 A B C ~@13 A B D@2 ~>".pickRestart({
  A: "e3", B: "d3", C: "c3", D: "c3/2",
})).s("gm_trombone").gain(0.2)

// other · trombone
const trombone_4 = note(`<
  A@5 B@5 C D E F C D E F C D E F C D E F C D E F C D G H C D E F C D E F C D E F C D E F C D E I C D E F C D E F C D E
  J C D E F C D E F C D E F C D E F K L M@2 K L M H C D E F C D E F ~@9
>`.pickRestart({
  A: "[~@2 c3@17 b2@22 ~ f2@17 f2@21]/5", B: "[~ c3@17 b2@22 ~ f2@30 ~@9]/5", C: "c3 ~ c3 ~ d3 c3!2 b2",
  D: "~@2 b2@2 ~@2 b2 ~ d3@2 c3@2 c3@2 ~@2", E: "f2 ~ f2 ~ f2!4", F: "~ f2 ~ f2 g2 ~ g2 ~",
  G: "f2@2 ~@2 f2@2 ~@2 f2@2 f2@2 f2@2 f2 ~", H: "~@5 g2!3", I: "~ f2 ~ f2 g2 ~@3", J: "~@4 g2!4", K: "c3", L: "b2",
  M: "f2",
})).s("gm_trombone").gain(0.35)

stack(trombone, trombone_2, trombone_soft, trombone_3, trombone_soft_2, trombone_4)