Strudelify

Domino Dancing

Pet Shop Boys

KeyA minorTempo110 bpm
0:00/0:00
// Domino Dancing — Pet Shop Boys
// 110 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H I F I F I F I F E F G H A B C D E F G H I F I F I F
  I F J K J L M N O P A B C Q I F I F A B C D E F G H I R S T I R S T ~@4 I R S T I R S T I R S T I R S T I R S T ~@3
>`.pickRestart({
  A: "a2@2 ~ a2 ~ a2 f2@2 f2@2 ~@4 f2!2", B: "g2 ~ g2!2 ~ g2 e2 ~ a2@2 ~@4 e2 g2",
  C: "a2@2 ~ a2 ~ a2 f2 ~ f2@2 ~@4 f2!2", D: "g2 ~ g2!2 ~ g2 e2 ~ a2@2 ~@4 f2 g2",
  E: "d2 ~ d2!2 ~ d2 d2@2 g2@3 ~@3 g2 f2", F: "e2 ~ e2!2 ~ e2!2 ~ a2 ~ a2 ~ g2@2 ~@2",
  G: "d2 ~ d2!2 ~ d2 d2@2 g2@2 ~@4 g2 f2", H: "e2 ~ e2!2 ~ e2!2 ~ a2 ~ g2@2 a2 ~@3",
  I: "f2 ~ f2!2 ~ f2 f2@2 g2@3 ~@3 g2 f2", J: "c3@2 ~ c3 ~ c3 g2@2 c3@2 ~@5 g2",
  K: "a2@2 ~ a2 ~ a2 d2@2 a2@2 ~@4 g2 a2", L: "a2@2 ~ a2 ~ a2 d2@2 a2@4 b2@2 c3@2",
  M: "f2@2 ~ f2 ~ f2 c2@2 f2@4 ~@2 c2 f2", N: "g2@2 ~ g2 ~ g2 d2@2 g2@5 ~ g2 a2", O: "f2@2 ~ f2 ~ f2 c2@2 f2@5 ~ c2 f2",
  P: "g2@2 ~ g2@2 ~ g2@2 g2@2 d2@2 e2@2 g2@2", Q: "g2 ~ g2!2 ~ g2 e2 ~ a2@2 ~@4 g2 a2",
  R: "e2 ~ e2!2 ~ e2!2 ~ a2 ~ a2 ~ g2@4", S: "f2 ~ f2!2 ~ f2!2 ~ g2@3 ~@3 g2 f2",
  T: "e2@2 e2!2 ~ e2!2 ~ a2 ~ g2@2 a2@2 ~@2",
})).s("gm_acoustic_bass").gain(0.44)

// other · piano · "A.PIANO 1"
const piano = note("<~@25 A@16 ~@4 A@5 B A@10 ~@8 C D C D A@44 ~@3>".pickRestart({
  A: "~@4 a6 ~@7 a6 ~@3", B: "e4 ~ [b4,e5] ~ [e4,a6] [b4,e5] ~ a4 ~ [g5,c6] ~ a4 [g5,c6]@2 [e5,a5] ~, ~@12 a6 ~@3",
  C: "~ [a4,a5] [c5,c6] [e5,e6] ~ [c5,c6] ~ [a4,a5] ~@8", D: "~ [g4,g5] [b4,b5] [d5,d6] ~ [b4,b5] ~ [c5,c6] ~@8",
})).s("gm_piano").gain(0.33)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<~@41 A B C D ~@19 E F G@2 H ~@51>".pickRestart({
  A: "~@2 e4!2 ~@2 e4 ~ e4 c4@2 ~ c4@4", B: "~@2 e4 e4@2 ~ d4@2 e4@8", C: "~@2 e4!2 ~@2 e4 ~ e4 c4@2 ~ c4@2 e4@2",
  D: "~@2 e4 e4@2 ~ d4@2 e4@5 ~@3", E: "~@9 [d4,g4] b4 c5 b4 a4 g4 a4", F: "f4@6 ~@3 d5 c5 b4 a4 g4 c4 d4",
  G: "[b3@8 ~ b3 c4 d4 c4 b3 g3 a3@6 ~@4 a3 c4 e4 a4@3 c5]/2", H: "~@9 e5 c5 d5 a4 c5 g4 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.35)

// other · trumpet
const trumpet = note(`<
  ~@107
  [~ g4 a4 ~ b4 c5 ~ d5 ~ e5 ~ g5 ~ f#5 f5 g5]
  [e5@10 ~@3 d#5 e5 ~]
  [a5 ~ b5 c6 ~ c6 ~ b5 c6 ~ b5 a5 ~ a5 ~ g5]
  [a5 g5 ~ e5@7 ~@6]
  [~ f5 ~ f5!2 ~ e5 ~@9]
  [~ e5 ~ e5!2 ~ e5@10]
  ~@7
>`).s("gm_trumpet").gain(0.42)

// chords · pad sweep · "SWEEP PAD"
const pad_sweep = note(`<
  ~ A B@2 C@6 B@2 D@5 A B@2 C@6 B@2 D@5 E@8 F@5 B@2 D@5 E@8 G H G I@2 J K L ~@4 M@4 A B@2 D@5 N@8 E@24 ~@3
>`.pickRestart({
  A: "[a4,c5,e5]", B: "[[g4,b4,d5] [a4,c5,e5]@3]/2",
  C: "[[g4,b4,d5] e5 f4 [g4,b4,d5]@2 e5 f4 [g4,b4,d5]@2 [a4,c5,e5]@3, ~ [a4,c5]@2 ~@2 [a4,c5]@2 ~@5]/6", // G Am
  D: "[[g4,b4,d5] e5 f4 [g4,b4,d5]@2 e5 f4 [g4,b4,d5]@2 [a4,c5,e5], ~ [a4,c5]@2 ~@2 [a4,c5]@2 ~@3]/5", // G Am
  E: "[[a4,c5,e5] [g4,b4,d5]@2 [a4,c5,e5]@2 [g4,b4,d5]@2 e4 e5 [g4,b4,d5]@2 [a4,c5,e5]@2 [g4,b4,d5]@2 [e4,a4,c5], ~@7 [a4,c5]@2 ~@7]/8", // Am G Am G Am G Am
  F: "[[f4,a4,c5] [g4,b4,d5]@2 e5 f4 [g4,b4,d5]@2 [a4,c5,e5]@3, ~@3 [a4,c5]@2 ~@5]/5", G: "[b4,c5,e5,g5]",
  H: "[a4,d5,f#5]", I: "[[d5,f#5] [c5,f5], a4]/2", J: "[b4,d5,g5]", K: "[a4,c5,f5]", L: "[g4,b4,d5]@3 ~",
  M: "[[a4,c5,e5] [g4,b4,d5]@2 [a4,c5,e5]@2 [g4,b4,d5]@2 [e4,a4,c5]]/4", // Am G Am G Am
  N: "[[a4,c5,e5] ~@7 [g4,b4,d5]@16 [a4,c5,e5]@16 [g4,b4,d5]@16 e4@8 e5@8 [g4,b4,d5]@16 [a4,c5,e5]@16 [g4,b4,d5]@16 [e4,a4,c5]@8, ~@7 [a4,c5]@2 ~@7]/8", // Am G Am G Am G Am
})).s("gm_pad_sweep").gain(0.21)

// other · music box
const music_box = note(`<
  ~ A B A B A B A B A B A B A B A B ~@16 A B A B A B A B ~@12 A B A B A B A B ~@12 A B A B ~@8 A B A B A B A B ~@8 A B A
  B A B A B A B A B A B A B A B C
>`.pickRestart({
  A: "~ a4 e5 ~ d5 ~ e5 a4 ~ a4 e5 ~ a5 ~ e5 ~", B: "~ a4 e5 ~ d5 ~ e5 a4 ~ a4 e5 ~ b4 ~ c5 ~",
  C: "~ a4 e5 ~ d5 ~ e5 a4 ~ a4 e5 ~ a5 ~@3",
})).s("gm_music_box").gain(0.21)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@9 A B C D E F G H ~@3 I ~ J ~@5 I ~ J ~ K L ~ L ~ L ~ L M ~@3 M ~@3 I ~ J ~ K L ~ L ~ L ~ L ~@12 M L N ~@9 O P ~ P ~
  P ~ P ~@5 Q ~@2 M P R P S P ~@14
>`.pickRestart({
  A: "~@10 [a4,c5,a5] ~ [a4,c5,a5]@2 [b4,d5,b5] [a4,c5,a5]", B: "~@10 [e4,e5] [g4,g5] [c5,c6]@2 [g4,g5] [a4,a5]",
  C: "~@10 a5 [g4,g5]@3 a5 ~", D: "~@2 [g4,g5] [a4,a5] ~ [a4,a5] ~ [c5,c6]@2 [b4,b5] [a4,a5] ~@5",
  E: "[a4,a5]@2 ~@8 [a4,a5] ~ [a4,a5]@2 [g4,g5] [e4,e5]", F: "~@6 b4 c5",
  G: "[a4,c5,a5]@2 ~@8 [a4,c5,a5] [g4,b4,g5]@3 [a4,c5,a5] ~", H: "~@8 g4 ~@3 a4@2 ~ a4", I: "~@12 d4@2 e4 c4",
  J: "~@12 c4@3 a3", K: "[g4,d5,g5]@5 ~@3 [a4,e5,a5]@5 ~@3", L: "~@12 [a4,a5] ~@3",
  M: "~@8 [g4,g5] ~@3 [a4,a5]@2 ~ [a4,a5]", N: "[e3,e4]@3 ~ [g3,g4]@3 ~", O: "[g4,d5,g5]@3 ~ [a4,e5,a5]@3 ~",
  P: "~@12 [a4,a5]!2 ~@2", Q: "~@4 [a4,a5] ~@7 [a4,a5]!2 ~@2", R: "~@11 [a4,a5] [c5,c6] [b4,b5] [a4,a5] ~",
  S: "~@6 [e4,e5] [g4,g5] [c5,c6]@2 [b4,b5] [a4,a5]@2 [b4,b5] [a4,a5] ~", // E G C B A B A
})).s("gm_brass_section").gain(0.36)

// other · orchestra hit · "ORCH.HIT"
const orchestra_hit = note(`<
  ~ A B A B A B A B A B A B A B A B A ~@15 A B A B A B A ~@13 A B A B A B A ~@13 A B A C ~@8 A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A ~@2
>`.pickRestart({
  A: "[a3,a4] ~@15", B: "~@14 [e3,e4] ~", C: "~@14 e4 ~",
})).s("gm_orchestra_hit").gain(0.31)

// drums · kick
const kick = s("bd").struct("<~ A@16 B@16 C A C A C A C A B@12 A@8 D@8 A@8 B@8 A@8 ~@4 A@20 E ~@2>".pickRestart({
  A: "x ~@2 x ~@2 x ~ x ~@7", B: "x ~@2 x!2 ~@3", C: "x ~@2 x ~@4 x ~@7", D: "x!2", E: "x",
})).gain(0.63)

// drums · rim
const rim = s("rim").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C B C B C B C B C B C B C B C D A D A D A D A E F E F G E G E G E G E G H G H G H
  G H@9 G I G I B I B I H I H I B J B J B K B K B K B K ~@8 B K B K B K B K B K B K B K B K ~@3
>`.pickRestart({
  A: "~@14 x!2", B: "x ~@2 x!2 ~@3", C: "x ~@5 x ~ x ~@5 x!2", D: "~ x", E: "x ~@13 x!2", F: "~@7 x", G: "x ~@6 x",
  H: "x", I: "x ~@14 x", J: "x ~@6 x ~@7 x", K: "x ~@5 x ~@7 x!2",
})).gain(0.49)

// drums · clap
const clap = s("cp").struct("<~@77 [~ x ~ x]!3 [~ x ~@2] ~@39>").gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@33 B A B A B A B A@13 C A C A C A C A@13 D A D ~@3 E F@3 G A@8 H ~ H ~ H ~ H I J A J A J A J A J A J A J A J A ~@3
>`.pickRestart({
  A: "x!16", B: "x!14 ~ x", C: "x!6 ~ x!9", D: "x!10 ~ x!5", E: "~@3 x", F: "~ x ~ x", G: "~@4 x ~@3 x!2 ~@2 x!3 ~",
  H: "~ x ~@2", I: "~@4 x ~@7 x ~ x!2", J: "x!10 ~ x!3 ~ x",
})).gain(0.28)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@77 [x!16]!3 [x!12 ~ x!3] [x!4 ~ x!7 ~ x!3]!3 [x!4 ~ x!3 ~@2 x!2 ~@3 x] ~@35>")
  .gain(0.14)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@77 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@3
