Strudelify

Mony Mony

Billy Idol

KeyE majorTempo145 bpm
0:00/0:00
// Mony Mony — IDOL BILLY
// 145 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(145/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A@21 B C D E F@2 A@4 G@3 C D E F@2 A@6 H A@3 H A@3 H A@2 B I D E F@2 J@4 K@4 D E F@2 L ~@3 M N O P O P Q P M N O P O P
  Q R S E F@2 ~ T J@4 K@4 D E F U J@4 K@4 D E F@2 V@2 W
>`.pickRestart({
  A: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", B: "e1 ~ e1 ~ f#1 ~ f#1 ~ g1 ~ g1 ~ g#1 ~ g#1 ~",
  C: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ b1@2", D: "b1 ~ a1@2 a#1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  E: "b1 ~ a1 ~ a#1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", F: "b1 ~ a1 ~ a#1 ~ b1 ~ b1 ~ a1 ~ a#1 ~ b1 ~",
  G: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", H: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ a1 ~ a1 ~ a1 ~",
  I: "a1 ~ a1 ~ g1 ~ g1 ~ f#1 ~ f#1 ~ e1 ~ e1@2", J: "e1!2 e2!2 d2!2 e2!2", K: "a1!2 a2!2 g2!2 a2!2", L: "e1@5 ~@11",
  M: "e1@2 ~ e2 ~ d2 ~ b1", N: "a1@3 ~@13", O: "e1@3 ~@3 e2@2 ~@2 d2@2 ~@2 b1@2", P: "a1 ~@7", Q: "e1 ~@2 e2 ~ d2 ~ b1",
  R: "a1 ~@4 f#1 a1 a#1", S: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", T: "~@4 e1@3 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  U: "b1 ~ a1 ~ a#1 ~ b1 ~ b1 ~ a1 ~ a#1 ~@3", V: "[e1@2 ~@4 e1@2 ~@4 e1@7 e1@13]/2", W: "e1@13 ~@3",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@7 A@2 ~ B C@2 ~ B C@2 ~ D E@2 F@6 G@4 H@4 I@4 J ~@2 K@2 ~ L E@2 ~ M N@2 ~ O N@2 P Q R@4 S G@3 H@4 T@4 U ~@19 V@4 W@2
  X G@3 H@4 Y@4 G@4 H@4 Z@4 AA@3
>`.pickRestart({
  A: "[~@14 [e5,g#5,b5]@5 ~@13]/2", B: "[e5,g#5,b5]@4 ~@6 [e5,b5] ~ [e5,a5,c#6]@4, ~@5 g#5 ~@2",
  C: "[[e5,g#5,b5]@4 ~@10 [e5,g#5,b5]@5 ~@13]/2", D: "[e5,g#5,b5]@5 ~@5 [e5,g#5,b5] ~ [e5,a5,c#6]@4",
  E: "[[e5,g#5,b5]@2 ~@5 [e5,g#5,b5]@3 ~@6]/2", // E
  F: "[~@8 [g2,a2,b2,c3] [a2,d3,e3,f#3,g3,a3] [e3,b3,c4] [d4,e4,f#4] ~ [b4,c5] [d5,e5,f#5] [d5,g5] e5@17 ~ a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@9 ~, ~@12 [g4,a4]@2 ~ [a5,c#6]@19 ~@62, ~@16 b5 ~@79]/6", // Cmaj7 D Cmaj7 D Cmaj7 D G5 B …
  G: "[e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~", // E
  H: "[e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~ [e5,a5,c#6] ~", // A
  I: "[~ a5 a#5 [b5,d#6,f#6]@6 a5 a#5 [b5,d#6,f#6]@6 a5 a#5 [b5,d#6,f#6]@6 a5 a#5 [b5,d#6,f#6]@4 ~]/4", // B
  J: "[e5,g#5,b5]@3 [d5,e5,f#5,g5,g#5,a5] [f#4,g4,a4,b4,c5] [g3,a3,b3,c4,d4,e4] [c3,d3,e3,f#3] b2 ~@8", // E D F#dim Cmaj7 D7
  K: "[~@7 [e5,g#5,b5]@3 ~@6]/2", L: "[e5,g#5,b5]@4 ~@6 [e5,g#5,b5] ~ [e5,a5,c#6]@3 ~",
  M: "[e5,g#5,b5]@5 ~@5 [e5,g#5,b5] ~ [e5,a5,c#6]@4, ~@12 g#5 ~@3", N: "[[e5,g#5,b5]@5 ~@9 [e5,g#5,b5]@6 ~@12]/2",
  O: "[e5,g#5,b5]@5 ~@5 [e5,g#5,b5] ~ [e5,a5,c#6]@3 ~, ~@12 g#5 ~@3", // E A
  P: "~@8 [g2,a2,b2] [c3,d3,e3] [d3,e3,f#3,g3,a3] [b3,c4,d4] [e4,f#4,g4] [e4,a4,b4] ~ [e5,f#5,g5], ~@7 [c5,d5]", // G C D Bm Em Esus4 Em Csus2
  Q: "b5 c6 ~@14, [e5,a5,c#6]", // A
  R: "[~@2 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@7 [d3,e3] [f#3,g3,a3,b3,c4,d4] [e4,f#4,g4,a4,b4]]/4", // B Dsus2 D7 Em
  S: "[a4,c5,d5,e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~", // E7 E
  T: "[~@2 a5@2 a#5@2 [d#6,e6] d#6@11 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@9 [e3,f#3,g3,a3,b3], ~@6 [b5,f#6]@13 ~@45, ~@7 f6 ~@56]/4", // Emaj7 B Em B5
  U: "[c4,d4,e4,f#4] ~@2 [c6,d6,e6,f#6,g6,a6] [f#5,g5,a5,b5,c6,e6] [c5,d5,e5,a5] [g4,a4,b4,e5] [e4,f#4] [c4,d4] [g3,a3,b3] [d3,e3,f#3] [a2,b2,c3] ~@4, [e6,g#6,b6]@3 ~@13", // D7 F#m7b5 Am Em Esus2 Csus2 G D …
  V: "[~@2 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@7 [g3,a3,b3] [c4,d4,e4,f#4] [g4,a4,b4]]/4", // B G D7 G
  W: "[[e5,g#5,b5]@2 [a2,c3] [b2,c3,d3,e3] [f#3,g3,a3,b3,c4] [d4,e4,f#4] [g4,a4,b4,c5,d5] [a4,a#6,c#7,d7] ~@13 [a6,c7,d7] [f#6,g6] [d6,e6] [a5,b5,c6] [f#5,g5] [d5,e5] [b4,c5,e5] [f#4,g4,a4] [c4,d4,e4] [g3,a3,b3] [d3,e3,f#3], c5 ~@6 [e6,e7]@15 ~@10, ~@8 b6@15 ~@9]/2", // E Am Cmaj7 F#dim D G Dmaj7 D7 …
  X: "[b2,c3,e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~ [e5,g#5,b5] ~", // E
  Y: "[~@2 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@7 ~@3]/4", // B
  Z: "[~@2 a5@2 a#5@2 d#6 d#6@11 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@12 a5@2 a#5@2 [b5,d#6,f#6]@6 [e3,f#3,g3,a3,b3] [c4,d4,e4,f#4] [g4,a4,b4] c5, ~@3 [b5,f#6]@6 ~@23]/4", // B Em D7 G B5
  AA: "[[e5,g#5,b5]@3 [f#3,g3,a3,b3] [c4,d4,e4] [d4,f#4,g4,a4] [e4,a4,b4,c5,d5] [d5,e5] ~@3 e3 ~ [a6,c#7]@6 [b6,d7]@12 ~ b6@2 c7 [g6,a6] [c6,d6,e6,f#6] [f#5,g5,a5,b5] [b4,c5,d5,e5] [e4,f#4,g4,a4] [a3,b3,c4,d4] [b2,c3,d3,e3,f#3,g3] [g2,a2,e3] ~@5, ~@7 [e6,g#6,b6]@5 e6@23 ~@13, ~@19 [a#6,e7] ~@11 d7@3 ~@14, ~@32 a#6 ~@15]/3", // E Gmaj7 C D Am Dsus2 A Bm …
})).s("gm_rock_organ").gain(0.52).pan(0.7)

