Strudelify

Omen III

Magic Affair

KeyF♯ minorTempo136 bpm
0:00/0:00
// Omen III — Magic Affair
// 136 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(136/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 · fretless bass
const bass = note(`<
  ~@16 A B A C D E D F D E D F D E D F D E D F ~@12 G H I J K J L M D E D N D E D N D E D N D E D F D E D F ~@25 O P Q R
  Q S O T ~@24
>`.pickRestart({
  A: "f#1 ~ f#1 ~ f#1!2 ~ e1 f#1 ~ f#1 ~ f#1!2 ~ e1", B: "f#1 ~ f#1 ~ f#1 f#1@2 e1 f#1 e1 f#1 e1 f#1 e1 f#1 e1",
  C: "f#1 ~ f#1 ~ f#1!2 ~ e1 f#1@2 ~@6", D: "f#1 ~ f#1 ~ f#1 f#1@2 e1 f#1 ~ f#1 ~ f#1 f#1@2 e1",
  E: "f#1 ~ f#1 ~ f#1@3 e1 f#1 ~ f#1 e1 f#1 e1 f#1 e1", F: "f#1 ~ f#1 ~ f#1 f#1@2 e1 f#1@2 ~ e1 f#1 e1 f#1 e1",
  G: "f#1 ~ f#1 ~ f#1!3 e1 f#1 ~ f#1 ~ f#1!2 ~ e1", H: "f#1 ~ f#1 ~ f#1 ~ f#1 e1 f#1 ~ f#1 e1 f#1 e1 f#1 e1",
  I: "f#1 ~ f#1 ~ f#1@2 ~ e1 f#1 ~ f#1 ~ f#1 ~ f#1 e1", J: "f#1 ~ f#1 ~ f#1 ~ f#1 e1 f#1 ~ f#1 ~ f#1 e1 f#1 e1",
  K: "f#1 ~ f#1 ~ f#1@2 e1 f#1 ~ f#1 ~ f#1 ~ f#1 ~ e1", L: "f#1 ~ f#1 ~ f#1 ~ f#1 e1 f#1 ~ f#1 ~ f#1 ~ f#1!2",
  M: "e1 ~ f#1 ~ f#1 ~ f#1 e1 f#1 ~ f#1 e1 f#1 e1 f#1 e1", N: "f#1 ~ f#1 ~ f#1!2 ~ e1 f#1@2 ~ e1 f#1 e1 f#1 e1",
  O: "f#1 ~ f#1 ~ f#1@3 e1 d1 ~ d1 ~ d1@3 d1", P: "e1 ~ e1 ~ e1@2 ~ e1 f#1 ~ f#1 ~ f#1 ~ f#1!2",
  Q: "f#1 ~ f#1 ~ f#1@2 ~ e1 d1 ~ d1 ~ d1@3 d1", R: "e1 ~ e1 ~ e1@2 ~ e1 f#1 ~ f#1 ~ f#1@3 e1",
  S: "e1 ~ e1 ~ e1@3 e1 f#1 ~ f#1 ~ f#1@3 e1", T: "e1 ~ e1 ~ e1@2 ~ e1 f#1@2 ~@6",
})).s("gm_fretless_bass").gain(0.42)

