Strudelify
Radio Dancing cover art

Radio Dancing

Engelbert Humperdinck

KeyA majorTempo120 bpm
0:00/0:00
// Radio Dancing — Humperdinck Engelbert
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order, A@4 for four bars: edit a riff to change every repeat.

// bass · piano · "WARM PAD"
const bass = note("<c#-1 ~@123>").s("gm_piano").gain(0.05)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@3 A@2 B@2 C@2 D@2 E F B@2 G@2 B@2 E F B@2 E H I@2 A@2 J@2 D@2 B@2 A@2 B@2 D@2 B@2 E F B@2 D@2 B@2 E F B@2 E H K@2
  L@2 B@2 G@2 B@2 A@2 J@2 D@2 B@2 A@2 B@2 M@2 J@2 A@2 J@2 D@2 B@2 A@2 B@2 C@2 N@2 A@2 B@2 D@2 B@2 A@2 B@2 D@2 B@2 O ~@8
>`.pickRestart({
  A: "[[f#3,a3,d4]@31 ~]/2", B: "[[e3,a3,c#4]@31 ~]/2", C: "[[f#3,b3,d4]@31 ~]/2", D: "[[g#3,b3,e4]@31 ~]/2",
  E: "[e3,a3,c#4]", F: "[f#3,a3,d4]@15 ~", G: "[[e3,g#3,b3]@31 ~]/2", H: "[e3,g#3,b3]@15 ~",
  I: "[[e3,a3,c#4]@25 ~@7]/2", J: "[[e3,a3,c#4]@15 ~]/2", K: "[[e3,a3,c#4]@7 ~]/2",
  L: "[f#3 ~@3 f#3@28, [a3,d4]@31 ~]/2", M: "[[b3,e4]@31 ~, g#3@7 ~]/2", N: "[[g#3,b3,e4]@29 ~@3]/2",
  O: "[e3,a3,c#4] ~@15", // A
})).s("gm_pad_warm").gain(0.36)

// other · piano · "MARIMBA"
const piano = note("<c#-1 ~@123>").s("gm_piano").gain(0.05)

// other · marimba
const marimba = note(`<
  ~@13 A@2 ~@2 A@2 B ~ A@2 B ~ A B C@2 D@2 E@2 F G C H F G E I G@2 B ~ A@2 ~@2 A@2 B ~ A@2 B ~ A B C@2 J K L M J K C N
  D@2 E I D O C N D@2 E I J P C Q R D E I D J ~@8 C S D J T I J P C U J V W I X Y B ~@8
>`.pickRestart({
  A: "a4 ~@2 a4 ~@2 a4 ~@2 e4 f#4 ~ a4 ~ f#4 e4", B: "a4 ~@15", C: "d4 ~@2 d4 ~@12", D: "a4 ~@2 a4 ~@12",
  E: "e4 ~@2 e4 ~@12", F: "[e4,a4] ~@2 [e4,a4] ~@12", G: "[e4,a4] ~@2 [e4,a4] ~@5 e4 f#4 ~ a4 ~ f#4 ~",
  H: "d4 ~@2 d4 ~@5 d4 e4 ~ f#4 ~ e4 ~", I: "e4 ~@2 e4 ~@5 e4 f#4 ~ a4 ~ f#4 ~", J: "a4 ~@2 a4 ~@5 e4 f#4 ~ a4 ~ f#4 ~",
  K: "a4 ~@2 a4 ~@5 e4 f#4 ~ a4@2 f#4 e4", L: "f#4 ~@2 e4 ~@12", M: "e4 ~@2 e4 ~@10 e4 f#4",
  N: "d4 ~@2 d4 ~@5 d4 e4 ~ f#4@2 e4 ~", O: "a4 ~@2 a4 ~@5 e4 f#4 ~ f#4 ~ e4 ~",
  P: "a4 ~@2 a4 ~@5 e4 f#4 ~ a4 f#4 e4 ~", Q: "d4 ~@2 d4 ~@5 e4 f#4 ~ a4@2 f#4 ~",
  R: "a4 ~@2 a4 ~@5 e4 f#4 ~ a4@2 f#4 ~", S: "d4 ~@2 d4 ~@10 e4 f#4", T: "e4 ~@2 e4 ~@11 f#4",
  U: "d4 ~@2 d4 ~@10 d4 e4", V: "a4 ~@2 a4 ~@5 e4 f#4 ~ [f#4,a4] f#4 e4 ~", W: "e4 ~@2 e4 ~@5 e4 f#4 ~ e4 ~ d4 ~",
  X: "a4 ~@2 a4 ~@2 a4 ~@2 e4 f#4 ~ a4@2 f#4 e4", Y: "a4 ~@2 a4 ~@2 a4 ~@2 e4 f#4 ~ b4 c5 a4 f#4",
})).s("gm_marimba").gain(0.41).pan(0)

// other · acoustic guitar nylon · "A.GUITAR"
const acoustic_guitar_nylon = note(`<
  ~@13 A@2 ~@2 A@2 B ~ A@2 B ~ A B C@2 D@2 E F D@2 C@2 D@2 G F D@2 B ~ A@2 ~@2 A@2 B ~ A@2 B ~ A H C@2 D@2 I@2 D@2 J C
  D@2 I K D@2 C@2 D@2 I L D@2 M C D@2 I N D@2 ~@8 O P D@2 G Q D R S T D@2 U V D W B ~@8
