Strudelify
Innocent cover art

Earth Moving

Innocent

Mike Oldfield

KeyD minorTempo150 bpm
0:00/0:00
// Innocent — Oldfield, Mike
// 150 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/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 · piano · "SYN STRING"
const bass = note("<db-1 ~@122>").s("gm_piano").gain(0.05)

// chords · synth strings 2 · "SYN STRING"
const synth_strings_2 = note(`<
  ~@14 A@4 B@3 C A@4 D@2 E@2 F@4 G@3 H I@3 J K@4 L@4 M@2 N@2 D@2 O@2 ~@2 P@2 ~@4 Q@3 H A@4 R@4 A@4 S@4 T@4 U@4 V@4 U@4
  W@8 X@6 Y@2 V@4 Z
>`.pickRestart({
  A: "[[f4,a4]@32 [e4,g4]@31 ~, c4@31 ~]/4", B: "[a3@14 ~@2 bb3@15 ~ a3@14 ~@2, [d4,f4]@23 ~]/3",
  C: "[f4,a4]@4 [e4,g4]@3 ~, c4@7 ~", D: "[a3@15 ~ bb3@15 ~, [d4,f4]@31 ~]/2",
  E: "[[a3,d4]@15 ~ a4@7 [e4,g4]@7 ~@2, f4@11 ~@5, ~@8 c4@7 ~]/2", // D5 Em
  F: "[~@16 bb3@14 c4 ~, d4@15 ~, ~@32 f3@26 ~@2 g3 ~@3]/4",
  G: "[a4@3 ~ bb4@4 ~@12 e4@4, f4@5 ~, d4@22 ~@2 c4@23 ~, ~ a4 g4]/3", H: "[d4,f4,a4]@3 ~",
  I: "[a4@7 ~ bb4@7 ~@24 e4@9, f4@5 ~, d4@23 ~ c4@23 ~, ~ a4 g4]/3", J: "[d4,f4,a4]@7 ~",
  K: "[a4@32 [e4,g4]@31 ~, c4@31 ~, f4@15 ~@17]/4", // Em
  L: "[a3@14 ~@2 bb3@15 ~ a3@14 ~@2 [c4,a4]@7 ~ [c4,e4,g4]@5 ~@3, f4@7 ~, d4@23 ~@9]/4", M: "[[c4,f4,a4]@31 ~]/2",
  N: "[[c4,e4,g4]@31 ~]/2", O: "[[a3,d4]@14 ~ a4@8 ~ [e4,g4]@8, f4@3 ~, ~@15 c4@15 ~@2]/2", P: "[[f3,bb3,d4]@15 ~]/2",
  Q: "[a4@7 ~ bb4@7 ~@25 e4@8, f4@5 ~, d4@23 ~ c4@23 ~, ~ a4 g4]/3",
  R: "[a3@14 ~@2 bb3@15 ~ a3@14 ~@10 [e4,g4]@6 ~@2, f4@7 ~, d4@46 ~ a4@8 ~@9, ~@48 c4@13 ~@3]/4", // Em
  S: "[a3@14 ~@2 bb3@15 ~ a3@14 ~@2 a4@8 [e4,g4]@8, f4@7 ~, d4@23 ~ c4@8]/4", // Em
  T: "[~@32 bb3@28 c4 ~@3, d4@15 ~, ~@31 f3@27 ~@6]/4", U: "[[g4,b4] [gb4,a4], d4@31 ~]/4",
  V: "[b4@2 c5@2 ~@3 [gb4,a4], g4@7 ~, e4@23 ~ d4@7 ~, ~@4 b4@3 ~]/4", // Gbm
  W: "[b4@15 c5@17 ~@24 [gb4,a4]@8 [g4,b4]@32 a4@32, g4@28 ~@20 gb4@15 ~, e4@23 ~ d4@39 ~, ~@4 b4@3 ~@9]/8", // Gbm G
  X: "[b4@2 c5@2 ~@3 [gb4,a4] [g4,b4]@4, g4@7 ~@5, e4@46 ~@2 d4@47 ~, ~@4 b4@3 ~@5]/6", Y: "[d4,gb4,a4]/2",
  Z: "[d4,g4]@3 ~@5", // G5
})).s("gm_synth_strings_2").gain(0.42)

// other · piano · "PAN FLUTE"
const piano = note("<db-1 ~@122>").s("gm_piano").gain(0.05)

