Strudelify

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: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@20 A@2 B C D E F G H I J K A@2 B C L ~ M ~ N M@2 ~ O M@2 ~ P M@2 ~ Q A@2 B C D E F G H I J K A@2 B C ~@10 A@2 B C D
  E F G H I J K A@2 B C M
>`.pickRestart({
  A: "e2!8", B: "e2@2 e2@2 e2@2 e2@2 e2@2 e2 ~ e2@2 e2@2", C: "e2@2 e2 ~ e2 ~ e2 ~ e2@2 e1 ~ e1 ~ e1 ~",
  D: "a1 ~ a1@2 a2 ~ a2@2 g2 ~ g2@2 d2 ~ d2@2", E: "a1 ~ a1 ~ a2 ~ a2@2 g2 ~ g2@2 e2 ~ e2 ~",
  F: "a1 ~ a1 ~ a2 ~ a2@2 g2 ~ g2 ~ d2 ~ d2@2", G: "a1@2 a1 ~ a2 ~ a2 ~ g2 ~ g2 ~ e2 ~ e2 ~",
  H: "d2 ~ d2@2 d3 ~ d3@2 c3 ~ c3@2 a2 ~ a2@2", I: "d2 ~ d2@2 d3 ~ d3@2 c3 ~ c3 ~ a2 ~ a2@2",
  J: "d2 ~ d2@2 d3 ~ d3 ~ c3 ~ c3 ~ a2 ~ a2 ~", K: "d2 ~ d2@2 d3 ~ d3@2 c3 ~ c3@2 a2 ~ a2 ~", L: "a1@3 ~@13",
  M: "a1 ~@7", N: "a1 ~@5 d2@2", O: "a1@3 ~@9 d2@4", P: "a1@3 ~@9 d2@3 ~", Q: "d2@3 ~",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@5 A ~ B A@2 ~ B A C ~ B A D ~ E F@4 G@4 H@3 I F@4 ~@2 J ~ K J@2 ~ L J M ~ N J O ~ P F@4 G@4 H@3 I F@4 Q R ~@8 F@4
  G@4 H@3 I F@4 S
>`.pickRestart({
  A: "[c#4,e4,a4] ~@7", B: "[c#4,e4,a4] ~@5 [d4,f#4,a4] ~", C: "[e4,a4] ~@15, c#4 ~@7", D: "[c#4,e4] ~@15, a4 ~@7",
  E: "[d3,a3,d4,f#4,a4]@13 ~@3", F: "[[e3,g#3,b3,e4,g#4,b4]@63 ~]/4",
  G: "[~@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 …
  H: "[[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 …
  I: "[d4,a4]@4 [d5,f#5,a5]@2 [d4,a4]@2 [c5,f#5,a5]@2 [d4,a4]@2 [d5,f#5,a5] ~@3", J: "[c#5,e5,a5] ~@7",
  K: "[c#5,e5] ~@11 [d5,f#5,a5]@2 ~@2, a5 ~@7", L: "[e5,a5] ~@5 [d5,f#5,a5] ~, c#5 ~@15", M: "[c#5,e5,a5] ~@15",
  N: "[c#5,e5,a5]@2 ~@10 [d5,f#5,a5]@3 ~", O: "[c#5,a5] ~@7, e5 ~@15", P: "[d5,f#5,a5] ~@7",
  Q: "a2@3 ~@3 a3@2 ~@2 g3@2 ~@2 e3@2", R: "d3@11 ~@5", S: "[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 D ~ B A E ~ F G H I J K@4 L@3 M G H I J ~@2 A ~ N A@2 ~ O A P ~ Q A R ~ S G H I J K@4 L@3 M G H I
  J T U ~@8 G H I J K@4 L@3 M G H I J V
>`.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: "[e5,a5] ~@15, c#5 ~@7",
  E: "[c#5,e5] ~@15, a5 ~@7", F: "[d4,a4,d5,f#5,a5]@13 ~@3",
  G: "~@2 [d3,d4,f#4]@2 [d#3,d#4] ~ [e3,e4]@6 ~@4, ~@2 g4 g#4@5", // D D# E
  H: "~@2 [d3,d4] ~ [d#3,d#4] ~ [e3,e4,g#4]@7 ~@3, ~ f#4 g4 ~@5", I: "~@2 [e3,e4,g#4] ~@3 [e3,g#4] ~, ~@12 e4 ~@3",
  J: "~@4 [e3,e4] ~@7 [e3,e4] ~@3, ~@2 g#4 ~@3 g#4 ~", // E
  K: "[~@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 …
  L: "[[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 …
  M: "[d4,a4]@4 [d5,f#5,a5]@2 [d4,a4]@2 [c5,f#5,a5]@2 [d4,a4]@2 [d5,f#5,a5] ~@3", // D5 D D5 F#dim D5 D
  N: "[c#5,e5] ~@11 [d5,f#5,a5]@2 ~@2, a5 ~@7", O: "[e5,a5] ~@5 [d5,f#5,a5] ~, c#5 ~@15", P: "[c#5,e5,a5] ~@15",
  Q: "[c#5,e5,a5]@2 ~@10 [d5,f#5,a5]@3 ~", R: "[c#5,a5] ~@7, e5 ~@15", S: "[d5,f#5,a5] ~@7",
  T: "a2@3 ~@3 a3@2 ~@2 g3@2 ~@2 e3@2", U: "d3@11 ~@5", V: "[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 ~ F D G ~ H D I ~ J 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: "[c#5,e5,a5] ~@15", H: "[c#5,e5,a5]@2 ~@10 [d5,f#5,a5]@3 ~", I: "[c#5,a5] ~@7, e5 ~@15", J: "[d5,f#5,a5] ~@7",
})).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