>`.pickRestart({
  A: "a3 ~@2 a3 ~@2 a3 ~@2 e3 f#3 ~ a3 ~ f#3 e3", B: "a3 ~@15", C: "d4 ~@2 d4 ~@2 d4 ~@2 a3 b3 ~ d4 ~ b3 ~",
  D: "a3 ~@2 a3 ~@2 a3 ~@2 e3 f#3 ~ a3 ~ f#3 ~", E: "e3 ~@2 e3 ~@2 e3 ~@2 c#3 e3 ~ e3 ~ c#3 ~",
  F: "e3 ~@2 e3 ~@2 e3 ~@2 c#3 e3 ~ f#3 ~ e3 ~", G: "e3 ~@2 e3 ~@2 e3 ~@2 b2 c#3 ~ e3 ~ c#3 ~", H: "a3 ~@2 a3 ~@12",
  I: "e3 ~@2 e3 ~@2 e3 ~@2 e3 c#3 ~ e3 ~ c#3 ~", J: "a3 ~@2 a3 ~@2 d4 ~@2 a3 b3 ~ d4 ~ b3 ~",
  K: "e3 ~@2 f#3 ~@2 e3 ~@2 e3 c#3 ~ e3 ~ c#3 ~", L: "e3 ~@2 e3 ~@2 e3 ~@2 e3 f#3 ~ e3 ~ c#3 ~",
  M: "~@3 a3 ~@2 a3 ~@2 a3 b3 ~ d4 ~ b3 ~", N: "e3 ~@2 e3 ~@2 e3 ~@2 e3 c#3 ~ e3 ~ f#3 ~",
  O: "b3 ~ a3 ~@4 b3 ~ b3 a3 ~ d4 ~ b3 ~", P: "d4 ~ b3 ~ d4 ~ b3 d4 ~ a3 b3 ~ d4 ~ b3 ~",
  Q: "e3 ~@2 e3 ~ c#3 e3 ~ e3 ~ c#3 ~ f#3 ~ c#3 ~", R: "a3 ~@2 a3 ~ e3 f#3 ~ a3 ~ f#3 ~ e3 ~ c#3 ~",
  S: "d4 ~@2 d4 ~ a3 b3 ~@3 [a3,b3] ~ d4 ~ b3 ~", T: "d4 ~@2 d4 ~ a3 b3 ~ d4 ~ b3 ~ d4 ~ b3 ~",
  U: "e3 ~@2 [e3,e4] ~@2 [e3,e4] ~@3 b3 ~ e4 ~ b3 ~", V: "e3 ~@2 e4 ~@2 e3 ~@2 e3 ~ e3 f#3 ~ a3 ~",
  W: "a3 ~@2 a3 ~@2 a3 ~@2 e3 f#3 a3 b3 c4 a3 f#3",
})).s("gm_acoustic_guitar_nylon").gain(0.41).pan(1)

// other · brass section · "BRASS"
const brass_section = note(`<
  ~@8 A B@2 ~@6 C D@2 ~@5 E F G@2 H@2 ~@2 I@2 G@2 J@2 ~@2 K L ~@6 M N@2 ~@5 E F G@2 J@2 ~@2 O@2 P@2 J@2 ~@2 Q@2 G@2 J@2
  ~@2 O@2 G@2 J@2 ~@2 Q@2 ~@4 C R@2 S G@2 J@2 ~@2 O@2 G@2 J@2 ~@2 T U V ~@8
