Strudelify

THE FINAL ANTASMA BATTLE

Ashton Bilger

KeyA majorTempo200 bpm
0:00/0:00
// THE FINAL ANTASMA BATTLE — Ashton Bilger
// 200 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5826418; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(200/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 · lead 2 sawtooth · "Saw Synthesizer"
const lead_2_sawtooth = note(`<
  ~@31 A B C D E F G H I J K L M N@3 O P Q R S T U V ~@8 A B W X Y Z AA H AB H AC AD AE AF AG V ~ A B C D E F G H I J K
  L M N@3 O P Q R S T U V ~@8 A B W X Y Z AA H AB H AC AD AE AF AG V
>`.pickRestart({
  A: "[a3,d4,a4,d5,a5]@3 [g#3,d4,g#4,d5,g#5]", B: "[e3,b3,e4,b4,e5] [g3,e4,g4,e5,g5]", C: "[c#3,a3,c#4,a4,c#5]",
  D: "[a2,d3,a3,d4,a4]", E: "[a2,d3,a3,d4,a4]@3 [d3,a3,d4,a4,d5]",
  F: "[f3,c#4,f4,c#5,f5]@2 [e3,c#4,e4,c#5,e5] [d3,a3,d4,a4,d5]", G: "[a2,e3,a3,e4,a4]", H: "[a3,d4,a4,d5,a5]",
  I: "[g3,c4,g4,c5,g5]@3 [f#3,c4,f#4,c5,f#5]", J: "[d3,a3,d4,a4,d5] [f3,d4,f4,d5,f5]", K: "[b2,g3,b3,g4,b4]",
  L: "[g2,c3,g3,c4,g4]", M: "~@3 [d3,a3,d4,a4,d5]",
  N: "[[f3,c#4,f4,c#5,f5]@8 [e3,c#4,e4,c#5,e5]@4 [c#3,c#4,c#5]@4 d5@30 [g3,a3,g4,a4] [a#3,c4,a#4,c5], ~@6 [a3,a4]@17 ~, ~ [d3,d4]@2]/3", // C# C#m C# Gsus2 A#sus2 A D
  O: "[d4,g4,d5,g5,d6]@5 [g3,g4,g5] [a#3,a#4,a#5] [d4,d5,d6]", // G5 G A# D
  P: "[f4,a4,f5,a5,f6] [e4,a4,e5,a5,e6] [d4,a4,d5,a5,d6]@2", // F A5 D5
  Q: "[e4,g4,e5,g5,e6]@5 [a3,e4,a4,e5,a5] [e4,a4,e5,a5,e6] [a3,e4,a4,e5,a5]", // Em A5
  R: "[d4,a4,d5,a5,d6] [e4,a4,e5,a5,e6] [f4,d5,f5,d6,f6] [f#4,d5,f#5,d6,f#6]", // D5 A5 Dm D
  S: "[g4,d5,g5,d6,g6]@5 [d4,g4,d5,g5,d6] [g4,d5,g5,d6,g6] [d4,g4,d5,g5,d6]", // G5
  T: "[a4,d5,a5,d6,a6] [g4,d5,g5,d6,g6] [f4,d5,f5,d6,f6]@2", // D5 G5 Dm
  U: "[e4,c#5,e5,c#6,e6]@5 [a3,a4,a5] [c#4,c#5,c#6] [e4,e5,e6]", // C#m A C# E
  V: "[d4,a4,d5,a5,d6] [c#4,a4,c#5,a5,c#6] [d4,a4,d5,a5,d6]@2", // D5 F#m D5
  W: "[a#3,e4,a#4,e5,a#5]@14 [a3,e4,a4,e5,a5] [g#3,e4,g#4,e5,g#5]", X: "[a3,d4,f4,a4,d5,f5,a5]",
  Y: "[a3,d4,a4,d5,a5] [f4,a4,f5,a5,f6]", Z: "[e4,g4,e5,g5,e6] [g4,e5,g5,e6,g6]",
  AA: "[c#4,e4,c#5,e5,c#6]@14 [d4,a4,d5,a5,d6] [e4,b4,e5,b5,e6]", AB: "[d4,a4,d5,a5,d6]@14 [e4,e5,e6] [f4,f5,f6]",
  AC: "[c#4,g4,c#5,g5,c#6]@14 [c#4,c#5,c#6] [e4,e5,e6]", AD: "[f4,d5,f5,d6,f6] [e4,c#5,e5,c#6,e6] [d4,a4,d5,a5,d6]@2",
  AE: "[d4,g4,d5,g5,d6]@14 [e4,e5,e6] [f4,f5,f6]", AF: "[g4,d5,g5,d6,g6] [f4,a4,f5,a5,f6]",
  AG: "[e4,g4,e5,g5,e6]@5 [a3,d4,a4,d5,a5] [b3,e4,b4,e5,b5] [c#4,g4,c#5,g5,c#6]", // Em D5 E5 C#dim
})).s("gm_lead_2_sawtooth").gain(0.35)

// chords · pad halo · "Halo Synthesizer"
const pad_halo = note(`<
  A@2 B C D@2 E@2 F@2 G H I@2 J@2 K@2 L M N@2 O@2 ~ P G Q@3 ~@25 R S T U R S V W ~@41 R S T U R S V W ~@16
>`.pickRestart({
  A: "[[a3,d4,a4]@3 [g#3,d4,g#4]]/2", B: "[e3,b3,e4]", C: "[g3,e4,g4]", D: "[c#3,a3,c#4]/2", E: "[a2,d3,a3]/2",
  F: "[[a2,d3,a3]@3 [d3,a3,d4]]/2", G: "[f3,c#4,f4]", H: "[e3,c#4,e4] [d3,a3,d4]", I: "[a2,e3,a3]/2", J: "[a3,d4,a4]/2",
  K: "[[g3,c4,g4]@3 [f#3,c4,f#4]]/2", L: "[d3,a3,d4]", M: "[f3,d4,f4]", N: "[b2,g3,b3]/2", O: "[g2,c3,g3]/2",
  P: "~ [d3,a3,d4]", Q: "[[e3,c#4,e4] [c#3,c#4] [d3,d4]@4, ~ a3@5]/3", R: "d3 ~", S: "~ d3", T: "c3 ~",
  U: "~@12 c3!2 ~ c3", V: "c3", W: "c#3",
})).s("gm_pad_halo").gain(0.35)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@31 A@16 B@8 ~@9 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ A@16 B@8 ~@9 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C
>`.pickRestart({
  A: "~ x ~ x", B: "~ x", C: "x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@31 A@3 B A@3 B A@3 B A@3 B C@7 D ~@25 A@3 B A@3 B A@3 B A@3 B C@7 D ~@24
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~ x!4", C: "x!16", D: "x!13 ~@3",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@63 [x!4]!15 [x!3 ~] ~@33 [x!4]!15 [x!3 ~]>").gain(0.3)

stack(lead_2_sawtooth, pad_halo, kick, snare, hihat, open_hat)