Strudelify

Incantations, Part 4

Mike Oldfield

KeyD majorTempo100 bpm
0:00/0:00
// Incantations, Part 4 — Oldfield, Mike
// 100 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 2 "Marimba 2" marimba (copy of ch 1 "Marimba 1" marimba)
// note: Full arrangement: all 85 bars on a 16-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.

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@9 A B C D E F G H A B I D J K G H A B I D J K G H A B I D J K G H A B I D J K G H L M N O P Q R S L M N O P Q R S L
  M N O P Q R S T U V W X@2 Y Z W AA AB@2
>`.pickRestart({
  A: "b1@2 f#2@2 b2@3 ~@9", B: "f#1@2 c#2@2 f#2@3 ~@7 f#2 c#2", C: "f#1@2 d2@2 f#2@3 ~@9", D: "~ g1 d2 g2 ~@4",
  E: "d1@2 g1@2 d2@2 g2@3 ~@6 d2", F: "e2 e1 b1 e2 ~@4", G: "f#1 c#2 f#2 ~@5", H: "g1 d2 g2 ~ a1 e2 a2 ~",
  I: "f#1@2 ~@2 f#2@3 ~@9, ~@2 d2@5 ~@9", J: "d1@2 g1@2 d2@2 g2@3 ~@7", K: "d2 e2 e1@2 b1@2 e2@2 ~@8",
  L: "e2@2 b2@2 e3@3 ~@9", M: "b1@2 f#2@2 b2@3 ~@7 b2 f#2", N: "b1@2 ~@2 b2@3 ~@9, ~@2 g2@5 ~@9", O: "~ c2 g2 c3 ~@4",
  P: "g1@2 c2@2 g2@2 c3@3 ~@7", Q: "g2 a2 a1@2 e2@2 a2@2 ~@8", R: "b1 f#2 b2 ~@5", S: "c2 g2 c3 ~ d2 a2 d3 ~",
  T: "e2@2 b2@3 e3@3 ~@8", U: "~@3 b1@2 f#2@2 b2@3 ~@6", V: "~@3 b2 f#2 ~ b1@2 ~@2 b2@3 ~@3, ~@4 g2@3 ~",
  W: "~@11 c2@3 g2@2", X: "[c3@3 ~@9 g1@3 c2@2 g2@3 c3@4 ~@8]/2", Y: "~ g2 a2 a1@3 e2@2 a2@3 ~@5",
  Z: "~@5 b1@3 f#2@3 b2@3 ~@2", AA: "~ c3@3 ~@2 d2@3 a2@3 d3@3 ~", AB: "[~ [e2,e3]@11 ~@4]/2",
})).s("gm_electric_bass_finger").gain(0.36)

// other · synth strings 1 · "Synth"
const synth_strings_1 = note(`<
  ~@17 A B C D@2 E F G A B C D@2 E F G A B C D@2 E F G A B C D@2 E F G H I J K@2 B L M H I J K@2 B L M H I J K@2 B L M
  N@6 O@4 P@2
