Strudelify

dance monkey

Toni Watson

KeyA majorTempo98 bpm
0:00/0:00
// dance monkey — Toni Watson
// 98 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "Grand Piano" piano (copy of ch 2 "Marimba" marimba); ch 9 "Synth Strings 3" synth strings 1 (copy of ch 8 "Synth Strings 1" synth strings 1)
// note: Transcription provider: pdmx. https://musescore.com/score/5868114; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(98/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// chords · marimba
const marimba = note(`<
  A B C D A B C D A B E F A B C D A B E F ~@8 A B C D A B E F A B C D A B C D ~@8 A B C D A B C D ~@8 A B C D A B C D A
  B C D A B C D
>`.pickRestart({
  A: "[f#5,a5,c#6]!8", B: "[d5,f#5,a5]!8", C: "[e5,g#5,b5]!8", D: "[c#5,e5,g#5]!8", E: "[e5,g#5,b5]", F: "[c#5,e5,g#5]",
})).s("gm_marimba").gain(0.1).pan(1)

// bass · slap bass 1 · "Slap Bass"
const bass = note(`<
  A B C D E F G H E F I J ~@16 E F G H E F I J E F G H E F G H ~@8 E F G H E F G H E F G H E F G H E F G H E F G H E F G
  H E F G H
>`.pickRestart({
  A: "f#4@2 ~@5 f#4", B: "d4@2 ~@5 d4", C: "e4@2 ~@5 e4", D: "c#4 ~@3", E: "f#3@2 ~ f#3 ~@2 f#3@2",
  F: "d3@2 ~ d3 ~@2 d3@2", G: "e3@2 ~ e3 ~@2 e3@2", H: "c#3@2 ~ c#3 ~@2 c#3@2", I: "e3", J: "c#3",
})).s("gm_slap_bass_1").gain(0.17).pan(0.3)

// chords · piano · "Mellow Grand Piano"
const piano = note(`<
  ~@4 A B C D A B E F A B C D A B E F ~@8 A B C D A B E F A B C D A B C D ~@8 G H I J G H I J G H I J G H I J G H I J G
  H I J G H I J G H I J
>`.pickRestart({
  A: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4] ~@2 [f#3,a3,c#4]@2", B: "[d3,f#3,a3]@2 ~ [d3,f#3,a3] ~@2 [d3,f#3,a3]@2",
  C: "[e3,g#3,b3]@2 ~ [e3,g#3,b3] ~@2 [e3,g#3,b3]@2", D: "[c#3,e3,g#3]@2 ~ [c#3,e3,g#3] ~@2 [c#3,e3,g#3]@2",
  E: "[e3,g#3,b3]", F: "[c#3,e3,g#3]",
  G: "[f#2,f#3,a3,c#4] [f#3,a3,c#4]!2 [f#2,f#3,a3,c#4] [f#3,a3,c#4]!2 [f#2,f#3,a3,c#4] [f#3,a3,c#4]", // F#m
  H: "[d2,d3,f#3,a3] [d3,f#3,a3]!2 [d2,d3,f#3,a3] [d3,f#3,a3]!2 [d2,d3,f#3,a3] [d3,f#3,a3]", // D
  I: "[e2,e3,g#3,b3] [e3,g#3,b3]!2 [e2,e3,g#3,b3] [e3,g#3,b3]!2 [e2,e3,g#3,b3] [e3,g#3,b3]", // E
  J: "[c#2,c#3,e3,g#3] [c#3,e3,g#3]!2 [c#2,c#3,e3,g#3] [c#3,e3,g#3]!2 [c#2,c#3,e3,g#3] [c#3,e3,g#3]", // C#m
})).s("gm_piano").gain(0.15).pan(0.7)

// bass · lead 4 chiff · "Chiffer Lead"
const bass_2 = note(`<
  ~@12 A B C D A B E D F G H I J G H I ~@8 A B C D A B C D J G H I J G H I J G H I J G H I ~@8 J G H I J G H I J G H I J
  G H I
>`.pickRestart({
  A: "f#1@3 a1", B: "d1@3 d1", C: "e1@3 e1", D: "c#1", E: "e1", F: "f#1 f#2 f#1 f#2 f#1 f#2 f#1 f#2",
  G: "d1 d2 d1 [d1,d2] d1 [d1,d2] d1!2", H: "e1 e2 e1 [e1,e2] e1 [e1,e2] e1!2",
  I: "c#1 c#2 c#1 [c#1,c#2] c#1 [c#1,c#2] c#1!2", J: "f#1 f#2 f#1 [f#1,f#2] f#1 f#2 f#1 [f#1,f#2]",
})).s("gm_lead_4_chiff").gain(0.48)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@28 A@16 ~@8 A@8 ~@8 A@16>".pickRestart({
  A: "f#3/4",
})).s("gm_string_ensemble_1").gain(0.1)

// bass · synth bass 1 · "Synth Bass 3"
const bass_3 = note("<~@52 A B C D A B C D ~@8 A B C D A B C D A B C D A B C D>".pickRestart({
  A: "f#3@3 a3", B: "d3@3 d3", C: "e3@3 e3", D: "c#3",
})).s("gm_synth_bass_1").gain(0.3)

// chords · synth strings 1
const synth_strings_1 = note("<~@68 A B C D A B C D A B C D A B C D>".pickRestart({
  A: "[f#3,a3,c#4,f#4]", B: "[d3,f#3,a3,d4]", C: "[e3,g#3,b3,e4]", D: "[c#3,e3,g#3,c#4]",
})).s("gm_synth_strings_1").gain(0.17).pan(0)

// chords · church organ
const church_organ = note("<~@52 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D>".pickRestart({
  A: "[f#2,a2,c#3,f#3]", B: "[d2,f#2,a2,d3]", C: "[e2,g#2,b2,e3]", D: "[c#2,e2,g#2,c#3]",
})).s("gm_church_organ").gain(0.11)

// drums · kick
const kick = s("bd").struct("<~@12 A@8 B@8 ~@4 A@12 B@16 ~@4 A@4 B@16>".pickRestart({
  A: "x ~@5 x!2 ~@8", B: "x!4",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@20 [~ x ~ x ~ x ~ x]!8 ~@16 [~ x ~ x ~ x ~ x]!16 ~@8 [~ x ~ x ~ x ~ x]!16>").gain(0.48)

// drums · clap
const clap = s("cp").struct("<~@32 [~@3 x]!4 [~ x ~ x]!8 ~@20 [~ x ~ x]!4 ~@16>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@12 [~ x ~ x]!72>").gain(0.48)

// drums · ride
const ride = s("rd").struct("<~@32 [~@3 x]!4 [~ x ~ x]!8 ~@20 [~ x ~ x]!4 ~@16>").gain(0.48)

stack(
  marimba, bass, piano, bass_2, string_ensemble_1, bass_3, synth_strings_1, church_organ, kick, rim, clap, hihat, ride
)