Strudelify
Mony Mony cover art

Mony Mony

Mony Mony

James

KeyE majorTempo133 bpm
0:00/0:00
// Mony Mony — James
// 133 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(133/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@20 A@3 B C D C D E@2 F G A@3 B H ~ H ~ I H@2 ~ I H@2 ~ I H@2 ~ J A@3 B C D C D E@2 F G A@3 B ~@10 A@3 B C D C D E@2
  F G A@3 B H
>`.pickRestart({
  A: "e2!8", B: "e2@2 e2 ~ e2 ~ e2 ~ e2@2 e1 ~ e1 ~ e1 ~", C: "a1 ~ a1@2 a2 ~ a2@2 g2 ~ g2@2 d2 ~ d2@2",
  D: "a1 ~ a1 ~ a2 ~ a2@2 g2 ~ g2@2 e2 ~ e2 ~", E: "d2 ~ d2@2 d3 ~ d3@2 c3 ~ c3@2 a2 ~ a2@2",
  F: "d2 ~ d2@2 d3 ~ d3@2 c3 ~ c3 ~ a2 ~ a2@2", G: "d2 ~ d2@2 d3 ~ d3 ~ c3 ~ c3 ~ a2 ~ a2 ~", H: "a1 ~@7",
  I: "a1 ~@5 d2@2", J: "d2@3 ~",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@5 A ~ B A@2 ~ B A@2 ~ B A@2 ~ C D@4 E@4 F@3 G D@4 ~@2 H ~ I H@2 ~ I H@2 ~ J H@2 ~ K D@4 E@4 F@3 G D@4 L M ~@8 D@4
  E@4 F@3 G D@4 N
>`.pickRestart({
  A: "[c#4,e4,a4] ~@7", B: "[c#4,e4,a4] ~@5 [d4,f#4,a4] ~", C: "[d3,a3,d4,f#4,a4]@13 ~@3",
  D: "[[e3,g#3,b3,e4,g#4,b4]@63 ~]/4", // E
  E: "[~@4 [a4,c#5,e5]@2 e4@2 [g4,c#5,e5]@2 ~@4 e4 ~@5 [a4,c#5,e5]@2 e4@2 [g4,c#5,e5]@2 e4@2 [a4,c#5,e5] ~ a4@2 e4 ~ e4@2 [a4,c#5,e5]@2 ~ c#4 [g4,c#5,e5]@2 ~@2 [a4,c#5,e5] ~ [a4,c#5]@2 ~@2 g4 ~ [a4,c#5,e5]@2 e4@2 [g4,c#5,e5]@2 e4@2 [a4,c#5,e5]@2 d4@2, ~@2 a3@7 ~ a3@5 ~@3 a3@7 ~@7 a3@6 e4@2 ~@2 a3@4 ~@2 [a3,e4]@5 ~ a3@6 ~@2 c4 ~, ~@12 [a4,c#5,e5]@7 ~@11 [c#5,e5]@5 ~@11 e5@5 ~@13]/4", // A C#dim A C#dim A C#dim A C#dim …
  F: "[[d4,a4]@4 [d5,f#5,a5]@2 [d4,a4]@2 [c5,f#5,a5]@2 [d4,a4]@2 [d5,f#5,a5] ~ a4@3 ~ a4@2 [d5,f#5,a5]@2 [d4,a4]@2 [c5,f#5,a5]@2 [d4,a4] ~ [d5,f#5,a5] ~ e4 ~@3 [d5,f#5,a5] ~ [d5,f#5,a5]@2 [d4,a4]@2 [c5,f#5,a5]@2 [d4,a4]@2 [f#5,a5] ~ [d4,a4] ~, ~@14 d4@7 ~@9 [d4,a4]@8 f#4 ~@5 d5@2 ~@2]/3", // D5 D D5 F#dim D5 D D5 F#dim …
  G: "[d4,a4]@4 [d5,f#5,a5]@2 [d4,a4]@2 [c5,f#5,a5]@2 [d4,a4]@2 [d5,f#5,a5] ~@3", H: "[c#5,e5,a5] ~@7",
  I: "[c#5,e5] ~@11 [d5,f#5,a5]@2 ~@2, a5 ~@7", J: "[e5,a5] ~@5 [d5,f#5,a5] ~, c#5 ~@15", K: "[d5,f#5,a5] ~@7",
  L: "a2@3 ~@3 a3@2 ~@2 g3@2 ~@2 e3@2", M: "d3@11 ~@5", N: "[a3,e4,g4,c#5,e5]@3 ~@13",
})).s("gm_piano").gain(0.57)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@5 A ~ B A@2 ~ C A@2 ~ B A@2 ~ D E F G H I@4 J@3 K E F G H ~@2 A ~ B A@2 ~ B A@2 ~ B A@2 ~ L E F G H I@4 J@3 K E F G
  H M N ~@8 E F G H I@4 J@3 K E F G H O
