Strudelify

Dio Morto

Nomadi

KeyE majorTempo113 bpm
0:00/0:00
// Dio Morto — Nomadi
// 113 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 10, 4/4 at bar 10, 2/4 at bar 16, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 24.
setcpm(113/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
const bass = note(`<
  ~ A B C D E F G H I J K L@2 M@2 N I O P Q R Q R S T U V W X Y Z AA M AB I O AC AD AE AF M@2 I@2 AG AH AI AH AI AH U S
  AJ A B C D E F M AB I AG AH AI AH AI AH AK AL@5 AM AN
>`.pickRestart({
  A: "~@7 a2!2 ~ g#2@6", B: "e2@7 ~ e2@7 ~", C: "e2 ~ e2 ~ e2@2 d#2@2 c#2@2 c#2@2 g#2@2 a2@2",
  D: "c#2@2 c#2@2 g#2@2 a2@2 c#2 ~ c#2@2 g#2@2 a2@2", E: "c#2 ~ c#2@2 g#2@2 a2@2 a1@2 a1@2 e2@2 a2@2",
  F: "a1@2 a1@2 e2@2 a2@2 a1 ~ a1@2 e2@2 a2@2", G: "a1 ~ a1@2 e2@2 a2@2 b1@2 b1@2 f#2@2 b2@2",
  H: "b1@2 b1@2 f#2@2 b2@2 b1 ~ b1@2 f#2@2 b2@2", I: "b1 ~ b1@2 f#2@2 b2@2 b1 ~ b1@2 f#2@2 b2@2",
  J: "e2 g#2 f#2 g#2 a2 g#2!2 f#2", K: "e2!2 g#2 f#2 a2 g#2 e2 d#2", L: "c#2!2 g#2!2 a2 g#2!2 e2",
  M: "a1 ~ a1@2 e2@2 a2@2 a1 ~ a1@2 e2@2 a2@2", N: "a1 ~ a1@2 e2@2 a2@2 b1 ~ b1@2 f#2@2 b2@2",
  O: "b1 ~ b1@2 f#2@2 b2@2 e2@2 g#2@2 f#2@2 g#2@2", P: "a2 g#2 f#2 e2 c#2 e2 a2 c#2",
  Q: "b1@2 d#2@2 e2@2 d#2@2 e2 ~ g#2@2 f#2@2 g#2@2", R: "a2 ~ g#2@2 f#2@2 e2@2 c#2@2 e2@2 a2@2 c#2@2",
  S: "b1@2 d#2@2 e2@2 d#2@2 f#2 ~ d#2@2 e2@2 d#2@2", T: "b1@3 ~@5 b1@2 d#2@2 e2@2 d#2@2",
  U: "f#2 ~ d#2@2 e2@2 d#2@2 b1@3 ~@5", V: "~@15 a2", W: "a2 ~ g#2@6 e2@7 ~", X: "e2@7 ~ e2 ~ e2 ~ e2@2 d#2@2",
  Y: "c#2!2 g#2 a2 c#2!2 g#2 a2", Z: "c#2 ~ c#2@2 g#2@2 a2@2 c#2 ~ c#2@2 g#2@2 a2@2", AA: "a1!2 e2 a2 a1!2 e2 a2",
  AB: "b1!2 f#2 b2 b1!2 f#2 b2", AC: "a2 g#2!2 f#2 e2!2 g#2 f#2", AD: "a2 g#2 e2 d#2 c#2!2 g#2!2",
  AE: "a2 g#2!2 e2 c#2!2 g#2!2", AF: "a2@2 g#2@2 g#2@2 e2@2 a1 ~ a1@2 e2@2 a2@2", AG: "e2 g#2 f#2 g#2 a2 g#2 f#2 e2",
  AH: "c#2 e2 a2 c#2 b1 d#2 e2 d#2", AI: "e2 ~ g#2@2 f#2@2 g#2@2 a2 ~ g#2@2 f#2@2 e2@2", AJ: "b1@3 ~@13",
  AK: "f#2 ~ d#2@2 e2@2 d#2@2 b1@7 ~", AL: "b1 d#2 e2 d#2 f#2 d#2 e2 d#2", AM: "b1@3 ~@5 b2@2 a2@2 g#2@2 f#2 ~",
  AN: "e2@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.58)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A@2 B@4 C@2 D E F G H I ~ J@2 K@2 L M N M O P@2 Q R@2 S@2 T@2 O ~ U ~ V@2 W@2 X Y Z AA AB AC AD AC AE@2 AF@2 A@2 B@4
  AG O AH AA AB AC AD AC AE@2 AF@4 AI AJ AK
>`.pickRestart({
  A: "[~@7 [c#5,e5,a5]!2 ~@15 e2@7 ~, ~@10 [b4,e5,g#5]@19 ~@3]/2", // A E
  B: "[~@2 g#2@2 b2@2 c3@2 c#3@25 ~ c#3@2 e3@2 c#3@2 a2@18 ~@6]/4", C: "[~@2 g#2@2 a2@2 a#2 ~ b2@16 ~@8]/2",
  D: "~@4 e3 d#3 c#3 b2", E: "e2 ~", F: "~@5 g#2 b2 c3", G: "c#3", H: "~@5 c#3 e3 c#3", I: "a2",
  J: "[~@2 g#2@2 a2@2 a#2@2 b2@11 ~@13]/2", K: "[b2@2 a2@2 g#2@2 f#2 ~ e2@16 a2@6 ~@2]/2", L: "b2@8 e2@7 ~",
  M: "e3@2 d#3@2 c#3@2 b2@2 a2@7 ~", N: "b2@6 ~@2 e2@7 ~", O: "b2", P: "[~@2 b2@5 ~]/2", Q: "~@15 [c#5,e5,a5]",
  R: "[[c#5,e5,a5] ~@15 e2@7 ~@3 g#2@2 b2@2 c3@2, ~@2 [b4,e5,g#5]@19 ~@11]/2", S: "[c#3@25 ~ c#3@2 e3@2 c#3@2]/2",
  T: "[a2@18 ~@8 g#2@2 a2@2 a#2 ~]/2", U: "e3 d#3 c#3 b2 e2@4", V: "[~ g#2 b2 c3 c#3@8 ~@4]/2",
  W: "[~ c#3 e3 c#3 a2@8 ~@4]/2", X: "~@5 g#2 a2 a#2", Y: "b2@11 ~@5", Z: "~@8 b2@2 a2@2 g#2@2 f#2 ~", AA: "e2",
  AB: "a2@3 ~ b2@4", AC: "e2@7 ~ e3@2 d#3@2 c#3@2 b2@2", AD: "a2@7 ~ b2@6 ~@2", AE: "[a2@7 ~ b2@17 ~@7]/2",
  AF: "[b2@5 ~@3]/2", AG: "~@10 g#2@2 a2@2 a#2 ~", AH: "~@4 b2 a2 g#2 f#2", AI: "b2@15 ~",
  AJ: "b2@3 ~@5 b2@2 a2@2 g#2 ~ f#2 ~", AK: "e2 ~@7",
})).s("gm_electric_guitar_clean").gain(0.46).pan(0.7)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@10 A@2 B@2 C@2 D E F G H G H G I J K ~@9 L A M B N C@2 E@2 O P O P O P K I Q ~@4 R S@2 T E O P O P O P K I@5 U V
>`.pickRestart({
  A: "[b5,e6] ~@3 [b5,e6] ~@3 [b5,e6] ~@3 [b5,e6] ~@3", B: "[c#6,e6] ~@3 [c#6,e6] ~@3 [c#6,e6] ~@3 [c#6,e6] ~@3",
  C: "[a5,c#6] ~@3 [a5,c#6] ~@3 [a5,c#6] ~@3 [a5,c#6] ~@3", D: "[a5,c#6] ~@3 [a5,c#6] ~@3 [d#6,f#6] ~@3 [d#6,f#6] ~@3",
  E: "[d#6,f#6] ~@3 [d#6,f#6] ~@3 [d#6,f#6] ~@3 [d#6,f#6] ~@3", // D#m
  F: "[d#6,f#6] ~@3 [d#6,f#6] ~@3 [b5,e6] ~ [b5,e6] ~ [b5,e6] ~ [b5,e6] ~", // D#m E5
  G: "[b5,e6] ~ [b5,e6] ~ [b5,e6] ~ [b5,e6] ~ [c#6,e6] ~ [c#6,e6] ~ [c#6,e6] ~ [c#6,e6] ~", // E5 C#m
  H: "[d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [b5,e6] ~ [b5,e6] ~ [b5,e6] ~ [b5,e6] ~", // D#m E5
  I: "[d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~", // D#m
  J: "[d#6,f#6] ~@7 [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~", // D#m
  K: "[d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~@7", L: "~@8 [b5,e6] ~@3 [b5,e6] ~@3",
  M: "[b5,e6] ~@3 [b5,e6] ~@3 [c#6,e6] ~@3 [c#6,e6] ~@3", N: "[c#6,e6] ~@3 [c#6,e6] ~@3 [a5,c#6] ~@3 [a5,c#6] ~@3",
  O: "[b5,e6] ~ [b5,e6] ~ [b5,e6] ~ [b5,e6] ~ [b5,e6] ~ [b5,e6] ~ [b5,e6] ~ [b5,e6] ~", // E5
  P: "[c#6,e6] ~ [c#6,e6] ~ [c#6,e6] ~ [c#6,e6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~ [d#6,f#6] ~", Q: "[d#6,f#6] ~@15",
  R: "~@8 [e6,a6] ~@3 [e6,a6] ~@3", S: "[e6,a6] ~@3 [e6,a6] ~@3 [e6,a6] ~@3 [e6,a6] ~@3",
  T: "f#6@2 ~@2 [d#6,f#6] ~@3 [d#6,f#6] ~@3 [d#6,f#6] ~@3, d#6 ~@15", // D#m
  U: "f#6@2 ~@12 [b3,c#4,d#4,e4] [f#4,g#4,a#4,b4,c#5], d#6 ~@15", V: "[g#5,b5,e6]@3 ~@13, [d#5,e5,f#5] ~@15",
})).s("gm_drawbar_organ").gain(0.25).pan(0.8)

// other · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@3 A B C D E F G H I J@2 K@2 L M N O P Q P R S@2 T@2 ~@2 B@2 D U F@2 V W X Y@2 Z@2 AA@2 AB AC AD AE AD AF AG AH AI
  ~@2 A B AJ Z@2 AK@2 AB AC AD AE AD AL AM AN@5 AO AP
>`.pickRestart({
  A: "~@4 c#5 g#5 c#5 g#5", B: "c#5 g#5 c#5 g#5 c#5 g#5 c#5 g#5", C: "c#5 g#5 c#5 g#5 c#5 e5 c#5 e5",
  D: "c#5 e5 c#5 e5 c#5 e5 c#5 e5", E: "c#5@2 e5@2 c#5@2 e5 ~ d#5@2 f#5@2 d#5@2 f#5@2",
  F: "d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5", G: "d#5 f#5 d#5 f#5 e5 d#5 c#5 b4", H: "b4 ~@3 e4@2 a4@2 g#4@2 b4 ~ b4@2 a4@2",
  I: "b4@2 e4@2 g#4 b4 g#4 b4", J: "c#5@2 e4@2 g#4 c#5 g#4 b4", K: "c#5@2 e4@2 a4 c#5 a4 b4", L: "c#5 e4 d#5 f#5",
  M: "d#5 b4 c#5 b4 d#5@2 f#5@2", N: "d#5 b4 c#5 b4 b4@2 e4@2", O: "g#4@6 b4 ~ c#5@3 e4@5",
  P: "d#5@3 f#5@3 d#5@2 b4@4 e4@4", Q: "g#4@6 b4@2 c#5@3 e4@3 c#5@2", R: "g#4@6 b4@2 c#5@3 a4@3 c#5@2",
  S: "[b4@3 f#5@3 d#5@2 b4@14 ~@10]/2", T: "[~@4 b4@2 a4@2 [f#4,b4,d#5]@15 ~@9]/2",
  U: "c#5@2 e5@2 c#5@2 e5@2 c#5@2 e5@2 c#5@2 e5 ~", V: "e5@2 d#5@2 c#5@2 b4@2 b4 ~@3 e4@2 a4@2",
  W: "g#4@2 b4 ~ b4@2 a4@2 b4@4 e4@4", X: "g#4 b4 g#4 b4 c#5@2 e4@2", Y: "g#4 c#5 g#4 b4 c#5@2 e4@2",
  Z: "a4 c#5 a4 b4 c#5@2 e4@2", AA: "d#5@2 f#5@2 d#5 b4 c#5 b4", AB: "b4@4 e4@4 g#4@6 b4 ~",
  AC: "c#5@3 e4@5 d#5@3 f#5@3 d#5@2", AD: "b4@2 e4@2 g#4@3 b4", AE: "c#5@3 e4@3 c#5@2 d#5@3 f#5@3 d#5@2",
  AF: "c#5@3 a4@3 c#5@2 b4@3 f#5@3 d#5@2", AG: "b4@7 ~", AH: "~@6 b4 a4", AI: "[f#4,b4,d#5]@15 ~",
  AJ: "c#5 g#5 c#5 g#5 c#5@2 e4@2", AK: "d#5@3 ~ f#5@4 d#5@2 b4@2 c#5@2 b4@2", AL: "c#5@3 a4@3 c#5@2 d#5@3 f#5@3 d#5@2",
  AM: "[d#4,f#4,b4]@13 ~@3", AN: "b4@3 f#5@3 d#5@2 e5@3 d#5@4 ~", AO: "b4@3 ~@13", AP: "e5@3 ~@13",
})).s("gm_electric_guitar_clean").gain(0.37).pan(0.3)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~ A@6 B@3 ~@17 C D@2 E@2 F@2 G@2 H@7 I@2 J K J K J L@2 M N O@7 P@2 J K J K J L@2 Q@4 M R S
>`.pickRestart({
  A: "[~@7 [a3,c#4,e4]!2 ~ [e2,g#3,b3]@29 ~ [g#3,c#4]@32 a3@24, ~@72 c#4 ~@23]/6", // A E C#5
  B: "[~@2 g#3@2 a3@2 a#3@2 ~@16 f#4@16 e4@2 d#4@2 c#4@2 b3 ~, ~@8 [f#3,b3]@39 ~]/3", C: "~@15 [a3,c#4,e4]",
  D: "[[a3,c#4,e4] ~ [e2,g#3,b3]@29 ~]/2", E: "[g#3,c#4]/2", F: "[a3@25 ~ g#3@2 a3@2 a#3@2, c#4 ~@31]/2",
  G: "[~ f#4, [f#3,b3]]/2", H: "[e4@2 d#4@2 c#4@2 b3 ~ [b3,e4]@32 [c#4,e4]@31 ~ [a3,e4]@39 ~]/7",
  I: "[b3@12 b3 a3 g#3 f#3, d#4]/2", J: "[b3,e4]@15 ~", K: "[a3,c#4]@7 ~ [b3,d#4]@8",
  L: "[[a3,c#4]@7 ~ [b3,d#4]@15 ~ [f#3,b3,d#4]@2 ~@6]/2", M: "[b3,d#4]@15 ~", N: "[f#3,b3,d#4] ~@7",
  O: "[~@7 [a3,c#4,e4]!2 ~ [g#3,b3]@29 ~ [g#3,c#4]@32 [a3,c#4]@34 g#3@2 a3@2 a#3@2]/7", // A G#m C#5 A
  P: "[[f#3,b3]@23 ~ b3@2 a3@2 g#3@2 f#3@2]/2", Q: "[[b3,d#4]@31 ~]/2",
  R: "[f#3,b3,d#4] ~@3 b3 [b2,a3] [c#3,g#3] [d#3,f#3], ~@8 b2 ~@7", S: "[e3,b3,e4] ~@7",
})).s("gm_synth_brass_1").gain(0.22).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@3 A B@6 C@14 D E F ~@3 B@6 G C@14 H C ~@3 A B@6 C@6 I C@6 J>".pickRestart({
  A: "~@4 x!4", B: "x!8", C: "x!4", D: "x ~ x ~ x ~ x!2", E: "~@2 x!2", F: "x!2 ~@2", G: "x!5 ~ x ~", H: "x ~ x!2 ~@4",
  I: "x ~ x!3 ~@3", J: "x",
})).gain(0.71)

