Strudelify

Under Ice

Kate Bush

KeyA minorTempo108 bpm
0:00/0:00
// Under Ice — Kate Bush
// 108 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (1/4 at bar 1, 4/4 at bar 1, 3/4 at bar 11, 4/4 at bar 12, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 58 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · lead 3 calliope
const lead_3_calliope = note(`<
  ~@9 A B C@2 ~ D E F@2 G H I J ~ K@2 L@2 H M N@2 I O@2 I P Q R S T U@2 ~@3 V@2 ~ W X@6 ~@3
>`.pickRestart({
  A: "~ e3 a3!2 a3@2 ~@2", B: "~@6 b3!2", C: "[a3@2 ~@4 b3 a3@2 ~ b3 a3@2 ~@3]/2", D: "~ a3 d4@2",
  E: "c4 a3@3 ~@2 a3@2", F: "[e4 d4 d4@3 c4@3]/2", G: "b3!2 a3@2 ~@2 b3!2", H: "a3@2 ~@2 b3!2 a3@2", I: "~@4 b3 a3@2 ~",
  J: "b3 a3@2 ~@5", K: "[a3@2 d4@4 c4 a3@3 ~@4 e4@2]/2", L: "[d4@2 d4@8 ~@2 c4 b3!3]/2", M: "~@2 b3!2 a3@2 ~@2",
  N: "[~@2 b3 a3@2 ~ b3 a3@2 ~@3 b3!2 a3@2]/2", O: "~@4 b3!2 a3@2", P: "~@4 b3 a3 ~@2", Q: "a3 ~", R: "~@3 a3",
  S: "d4 c4", T: "~@2 e4 d4", U: "[d4@5 ~@3]/2", V: "[~@5 a3 c4@4 ~@6]/2", W: "~ a3 d4@4 ~@2",
  X: "[~@3 b3 b4@37 ~@7]/6",
})).s("gm_lead_3_calliope").gain(0.4)

// other · lead 3 calliope · soft notes
const lead_3_calliope_soft = note("<~@41 A B C D E F G@3 ~@8>".pickRestart({
  A: "~@3 a3!3 a3@2", B: "~ c4 b3 ~", C: "e4!2 c4@2 ~@4", D: "e4 b3@2 ~ e4 b3@2 ~", E: "g4!2 f#4@2 ~@4",
  F: "~@2 g4 f#4@2 ~@3", G: "[~@2 g4!2 g4@2 g4 e4@2 ~@5 a4 g4@2 ~@7]/3",
})).s("gm_lead_3_calliope").gain(0.2)

// bass · string ensemble 1 · "Listened and MIDI'd"
const bass = note(`<
  A B C D E F G H I J K L M N O G P I Q R S T N U G V I W X Y N Z Y N Z Y N@2 G@2 I@2 N AA AB K AA AB K AA AB N AC AD
  AE@4
>`.pickRestart({
  A: "~@10 [a0,a1,a2] ~@5", B: "[a0,a1,a2] ~@5 [a0,a1,a2] ~@5 [a0,a1,a2] ~@3",
  C: "~@2 [a1,a2] ~@5 [a1,a2] ~@5 [a1,a2] ~", D: "~@4 [a1,a2] ~@5 [a1,a2] ~@3 [a1,a2] ~",
  E: "~@3 [a1,a2] ~@3 [a1,a2] ~@3 [a1,a2] ~@4", F: "[a1,a2] ~@3 [a1,a2] ~@3 [a1,a2] ~@3 [f1,f2] ~@3",
  G: "[f1,f2] ~@3 [f1,f2] ~@3 [f1,f2] ~@3 [f1,f2] ~@3", H: "[f1,f2] ~@3 [f1,f2] ~@3 [f1,f2] ~@3 [d1,d2] ~@3",
  I: "[d1,d2] ~@3 [d1,d2] ~@3 [d1,d2] ~@3 [d1,d2] ~@3", J: "[d1,d2] ~@3 [d1,d2] ~@3 [d1,d2] ~@3 [a1,a2] ~@3",
  K: "[a1,a2] ~@3 [a1,a2] ~@3 [a1,a2] ~@3 [c2,c3] ~@3", L: "[c2,c3] ~@3 [c2,c3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3",
  M: "[d2,d3] ~@3 [d2,d3] ~@3 [a1,a2] ~@3 [a1,a2] ~@3", N: "[a1,a2] ~@3 [a1,a2] ~@3 [a1,a2] ~@3 [a1,a2] ~@3",
  O: "[a1,a2] ~@3 [a1,a2] ~@3 [f1,f2] ~@3 [f1,f2] ~@3", P: "[f1,f2] ~@3 [f1,f2] ~@3 [d1,d2] ~@3 [d1,d2] ~@3",
  Q: "[d1,d2] ~@3 [d1,d2] ~@3 [a1,a2] ~@3 [a1,a2] ~@3", R: "[a1,a2] ~@3 [a1,a2] ~@3 [c2,c3] ~@3 [c2,c3] ~@3",
  S: "[c2,c3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3", T: "[d2,d3] ~@3 [a1,a2] ~@3 [a1,a2] ~@3 [a1,a2] ~@3",
  U: "[a1,a2] ~@3 [f1,f2] ~@3 [f1,f2] ~@3 [f1,f2] ~@3", V: "[f1,f2] ~@3 [d1,d2] ~@3 [d1,d2] ~@3 [d1,d2] ~@3",
  W: "[d1,d2] ~@3 [a1,a2] ~@3 [a1,a2] ~@3 [a1,a2] ~@3", X: "[a1,a2] ~@3 [c2,c3] ~@3 [c2,c3] ~@3 [c2,c3] ~@3",
  Y: "[d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3", Z: "[c2,c3] ~@3 [c2,c3] ~@3 [c2,c3] ~@3 [c2,c3] ~@3",
  AA: "[c2,c3] ~@3 [c2,c3] ~@3 [c2,c3] ~@3 [d2,d3] ~@3", AB: "[d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@3 [a1,a2] ~@3",
  AC: "~ [a1,a2] ~@3 [a1,a2] ~@4 [a1,a2] ~@3 [a1,a2] ~", AD: "~@3 [a1,a2] ~@4 [a1,a2] ~@4 [a1,a2] ~@2",
  AE: "[~@2 [a1,a2]@61 ~]/4", // A
})).s("gm_string_ensemble_1").gain(0.5)

// other · pad choir
const pad_choir = note("<~@38 A@5 ~@15>".pickRestart({
  A: "[c6@8 ~@7 c6@8 ~@7 c6@8 ~@7 c6@8 ~@7 c6@8 ~@12]/5",
})).s("gm_pad_choir").gain(0.25).pan(0.8)

// drums · triangle
const triangle = s("triangles:30").struct("<~@32 [~ x] ~@25>").gain(1.34)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<[~ x ~@2] ~@4 [~@3 x] ~@3 [~@3 x] ~@48>").gain(1.34)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@41 [~ x] ~@16>").gain(2.44)

stack(lead_3_calliope, lead_3_calliope_soft, bass, pad_choir, triangle, triangle_2, bell_tree)

More by Kate Bush