// chords · synth brass 1 · "SYN BRASS"
const synth_brass_1 = note("<~@90 A@2 B@2 C D C E A@2 B@2 F G H I J@2 K@2 L M N O P Q B@2 C R A O S>".pickRestart({
  A: "~@2 [d4,g4,b4] ~ [d4,g4,b4] ~@5 [d4,g4,b4] ~ [d4,g4,b4] ~@3", // G
  B: "~@2 [d4,gb4,a4] ~ [d4,gb4,a4] ~@5 [d4,gb4,a4] ~ [d4,gb4,a4] ~@3", // D
  C: "~@2 [e4,g4,b4] ~ [e4,g4,b4] ~@5 [e4,g4,b4] ~ [e4,g4,b4] ~@3", // Em
  D: "~@2 [e4,g4,c5] ~ [e4,g4,c5] ~@5 [e4,g4,c5] ~@3 [d4,gb4,a4] ~", // C D
  E: "~@4 [d4,g4,b4] ~@5 [d4,gb4,a4] ~ [d4,gb4,a4] ~@3", // G D
  F: "~@2 [b3,e4,g4] ~ [b3,e4,g4] ~@5 [b3,e4,g4] ~ [b3,e4,g4] ~@3", // Em
  G: "~@2 [c4,e4,g4] ~ [c4,e4,g4] ~@5 [c4,e4,g4] ~ [c4,e4,g4] ~ [d4,gb4,a4] ~", // C D
  H: "~@2 [d4,g4,b4] ~ [d4,g4,b4] ~@5 [e4,g4,b4] ~ [e4,g4,b4] ~@3", // G Em
  I: "~@2 [g4,b4,d5] ~ [g4,b4,d5] ~@5 [gb4,a4,d5] ~ [gb4,a4,d5] ~@3", // G D
  J: "~@2 [d5,g5,b5] ~ [d5,g5,b5] ~@5 [d5,g5,b5] ~ [d5,g5,b5] ~@3", // G
  K: "~@2 [d5,gb5,a5] ~ [d5,gb5,a5] ~@5 [d5,gb5,a5] ~ [d5,gb5,a5] ~@3", // D
  L: "~@2 [b4,e5,g5] ~ [b4,e5,g5] ~@5 [b4,e5,g5] ~ [b4,e5,g5] ~@3", // Em
  M: "~@2 [c5,e5,g5] ~ [c5,e5,g5] ~@5 [c5,e5,g5] ~ [c5,e5,g5] ~ [d5,gb5,a5] ~", // C D
  N: "~@2 [d5,g5,b5] ~ [d5,g5,b5] ~@5 [b4,e5,g5] ~ [b4,e5,g5] ~@3", // G Em
  O: "~@2 [d5,g5,b5] ~ [d5,g5,b5] ~@5 [d5,gb5,a5] ~ [d5,gb5,a5] ~@3", // G D
  P: "~@2 [b4,d5,g5] ~ [b4,d5,g5] ~@5 [b4,d5,g5] ~ [b4,d5,g5] ~@3", // G
  Q: "~@2 [g4,b4,d5] ~ [g4,b4,d5] ~@5 [d4,g4] ~ [d4,g4,b4] ~@3", // G G5 G
  R: "~@2 [e4,g4,c5] ~ [e4,g4,c5] ~@5 [e4,g4,c5] ~ [e4,g4,c5] ~ [gb4,a4] ~", S: "[b4,d5,g5] ~@15",
})).s("gm_synth_brass_1").gain(0.24).pan(0.4)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@30 A@5 ~@23 B@5 ~@23 C@4 ~@7 D E ~@6 D F ~@6 D F ~@6 D F>".pickRestart({
  A: "[d3 ~ d3@2 f3@2 c3@2 d3@2 f3@2 a2@2 c3@4 d3@3 ~ d3@2 ~@2 d3@2 c3@2 ~@4 f4@2 g4@2 ~@22 g4@2 ~@4 d4@8 ~@6, ~@24 f3@25 ~@31, ~@30 d3@19 ~@31, ~@38 d5@6 c5@6 bb4@6 a4@4 ~@2 f4@11 ~@7, ~@21 e4@2 ~ d4@3 c4@2 d4@4 ~@7]/5",
  B: "[d3 ~ d3@2 f3@2 c3@2 d3@2 f3@2 a2@2 c3@4 d3@3 ~ d3@2 ~@2 d3@2 c3@2 ~@30 a4@2 ~@4 f4@5 ~@9, ~@24 f3@25 ~@31, ~@30 d3@19 ~@31, ~@38 f4@8 e4@4 d4@8 c4@6 d4@7 ~@9, ~@21 d5@3 c5@3 bb4@3 ~ g4@2 ~@7]/5",
  C: "[d3 ~ d3@2 f3@2 c3@2 d3@2 f3@2 a2@2 c3@4 d3@4 d3@2 f3@2 d3@2 c3@2 ~@4 e4@2 ~@2 d5@2 ~@18 d4@2 f4@3 ~, ~@30 d3@21 ~@3 d3@7 ~@3, ~@18 f4@4 e4@2 ~ d4@2 c4@2 ~@3, ~@20 c5@3 bb4@3 a4@2 g4@2 ~@2]/4",
  D: "~@4 b4 ~ a4 ~", E: "g4@3 ~", F: "g4@9 ~@7",
})).s("gm_overdriven_guitar").gain(0.32).pan(0.6)

