Strudelify
The X-Files cover art

The Snow Files - the Film Music of Mark Snow

The X-Files

Mark Snow

KeyA minorTempo120 bpm
0:00/0:00
// The X-Files — Mark Snow
// 120 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 103 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · electric bass finger
const bass = note(`<
  ~@2 A@4 B A@14 C@2 A@3 C A D A C A@3 C A@3 C A@3 D A@3 C A@3 D A@3 D A@3 D A@2 D A ~@12 E@2 F@2 E@8 G@4 E@2 ~@10
>`.pickRestart({
  A: "a1@23 ~", B: "a0", C: "a1@19 ~ e1@2 g1@2", D: "a1@21 ~ g1@2", E: "[a1@23 ~]/2", F: "[a1@23 g1]/2",
  G: "[a1@95 ~]/4",
})).s("gm_electric_bass_finger").gain(0.42)

// chords · synth strings 1
const synth_strings_1 = note("<~@2 A@8 ~@65 B@8 ~@9 C@4 D@7>".pickRestart({
  A: "[e3,a3,b3,c4,e4]/8", B: "[a1,a2]/8", C: "b3/4", D: "c4/7",
})).s("gm_synth_strings_1").gain(0.09).pan(0.6)

// other · pad halo
const pad_halo = note("<~@10 A@8 ~@85>".pickRestart({
  A: "a6/8",
})).s("gm_pad_halo").gain(0.13)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@9 A@8 ~@6 B@2 C@2 D@2 E@2 F@2 C@2 D@2 E@2 G@4 H@4 G@4 H@4 I@2 J@2 K@8 L@8 M@2 N@2 M@2 N@2 O@8 ~ P@4 Q@7
>`.pickRestart({
  A: "[~ [e3,a3,b3,c4,e4]@15]/8", B: "[~@11 [a3,c4,e4]@5, [a4,c5,e5]@37 ~@11]/2", C: "[[e3,a#3,e4,a#4,d#5]@23 ~]/2",
  D: "[[d3,g#3,c4,d4,g#4,c5]@23 ~]/2", E: "[[c3,f#3,b3,c4,f#4,b4]@23 ~]/2", F: "[[a3,c4,e4,a4,c5,e5]@23 ~]/2",
  G: "[[c3,e3,a3,c4,e4]@95 ~]/4", H: "[[c3,f3,a3,c4,f4]@95 ~]/4", I: "[[d#3,f#3,b3,d#4,f#4,b4]@47 ~]/2",
  J: "[[d3,f3,a3,b3,d4,f4,b4]@47 ~]/2", K: "[~@7 e7@4 a6@5, [a2,e3,a3,c4,e4,a4] ~]/8", L: "[~ e7@6 a6@9]/8",
  M: "[[a5,c6,e6,a6]@23 ~]/2", N: "[[a5,b5,e6,a6]@23 ~]/2", O: "[~@7 e5, [a5,e6,a6]]/8",
  P: "[[d#3,f#3,a3,b3]@4 ~@3 [e5,b5,e6,b6], [a5,e6,a6]@7 ~, ~ [d3,f3,a3,b3]]/4", // B7 E5 A5 Bm7b5
  Q: "[[a2,e3,a3,c4], [a4,e5,c7]@83 ~]/7", // Am
})).s("gm_string_ensemble_2").gain(0.1)

// other · pad poly
const pad_poly = note(`<
  ~@2
  [a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~]!21
  ~@42
  [a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~]!27
  ~@4
  [a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~ a2 ~ e3 ~]!6
  [a2 ~ e3 ~ a2 ~@19]
>`).s("gm_pad_poly").gain(0.2).pan(0.4)

// other · whistle
const whistle = note(`<
  ~@3 A B C A D E F G H F I E A B E A D E J C ~@15 J K L M@2 K L N O P Q R@2 L S T U V@2 W@2 X@2 Y@2 B C A D E F G H F I
  E A B C ~ A D E F G H F I E A Z A Z ~@12
