Strudelify

dance monkey

Cade Steenholdt

KeyB♭ majorTempo100 bpm
0:00/0:00
// dance monkey — Cade Steenholdt
// 100 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5944319; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A B C D A B C E A F ~@2 G@3 H I@3 ~ J K L M J K L H N@3 O P@3 Q R S T U V W X Y Z ~@11 AA AB@3 AC AD AE AF P@3 O N@3 O
  AG@3 AH ~
>`.pickRestart({
  A: "bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 g4", B: "~@2 g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 a4",
  C: "~@2 a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 f4", D: "~@2 f4 ~ f4 ~ f4 ~ f4 ~ f4 ~ g4@2 f4@2",
  E: "~@2 f4 ~ f4 ~ f4 ~ f4 ~ f4 ~ f4 ~ f4@2", F: "~@2 g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ g4 ~ bb4 a4",
  G: "[g4@8 ~@7 eb4@9 ~@7 f4@9 ~@8]/3", H: "d4 ~", I: "[d4@8 ~@7 eb4@9 ~@7 f4@9 ~@8]/3", J: "~ g4 ~ g4 ~ g4 ~ g4",
  K: "~ eb4 ~ eb4 ~ eb4 ~ eb4", L: "~ f4 ~ f4 ~ f4 ~ f4", M: "~ d4 ~ d4 ~ d4 ~ d4",
  N: "[bb4@2 bb4!2 c5@2 bb4!2 a4@2 g4!2 bb4 bb4@2 g4@3 bb4@2 g4@2 bb4@2 g4@3 g4 bb4 bb4@2 a4@3 a4 g4 a4 g4 a4 g4@2 a4@2 g4 bb4@2 a4@2]/3",
  O: "g4 bb4 ~@2 g4@2 g4@2",
  P: "[bb4@2 bb4!2 a4@2 a4!2 a4@2 g4!2 bb4 bb4@2 g4@5 ~@7 a4 bb4 bb4@2 a4@3 g4@2 a4@2 g4@2 a4 g4@2 bb4@3 a4@2]/3",
  Q: "g4 bb4 ~@2 d5@4", R: "f5 g5 f5 d5@2 c5@2 g4@2 bb4 g4@2 ~@4", S: "f5@2 ~@2 eb5 eb5@2 d5 d5@2 bb4 bb4@2 d5 d5@2",
  T: "~ g4 bb4 g4@2 d5@2 f5 g5@8", U: "bb5@4 g5 ~@2 d5", V: "f5 g5 f5 ~ d5 eb5 d5 ~ a4 bb4 a4 ~ g4@4",
  W: "~@2 g4@2 ~@2 g4@2 g4@2 a4 bb4 a4@2 g4@2", X: "g4@2 g5@2 ~@2 g5@2 f5@2 g5 f5 g5@2 ~@2",
  Y: "f5@2 f5!2 eb5@2 eb5!2 d5@2 d5!2 c5@2 bb4 c5", Z: "d5@3 ~@5", AA: "g4 bb4",
  AB: "[c5@8 bb4@7 a4@15 bb4 a4@7 ~@10]/3", AC: "g4", AD: "eb4", AE: "f4", AF: "d4@2 g4!2",
  AG: "[bb4@2 bb4!2 a4@2 a4!2 a4@2 g4!2 bb4 bb4@2 g4@5 ~@7 g4 bb4 bb4@2 a4@3 g4@2 a4@2 g4@2 a4 g4@2 bb4@3 a4@2]/3",
  AH: "g4 bb4 ~@6",
})).s("gm_trumpet").gain(0.33)

// other · trombone
const trombone = note(`<
  A B C D A B C E A F@2 G H@3 G I@3 J K L M N K L M G O P Q R O P S T K L M N K L M U V W X Y V W X Y Z AA AB AC Z AA AB
  AD AE@3 AF AE@3 AF AG@3 AF AE@3 R ~