>`.pickRestart({
  A: "[b3,f#4]", B: "[a3,a4]", C: "[f#3,f#4]", D: "[g3,g4]", E: "[e3,e4]", F: "f#3, c#5@7 ~", G: "[g3,g4] [a3,a4,c#5]",
  H: "[e4,b4]", I: "[d4,d5]", J: "[b3,b4]", K: "[c4,c5]", L: "b3, f#5@7 ~", M: "[c4,c5] [d4,d5,f#5]",
  N: "[[e4,b4]@19 [d4,d5]@19 [b3,b4]@19 [c4,c5]@19 [c4,c5]@20]/6", // E5 D B C
  O: "[~ [a3,a4]@20 b3@22 [c4,c5]@11 [d4,d5,f#5]@10, ~@21 f#5@19 ~@24]/4", P: "[~ [d4,e4,g4,a4]@10 ~@5]/2",
})).s("gm_synth_strings_1").gain(0.31).pan(0.6)

// other · synth strings 1 · "Track 6"
const synth_strings_1_2 = note("<~@32 A B C D E F G H I B C D E F G H J ~@36>".pickRestart({
  A: "~@2 a5 b5", B: "a5@6 e5 ~ e5@3 ~ f#5@4", C: "e5@4 a4@3 ~ a5@4 b5@4", D: "a5@6 e5 ~ e5@2 ~@2 f#5@4",
  E: "e5@7 ~ e5@3 ~ f#5@4", F: "e5@6 b4 ~ b4@3 ~ c#5@4", G: "b4 e4 b4 c#5", H: "b4@5 ~ b4@2 e5@4 f#5@4",
  I: "e5@6 ~@2 a5@4 b5@3 ~", J: "e5",
})).s("gm_synth_strings_1").gain(0.36).pan(0.3)

// other · blown bottle · "Track 6"
const blown_bottle = note("<~@64 A B C D E F G H I@2 ~@11>".pickRestart({
  A: "~@2 d5 e5", B: "d5@3 a4 a4@2 b4@2", C: "a4 d4 d5 e5", D: "d5@6 a4 ~ a4@4 b4@4", E: "a4@7 ~ a4@3 ~ b4@4",
  F: "a4@6 d4 ~ d4@3 ~ e4@4", G: "d4@4 a3@3 ~ d4@3 ~ e4@4", H: "d4@2 a3@2 a4 b4@2 ~", I: "[a4@5 ~@3]/2",
})).s("gm_blown_bottle").gain(0.31).pan(0.8)

// other · overdriven guitar · "Track 7"
const overdriven_guitar = note("<~@48 A B C D E F G H I ~@16 J K L@2 M N O P Q R S@2>".pickRestart({
  A: "~@7 e4", B: "e4@2 g4 ~ g4 ~ b4@2 b4@2 g4 ~ g4 [g4,a4] f#4 e4", C: "f#4@2 a4 ~ a4 ~ d5@2 d5 ~ d5 e5 d5 c#5 b4 a4",
  D: "b4@2 f#4 ~ f#4 ~ b4 ~ b4@2 f#4 ~ f#4 [f#4,g4] e4 d4", E: "d4 e4 g4 ~ g4 ~ c5 d5 c5 ~ g4 ~ g4 ~ e4 ~",
  F: "e4@2 g4 ~ g4 ~ c5@2 c5 ~ g4 ~ g4 f4 e4 d4", G: "c4@2 e4@2 e4 ~ a4@2 a4 ~ c5@2 c5@2 b4 c5",
  H: "b4 ~ a4@2 a4@2 g4 ~ g4 [g4,a4] f#4 ~ f#4 ~ e4 ~", I: "e4@2 f#4 ~ f#4@2 g4 ~ g4@2 a4 ~ a4 ~ e4 ~",
  J: "e4@2 g4 ~@2 g4 ~ b4@2 b4@2 ~ g4 ~ g4 a4", K: "[f#4,g4] ~ e4 f#4@2 a4 ~ a4 ~@2 d5@2 d5 ~ d5 ~",
  L: "[e5 d5 c#5 b4 a4 ~ b4@2 f#4 ~ f#4@2 ~ b4 ~ b4@2 ~ f#4 ~ f#4 g4 [e4,f#4] ~ d4!2 e4 g4 ~@2 g4@2]/2", // Esus2
  M: "c5 d5 ~ c5@2 g4 ~ g4 ~@2 e4 ~ e4@2 ~ g4", N: "~ g4 ~@2 c5@2 c5 ~@2 g4 ~@2 g4 f4 e4 d4",
  O: "~ c4@2 e4@2 ~ e4 ~ a4@2 ~ a4 ~ c5@2 ~", P: "c5@2 b4@3 b4 ~@2 a4@2 ~ a4@2 g4@3",
  Q: "g4 a4 g4 f#4 ~@2 f#4@2 e4 ~@2 e4@2 ~ f#4 ~", R: "~ f#4 g4 ~ g4 ~ g4 ~ a4!2 ~@2 a4 b4 ~ b4",
  S: "[b4 ~ [e2,e3]@23 ~@7]/2", // E
})).s("gm_overdriven_guitar").gain(0.31)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@8 A B@5 C ~ A B@5 C ~ A B@5 C ~ A B@5 C ~ A B@5 C ~ A B@5 C ~ A B@5 C ~ A B@5 C ~ A C D E F G A H ~@2 I J ~
>`.pickRestart({
  A: "~@7 x", B: "x ~@6 x", C: "x", D: "x ~@2 x ~@12", E: "~@3 x ~@2 x ~@9", F: "~@6 x ~@2 x ~@6", G: "~@5 x!2 ~",
  H: "~ x ~@14", I: "~@15 x", J: "~ x ~@6",
})).gain(0.51)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct(`<
  ~@9 A@6 ~@2 A@6 ~@2 A@6 ~@2 A@6 ~@2 A@6 ~@2 A@6 ~@2 A@6 ~@2 A@6 ~@2 A B C D E ~ F ~@3 G ~
>`.pickRestart({
  A: "x", B: "~@3 x ~@12", C: "~@3 x ~@4", D: "~@9 x ~@6", E: "~@3 x", F: "~ x ~@14", G: "~ x ~@6",
})).gain(3.61)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@8 A@6 ~@2 A@6 ~@2 A@6 ~@2 A@6 ~@2 A@6 ~@2 A@6 ~@2 A@6 ~@2 A@6 ~@2 A B C D E F A ~@3 G ~@2
>`.pickRestart({
  A: "~@6 x!2", B: "~@7 x", C: "x", D: "~ x ~ x ~@12", E: "~@2 x!2 ~@4", F: "~@7 x ~@2 x ~@5", G: "~@12 x ~@2 x",
})).gain(2.08)

stack(bass, synth_strings_1, synth_strings_1_2, blown_bottle, overdriven_guitar, tambourine, vibraslap, cabasa)

More by Mike Oldfield