Strudelify

enemy attack

gg

KeyF majorTempo151 bpm
0:00/0:00
// enemy attack — gg
// 151 bpm, 6/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 9 "F Horn 1 & 3" named as a brass, played on brass section (its tremolo strings patch is not one); ch 11 "F Horn 2 & 4" named as a brass, played on brass section (its string ensemble 1 patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/6374086; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 66 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(151/6)

// 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 · brass section · "F Horn 1 & 3"
const brass_section = note(`<
  ~@2 A@2 B@2 A@2 C@3 D@2 ~@2 E F G H ~@13 A@2 B@2 A@2 C@3 D@2 ~@2 E F G H ~@13 I@2 ~@2
>`.pickRestart({
  A: "[[d3,a3,f4]@3 [b2,d3,a3,d4]]/2", B: "[c3,d3,a3,bb3]/2", C: "[c3,d3,a3,bb3]/3", D: "[f3,db4,f4,ab4]/2", E: "b3",
  F: "db4", G: "c4 b3 c4 d4 c4 d4", H: "e4", I: "[[d3,a3,f4]@3 ~]/2",
})).s("gm_brass_section").gain(0.3)

// chords · brass section · "F Horn 1 & 3" · soft notes
const brass_section_soft = note("<~@63 A B@2>".pickRestart({
  A: "~ [b2,d3,a3,d4]", B: "[c3,d3,a3,bb3]/2",
})).s("gm_brass_section").gain(0.15)

// other · brass section · "F Horn 2 & 4"
const brass_section_2 = note(`<
  A@11 B@4 C@2 D E F G H I J K L M N O@2 A@11 B@4 C@2 D E F G H I J K L M N O@2 A@6
>`.pickRestart({
  A: "g3 ~ d4 ~ eb4 ~ c4 ~ d4 ~ bb3 ~ g3 ~ d4 ~ eb4 ~ d4 ~ c4 ~ d4 ~",
  B: "bb3 ~ f4 ~ gb4 ~ eb4 ~ f4 ~ ab3 ~@3 f4 ~ gb4 ~ eb4 ~ f4 ~ ab3 ~",
  C: "b3 ~ gb4 ~ g4 ~ e4 ~ gb4 ~ a3 ~@3 gb4 ~ g4 ~ e4 ~ gb4 ~ a4 ~",
  D: "a3 ~ e4 ~ gb4 ~ d4 ~ e4 ~ g3 ~@3 e4 ~ gb4 ~ d4 ~ e4 ~ a4 ~, c3 b2 c3 d3 c3 d3",
  E: "a3 ~ e4 ~ gb4 ~ d4 ~ e4 ~ g3 ~@3 e4 ~ gb4 ~ d4 ~ e4 ~ a4 ~, e3",
  F: "db4@2 db4 ~ d4 ~ a3 ~ b3 ~ e3 ~ gb3 ~ db4 ~ d4 ~ gb4 ~ db4 ~ d4 ~, [db5,gb5], gb4@3 ~, gb3 ~@23", // Gb5
  G: "db4@2 db4 ~ d4 ~ a3 ~ b3 ~ e3 ~ gb3 ~ b3 ~ db4 ~ gb4 ~ db4 ~ e4 ~, [ab4,db5,ab5], gb3 ~@23", // Db5
  H: "db4@2 db4 ~ d4 ~ a3 ~ b3 ~ e3 ~ gb3 ~ b3 ~ db4 ~ gb4 ~ db4 ~ gb4 ~, [a4,db5,a5], gb3 ~@23", // A
  I: "db4@2 db4 ~ d4 ~ a3 ~ b3 ~ e3 ~ gb3 ~ b3 ~ db4 ~ gb4 ~ db4 ~ a4 ~, [b4,db5,b5], gb3 ~@23", // Bsus2
  J: "db4@2 db4 ~ d4 ~ a3 ~ b3 ~ e3 ~ gb3 ~ b3 ~ db4 ~ gb4 ~ db4 ~ a4 ~, [db5,a5], a4@11 ~, gb3 ~@23", // Gbm
  K: "d4@2 d4 ~ eb4 ~ c4 ~ d4 ~ f3 ~ g3 ~ d4 ~ eb4 ~ c4 ~ d4 ~ f4 ~, [g4,d5,g5], g3 ~@23", // G5
  L: "d4@2 d4 ~ eb4 ~ c4 ~ d4 ~ f3 ~ g3 ~ d4 ~ eb4 ~ c4 ~ d4 ~ f4 ~, [a4,d5,a5], g3 ~@23", // D5
  M: "d4@2 d4 ~ eb4 ~ c4 ~ d4 ~ f3 ~ g3 ~ d4 ~ eb4 ~ c4 ~ d4 ~ f4 ~, [bb4,d5,bb5], g3 ~@23", // Bb
  N: "d4@2 d4 ~ eb4 ~ c4 ~ d4 ~ f3 ~ g3 ~ d4 ~ eb4 ~ c4 ~ d4 ~ f4 ~, [c5,d5,c6], g3 ~@23", // Csus2
  O: "gb4@2 gb4 ~ gb4 ~ gb4@2 gb4 ~ gb4 ~ gb4@2 gb4 ~ gb4 ~ gb4 ~ gb4 ~ gb4 ~",
})).s("gm_brass_section").gain(0.45)