>`.pickRestart({
  A: "~@15 [f#4,a4]", B: "[d5@4 c#5@4 a4@4 f#4@2 e5@4 ~@5 [a4,b4] f#4 e4 f#4 a4 ~ c5 f#4 e4, b4 ~@27 b4@2 ~@2]/2",
  C: "~@15 [f#4,a4,b4]", D: "[d5@4 c#5@4 a4@4 f#4@2 e4@5 ~@13]/2", E: "~@13 e4 f#4 ~", F: "a4@3 ~@13",
  G: "[~@9 a4 b4 ~ d5@2 b4 d5@3 ~@14]/2", H: "[~@9 e4 f#4 ~ a4@2 f#4 a4@2 ~@15]/2",
  I: "[~@9 e4 [e4,f#4] ~ a4 ~ b4 c#5@3 ~@14]/2", J: "[~@9 e4 f#4 ~ a4@2 f#4 a4@3 ~@14]/2",
  K: "~@4 [a4,a5] ~@5 [a4,a5] ~ [a4,a5] ~@3", L: "~@7 b4 [f#4,a4] e4 f#4 a4 b4 c5 f#4 e4", M: "~@13 f#4 a4 ~",
  N: "[d5@3 ~ c#5@3 ~ a4@4 f#4@2 e4@4 ~@14]/2", O: "[~@9 e4 f#4 ~ a4@2 b4 c#5@3 ~@14]/2",
  P: "[~@9 a4 b4 ~ d5@2 b4 d5@2 ~@15]/2", Q: "[~@6 b4 [f#4,a4] e4 ~ f#4 ~ a4@2 b4 c#5@4 ~@13]/2",
  R: "[d5@2 c#5@2 a4@2 f#4 e5@2 ~@7]/2", S: "~@7 [a4,b4] f#4 e4 f#4 a4 ~ c5 f#4 e4, ~@6 b4 ~",
  T: "a4 ~@2 a4 ~@2 a4 ~@2 e4 f#4 ~ a4@2 f#4 e4", U: "a4 ~@2 a4 ~@2 a4 ~@2 e4 f#4 ~ b4 c5 a4 f#4", V: "a4 ~@7",
})).s("gm_brass_section").gain(0.5)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@3 A B C D E F G@2 H ~@5 I J@2 ~@7 K@4 L@4 K@4 M@4 N O P@2 ~@2 Q@3 ~ R@4 S@2 T@3 U P@2 V@2 W@4 X@2 Y@2 W@4 Z@2 AA@2
  AB@4 AC@4 AD@2 AE@2 AF AG@3 AH@4 AI@2 AJ@2 W@4 AK@5 ~@8
>`.pickRestart({
  A: "f#4@15 ~", B: "f#4 g#4 a4 b4", C: "e4@15 ~", D: "e4 f#4 g#4 a4", E: "d4@12 ~@3 [f#4,a4]", F: "d5 c#5 a4 f#4",
  G: "[d5@2 c#5@2 a4@2 f#4 e5@9]/2", H: "a4@9 ~@7", I: "~@14 f#4 [a4,b4]", J: "[d5@4 c#5@4 a4@4 f#4 ~ e4@12 ~@6]/2",
  K: "[a3@15 f#3]/4", L: "[e3@7 f#3]/2", M: "[e3@49 ~@15]/4", N: "c#3 ~@15", O: "d3", P: "e3/2",
  Q: "[~@14 f#4 [a4,b4] ~@4 c#5@4 a4@4 f#4@2 e4@8 ~@10, ~@15 d5@5 ~@28]/3", R: "[e3@15 c#3]/4", S: "[~ a2@25 ~@6]/2",
  T: "[a3@11 f#3]/3", U: "a3@3 f#3", V: "[a3@13 d4 e4@2]/2", W: "[[a3,a4]@15 [f#3,f#4]]/4",
  X: "[[e3,e4]@7 [f#3,f#4]]/2", Y: "[[e3,e4]@6 [f#3,f#4] [e3,e4]]/2", Z: "[e3,e4]/2", AA: "[a3@14 d4 e4]/2",
  AB: "[~@3 a3@57 [f#3,f#4]@4, a4@15 ~]/4", AC: "[[e3,e4]@15 a3]/4", AD: "[f#4@5 g#4 a4 b4]/2",
  AE: "[e4@5 f#4 g#4 a4]/2", AF: "d4@13 f#4 a4@2", AG: "[d5@2 c#5@2 a4@2 f#4 e4@15 d4@2]/3",
  AH: "[~@3 a3@27 f#4@2, a4@61 ~@3]/4", AI: "[e4@7 f#4, e3@31 ~]/2", AJ: "[~ e3@5 [f#3,f#4] [e3,e4], e4@25 ~@7]/2",
  AK: "[e3@16 [a3,a4]@17 ~@7, e4@31 ~@49]/5", // A
})).s("gm_string_ensemble_1").gain(0.41)

