Strudelify

The Dancing Babies

Josh Holcomb

KeyA majorTempo88 bpm
0:00/0:00
// The Dancing Babies — Josh Holcomb
// 88 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5912446; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 44 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(88/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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("<~@3 A@3 B ~ C D C E C F G H A@2 B ~@9 C I C J C F G H A@2 B A@3 K ~>".pickRestart({
  A: "~@10 g4!3 a4 b4!2", B: "~@10 g4!3 a4 b4 ~", C: "~@2 d4 d#4 ~ b4 ~ a4 ~ a4 ~ g#4 a4 ~@3",
  D: "~@7 a4 ~ a4 ~ g4 a4 g4 e4 ~", E: "~@7 e5 ~ a#4 a4 g4 [a4,a#4] g4 e4 ~", F: "~@7 e4@2 e4 f#4@2 g4@2 a4@2",
  G: "e4@3 e4 ~@2 e4@6 ~@2 e4@2", H: "b4@3 b4 ~@2 a4@4 g4!3 a4 b4!2",
  I: "~@7 [a4,a6] ~ [a4,a6] ~ [g4,g6] [a4,a6] [g4,g6] [e4,e6] ~", // A G A G E
  J: "~@7 [e5,e7] ~ [a#4,a#6] [a4,a6] [g4,g6] [a4,a#4,a6,a#6] [g4,g6] [e4,e6] ~", K: "~@10 [g4,g5]!3 [a4,a5] [b4,b5] ~",
})).s("gm_trumpet").gain(0.15)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<~@3 A@3 B ~ C D C E C F G H A@2 B ~@4 I J K J L M N M O P Q G H A@2 B A@3 B ~>".pickRestart({
  A: "~@10 d4!3 e4 g4!2", B: "~@10 d4!3 e4 g4 ~", C: "~@4 b4@2 d5 b4@6 a4 e4 d4", D: "a4@3 a4@3 g4@4 ~@6",
  E: "g4@2 g4@2 ~@8 e4!2 d#4 ~", F: "a4@3 a4@3 g4@4 ~@2 e4@2 g4 e4", G: "b4@3 b4 ~@2 a4@6 ~@2 a4@2",
  H: "e5@3 e5 ~@2 d5@4 d4!3 e4 g4!2", I: "~@10 g4 g#4 ~ a4 a#4 ~", J: "b4 a4 b4 ~ g4@2 e4 d4 g4@2 a4 g4@2 e4 d4 c4",
  K: "b3@2 b3 d4@2 d4 g4@2 ~@2 g4 g#4 ~ a4 a#4 ~", L: "b3@2 b3 d4@2 c4 b3@2 ~@8",
  M: "~@4 b4@2 d5 b4@2 ~@3 a#4 a4 g4 e4", N: "a4@2 a4 g4@2 g4 e4@2 ~@8", O: "g4@2 g#4 ~@9 e4!2 d#4 ~",
  P: "~@4 b4@2 d5 b4@2 ~@3 d4 e4 g4 e4", Q: "b4@2 g4 a4@2 g4 e4@2 ~@4 e4@2 g4 e4",
})).s("gm_tenor_sax").gain(0.4)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A@3 B A C A B D E D F D G H I J K L M A C A B A@3 B D E D F D G H I A@3 N O@3 P
>`.pickRestart({
  A: "g2!2 ~@2 b2!2 ~@2 a2!2 ~@2 d3!2 ~@2", B: "g3 ~@2 g3 ~@2 g3 ~@9", C: "g2!2 ~@2 b2!2 ~@2 a2!2 ~@2 d2!2 ~@2",
  D: "~@2 b2!2 ~ b2 ~@5 b2 ~ b2 d3 d#3", E: "~@2 e3!2 ~ e3 ~@5 e3 ~ e3 a2 a#2",
  F: "~@2 e3!2 ~ e3 ~ g3 ~ f#3 ~ f3 ~ e3 ~ d#3", G: "~@2 e3!2 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 b2 a#2",
  H: "a2@3 a2 ~@2 a2@6 ~@2 a2@2", I: "d2@3 d2 ~@2 d2@8 ~@2", J: "~@6 [g4,a4] g4@3 e4 d4 b3 a3 ~@2",
  K: "~@2 g4@4 e4 d4 b3 a3 g3 e3 ~@4", L: "~@2 g4@4 e4 d4 b3 a3 g3 e3 d3 b2 ~@2", M: "g2 ~@2 g2 ~@2 g2 ~@9",
  N: "g3 ~@2 g3 ~@2 g3@4 ~@6", O: "~@2 d3 e3 ~ g3 ~ e3 g3!2 e3 ~ b3@2 b3@2, ~@12 a#3 ~ a#3 ~",
  P: "g2@2 ~ g2@2 ~ g2@4 ~@6",
})).s("gm_baritone_sax").gain(0.3)

// bass · tuba
const bass = note("<~@3 A B C B D E F G H G I J K B C B A B C B C B C B C L F G H G I J K ~@3 M N O P Q>".pickRestart({
  A: "g2 ~@2 g2 ~@2 g2 ~@9", B: "g2!2 ~@2 b2!2 ~@2 a2!2 ~@2 d3!2 ~@2", C: "g2!2 ~@2 b2!2 ~@2 a2!2 ~@2 d2!2 ~@2",
  D: "g2 ~@2 g2 ~@2 g2 ~@7 a2 a#2", E: "b2@2 ~@5 b2 ~ b2@3 ~ b1 d2 d#2", F: "e2@2 ~@5 e2 ~ e2 ~ e2 ~ e2 a1 a#1",
  G: "b1@2 ~@5 b1 ~ b1 ~@3 b1 d2 d#2", H: "e2@2 ~@5 e2 ~ d2@2 c#2 ~ c2@2 a#1", I: "e2@2 ~@5 e2 ~ e2 ~ e2 ~ e2 b1 a#1",
  J: "a1@3 a1 ~@2 a1@6 ~@2 a1@2", K: "d2@3 d2 ~@2 d2@4 d2 ~ d2!2 ~@2", L: "b2 ~@6 b2 ~ b2@2 ~@2 b1 d2 d#2",
  M: "[d2,d3]@4 [d2,d3] [c2,c3] [b1,b2] [a1,a2]", N: "g2@2 g2 ~ b2@2 a#2 a2@2 b2 c3 c#3 d3 e3 d3@2, g1 ~",
  O: "g2@2 g2!2 b2@2 a#2 a2@2 b2 c3 c#3 d3 c3 d2@2", P: "g2@2 g2 ~ b2@2 a#2 a2@2 b2 c3 c#3 d3 e3 d3@2",
  Q: "g2@2 ~ g2@2 ~ g2@4 ~@6",
})).s("gm_tuba").gain(0.3)

// other · xylophone
const xylophone = note("<A@3 B A C A B ~@8 A C A B ~@3 D E F E G ~@8 A C A B H@3 I>".pickRestart({
  A: "g5!2 ~@2 b5!2 ~@2 a5!2 ~@2 d6!2 ~@2", B: "g5 ~@2 g5 ~@2 g5 ~@9", C: "g5!2 ~@2 b5!2 ~@2 a5!2 ~@2 d5!2 ~@2",
  D: "~@10 g6@4 [g6,a6]!2", E: "b6 a6 b6 ~ g6@2 e6 d6 g6@2 a6 g6 ~ e6 d6 c6",
  F: "b5@2 b5 d6 ~ d6 g6@2 ~@2 g6@4 [g6,a6]!2", G: "b5@2 b5 d6 ~ c6 b5@2 ~@8",
  H: "~@2 d5 e5 ~ g5 ~ e5 g5!2 e5 ~ b5@2 b5@2, ~@12 a#5 ~ a#5 ~", I: "g5@2 ~ g5@2 ~ g5@2 ~@8",
})).s("gm_xylophone").gain(0.25)

// other · vibraphone
const vibraphone = note("<~@15 A@3 B C D E D F D E D G ~@7 A ~@8>".pickRestart({
  A: "~@10 g5!3 a5 b5!2", B: "~@10 g5!3 a5 b5@2", C: "~@10 d5@4 [d5,e5]!2",
  D: "g5 e5 g5 ~ e5@2 d5 b4 d5@2 e5 b4 ~ a4 g4 e4", E: "g4@2 g4 b4 ~ b4 d5@2 ~@2 d5@4 [d5,e5]!2",
  F: "g4@2 g4 b4 ~ a4 g4@2 ~@2 d5@4 [d5,e5]!2", G: "g4@2 g4 b4 ~ a4 g4@2 ~@8",
})).s("gm_vibraphone").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@3 A B@3 A C D E F E G H I B@3 A B@3 J B@3 K C D E F L G H I M@3 ~ N@3 A>".pickRestart({
  A: "x ~@2 x ~@2 x ~@9", B: "x ~ x ~@4 x ~@2 x ~@5", C: "x ~@6 x ~ x!2 ~@2 x ~@2", D: "x ~@6 x ~@2 x ~@2 x!2 ~",
  E: "x ~@6 x ~@2 x ~@2 x ~@2", F: "x ~@2 x ~@3 x ~ x ~ x ~ x ~ x", G: "x ~@2 x ~@3 x ~@2 x ~@2 x!2 ~",
  H: "x ~@2 x ~@2 x ~@7 x ~", I: "x ~@2 x ~@2 x ~@2 x ~@4 x ~", J: "~@4 x ~@8 x!3", K: "~@4 x ~@2 x ~ x ~ x ~ x ~@2",
  L: "x ~@5 x!2 ~@2 x ~@2 x ~@2", M: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", N: "x ~ x ~@4 x ~ x ~@6",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@4 A@3 ~@9 A@3 ~ A@3 B A@3 B ~@8 C@3 ~@5>".pickRestart({
  A: "~@4 x ~@4 x ~@2 x ~@3", B: "x ~@2 x ~@2 x ~@9", C: "~@2 x ~@2 x ~@4 x ~@2 x ~@2",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@3 A ~@3 B C D@2 E D F G H ~@7 I J ~@2 K C D@2 E L F M N ~@3 O P@3 Q>".pickRestart({
  A: "~@14 x!2", B: "~@8 x!4 ~ x!2 ~", C: "~ x ~ x", D: "~@4 x ~@4 x ~@2 x ~@3", E: "~@4 x ~@4 x!7",
  F: "~@4 x ~@4 x ~@2 x ~@2 x", G: "~@2 x ~@6 x ~ x ~ x!2 ~", H: "~@2 x ~ x ~@5 x!6", I: "~@8 x!8", J: "x",
  K: "~@8 x ~ x ~ x ~ x!2", L: "~@2 x ~ x ~@4 x ~@2 x ~ x!2", M: "~@2 x ~@6 x ~ x ~ x!3", N: "~@2 x ~@7 x!6",
  O: "x!2 ~ x ~ x ~ x ~ x!7", P: "~@2 x ~@2 x!3", Q: "x!7 ~@9",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@3 ~@9 A@3 ~ B A@2 C B A@2 D ~@8 E F@2 ~@5>".pickRestart({
  A: "x!14 ~@2", B: "~@4 x!10 ~@2", C: "x!7 ~@9", D: "x!7 ~ x ~ x ~ x ~ x!2", E: "~@2 x!5 ~", F: "x!7 ~",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 [x ~@2 x ~@2 x ~@9] ~@11 [x ~@2 x ~@2 x ~@9] ~@24>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A@4 ~ A@3 B A ~@3 A@3 ~ A@3 ~ A@3 C ~@3 B ~@4 A@3 ~@5>".pickRestart({
  A: "~@7 x", B: "~@7 x ~ x ~ x ~ x ~ x", C: "~@7 x ~ x ~ x ~ x ~@2",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@3 A ~ B@2 ~@4 A ~@3 A ~@3 A ~@3 A ~ B@2 A ~@3 A ~@3>".pickRestart({
  A: "x", B: "x ~@2 x ~@2 x ~@9",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@8 A@3 B A@2 ~@14 A@3 B A@2 ~@6 A@3 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@3 x",
})).gain(0.3)

// drums · cowbell
const cowbell = s("cb").struct("<[~@14 x!2]!3 [x ~@2 x ~@2 x ~@9] ~@40>").gain(0.3)

// drums · congas
const congas = s("conga:18").struct("<~ [~@2 x ~ x ~@2 x ~@2 x ~ x ~@3]!2 ~@41>").gain(0.95)

stack(
  trumpet, tenor_sax, baritone_sax, bass, xylophone, vibraphone, kick, rim, snare, hihat, mid_tom, open_hat, crash,
  ride, cowbell, congas
)