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: 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 D@4 E@2 F@2 G@4 H@3 I J@3 K L@4 M@4 N@2 O@2 P@2 Q@2 ~@2 R@2 ~@4 S@3 T U@4 V@4 D@4 W@4 X@4 Y@4 Z@4 Y@4
  AA@8 AB@6 AC@2 AD@4 AE
>`.pickRestart({
  A: "[a4@32 [e4,g4]@31 ~, c4@63 ~, f4@31 ~@33]/4", B: "[a3@14 ~@2 bb3@16 a3@13 ~@3, [d4,f4]@23 ~]/3",
  C: "[f4,a4]@4 [e4,g4]@3 ~, c4@7 ~", D: "[[f4,a4]@32 [e4,g4]@31 ~, c4@31 ~]/4",
  E: "[a3@15 ~ bb3@15 ~, [d4,f4]@31 ~]/2", F: "[[a3,d4]@15 ~ a4@7 [e4,g4]@7 ~@2, f4@11 ~@5, ~@8 c4@7 ~]/2",
  G: "[~@16 bb3@14 c4 ~, d4@15 ~, ~@32 f3@26 ~@2 g3 ~@3]/4",
  H: "[a4@3 ~ bb4@4 ~@12 e4@4, f4@5 ~, d4@22 ~@2 c4@23 ~, ~ a4 g4]/3", I: "[d4,f4,a4]@3 ~",
  J: "[a4@7 ~ bb4@7 ~@24 e4@9, f4@5 ~, d4@23 ~ c4@23 ~, ~ a4 g4]/3", K: "[d4,f4,a4]@7 ~",
  L: "[a4@32 [e4,g4]@31 ~, c4@31 ~, f4@15 ~@17]/4", // Em
  M: "[a3@14 ~@2 bb3@15 ~ a3@14 ~@2 [c4,a4]@7 ~ [c4,e4,g4]@5 ~@3, f4@55 ~@9, d4@47 ~@17]/4", N: "[[c4,f4,a4]@31 ~]/2",
  O: "[[c4,e4,g4]@31 ~]/2", P: "[a3@14 ~@2 bb3@15 ~, [d4,f4]@31 ~]/2",
  Q: "[[a3,d4]@14 ~ a4@8 ~ [e4,g4]@8, f4@3 ~, ~@15 c4@15 ~@2]/2", R: "[[f3,bb3,d4]@15 ~]/2",
  S: "[a4@8 bb4@7 ~@25 e4@8, f4@5 ~, d4@22 ~@2 c4@23 ~, ~ a4 g4]/3", T: "[d4,f4,a4]@13 ~@3",
  U: "[[f4,a4] [e4,g4], c4@63 ~]/4", // F Em
  V: "[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
  W: "[a3@14 ~@2 bb3@15 ~ a3@14 ~@2 a4@8 [e4,g4]@8, f4@7 ~, d4@23 ~ c4@8]/4", // Em
  X: "[~@32 bb3@28 c4 ~@3, d4@15 ~, ~@31 f3@27 ~@6]/4", Y: "[[g4,b4] [gb4,a4], d4@31 ~]/4",
  Z: "[b4@2 c5@2 ~@3 [gb4,a4], g4@7 ~, e4@23 ~ d4@7 ~, ~@4 b4@3 ~]/4", // Gbm
  AA: "[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
  AB: "[b4@2 c5@2 ~@3 [gb4,a4] [g4,b4]@4, g4@7 ~@5, e4@46 ~@2 d4@47 ~, ~@4 b4@3 ~@5]/6", AC: "[d4,gb4,a4]/2",
  AD: "[b4@16 c5@16 ~@24 [gb4,a4]@7 ~, g4@7 ~, e4@47 ~ d4@14 ~@2, ~@4 b4@3 ~]/4", AE: "[d4,g4]@3 ~@5",
})).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 F G ~@6 H G ~@6 D G>".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: "~@8 b4@3 ~ a4@2 ~@2", G: "g4@9 ~@7", H: "~@8 b4@3 ~ a4@3 ~",
})).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 P Q R Q S T@2 U@2 B V D W B X D Y F N H I J Z J AA AB AC AD AE J AF J AG
  AH@2 AI@2 AJ ~@2 AK AL X AM AN AB AC AO AP AQ AR AS AT AB G H I Q AU J AV T@2 AW@2 AX AY J AZ BA BB BC BD BE BF BG BH
  BI BJ BK BL BM BN BO BP BK BQ BI BR BS BN BT AZ BU BJ BV BW BX
>`.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@3 ~",
  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: "c1 ~ c1@2 c2@2 c1@2 ~@2 c1@2 c2@3 ~", Q: "d1 ~ d1@2 d2@4 d1 ~ d1@2 d2@3 ~",
  R: "bb0 ~ bb0 ~ bb1@2 bb0@2 ~@2 bb0@2 bb1@2 [c1,c2]@2", S: "f1 ~ f1@2 f1@2 c1@2 ~@2 c1@2 a1@2 g1@2",
  T: "[d1@7 [c1,c2]]/2", U: "[[bb0,bb1]@28 c2@3 ~, ~@28 c1 ~@3]/2", V: "d2 ~ d2@2 d2@2 c2@4 d2@2 ~@2 d2 ~, ~@3 f2",
  W: "d2 ~ d2@2 d2@2 [c2,f2]@4 d2@2 d2@2 c2@2", X: "d2 ~ d2@2 d2@2 c2@4 d2@2 ~@2 d2@2, ~@3 f2",
  Y: "d2 ~ d2@2 d2@2 [c2,f2]@4 d2@2 d2@2 d2 ~", Z: "bb0 ~ bb0 ~ bb1@2 bb0@2 ~@2 bb0@2 bb1@2 c1@2",
  AA: "f1 ~ f1@2 f1@4 c1 ~ c1@2 a1@2 g1@2", AB: "f1 ~ f1@2 f1@2 ~@2 f1 ~ f1@2 f1@4",
  AC: "f1 ~ f1@2 f1@2 f1@2 ~@2 f1@2 f1@3 ~", AD: "c1 ~ c1@2 c2@3 ~ c1 ~ c1 ~ c2@3 ~",
  AE: "c1 ~ c1 ~ c2@2 c1@2 ~@2 c1@2 c2@4", AF: "bb0 ~ bb0@2 bb1@2 bb0@2 ~@2 bb0@2 bb1@2 [c1,c2]@2",
  AG: "f1 ~ f1@2 f1@2 c1@2 ~@2 c1@2 a1@2 g1 ~", AH: "[d1@7 c1]/2", AI: "[[bb0,bb1]@7 c2, ~@14 c1 ~]/2", AJ: "d1 ~@15",
  AK: "~@5 a1 c2 a1", AL: "d2 ~ d2@2 d2@2 ~@2 bb1 ~ bb1@2 f2@3 ~", AM: "c2@2 c2@2 c2@2 ~@2 c2 ~ c2@2 c2@2 ~@2",
  AN: "d2@2 d2@2 d2@2 d2 ~ [c2,f2]@2 d2@2 d2@2 d2 ~", AO: "c1 ~ c1@2 c2@3 ~ c1 ~ c1@2 c2@4",
  AP: "c1 ~ c1@2 c2@2 c1@2 ~@2 c1 ~ c2@3 ~", AQ: "d1 ~ d1@2 d2@3 ~ d1 ~ d1 ~ d2@3 ~",
  AR: "bb0 ~ bb0@2 bb1@2 bb0@3 ~ bb0@2 bb1@2 c1@2", AS: "d1 ~ d1@2 d2@3 ~ d1 ~ d1@2 d2@3 ~",
  AT: "f1 ~ f1@2 f1@3 ~ c1 ~ c1@2 a1@2 g1@2", AU: "bb0 ~ bb0@2 bb1@2 bb0@2 ~@2 bb0@2 bb1@2 c1@2",
  AV: "f1 ~ f1@2 f1 ~ c1@2 ~@2 c1@2 a1@2 g1 ~", AW: "[[bb0,bb1]@25 ~ [c1,c2]@2 [c1,c2]@2 ~@2]/2",
  AX: "g1 ~ g1@2 g1@4 g1 ~ g1@2 g1@2 ~@2", AY: "g1 ~ g1@2 g1@2 g1 ~@3 g1@2 g1@2 ~@2",
  AZ: "d1 ~ d1@2 d2@2 d1@2 ~@2 d1@2 d2@4", BA: "e1 ~ e1@2 e1@4 e1 ~ e1@2 e1@2 ~@2",
  BB: "c1 ~ c1@2 c2@2 c1@3 ~ c1@2 c2@2 d1@2", BC: "e1 ~ e1@2 e1@2 ~@2 e1 ~ e1@2 e1@2 ~@2",
  BD: "g1 ~ g1@2 g1@3 ~ d1 ~ d1@2 b1@2 a1 ~", BE: "g1 ~ g1@2 g1@3 ~ g1 ~ g1@2 g1@3 ~",
  BF: "g1 ~ g1 ~ g1@2 g1@2 ~@2 g1@2 g1@2 ~@2", BG: "d1 ~ d1 ~ d2@3 ~ d1 ~ d1 ~ d2@3 ~",
  BH: "d1 ~ d1 ~ d2@2 d1@2 ~@2 d1@2 d2@4", BI: "e1 ~ e1@2 e1@3 ~ e1 ~ e1@2 e1@3 ~",
  BJ: "c1 ~ c1@2 c2@2 c1@2 ~@2 c1@2 c2@2 d1@2", BK: "e1 ~ e1@2 e1@3 ~ e1 ~ e1@2 e1@4",
  BL: "g1 ~ g1@2 g1@2 d1@2 ~@2 d1@2 b1@2 a1@2", BM: "g1 ~ g1@2 g1@4 g1 ~ g1 ~ g1@4",
  BN: "g1 ~ g1@2 g1@2 g1@2 ~@2 g1@2 g1@3 ~", BO: "d1 ~ d1 ~ d2@3 ~ d1 ~ d1 ~ d2@4",
  BP: "d1 ~ d1@2 d2@2 d1@3 ~ d1@2 d2@4", BQ: "c1 ~ c1 ~ c2@2 c1@2 ~@2 c1@2 c2@2 d1@2",
  BR: "g1 ~ g1@2 g1@3 ~ d1 ~ d1@2 b1@2 a1@2", BS: "g1 ~ g1@2 g1@4 g1 ~ g1@2 g1@3 ~",
  BT: "d1 ~ d1 ~ d2@4 d1 ~ d1@2 d2@3 ~", BU: "e1 ~ e1@2 e1@4 e1 ~ e1@2 e1@3 ~", BV: "e1 ~ e1@2 e1@2 ~@2 e1 ~ e1@2 e1@4",
  BW: "g1 ~ g1@2 g1 ~ d1@2 ~@2 d1@2 d2@2 d1@2", BX: "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