// other · piano · "A.PIANO"
const piano_2 = note(`<
  ~@13 A B ~@2 B@2 C ~ B@2 ~@2 B C ~@14 B@2 C ~ A B ~@2 B@2 C ~ B@2 D ~ B C ~@6 B@2 ~@6 B E F G H@2 I@2 H@2 F@2 H@2 I@2
  H@2 ~@8 F@2 H@2 I@2 H@2 F@2 H@2 I@2 B J C ~@8
>`.pickRestart({
  A: "a2 ~@2 a2 ~@2 a2 ~@2 e2 f#2 ~ a2 ~ f#2 e2", B: "a2 ~@2 a2 ~@2 a2@2 ~ e2 f#2 ~ a2@2 f#2 e2", C: "a2 ~@7",
  D: "a2 ~@15", E: "a2 ~@2 a2 ~@2 a2 ~@9", F: "d2 ~@2 d2 ~@12", G: "d2 ~@2 d2@2 ~@11", H: "a2 ~@2 a2 ~@12",
  I: "e2 ~@2 e2 ~@12", J: "a2 ~@2 a2 ~@2 a2 ~@2 e2 f#2 ~ b2 c3 a2 f#2",
})).s("gm_piano").gain(0.46)

// other · alto sax
const alto_sax = note("<~@90 A B@2 C D E F@3 ~@25>".pickRestart({
  A: "~@2 b3@7 ~ a3@2 c4@2 b3@2", B: "a3@3 f#3 ~@8 c4@2 b3@2", C: "a3@3 f#3 ~@6 f#3 ~ e3 f#3 a3 ~",
  D: "c4@2 b3@2 a3@2 f#3 e3 ~@6 c#4 ~, ~@2 c4 ~@13", E: "d4@4 c#4@2 ~@2 d4@3 e4 ~@4",
  F: "[~ d4@3 c#4@4 d4@3 ~ g#3 a3 ~@2 d4@3 ~ c#4@3 ~ a3@3 f#3 ~@2 e3@5 ~@13, ~@7 b3 ~@16, ~@15 c#4@2 ~@31]/3",
})).s("gm_alto_sax").gain(0.8)