// other · piano
const piano = note(`<
  A B A B A B A B A B A B A B A B ~@20 A B A B A B A B A B A B A B A B A B A B ~@20 A B A B A B A B A B A B A B A B ~ A
  B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "f#5 c#5 f#5 c#5 a4 d5 a4 d5", B: "b4 e5 b4 e5 f#5 c#5 f#5 c#5",
})).s("gm_piano").gain(0.15).pan(0.6)

// bass · synth bass 2
const bass_2 = note(`<
  A B A C A B A C A B A C A B A C ~@8 D E F G H I J K L K M N A B A C A B A C A B A C O P O P ~@4 Q R Q S D T F G Q R Q
  S D T F G U R Q S A B A C A B A C A B A C A B A C ~ V W V W V W V W V W V W V W V W A B A C A B A C A B A C A B A C
  ~@8
>`.pickRestart({
  A: "f#1!8 d1!8, f#2 d2", B: "e1!8 f#1!8, e2 f#2", C: "e1!8 f#1!8, e2@8 f#2@7 ~",
  D: "[f#3,a3,c#4]@2 ~ [a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [f#3,a3]@2 [f#3,a3,c#4]@2 [f#3,a3,c#4]@2, ~@3 f#3 ~@6 c#4 ~@5", // F#m A F#m
  E: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [b3,d4,f#4] ~ [b3,f#4] ~ [b3,d4,f#4]@2, ~@6 d4 ~", // F#m Bm B5 Bm
  F: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [f#3,a3]@2 [f#3,c#4] ~ [f#3,a3,c#4] ~, ~@10 c#4 ~ a3@2 ~@2", // F#m F#5 F#m
  G: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 [f#3,a3,c#4]@3 ~ [b3,d4,f#4] ~ [b3,d4,f#4] ~ [b3,d4] ~, ~@7 f#4", // F#m Bm
  H: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [f#3,a3]@2 [f#3,a3] ~ [f#3,a3,c#4] ~, ~@10 c#4 ~ c#4@2 ~@2", // F#m
  I: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [b3,d4]@2 [b3,d4,f#4] ~ [b3,d4] ~, ~@10 f#4 ~@3 f#4@2", // F#m Bm
  J: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [f#3,a3]@2 [f#3,a3,c#4] ~ [f#3,a3,c#4] ~, ~@10 c#4 ~@5", // F#m
  K: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [b3,d4,f#4] ~ [b3,d4,f#4] ~ [b3,f#4]@2, ~@14 d4 ~", // F#m Bm B5
  L: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~", // F#m
  M: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [f#3,c#4] ~ [f#3,a3,c#4] ~ [f#3,c#4] ~, ~@5 a3 ~ a3", // F#m F#5 F#m F#5
  N: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [b3,d4,f#4] ~ [b3,d4,f#4] ~ [d4,f#4] ~, ~@7 b3", // F#m Bm D
  O: "f#1!8 d1!8", P: "e1!8 f#1!8",
  Q: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~@2 [f#3,a3,c#4]@2 [f#3,a3,c#4] ~ [f#3,a3,c#4] ~", // F#m
  R: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~@2 [b3,d4,f#4] ~ [b3,d4,f#4] ~ [b3,d4,f#4] ~", // F#m Bm
  S: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~@2 [b3,d4,f#4]@2 [b3,d4,f#4] ~ [b3,d4,f#4] ~", // F#m Bm
  T: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@3 ~ [b3,d4,f#4] ~ [d4,f#4]@2 [b3,f#4]@2, ~@12 b3 ~ d4 ~", // F#m Bm D B5
  U: "[f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~ [f#3,a3,c#4]@2 ~@2 [f#3,a3,c#4] ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~", // F#m
  V: "f#2!8 d2!8", W: "e2!8 f#2!8",
})).s("gm_synth_bass_2").gain(0.24).pan(0.2)

// chords · lead 8 bass lead
const lead_8_bass_lead = note("<~@20 A B@8 C@4 D@8 ~@7 E F G F ~@12 A H@4 I@5 J ~@58>".pickRestart({
  A: "[a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3]@2 ~@2 [f#3,c#4]@2 ~@4, f#3@2 ~@4 c#4 ~@3 a3 ~@5", // A F#m F#5
  B: "[~@10 [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3] ~@3 [f#3,a3,c#4]@2 ~@20 [a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3]@2 ~@2 [f#3,c#4]@2 ~@14 [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3] ~@3 [f#3,a3,c#4]@2 ~@20 [a3,c#4] ~@2 [f#3,a3] ~@2 [f#3,a3]@2 ~@2 [f#3,c#4]@2 ~@4, ~@5 d4!2 d4@30 d4!2 d4@25, ~@22 c#4@2 ~@24 f#3@2 ~@4 c#4 ~@3 a3 ~@27 c#4@2 ~@24 f#3@2 ~ c#4@2 ~ c#4 ~@3 a3 ~@5]/8", // B5 F#m A F#m F#5 B5 F#m A …
  C: "[~@10 [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3] ~@3 [f#3,a3,c#4]@2 ~@20 [a3,c#4] ~@2 [f#3,a3] ~@2 [f#3,a3]@2 ~@2 [f#3,c#4]@2 ~@4, ~@5 d4!2 d4@25, ~@22 c#4@2 ~@24 f#3@2 ~ c#4@2 ~ c#4 ~@3 a3 ~@5]/4", // B5 F#m A F#m F#5
  D: "[~@10 [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3] ~@3 [f#3,a3,c#4]@2 ~@100, ~@5 d4!2 d4@57, ~@11 c#4 ~@52]/8", // B5 F#m
  E: "c#5 e5 f#5 ~ f#5 ~ f#5 ~ f#5!2 ~ f#5!2 ~ f#5!2", F: "c#5 e5 f#5 ~ f#5 ~ f#5 ~ f#5!2 ~ f#5!5",
  G: "c#5 e5 f#5 ~ f#5 ~ f#5 ~ f#5!2 ~ f#5 ~ f#5!3",
  H: "[~@10 [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@3 [f#3,a3,c#4]@2 ~@20 [a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3]@2 ~@2 [f#3,c#4]@2 ~@4, ~@5 d4!2 d4@25, ~@48 f#3@2 ~@4 c#4 ~@3 a3 ~@5]/4", // B5 F#m A F#m F#5
  I: "[~@10 [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~ [f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3] ~@3 [f#3,a3,c#4]@2 ~@20 [a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3]@2 ~@2 [f#3,c#4]@2 ~@14 [b3,f#4] ~ [b3,f#4] ~ [b3,f#4] ~, ~@10 d4@2 d4@67 ~, ~@22 c#4@2 ~@24 f#3@2 ~@4 c#4 ~@3 a3 ~@21]/5", // B5 F#m A F#m F#5 B5
  J: "[f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [f#3,a3] ~@3 [f#3,a3,c#4]@2 ~@4, ~@3 c#4 ~@4", // F#m
})).s("gm_lead_8_bass_lead").gain(0.06).pan(0.9)

// other · synth brass 1
const synth_brass_1 = note(`<
  ~@4 A B A B A B A B A B A B ~@20 A B A B A B A B A B A B ~@28 A B A B A B A B A B A B A B A B ~@5 C D C D C D C D C D
  C D A B A B A B A B A B A B A B A B ~@8
>`.pickRestart({
  A: "[f#4,f#5] [e4,e5] [f#4,f#5] ~ [f#4,f#5] ~ [f#4,f#5] ~ [f#4,f#5] ~ [f#4,f#5] ~ [f#4,f#5] ~ [f#4,f#5] ~", // F# E F#
  B: "[e4,e5] [f#4,f#5]!2 ~ [f#4,f#5] ~ [f#4,f#5] ~ [f#4,f#5] ~ [f#4,f#5] ~ [f#4,f#5] ~ [f#4,f#5] ~", // E F#
  C: "[f#4,f#6] [c#4,c#6] [f#4,f#6] [c#4,c#6] [a3,a5] [d4,d6] [a3,a5] [d4,d6]", // F# C# F# C# A D A D
  D: "[b3,b5] [e4,e6] [b3,b5] [e4,e6] [f#4,f#6] [c#4,c#6] [f#4,f#6] [c#4,c#6]", // B E B E F# C# F# C#
})).s("gm_synth_brass_1").gain(0.24).pan(0.4)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~@4 A B A B A B A B A B A B ~@20 A B A B A B A B A B A B ~@28 A B A B A B A B A B A B A B A B ~@17 A B A B A B A B A B
  A B A B A B ~@8
>`.pickRestart({
  A: "[f#5,f#6] [c#5,c#6] [f#5,f#6] [c#5,c#6] [a4,a5] [d5,d6] [a4,a5] [d5,d6]", // F# C# F# C# A D A D
  B: "[b4,b5] [e5,e6] [b4,b5] [e5,e6] [f#5,f#6] [c#5,c#6] [f#5,f#6] [c#5,c#6]", // B E B E F# C# F# C#
})).s("gm_string_ensemble_2").gain(0.17).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@4 A@15 B A@35 B A@36 ~@3 A@13 B A@16 ~@8>".pickRestart({
  A: "x!4", B: "x!3 ~",
})).gain(0.72)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@4 A@15 B A@35 B A@36 ~@3 A@13 B A@16 ~@8>".pickRestart({
  A: "x!4", B: "x!3 ~",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@11 A ~@4 B@15 A B@11 A B@7 C B@19 A B@16 ~@3 B@9 ~@4 A B@16 ~@3 D ~@4
