Strudelify

Deference for Darkness

Martin O'DonnellMichael Salvatori

KeyA♭ majorTempo65 bpm
0:00/0:00
// Deference for Darkness — Martin O'DonnellMichael Salvatori
// 65 bpm, 4/4, key Ab major. 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 (4/4 at bar 1, 3/4 at bar 27, 6/8 at bar 28, 4/4 at bar 38) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5903532; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 50 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(65/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.

// chords · piano
const piano = note("<A@4 B@4 C@6 D E F@3 E G H I J@7 K@8 L M@2 N@8 ~>".pickRestart({
  A: "[~@39 [db5,ab5]@25, ~@44 ab4@4 g6@54 ab4@13 bb3 [f4,gb4]@76, ~@45 eb5@56 db4@91, ~@46 f5@12 f4@2 db5 ab5 eb6@42 [f5,c6]@88, ~@47 c6@12 c5@44 bb4@89]/4", // Db5 Gbmaj7 F5
  B: "[~@25 [ab4,eb5]@7, ~@22 f3@64 ab3@57 [c4,eb4,bb4]@49, ~@30 c4@56 eb4@7 ab4@15 f5@84, ~@30 [eb4,bb4]@7 ab4@42 db3@29 bb4@28 f3@56, ~@37 eb5@49 bb4@7 g5@96 ~@3]/4", // Ab5 Cm7 Eb5
  C: "[~@35 ab3, ~ db3@56 f3@64 [ab3,eb4]@21 bb4@15 eb5@7 db5@21 bb4@43 db3@28 bb3@15 f4@17, ~@8 ab3@56 c4@64 ab4@7 ab5@43 db4@57 ab3@6 [c4,ab4]@47, ~@8 [eb4,bb4]@7 c4@14 g4@35 [eb4,bb4]@8 eb5@49 bb4@7 g5@43 f3@64 [eb4,bb4]@53, ~@15 ab4@35 bb3@22 ab4@42 db3@28 f5@36 [c4,ab4]@7 eb5@64 g4@39]/6", // Ab5 Fm Eb5 Fm
  D: "~@15 c3, [f2,c3], g3!2 g3@2 g3 g3@2 g3, ~ ab3@2 ab3@2 ab3@2 ab3@2 ab3@2 ab3@2 ab3@3, ~@3 bb3@3 bb3@2", // F5
  E: "~@15 c3, [f2,g5]@7 g3, ~ c3@12 ab3@3, ~ g3 c5@6, ~@3 ab3 g3 ab3 bb3 ab3 g3 ab3 g3 ab3 bb3@4", // Fsus2
  F: "[~@15 c3 ~@15 ab2 ~@15 f3, f2@13 ab3 g5@15 g3 f3@2 ~ ab2@8 ab3 g3 f3 g3 ab3 g3@2, ~ c3@7 g3 ab3 g3 ab3 bb3@2 g3@2 db2@16 db2@16, ~@2 g3@2 g5@2 bb3 ab3 bb5@8 ~@2 f3 g3 f3 g3 ab3 g3 bb4@24, ~@3 ab3 g3 ab3 ab5@10 ~ ab2@7 f3 g3 f3 g3 ab3@4 ~@2 f3 g3 f3 g3 ab3 g3 bb3@8]/3",
  G: "~@15 c3, f2@39 ab3 g5@2 g3@2 f5@4, ~ c3@10 ab3 [bb3,ab5]@4, ~@3 g3@3 g5@9 g3 bb5@8, ~@9 ab3@3 g3@3 ab3@3 [bb3,ab5]@3 ab3@3 [g3,bb5]@3 ab3 c6@20", // Bb7 Gm
  H: "~@15 [ab2,db5], db2@8 f3 g3 f3 g3 ab3 g3 [f3,eb5]@2, f5@2 f3 g3 f3 g3 ab5@10, ~ g5@47, ~ ab2@5 ab3 g3 f5@8", // Db5 F7
  I: "~@15 c4, [db2,c5]@8 bb3 ab3 [g3,ab4] f3 g3 ab3 [bb3,g4]@2, ~ ab2@15, ~@2 f3@2 f3@2 ab3 g3 bb4@8, ~@3 g3@2 g3 db5@10", // Dbmaj7 Abmaj7 Eb
  J: "[c5@18 c5@6 ~@12 [eb4,bb4]@24 ~@40 ab4@8 ~@24 [eb4,bb4]@96 ~@60 [eb3,ab3]@12 ~@24 c3@11 bb2, [f3,c4,f4,ab4]@24 [gb3,db4,ab4,c5]@36 [f3,c4]@66 db5@96 ~@12 g3@19 f2@12 eb3@8 ab3@4 [f2,d3,g3]@4 ab3@4 g3@16 ~@35, ~@60 ab4@32 c5@16 [gb3,db4,ab4,c5]@96 ~@26 [f2,c3]@19 ab3@4 c3@4 g3@14 bb3@29 ~@36, ~@60 c5@24 f5@96 ~@58 ab3@4 bb3@19 ab3@4 [c3,c4]@35 [db2,ab2]@36, ~@78 g5@96 ~@68 [ab2,db3]@59 ~@11 bb2@23 ~]/7", // Eb5 Ab5 Fm Gbsus2 F5 G7 Gbsus2 F5 …
  K: "[~@124 [eb4,eb5]@4 ~@43 [eb4,eb5]@4 ~@43 [eb4,eb5]@4 ~@42 [eb4,eb5]@4 ~@24 c4@92, ~@11 [f2,c3]@19 ab3@4 c3@4 g3@8 eb3@8 ab3@4 [f2,c3]@11 [eb3,ab3]@8 bb3@8 bb3@8 ab3@12 bb3@15 [db4,db5]@8 [f4,f5]@39 [db4,db5]@8 ~@8 [gb4,gb5]@39 ~@11 b3@12 db4@12 b3@96 ~@31, ~@15 g3@19 f2@12 c3@6 bb3@6 g3@4 ab3@4 g3@16 ~@7 c4@39 ~@8 [gb4,gb5]@39 [f4,f5]@15 [ab4,ab5]@4 [f4,f5]@4 [gb3,eb4,eb5]@12 ab3@12 bb3@39 db4@7 [ab2,eb3,bb3,eb4,eb5]@96 ~@20, ~@19 ab3@4 bb3@19 ab3@4 c4@35 [gb2,db3,gb3]@47 ~@12 ab3@35 ~@11 f3@28 [db4,db5]@8 [eb4,eb5]@39 db5@96 ~@27, ~@23 [ab2,db3]@59 ~@11 db4@23 ab3@12 [gb3,b3]@12 db4@4 [eb4,eb5]@7 [gb3,b3,db4,db5]@8 [eb4,eb5]@4 f3@12 [eb2,bb2,eb3]@47 [b2,gb3]@58 db4@96 ~@8]/8", // Eb F5 Ab5 Db F Db Gb F …
  L: "~@3 [ab4,eb5]@5, ~@5 f3@43, ~ [c4,eb4,bb4]@3", // Ab5 Cm7
  M: "[~@37 [ab4,eb5]@11, ~@9 db3@26 bb4@26 f3@7 [c4,eb4,bb4]@28, ~ ab3@5, ~@16 eb4@6 ab4@13 f5@61, ~@8 bb4@3 g5@37]/2", // Ab5 Cm7
  N: "[~@163 g6@29, ~@17 db3@52 f3@59 bb4@6 g5@39 f3@59 [eb4,bb4]@37 f4@51 eb5@4 c6@60, ~@24 ab3@52 c4@58 ab4@7 ab5@39 db4@52 ab3@7 c4@38 ab3@45 f5@62, ~@24 [eb4,bb4]@6 c4@13 g4@33 [eb4,bb4]@6 eb5@46 [ab3,eb4]@19 bb4@13 eb5@7 db5@19 bb4@39 db3@28 bb3@66 ab4@65, ~@30 ab4@33 bb3@19 ab4@39 db3@26 f5@33 [c4,ab4]@6 eb5@53 ab4@7 g4@40 [f2,c3,g3]@98]/8", // Eb5 Ab5 Fm Fsus2
})).s("gm_piano").gain(0.3)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<A@5 B@3 C@6 D E F@3 E G H I J@4 K@2 L@8 ~@13>".pickRestart({
  A: "[~@11 c6@49]/5",
  B: "[~@3 ab5@14 g5@14 ~@29 bb5@14 ab5@14 ~@28 f5@14 eb5@14, ~@3 c6@57 ~@28 g5@56, ~@31 c5@85 ~@28]/3",
  C: "[~@29 bb5@14 g5@14 ~@29 c5@14 bb4@14 ~@28 eb5@14 ~ db5@14 ~@28 g4@14 f4@14 ~ g4@7 c4@53, ~ bb4@85 ~@28 ab4@85 ~@89, ~@57 f5@85 ~@29 c5@117]/6",
  D: "g3 ab3 g3 ab3 g3 ab3 bb3 ab3 g3 ab3 g3 ab3 bb3 ab3 g3 c3",
  E: "f2 c3 g3 ab3 g3 ab3 bb3 ab3 g3 ab3 g3 ab3 bb3 ab3 g3 c3, g5 c5@3",
  F: "[f2 c3 g3 ab3 g3 ab3 bb3 ab3 g3 ab3 g3 ab3 bb3 ab3 g3 c3 db2 ab2 f3 g3 f3 g3 ab3 g3 f3 g3 f3 g3 ab3 g3 f3 ab2 db2 ab2 f3 g3 f3 g3 ab3 g3 bb3 ab3 g3 f3 g3 ab3 g3 f3, ~@2 g5 ab5 bb5@3 g5@5 bb4@6 ~@6]/3",
  G: "f2@3 c3@3 g3@3 ab3@3 g3@3 ab3@3 bb3@3 ab3@3 [g3,bb5]@3 ~@3 g3@2 ~ ab3@3 [bb3,ab5]@3 ~@3 g3@2 ~ c3@3, ~@4 g5@2 ab5@2 ~ ab3 ~@3 ab3 ~@2, ~@7 c6 bb5 ~ g5 f5", // Gm Bb7
  H: "f5 ~@2 ab2@3 f3@3 g3@3 f3@3 g3@3 ab3@3 g3@3 f3@3 g3@3 f3@3 g3@3 ab3@3 g3@3 [f3,eb5]@3 [ab2,db5]@3, db2 ~@15, ~ g5@17 ab5@6 f5@18 ~@6", // F7 Db5
  I: "db2 ab2 f3 g3 f3 g3 ab3 g3 bb3 ab3 g3 f3 g3 ab3 bb3 c4, c5@3 db5 bb4 ab4@2 g4",
  J: "[c5@9 c5@3 [db4,ab4]@6 [eb4,bb4]@12 c5@9 g5@3 f5@4 c5@4 ab4@4 c5@9 db5@3 [eb4,bb4]@12 ~@18, c6@15 ab4@10 ~@2 db4@6 ~@15, [f3,c4,f4]@2 [gb3,c5]@3 [f3,c4]@4 [gb3,ab4]@4 ~@3]/4", // Db5 Eb5 F5 Gbdim F5 Gbsus2
  K: "[~@42 g3@4 ab3@4 bb3@7 ab3@4 ~@4 g3@4 ab3@4 c4@6 bb3@2 ab3@4 g3@4 ab3@4 g3@3, ~@19 f2@29, ~@38 c3@12 db3@11 c3@12 eb3@12 d3@11]/2",
  L: "[ab3@8 ~@8 ab3@4 g3@4 bb2@12 c3@11 bb2@12 ~@4 g3@4 ab3@4 bb3@7 ab3@4 ~@4 g3@4 ab3@4 c4@6 bb3@2 ab3@4 g3@4 ab3@4 g3@3 ab3@8 ~@8 bb3@4 c4@4 ab3@12 bb3@11 ~@4 [db4,db5]@4 [eb4,eb5]@4 [f4,f5]@8 [gb4,gb5]@8 [eb4,eb5]@7 [db4,db5]@8 [eb4,eb5]@8 [db4,db5]@4 [eb4,eb5]@4 [f4,f5]@8 [gb4,gb5]@7 [ab4,ab5]@4 [f4,f5]@4 [eb4,eb5]@16 [db4,db5]@4 [eb4,eb5]@4 bb3@11 b3@12 db4@12 ~@4 [db4,db5]@3 [eb4,eb5]@4 [ab2,eb3,ab3,eb4,eb5]@47 ~@21, eb3@12 db2@47 f2@70 [gb2,db3]@47 [b2,gb3]@47 [eb2,bb2]@47 [b2,gb3]@47 ~@67, ~@8 bb3@8 ~@8 f3@35 c3@12 db3@11 c3@12 eb3@12 d3@11 eb3@12 gb3@12 ~@23 ab3@12 ~@129 b3@12 ~@67, ~@125 bb3@8 ~@8 db4@27 ~@102 [eb4,eb5]@39 ~@75]/8", // Db Eb F Gb Eb Db Eb Db …
})).s("gm_string_ensemble_1").gain(0.3)

stack(piano, string_ensemble_1)