>`.pickRestart({
  A: "bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 g3", B: "~@2 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 a3",
  C: "~@2 a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 f3", D: "~@2 f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ g3@2 f3@2",
  E: "~@2 f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3@2",
  F: "[~@2 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ bb3 a3@3 g3 g3@3 f3 g3@2 f3@2 g3@2 bb3@3]/2", G: "d3 ~",
  H: "[g3@8 ~@7 eb3@9 ~@7 f3@9 ~@8]/3", I: "[d3@8 ~@7 eb3@9 ~@7 f3@9 ~@8]/3", J: "~@2 g3!2", K: "~ g3 ~ g3 ~ g3 ~ g3",
  L: "~ eb3 ~ eb3 ~ eb3 ~ eb3", M: "~ f3 ~ f3 ~ f3 ~ f3", N: "~ d3 ~ d3 ~ d3 ~ d3", O: "bb3@3 bb3 bb3@3 bb3",
  P: "~@2 bb3@2 g3@2 bb3@2 g3@3 ~@5", Q: "c4!2 c4@4 bb3@2 ~ a3@2 g3 bb3@2 a3@2", R: "g3 bb3 ~@6",
  S: "~@2 g3@2 a3@2 g3@2 a3 g3@2 bb3@3 a3@2", T: "g3 bb3 ~ a3 ~ a3 ~ a3", U: "d3@3 ~ g2@4", V: "~ g3@7", W: "~ eb3@7",
  X: "~ f3@7", Y: "~ d3@7", Z: "g3", AA: "eb3", AB: "f3", AC: "d3", AD: "~@2 a3 g3",
  AE: "[bb3@2 bb3!2 a3@2 a3!2 a3@2 g3!2 bb3 bb3@2 g3@5 ~@7 a3 bb3 bb3@2 a3@3 g3@2 a3@2 g3@2 a3 g3@2 bb3@3 a3@2]/3",
  AF: "g3 bb3 ~@2 g3@2 g3@2",
  AG: "[bb3@2 bb3!2 c4@2 bb3!2 a3@2 g3!2 bb3 bb3@2 g3@3 bb3@2 g3@2 bb3@2 g3@3 g3 bb3 bb3@2 a3@3 a3 g3 a3 g3 a3 g3@2 a3@2 g3 bb3@2 a3@2]/3",
})).s("gm_trombone").gain(0.32)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A B C ~ D E F G D E H I J K L M J K L N O P Q R O P Q I S T U V S T U W O P Q R O P Q X Y Z AA AB Y Z AA AB AC AD H AE
  AC AD H ~ AF AG AH AI AF AG AH AI AF AG AH AI S T U AJ ~
>`.pickRestart({
  A: "g2@2 ~@11 g2@2 eb2", B: "~@13 eb2@2 f2", C: "~@13 f2@2 d2", D: "g2 ~@2 g2 ~@2 g2 ~", E: "eb2 ~@2 eb2 ~@2 eb2 ~",
  F: "f2 ~@2 f2 ~@2 f2 ~", G: "d2 ~@2 d2 ~@2 d2 ~", H: "f2", I: "d2 ~", J: "g2@2 g2 ~ g2 ~ g2 ~ g2@2 g2 ~@3 g2@2",
  K: "eb2@2 eb2 ~ eb2 ~ eb2 ~ eb2@2 eb2 ~@3 eb2@2", L: "f2@2 f2 ~ f2 ~ f2 ~ f2@2 f2 ~@3 f2@2",
  M: "d2@2 d2 ~ d2 ~ d2 ~ d2@2 d2 ~@3 d2@2", N: "d2 ~@3", O: "~ g2 ~ g2 ~ g2 ~ g2", P: "~ eb2 ~ eb2 ~ eb2 ~ eb2",
  Q: "~ f2 ~ f2 ~ f2 ~ f2", R: "~ d2 ~ d2 ~ d2 ~ d2", S: "g2 d3 g2 d3 g2 d3 g2 d3",
  T: "eb2 bb2 eb2 bb2 eb2 bb2 eb2 bb2", U: "f2 c3 f2 c3 f2 c3 f2 c3", V: "d2 a2 d2 a2 d2 a2 d2 a2",
  W: "d2 a2 d2 a2 ~ a2 ~ a2", X: "d3@3 ~ g2@4", Y: "~ d3 ~ d3 ~ d3 ~ d3", Z: "~ bb2 ~ bb2 ~ bb2 ~ bb2",
  AA: "~ c3 ~ c3 ~ c3 ~ c3", AB: "~ a2 ~ a2 ~ a2 ~ a2", AC: "g2", AD: "eb2", AE: "d2", AF: "g3", AG: "eb3", AH: "f3",
  AI: "d3", AJ: "d2 a2 ~@6",
})).s("gm_baritone_sax").gain(0.2)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  A B C ~@9 D@4 E@3 ~ F G H I F G H J K L M N K L M O F G H I F G H P F G H I F G H I Q R S T Q R S ~ K L M N K L M N K
  L M N K L M U Q
>`.pickRestart({
  A: "g2@2 ~@11 g2@2 eb2", B: "~@13 eb2@2 f2", C: "~@13 f2@2 d2",
  D: "[d3@2 d3 ~ d3 ~ d3 ~ d3@2 d3 ~ d3!3 eb2@3 bb2 ~ bb2 ~ bb2 ~ bb2@2 bb2 ~ bb2!3 f2@3 c3 ~ c3 ~ c3 ~ c3@2 c3 ~ c3!3 d2@3 a2 ~ a2 ~ a2 ~ a2@2 a2 ~ a2!2 a2@2]/4",
  E: "[d3@2 d3 ~ d3 ~ d3 ~ d3@2 d3 ~ d3!3 eb2@3 bb2 ~ bb2 ~ bb2 ~ bb2@2 bb2 ~ bb2!3 f2@3 c3 ~ c3 ~ c3 ~ c3@2 c3 ~ c3!3 d2]/3",
  F: "~ g2 ~ g2 ~ g2 ~ g2", G: "~ eb2 ~ eb2 ~ eb2 ~ eb2", H: "~ f2 ~ f2 ~ f2 ~ f2", I: "~ d2 ~ d2 ~ d2 ~ d2", J: "d2 ~",
  K: "g2 d3 g2 d3 g2 d3 g2 d3", L: "eb2 bb2 eb2 bb2 eb2 bb2 eb2 bb2", M: "f2 c3 f2 c3 f2 c3 f2 c3",
  N: "d2 a2 d2 a2 d2 a2 d2 a2", O: "d2 a2 d2 a2 ~ a2 ~ a2", P: "d2@3 ~ g2@4", Q: "g2", R: "eb2", S: "f2", T: "d2",
  U: "d2 a2 ~@6",
})).s("gm_electric_bass_finger").gain(0.4)

// bass · electric bass finger · "Electric Bass" · soft notes
const bass_soft = note("<~@4 A B C D A B E F ~@65>".pickRestart({
  A: "d2 ~@2 d2 ~@2 d2 ~", B: "bb1 ~@2 bb1 ~@2 bb1 ~", C: "c2 ~@2 c2 ~@2 c2 ~", D: "a1 ~@2 a1 ~@2 a1 ~", E: "c2",
  F: "a1 ~",
})).s("gm_electric_bass_finger").gain(0.24)

stack(trumpet, trombone, baritone_sax, bass, bass_soft)