>`.pickRestart({
  A: "x!16", B: "~ x ~ x", C: "~ x ~@2", D: "~@8 x!8",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@15 B ~@16 A@19 C ~@20 A@16 ~ D@2 A@13 B A@20 ~@4>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", B: "x!2 ~@2 x!2 ~@2 x ~@7", C: "x!2 ~@2 x!2 ~@2 x!2 ~@6", D: "x!4",
})).gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@15 B ~@16 A@19 C ~@20 A@16 ~ A@15 B A@20 ~@4>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4", C: "~ x ~ x ~ x ~@2",
})).gain(0.24)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@20 [~ x ~ x ~ x ~ x]!16 ~@20 [~ x ~ x ~ x ~ x]!20 ~@57>").gain(0.16)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@27 A ~@3 A ~@11 A ~@23 A ~@3 A ~@7 A ~@24 A ~@7 A ~@11 A ~@3>".pickRestart({
  A: "x",
})).gain(0.32)

// drums · shaker
const shaker = s("sh").struct("<~@4 A@15 B A@35 C A@36 ~@3 A@13 B A@20 ~@4>".pickRestart({
  A: "x!16", B: "x!9 ~@7", C: "x!12 ~@4",
})).gain(0.32)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@20 A@16 ~@13 A ~ A ~ A ~ A@21 ~@57>".pickRestart({
  A: "~@3 x",
})).gain(0.69)

stack(
  bass, piano, bass_2, lead_8_bass_lead, synth_brass_1, string_ensemble_2, kick, kick_soft, snare, hihat, open_hat,
  open_hat_soft, crash, shaker, jingle_bells
)

More by Magic Affair