// other · tremolo strings · "Timpani"
const tremolo_strings = note("<A@11 B@4 C@2 D@2 E@5 F@4 G H A@11 B@4 C@2 D@2 E@5 F@4 G I A@2 J ~@3>".pickRestart({
  A: "g2@3 g2@3 g2@2 g2@2 f2@2", B: "bb2@2 ~@3 bb2@2 bb2 f2 ~@3", C: "b2@2 ~@3 b2@2 b2 gb2 ~@3",
  D: "a2@2 ~@3 a2@2 a2 e2 ~@3", E: "gb2@2 ~ gb2@2 ~ db2@2 db2@2 db2@2", F: "g2@2 ~@3 g2@2 g2 d2 ~@3",
  G: "gb2@2 ~ gb2@2 ~ gb2@2 ~@4", H: "gb2@2 ~ gb2@2 ~ gb2@2 [d2,c3]@2 [d1,d2]@2",
  I: "gb2@2 ~ gb2@2 ~ gb2@2 d2@2 [d1,d2]@2", J: "g2 ~@3",
})).s("gm_tremolo_strings").gain(0.4)

// other · tremolo strings · "Timpani" · soft notes
const tremolo_strings_soft = note("<~@62 [~@3 g2@3 g2@2 g2@2 f2@2] [g2@3 g2@3 g2@2 g2@2 f2@2]!3>")
  .s("gm_tremolo_strings").gain(0.15)

// chords · string ensemble 1 · "Violins 1"
const string_ensemble_1 = note(`<
  ~@5 A B@5 C D E@2 F@2 G H ~@4 I J@4 ~ K L ~@4 A B@5 C D E@2 F@2 G H ~@4 I J@4 ~@8
>`.pickRestart({
  A: "~@20 [g4,ab4] [a4,bb4,b4] [c5,db5,d5] [eb5,e5,f5]", // Abmaj7
  B: "[gb5 ~@109 [c5,d5] [eb5,f5] [f5,g5] [eb5,f5] [c5,d5] [g4,bb4] [a4,bb4] [c5,d5] [eb5,f5] [g5,a5], g5@14 ~]/5", // Csus2 Ebsus2 Fsus2 Ebsus2 Csus2 Gm Bbmaj7 Csus2 …
  C: "[bb3,bb4,ab5]@4 ~@10 [bb3,bb4] ~@5 [bb3,bb4] ~ [bb3,bb4] ~", // Bb7 Bb
  D: "[bb3,bb4]@2 ~@12 [bb3,bb4] ~@5 [bb3,bb4] ~ [bb3,bb4] ~", // Bb
  E: "[bb3,bb4]@4 ~@10 [bb3,bb4] ~@5 [bb3,bb4] ~ [bb3,bb4] ~", // Bb
  F: "[[b3,b4]@4 ~@10 [b3,b4] ~@5 [b3,b4] ~ [b3,b4] ~ [b3,b4]@4 ~@10 [b3,b4] ~@5 [b3,b4] ~ [b3,b4] ~, gb5]/2", // B
  G: "[a3,a4]@4 ~@10 [a3,a4] ~@5 [a3,a4] ~ [a3,a4] ~, g5", H: "[a3,a4]@4 ~@10 [a3,a4] ~@5 [a3,a4] ~ [a3,a4] ~, a5",
  I: "db6", J: "[d4,a4]@4 ~@2 [d4,a4]@3 ~@5 [d4,a4] ~@5 [d4,a4] ~ [d4,a4] ~",
  K: "~@20 [b5,c6,db6] [g5,ab5,a5,bb5] [d5,eb5,e5,f5,gb5] [a4,bb4,b4,c5,db5]", L: "g4 ~@5, ab4 ~@23",
})).s("gm_string_ensemble_1").gain(0.3)

// other · string ensemble 1 · "Violoncellos"
const string_ensemble_1_2 = note("<A@11 ~@17 B@2 A@11 ~@17 B@2 A@2 C ~@3>".pickRestart({
  A: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~",
  B: "gb3@2 gb3 ~ gb3 ~ gb3@2 gb3 ~ gb3 ~ gb3@2 gb3 ~ gb3 ~ gb3 ~ gb3 ~ gb3 ~", C: "d3 ~ d3 ~ d3 ~@19",
})).s("gm_string_ensemble_1").gain(0.3)

// other · string ensemble 1 · "Violoncellos" · soft notes
const string_ensemble_1_soft = note(`<
  ~@62
  [~@6 d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~]
  [d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~]!3
>`).s("gm_string_ensemble_1").gain(0.1)

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

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

// drums · crash
const crash = s("cr").struct(`<
  A ~@4 B A B A ~@2 A C@2 D A ~ A B E@4 F E@2 F@2 ~ G A ~@4 B A B A ~@2 A C@2 D A ~ A B E@4 F E@2 F@2 ~ G A ~@5
>`.pickRestart({
  A: "x", B: "~@21 x!3", C: "x ~@2 x ~@2 x ~ x ~@3", D: "x ~@20 x!3", E: "x ~@2 x ~@2 x ~ x ~ x ~",
  F: "x ~@5 x ~@5 x ~@3 x ~@3 x!4", G: "~@16 x!8",
})).gain(0.25)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@5 A ~ A ~@6 A ~@3 A ~@16 A ~ A ~@6 A ~@3 A ~@17>".pickRestart({
  A: "~@5 x",
})).gain(0.15)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@19 A@3 B@2 A@3 B ~@21 A@3 B@2 A@3 B ~@8>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x", B: "~@2 x!3 ~@5 x ~@3 x ~@3 x ~@3 x ~",
})).gain(0.86)

stack(
  brass_section, brass_section_soft, brass_section_2, tremolo_strings, tremolo_strings_soft, string_ensemble_1,
  string_ensemble_1_2, string_ensemble_1_soft, kick, snare, crash, crash_soft, jingle_bells
)