Strudelify

J Breas

Moby

KeyE minorTempo100 bpm
0:00/0:00
// J Breas — Moby
// 100 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 60 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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.

// chords · piano
const piano = note("<A@7 B@4 C@3 D@6 E@4 F@8 G@3 H@6 I@2 J@8 K@7 ~@2>".pickRestart({
  A: "[~@46 f#3@3 ~@5 c3@2, ~ e2@12 e2@21 e2@12 e2@20 e2@13 e2@20 e2@12 e2@19 ~ f#2@12 f#2@8 f#3@32 ~@13 c2@12 c2@16, ~@5 b2@12 b2@21 b2@12 b2@21 b2@11 ~ b2@20 b2@12 b2@16 ~@4 c#3@12 c#3@20 c#3@12 ~ c#3@17 ~@7 e3@10 ~@10, ~@9 g3@33 g3@25 ~@8 g3@7 ~@25 g3@23 ~@9 a3@24 f#2@12 ~ f#2@21 ~@3 g2@12 g2@12, ~@21 e3@33 e3@26 ~@7 e3@32 e3@45 ~@8 a3@25 ~@27]/7",
  B: "[~@25 c3@12 ~@52 e3@12 ~@20 c3@7, ~@5 c2@12 c2@20 c#2@12 c#2@19 c#2@12 c#2@21 c2@12 c2@15, ~@9 g2@12 g2@18 ~@2 g#2@12 g#2@17 ~@2 g#2@12 g#2@18 ~@3 g2@10 ~@2 g2@11, ~@13 e3@26 ~@6 g#3@25 ~@6 g#3@11 ~@41, ~@57 e3@31 ~@21 e3@19]/4",
  C: "[~@19 f#3@4 ~@9 g3@7 [g1,b2,d3,g3]@31 ~@23 b2@3, ~@6 f#3@13 ~@66 g3@11, ~@7 d2@17 ~@3 g2@13 ~@37 e2@12 e2@7, ~@7 d3@8 d3@9 ~@57 b2@12 ~@3, ~@10 a2@13 [c2,c3,e3]@17 ~@56]/3", // G C
  D: "[~ e3@13 ~@20 e3@12 ~@52 e3@13 ~@52 f#3@12 ~@13 c2@4, ~@14 e2@10 ~ e2@20 ~ e2@12 e2@20 e2@12 e2@20 ~ f#2@12 f#2@20 f#2@12 f#2@21 ~@3 g2@11 ~@2, ~@18 b2@11 b2@19 ~@2 b2@12 b2@20 b2@12 b2@16 ~@5 c#3@12 c#3@20 c#3@11 ~ c#3@17 ~@8 e3@8, ~@21 g3@25 ~@8 g3@24 ~@8 g3@25 ~@8 a3@32 a3@25 ~@16, ~@66 e3@26 ~@39 f#3@26 ~@18 c2@12 ~@5]/6",
  E: "[~@36 c3@13 ~@75 g3@4, g2@19 g2@12 ~ g2@18 ~@3 b2@13 b2@21 b2@12 b2@20 ~ b2@8, ~@4 c3@32 ~@13 e2@13 e2@21 e2@12 e2@20 ~ e2@12, ~@8 c2@6 c2@11 ~@10 e3@13 ~@4 e3@12, ~@24 e3@26 ~@8 g3@25 ~@8 g3@24 ~@13]/4",
  F: "[~@106 f#3@12 ~@121 e3@12 c2@5, e2@21 e2@12 e2@20 ~ f#2@12 f#2@19 f#2@12 f#2@22 ~@4 g2@12 g2@21 g2@12 g2@17 ~@4 g#2@12 ~ g#2@20 g#2@12 g#2@18 ~@4, ~@4 b2@21 b2@12 b2@17 ~@4 c#3@12 c#3@20 c#3@12 c#3@17 ~@8 e3@33 e3@25 ~@9 g#3@32 g#3@26 ~@4, ~@8 e3@33 e3@26 ~@7 f#3@32 ~@12 c2@12 ~ c2@21 c2@12 c2@21 ~ c#2@12 c#2@20 c#2@12 ~ c#2@22 ~@3, ~@29 g3@24 ~@9 a3@31 a3@26 ~@20 c3@33 ~ c3@29 ~@4 e3@32 ~@18]/8",
  G: "[~@16 c3@12 ~ a2 ~@10 f#3@5 ~@8 g3@8 ~ [b2,d3,g3]@34, g2@3 g2@4 f#3@3 ~@14, ~@4 e3@24 d3@8 ~ d3@8 ~@16 g1@34 ~, ~@8 c2@21 d2@16 [c2,c3,e3]@18 ~@33, ~@33 a2@12 ~@3 g2@14 ~@34]/3", // G C
  H: "[~@9 g3@4 ~@107 e3@12 ~@52 f#3@8, ~ e2@10 ~@2 e2@15 ~@6 e2@13 e2@20 e2@12 e2@20 e2@12 e2@22 ~@19 f#3@32 ~@8, ~@5 b2@9 ~@3 b2@20 ~ b2@13 b2@20 b2@12 b2@20 b2@12 b2@18 ~@3 c#3@12 c#3@20 c#3@12 c#3@12, ~@21 e3@34 e3@32 e3@33 ~@12 f#2@12 f#2@20 f#2@12 f#2@16, ~@43 g3@32 g3@32 g3@26 ~@7 a3@32 a3@20]/6",
  I: "[~@57 c3@7, ~@4 c2@12 c2@20 c2@12 ~ c2@15, ~@8 g2@13 g2@20 g2@12 g2@11, ~@12 e3@33 e3@19, ~@25 c3@32 ~@7]/2",
  J: "[~@190 f#3@13 ~@50 g2@3, ~@7 e2@13 e2@20 e2@12 e2@20 e2@12 e2@20 e2@12 ~ e2@26 ~@16 f#3@31 ~@13 c2@12 ~ c2@20 c2@13 c2@7, ~@12 b2@12 b2@20 b2@12 ~ b2@19 b2@12 b2@20 b2@12 ~ b2@22 c#3@12 c#3@19 c#3@13 c#3@18 ~@7 e3@33 e3@11, ~@16 g3@33 g3@31 g3@32 ~ g3@30 ~@4 a3@31 a3@26 ~@20 c3@32, ~@29 e3@32 e3@31 e3@33 e3@13 f#2@12 ~ f#2@19 f#2@13 f#2@22 ~@3 g2@12 g2@21 g2@12 ~@3]/8",
  K: "[~@67 e3@11 ~@21 c3@12 ~@11 f#3@5 ~@8 g3@8 ~ d3@63 ~@17, ~@2 c3@44 c#2@12 ~ c#2@21 ~@31 d2@17 ~@15 [g1,b2]@63 ~@18, ~@15 c#2@12 c#2@8 e3@32 ~@11 c2@13 c2@20 ~@4 a2@13 ~@2 g2@14 ~@80, ~@18 g#2@12 ~ g#2@19 g#2@12 g#2@17 ~@4 g2@12 g2@16 d3@8 d3@8 [c2,c3,e3]@18 ~@79, ~@23 g#3@27 ~@4 g#3@25 ~@8 e3@24 f#3@11 ~@102]/7", // G C
})).s("gm_piano").gain(0.48)

// chords · string ensemble 2 · "Slow Strings"
const string_ensemble_2 = note("<~@12 A@2 ~@19 B@3 ~@19 C@5>".pickRestart({
  A: "[~@7 [g2,b2,d3,g3,b3,d4]@45 ~@12]/2", B: "[~@28 [g2,b2,d3,g3,b3,d4]@37 ~@31]/3",
  C: "[~@7 [g3,b3,d4]@32 ~@3 b4@31 ~@7, ~@14 [g2,b2]@121 ~@25, ~@7 d3@58 ~@15]/5", // G
})).s("gm_string_ensemble_2").gain(0.37)

stack(piano, string_ensemble_2)

More by Moby