>`.pickRestart({
  A: "[c#5,e5,a5] ~@7", B: "[c#5,e5,a5] ~@5 [d5,f#5,a5] ~", C: "[c#5,e5] ~@5 [d5,f#5,a5] ~",
  D: "[d4,a4,d5,f#5,a5]@13 ~@3", E: "~@2 [d3,d4,f#4]@2 [d#3,d#4] ~ [e3,e4]@6 ~@4, ~@2 g4 g#4@5",
  F: "~@2 [d3,d4] ~ [d#3,d#4] ~ [e3,e4,g#4]@7 ~@3, ~ f#4 g4 ~@5", G: "~@2 [e3,e4,g#4] ~@3 [e3,g#4] ~, ~@12 e4 ~@3",
  H: "~@4 [e3,e4] ~@7 [e3,e4] ~@3, ~@2 g#4 ~@3 g#4 ~", // E
  I: "[~@4 [a4,c#5,e5]@2 e4@2 [g4,c#5,e5]@2 ~@4 e4 ~@5 [a4,c#5,e5]@2 e4@2 [g4,c#5,e5]@2 e4@2 [a4,c#5,e5] ~ a4@2 e4 ~ e4@2 [a4,c#5,e5]@2 ~ c#4 [g4,c#5,e5]@2 ~@2 [a4,c#5,e5] ~ [a4,c#5]@2 ~@2 g4 ~ [a4,c#5,e5]@2 e4@2 [g4,c#5,e5]@2 e4@2 [a4,c#5,e5]@2 d4@2, ~@2 a3@7 ~ a3@5 ~@3 a3@7 ~@7 a3@6 e4@2 ~@2 a3@4 ~@2 [a3,e4]@5 ~ a3@6 ~@2 c4 ~, ~@12 [a4,c#5,e5]@7 ~@11 [c#5,e5]@5 ~@11 e5@5 ~@13]/4", // A C#dim A C#dim A C#dim A C#dim …
  J: "[[d4,a4]@4 [d5,f#5,a5]@2 [d4,a4]@2 [c5,f#5,a5]@2 [d4,a4]@2 [d5,f#5,a5] ~ a4@3 ~ a4@2 [d5,f#5,a5]@2 [d4,a4]@2 [c5,f#5,a5]@2 [d4,a4] ~ [d5,f#5,a5] ~ e4 ~@3 [d5,f#5,a5] ~ [d5,f#5,a5]@2 [d4,a4]@2 [c5,f#5,a5]@2 [d4,a4]@2 [f#5,a5] ~ [d4,a4] ~, ~@14 d4@7 ~@9 [d4,a4]@8 f#4 ~@5 d5@2 ~@2]/3", // D5 D D5 F#dim D5 D D5 F#dim …
  K: "[d4,a4]@4 [d5,f#5,a5]@2 [d4,a4]@2 [c5,f#5,a5]@2 [d4,a4]@2 [d5,f#5,a5] ~@3", L: "[d5,f#5,a5] ~@7",
  M: "a2@3 ~@3 a3@2 ~@2 g3@2 ~@2 e3@2", N: "d3@11 ~@5", O: "[a3,e4,g4,c#5,e5]@3 ~@13",
})).s("gm_epiano2").gain(0.53)

// chords · reed organ
const reed_organ = note(`<
  ~@20 A@4 B@4 C@4 A@4 ~@2 D ~ E D@2 ~ E D@2 ~ F D@2 ~ G A@4 B@4 C@4 A@4 ~@10 A@4 B@4 C@4 A@4 ~