// drums · snare
const snare = s("sd").struct("<~@10 A@14 B C D ~@9 E A@14 F A G ~@9 A@6 H A@6 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "x ~@4 x ~ x", D: "~ x ~ x!2 ~@3", E: "~@5 x ~ x", F: "~ x ~@2 x ~@3",
  G: "x", H: "~ x ~@6",
})).gain(0.63)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@24 [~@7 x] ~@26 [~@3 x ~@4] ~@25>").gain(0.47)

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 [~@5 x!3] ~@26 [~ x!3 ~@4] ~@25 [~@5 x!3] ~@14>").gain(0.63)

// drums · open hat
const open_hat = s("oh").struct("<~@10 A@14 B C D ~@9 C A@14 E A ~@10 A@6 D A@2 F A@3 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~@5 x ~ x", D: "~ x ~ x ~@4", E: "~ x ~@6", F: "x!2 ~ x ~ x ~ x",
})).gain(0.63)

// drums · crash
const crash = s("cr").struct("<~@3 A ~ A ~ A ~@2 B ~@19 B ~ B ~ B ~@21 A ~ A ~@2 B ~@7 A B ~@4 B@2>".pickRestart({
  A: "~ x", B: "x",
})).gain(0.63)

stack(
  bass, electric_guitar_clean, drawbar_organ, electric_guitar_clean_2, synth_brass_1, kick, snare, pedal_hat, mid_tom,
  open_hat, crash
)

More by Nomadi