// bass · electric bass finger · "ACOU BASS"
const bass_2 = note(`<
  ~@4 A@2 B C D E B C D E F G H I J K J L M N O I J P J Q R@2 S@2 B T D U B V D W F N H I J X J Y M G Z I J AA J Q AB@2
  AC@2 AD ~@2 AE B V D AF M G H AG J AH J Y M G H I J AH J AI R@2 AJ@2 AK AL J AM AN AO AP AQ AK AR AS AM AT AO AT AU AV
  AR AW AM AT AO AT AQ AV AR J AM AT AO AX AY AZ
>`.pickRestart({
  A: "[~@14 bb1@4 a1@2 bb1@2 a1@2 bb1@2 c2@3 ~@3]/2", B: "d2 ~ d2@2 d2@2 ~@2 bb1 ~ bb1@2 f2@4",
  C: "d2 ~ d2@2 d2@2 c2@4 d2@2 f2@4", D: "c2 ~ c2@2 c2@2 ~@2 c2 ~ c2@2 c2@2 ~@2",
  E: "d2 ~ d2@2 d2@2 [c2,f2]@4 d2@2 d2@2 ~@2", F: "f1 ~ f1@2 f1@2 ~@2 f1 ~ f1@2 f1@2 ~@2",
  G: "f1 ~ f1@2 f1@2 f1@2 ~@2 f1@2 f1@4", H: "c1 ~ c1@2 c2@4 c1 ~ c1@2 c2@4", I: "c1 ~ c1@2 c2@2 c1@2 ~@2 c1@2 c2@4",
  J: "d1 ~ d1@2 d2@4 d1 ~ d1@2 d2@4", K: "bb0 ~ bb0@2 bb1@2 bb0@2 ~@4 bb1@2 c1@2, ~@10 bb0@4 c2 ~",
  L: "f1 ~ f1@2 f1@2 ~@2 c1 ~ c1@2 a1@2 g1 ~", M: "f1 ~ f1@2 f1@2 ~@2 f1 ~ f1@2 f1@4",
  N: "f1 ~ f1@2 f1@2 f1@2 ~@2 f1@2 f1@2 ~@2", O: "c1 ~ c1@2 c2@3 ~ c1 ~ c1@2 c2@2 ~@2",
  P: "bb0 ~ bb0 ~ bb1@2 bb0@2 ~@2 bb0@2 bb1@2 [c1,c2]@2", Q: "f1 ~ f1@2 f1@2 c1@2 ~@2 c1@2 a1@2 g1@2",
  R: "[d1@7 [c1,c2]]/2", S: "[[bb0,bb1]@28 c2@3 ~, ~@28 c1 ~@3]/2", T: "d2 ~ d2@2 d2@2 c2@4 d2@2 ~@2 d2 ~, ~@3 f2",
  U: "d2 ~ d2@2 d2@2 [c2,f2]@4 d2@2 d2@2 c2@2", V: "d2 ~ d2@2 d2@2 c2@4 d2@2 ~@2 d2@2, ~@3 f2",
  W: "d2 ~ d2@2 d2@2 [c2,f2]@4 d2@2 d2@2 d2 ~", X: "bb0 ~ bb0 ~ bb1@2 bb0@2 ~@2 bb0@2 bb1@2 c1@2",
  Y: "f1 ~ f1@2 f1@4 c1 ~ c1@2 a1@2 g1@2", Z: "c1 ~ c1@2 c2@3 ~ c1 ~ c1 ~ c2@3 ~",
  AA: "bb0 ~ bb0@2 bb1@2 bb0@2 ~@2 bb0@2 bb1@2 [c1,c2]@2", AB: "[d1@7 c1]/2", AC: "[[bb0,bb1]@7 c2, ~@14 c1 ~]/2",
  AD: "d1 ~@15", AE: "~@5 a1 c2 a1", AF: "d2@2 d2@2 d2@2 d2 ~ [c2,f2]@2 d2@2 d2@2 d2 ~",
  AG: "c1 ~ c1@2 c2@2 c1@2 ~@2 c1 ~ c2@3 ~", AH: "bb0 ~ bb0@2 bb1@2 bb0@3 ~ bb0@2 bb1@2 c1@2",
  AI: "f1 ~ f1@2 f1 ~ c1@2 ~@2 c1@2 a1@2 g1 ~", AJ: "[[bb0,bb1]@25 ~ [c1,c2]@2 [c1,c2]@2 ~@2]/2",
  AK: "g1 ~ g1@2 g1@4 g1 ~ g1@2 g1@2 ~@2", AL: "g1 ~ g1@2 g1@2 g1 ~@3 g1@2 g1@2 ~@2",
  AM: "d1 ~ d1@2 d2@2 d1@2 ~@2 d1@2 d2@4", AN: "e1 ~ e1@2 e1@4 e1 ~ e1@2 e1@2 ~@2",
  AO: "c1 ~ c1@2 c2@2 c1@2 ~@2 c1@2 c2@2 d1@2", AP: "e1 ~ e1@2 e1@2 ~@2 e1 ~ e1@2 e1@2 ~@2",
  AQ: "g1 ~ g1@2 g1@3 ~ d1 ~ d1@2 b1@2 a1 ~", AR: "g1 ~ g1@2 g1@2 g1@2 ~@2 g1@2 g1@3 ~",
  AS: "d1 ~ d1@2 d2@3 ~ d1 ~ d1 ~ d2@3 ~", AT: "e1 ~ e1@2 e1@3 ~ e1 ~ e1@2 e1@3 ~",
  AU: "g1 ~ g1@2 g1@2 d1@2 ~@2 d1@2 b1@2 a1@2", AV: "g1 ~ g1@2 g1@3 ~ g1 ~ g1@2 g1@3 ~",
  AW: "d1 ~ d1 ~ d2@3 ~ d1 ~ d1 ~ d2@3 ~", AX: "e1 ~ e1@2 e1@2 ~@2 e1 ~ e1@2 e1@4",
  AY: "g1 ~ g1@2 g1 ~ d1@2 ~@2 d1@2 d2@2 d1@2", AZ: "g1@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.48)

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

// drums · snare
const snare = s("sd").struct("<~@2 A@28 B@3 C A@3 D A@20 B@3 C A@3 D A@20 B@3 C A@32 ~>".pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@4", C: "~@3 x ~@2 x ~", D: "~@2 x ~@2 x ~ x",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~@29 A ~@3 A ~@7 A ~@19 A ~@15 A ~@11 B ~@31 B ~>".pickRestart({
  A: "~@3 x", B: "~@7 x",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B@11 C D C D C D C D C D C D C E C D B@3 F B@8 C D C D C D C D C D C D C D C D B@3 F E B@7 C D C D C B C D C D C
  D C D C D B@3 F C D C D C D C D C@3 D C D C D C D C D C D C D C D C D C D C D ~
>`.pickRestart({
  A: "~@3 x ~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x!3 ~ x!3", D: "~ x!3 ~ x ~ x", E: "~ x ~ x ~ x!3",
  F: "~ x ~ x ~ x!2 ~",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@37 A ~@27 A ~@23 A ~@31 A ~>".pickRestart({
  A: "~@3 x",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@21 A ~@7 B ~@3 B ~@7 B ~@7 C ~@7 D ~@3 B ~@15 E ~@7 C ~@3 F ~@7 C ~@7 G ~@7 H ~@7 I ~
>`.pickRestart({
  A: "~@9 x ~@2 x ~ x!2", B: "~@5 x!2 ~", C: "~ x ~@2 x ~@5 x!3 ~@3", D: "~@7 x ~ x!4 ~@3", E: "~@9 x!2 ~ x ~@3",
  F: "~@5 x ~@2", G: "~ x ~@2 x ~@4 x ~@2 x ~@3", H: "~ x ~@2 x ~@4 x!2 ~ x ~@3", I: "~ x!2 ~ x ~@4 x!2 ~ x ~@3",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@10 A ~@3 A ~@7 A ~@6 B ~@3 B ~@4 A ~@3 A ~@7 A ~@6 B ~@3 B ~@4 A ~@3 A ~@7 A ~@6 B ~@3 B ~@8 A ~@6 B ~@8 A ~@7 A
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.56)

// drums · cowbell
const cowbell = s("cb").struct("<~@2 [~ x!3] [x!4]!119 x>").gain(0.56)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<~@3 [x!2]!119 x>").gain(0.46)

// drums · triangle
const triangle = s("triangles:30").struct("<~@2 A B@27 ~@4 B@24 ~@4 B@24 C ~@3 A B@31 C>".pickRestart({
  A: "~@3 x ~@2 x ~", B: "x ~@2 x ~@2 x ~", C: "x",
})).gain(3.48)

stack(
  bass, synth_strings_2, piano, synth_brass_1, overdriven_guitar, bass_2, kick, snare, low_tom, hihat, mid_tom,
  high_tom, crash, cowbell, woodblocks, triangle
)

More by Mike Oldfield