>`.pickRestart({
  A: "[[e4,g#4,b4,e5,g#5,b5,e6,g#6,b6]@63 ~]/4", B: "[[a4,e5,g5,c#6,e6]@31 ~]/4", C: "[[d5,a5,c6,f#6,a6]@61 ~@3]/4",
  D: "[c#5,e5,a5] ~@7", E: "[c#5,e5] ~@11 [d5,f#5,a5]@2 ~@2, a5 ~@7", F: "[e5,a5] ~@5 [d5,f#5,a5] ~, c#5 ~@15",
  G: "[d5,f#5,a5] ~@7", // D
})).s("gm_reed_organ").gain(0.29)

// drums · kick
const kick = s("bd").struct("<~ A@19 B C@3 B D B@7 C@3 A@17 B C@2 E B@9 C@3 F@10 B C@3 B@3 G B@5 C@3 H>".pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "x!2 ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x", D: "x!2 ~ x!2 ~@2 x", E: "~ x!2 ~@2 x ~ x",
  F: "x ~@3 x!2 ~@2", G: "x!2 ~ x ~@3 x", H: "x",
})).gain(0.74)

// drums · snare
const snare = s("sd").struct(`<
  A B@18 C D E@2 F B@8 D E@2 F B@16 C D E@2 F B@8 D E@2 F G@10 D E@2 F B@8 D E@2 H I
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@2 x!3", D: "~ x!3", E: "x!4", F: "x ~@3 x ~@3 x ~@3 x!4",
  G: "~@4 x ~@2 x ~ x ~@2 x ~@3", H: "x ~@3 x ~@3 x ~@3 x!2 ~ x", I: "x",
})).gain(0.74)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!55 [~@3 x] [~ x ~ x]!38 ~>").gain(0.74)

// drums · low tom
const low_tom = s("lt").struct("<A ~@18 B C D@3 ~@8 C D@3 ~@16 B C D@3 ~@8 C D@3 ~@10 C D@3 ~@8 C D@3 ~>".pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "~ x!3", D: "x!4",
})).gain(0.74)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A@6 B A B A B A B A@5 B A B A B A B A B A B A B A B A@6 B A B A B A B A@5 B A B
  A B A B A B A@5 B A C A B A B A@4 ~
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!6 ~@2",
})).gain(0.74)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@13 x ~@2] ~@18 [~@5 x ~@2] ~@32 [~@5 x ~@2] ~@43>").gain(0.74)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@20 A ~ A ~ A ~@7 A ~ A ~ A ~@16 A ~ A ~ A ~@7 A ~ A ~@11 A ~ A ~ A ~@7 A ~ A ~ A
>`.pickRestart({
  A: "x",
})).gain(0.74)

// drums · ride
const ride = s("rd").struct("<~@20 A B A B@9 A B A B ~@17 A B A B@9 A B A B ~@10 A B A B@9 C B A B ~>".pickRestart({
  A: "~ x!3", B: "x!4", C: "~ x ~@2",
})).gain(0.74)

// drums · tambourine
const tambourine = s("tb").struct("<~@69 [x!8]!10 ~@17>").gain(0.74)

stack(bass, piano, epiano2, reed_organ, kick, snare, clap, low_tom, hihat, mid_tom, open_hat, crash, ride, tambourine)

More by James