// drums · kick
const kick = s("bd").struct("<[x!2]!97 [x!8] ~ [~@3 x ~@4 x ~@7] [x!2]!11 [x!8] [x!2]!13 ~@2>").gain(0.6)

// drums · snare
const snare = s("sd").struct(`<
  A B A C A B A D A B A E A B A B A@3 F A G A G@2 A H G@7 I G@2 A@3 B A J A B A E A B A C A K L M A G A G@2 A C G@7 I
  G@2 A@2 G@3 N G@15 O G@3 P ~ Q G@3 R G@3 S G@2 A@2 G@7 I G@2 A@2 T U V
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@2 x ~@2 x!3", D: "~@2 x ~@5 x ~@2 x!2 ~ x ~", E: "~@2 x!2 ~@2 x!2",
  F: "x!3 ~", G: "~@2 x!2 ~@2 x ~", H: "~@2 x!2 ~ x!3", I: "x!4", J: "~ x!2 ~ x ~ x!2", K: "~@4 x ~@7 x ~@2 x",
  L: "x!2 ~ x", M: "x ~@3 x ~@2 x", N: "~ x!2 ~@3 x ~", O: "x!2 ~ x!2 ~ x ~ x ~@7", P: "~ x!7",
  Q: "~@4 x ~@2 x!2 ~ x ~ x!2 ~@2", R: "~@2 x!2 ~@4", S: "x ~@3 x ~ x ~ x ~@2 x!2 ~ x ~", T: "x ~@2 x ~@2 x ~",
  U: "~@3 x ~@12", V: "x",
})).gain(0.54)

// drums · hihat
const hihat = s("hh").struct(`<
  A@7 B A@44 C D E A@10 F A@17 G A@9 H A@4 ~ I A G A@5 J A@7 F A@3 G A@4 K L M
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", C: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", D: "x!3 ~ x!4",
  E: "x ~@3 x ~@2 x", F: "x!4 ~@2 x ~", G: "x!7 ~", H: "x!2 ~ x!2 ~ x ~ x ~@7", I: "~@4 x ~@2 x!2 ~ x ~ x!2 ~@2",
  J: "x ~ x ~ x ~ x ~ x ~@2 x!2 ~ x ~", K: "x ~@2 x ~@2 x ~", L: "~@3 x ~@12", M: "x",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@17 B ~@34 C ~@22 B ~@15 B ~@5 A ~@3 B ~@23>".pickRestart({
  A: "~@15 x", B: "~@7 x", C: "~@3 x",
})).gain(0.48)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 A ~@10 B ~@23 C ~@10 B ~@11 D ~@15 A ~@9 E ~@11 B ~@11>".pickRestart({
  A: "~@3 x", B: "~@6 x!2", C: "~@5 x ~@2", D: "~ x", E: "~@5 x!2 ~",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  A ~@6 B ~@12 A ~@2 C@2 D E A ~@3 A ~@3 C@2 D@2 ~@3 B ~@12 A B A C@2 D@2 A ~@3 A ~@3 C@2 D@2 A ~@2 B A ~ A B A B A ~@9
  F C@2 G ~@2 A ~@2 A@2 ~@2 A C@2 D@2 A ~@3 A ~@3 C@2 D@2 H I A
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~@3 x ~@4", D: "~ x ~ x", E: "~@3 x", F: "x ~@2 x ~@4", G: "~ x!7", H: "x ~@2 x ~@2 x ~",
  I: "~@3 x ~@12",
})).gain(0.48)

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

stack(bass, rock_organ, kick, snare, hihat, low_tom, open_hat, mid_tom, crash, high_tom)

More by Billy Idol