// bass · synth bass 1 · "SYNTH BASS"
const bass_2 = note(`<
  ~@3 A@2 B@2 C@2 D@2 E A E@2 D@2 E@3 A E@3 D E F A@2 E@2 D@2 E G A@2 E@2 D@2 E@3 A E@2 D@2 E@3 A E@3 D E H A@2 E@2 D@2
  E I A@2 E@2 D@2 E J A@2 E@2 D@2 E K A@2 E@2 D@2 E@2 A@2 B@2 C@2 D@2 A@2 E@2 D@2 E I A@2 E@2 D@2 E@2 L ~@8
>`.pickRestart({
  A: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", B: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~",
  C: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", D: "e1 ~ e2 ~ e1 ~ e2 ~ e1 ~ e2 ~ e1 ~ e2 ~",
  E: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", F: "a1@2 a1@2 b1@2 b1 ~ c2@2 c2@2 c#2@2 c#2@2",
  G: "a1 ~ a1 ~ a1 ~ a1 ~ a1@2 a1 ~ b1 ~ b1 ~", H: "a1 ~ a1 ~ b1@2 b1 ~ c2@2 c2 ~ c#2@2 c#2 ~",
  I: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ b1@2 b1 ~", J: "a1@2 a1@2 b1@2 b1@2 c2@2 c2@2 c#2@2 c#2 ~",
  K: "a1@2 a1 ~ a1 ~ a1 ~ a1@2 a1 ~ b1@2 b1 ~", L: "a1@3 ~@13",
})).s("gm_synth_bass_1").gain(0.51)

// drums · kick
const kick = s("bd").struct("<~@3 [x!4]!112 x ~@8>").gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A@7 B A@15 ~ A@15 B A@7 B A@7 C A@7 B A@7 B A@7 B A@7 B A@7 D A@7 B A@7 B ~@9
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~ x ~@2", D: "~@4 x ~@9 x!2",
})).gain(0.51)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@2 A ~@23 A ~@7 A ~@7 B ~@15 C ~@7 A ~@7 D ~@7 E ~@15 F ~@7 G ~@7 B ~@9
>`.pickRestart({
  A: "~@14 x!2", B: "~@15 x", C: "~@7 x", D: "~@5 x!2 ~", E: "~@12 x!2 ~@2", F: "~@6 x!2", G: "~@12 x ~ x!2",
})).gain(0.31)

// drums · hihat
const hihat = s("hh").struct("<~@2 A B@23 C B@31 D B@56 C ~@8>".pickRestart({
  A: "~@3 x", B: "x!8", C: "x", D: "x!5 ~@3",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<~@26 A ~@7 A ~@7 B ~@15 A ~@7 A ~@7 C ~@7 D ~@7 B ~@7 D ~@7 D ~@7 B ~@9>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@3 x!2 ~@3", D: "~@5 x ~@2",
})).gain(0.31)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@2 A ~@23 B ~@7 B ~@7 C ~@15 D ~@7 B ~@7 E ~@7 F ~@7 G ~@7 H ~@7 F ~@7 A ~@9
>`.pickRestart({
  A: "~@12 x!2 ~@2", B: "~@9 x ~@6", C: "~@9 x ~@2 x ~@3", D: "~@8 x!2 ~ x ~@4", E: "x!2 ~ x!2 ~@11",
  F: "~ x ~@2 x ~@2 x!2 ~@7", G: "~@11 x!2 ~@3", H: "~ x ~@2 x ~@2 x!3 ~@6",
})).gain(0.31)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~ A ~@5 A ~@8
>`.pickRestart({
  A: "x",
})).gain(0.36)

// drums · tambourine
const tambourine = s("tb").struct("<~@91 [x!8]!8 ~@25>").gain(0.31)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@3 A@8 B@15 ~ A ~ A@14 B@15 C A ~ A@54 ~@9>".pickRestart({
  A: "~@14 x!2", B: "~ x ~ x ~ x ~ x", C: "x",
})).gain(1.56)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@3 A@8 ~@16 A@3 B A@2 B@2 A@2 B A@2 B A B ~@16 C@6 D C B A@3 B@2 A B A@5 B@3 A@2 B@4 A D E ~@7 A B A@13 B E ~@8
>`.pickRestart({
  A: "x ~@2 x!2 ~@3 x!2 ~ x!2 ~@3", B: "x ~@2 x!2 ~@3 x!2 ~ x!2 ~ x!2", C: "x!2 ~ x!2 ~@3 x ~@2 x!2 ~@3",
  D: "x!2 ~ x!2 ~@3 x!2 ~ x!2 ~@3", E: "x",
})).gain(0.31)

stack(
  bass, pad_warm, piano, marimba, acoustic_guitar_nylon, brass_section, string_ensemble_1, piano_2, alto_sax, bass_2,
  kick, snare, low_tom, hihat, mid_tom, high_tom, crash, tambourine, cabasa, shaker
)

More by Engelbert Humperdinck