>`.pickRestart({
  A: "~@6 x!2", B: "~@5 x!2 ~",
})).gain(0.28)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~ A B A B A B A B A B A B A B A B C@16 B@8 D@13 B D B D B D B D@9 B D B D@4 C@8 D E D E D E D E ~@4 F D ~@2 F D ~@2 F
  D ~@2 F D ~@2 F D ~@5
>`.pickRestart({
  A: "~ x ~@7 x!3 ~@4", B: "~@9 x!3 ~@4", C: "~@8 x!2 ~ x ~@4", D: "~@9 x ~ x ~@4", E: "~@10 x!2 ~@4",
  F: "x!2 ~ x ~@9 x ~ x",
})).gain(0.35)

// drums · congas
const congas = s("conga:13").struct("<~@9 [~ x ~@3 x ~@2]!8 ~@28 [~ x ~@3 x ~@2]!48 ~@6 [~ x ~@3 x ~@2]!18 ~@3>")
  .gain(1.8)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@9
  [~@5 x!3 ~@6 x!2]!8
  ~@28
  [~@5 x!3 ~@6 x!2]!48
  ~@6
  [~@5 x!3 ~@6 x!2]!18
  ~@3
>`).gain(1.8)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@85 A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B ~@3
>`.pickRestart({
  A: "~@2 x ~ x ~ x!3 ~@5 x!2", B: "~@6 x!2 ~@6 x!2", C: "~@2 x!3 ~ x!3 ~@5 x!2",
})).gain(0.36)

stack(
  bass, piano, acoustic_guitar_nylon, trumpet, pad_sweep, music_box, brass_section, orchestra_hit, kick, rim, clap,
  hihat, hihat_soft, open_hat, tambourine, cowbell, congas, congas_2, cabasa
)

More by Pet Shop Boys