>`.pickRestart({
  A: "~@18 a5@5 ~", B: "e6@5 ~ d6@5 ~ e6@6 g6@5 ~", C: "e6 ~@2", D: "e6@5 ~ d6@5 ~ e6@6 a6@6", E: "e6@5 ~@7",
  F: "~@18 c7@5 ~", G: "b6@5 ~ a6@6 g6@6 a6@5 ~", H: "e6 ~", I: "b6@5 ~ a6@5 ~ g6@5 ~ b6@6", J: "~@18 a6@5 ~",
  K: "e7@19 ~ d7 ~ b6 ~", L: "c7@19 ~ b6 ~ g6 ~", M: "[a6@9 ~ b6 ~ e6@28 ~@2 a6@5 ~]/2", N: "a6 e6", O: "d6@3 ~",
  P: "c7@18 ~ b6 ~ g6 ~@2", Q: "a6@17 ~@2 c7 ~ g6 ~@2", R: "[a6@11 ~ e6@30 ~@6]/2", S: "a6@19 ~@2 c7@2 g6",
  T: "~ a6@11 e6@11 ~", U: "d6@23 ~", V: "[d#6@11 ~ f#6@23 ~ a6@11 ~]/2", W: "[d6@11 ~ f6@23 ~ b6@10 ~@2]/2",
  X: "[a6@33 ~@3 b6@10 ~@2]/2", Y: "[a6@33 ~@9 a5@5 ~]/2", Z: "e6 ~@3",
})).s("gm_whistle").gain(0.21)

// other · pad choir
const pad_choir = note("<~@19 A@4 ~@69 B@4 C@7>".pickRestart({
  A: "e4/4", B: "[a3@7 b3]/4", C: "c4/7",
})).s("gm_pad_choir").gain(0.13).pan(0.4)

// other · bassoon
const bassoon = note("<~@39 A@16 B@5 A C@2 ~@40>".pickRestart({
  A: "~ b3@12 a3@11", B: "[~ b3@48 b3@48 b3@12 a3@11]/5", C: "[~ b3@12 a3@35]/2",
})).s("gm_bassoon").gain(0.15).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@2 A ~@13 A ~@6 A ~@38 B A@2 C A@2 C A@2 C A@3 D E D@21 A ~@4>".pickRestart({
  A: "x", B: "~@11 x", C: "x ~@10 x", D: "x!2", E: "x ~@5 x ~@4 x",
})).gain(0.5)

// drums · rim
const rim = s("rim").struct("<~@4 A@18 B C A@46 B A@11 B A@15 ~@5>".pickRestart({
  A: "x!8 ~ x ~@2", B: "x!12", C: "x!10 ~@2",
})).gain(0.15)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@4 A@18 ~ B A@46 ~ A@11 ~ A@15 ~@5>".pickRestart({
  A: "~@8 x ~ x!2", B: "~@10 x!2",
})).gain(0.05)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@2 A ~@13 A ~@6 A ~@39 A ~ A ~ A ~ A ~@2 A ~@2 A ~ A B A B A C A D A ~ E ~@2 A ~@7 A ~@4
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~@11 x", D: "~@10 x!2", E: "x ~@10 x",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<[x!2] [x!4] ~@101>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@82 [~@5 x] ~ [~@3 x] ~@18>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@63 x ~@39>").gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<~@62 A B@2 C B@2 C B@2 C B@3 D E D@21 B ~@4>".pickRestart({
  A: "~@11 x", B: "x", C: "x ~@10 x", D: "x!2", E: "x ~@5 x ~@4 x",
})).gain(0.45)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@2 A ~@13 A ~@46 A ~@11 A ~@27>".pickRestart({
  A: "x",
})).gain(1.29)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@97 x ~@5>").gain(1.77)

stack(
  bass, synth_strings_1, pad_halo, string_ensemble_2, pad_poly, whistle, pad_choir, bassoon, kick, rim, rim_soft,
  low_tom, hihat, mid_tom, ride, tambourine, jingle_bells, bell_tree
)