Strudelify

Asgore Bergentrückung (Senior Band Ensemble)

Toby Fox Piano

KeyF majorTempo112 bpm
0:00/0:00
// Asgore Bergentrückung (Senior Band Ensemble) — Toby Fox Piano
// 112 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 8, 4/4 at bar 9, 2/4 at bar 26, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 14 "Flute 3" flute (copy of ch 13 "Flute 2" flute); ch 16 "Flute 5" flute (copy of ch 15 "Flute 4" flute)
// note: Transcription provider: pdmx. https://musescore.com/score/1821646; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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.

// other · clarinet · "Trumpet 1"
const clarinet = note(`<
  A B C D A E F G@2 ~ H I J K L M N O H I J K L M N P Q R S@2 T U V S ~@11 W X Y Z W X AA ~@9 AB AC AD AE AB AC AD AF@2
  AG AH AI@2 AJ
>`.pickRestart({
  A: "a3 ~ c4 ~ bb3@4", B: "g3 ~ c4 ~ a3@4", C: "g3 ~ c4 ~ c4 bb3 g3 a3", D: "f3 e3 f3 g3 d3@4",
  E: "e4 ~ c4 ~ d4@2 f4@2", F: "e4 d4 c4 e4 bb3@2 d4@2", G: "[c4 g3 a3 c4 a3@8 ~@4]/2",
  H: "bb2 f3 bb3 f3 bb2 f3 bb3 f3 bb2 f3 bb3 f3 bb2 f3 bb3 f3", I: "bb2 f3 bb3 f3 bb2 f3 bb3 f3 [bb2,bb3]@4 [c3,c4]@4",
  J: "d3 a3 d4 a3 d3 a3 d4 a3 d3 a3 d4 a3 d3 a3 d4 a3", K: "d3 a3 d4 a3 d3 a3 d4 a3 [d3,d4]@2 ~@2 [f3,f4]@2 ~@2",
  L: "bb2 f3 bb3 f3 bb2 f3 bb3 f3 bb2 f3 bb3 [f3,g4] bb2 f3 bb3 f3, c5@6 d5@2 f4@3 ~ g4@2 a4@2", // Fsus2
  M: "c3 g3 c4 g3 c3 g3 c4 g3 c3 g3 c4 g3 c3 g3 c4 g3, c5@6 d5@2 f4@3 e5@3 c5@2",
  N: "d3@2 a3@2 d4@2 a3@2 d3@2 a3@2 d4@2 c5 f4, a4@7 a3", O: "[c3,g3,c4,g4] ~", P: "[c3,g3,c4,g4]@4 f4 ~ e4 ~",
  Q: "bb3", R: "c4", S: "a3", T: "bb3@4 bb3@3 bb3 ~@4 bb3@4", U: "c4@4 c4@3 c4 ~@4 c4@4", V: "a3@4 a3@3 a3 ~@4 a3@4",
  W: "a4@12 f4@2 g4 ~", X: "a4@6 g4@2 f4@2 g4 e4@3 c4 ~", Y: "d4@12 f4@2 g4 ~", Z: "a4@6 g4@2 f4@2 g4 e4@3 c5 ~",
  AA: "d4", AB: "g4 f4 eb4 d4 eb4 d4 c4 eb4 d4@3 a3@3 a3 d4", AC: "g4 f4 eb4 d4 c4 bb4 a4 g4 f4@2 g4@2 a4@3 b4",
  AD: "c5 b4 a4 g4 a4 g4 a4 b4 a4@3 d4@3 d4 e4", AE: "f4@3 g4@3 bb4@2 a4 ~@7", AF: "f4@3 e4@3 c4@2 d4@6 d4 e4",
  AG: "f5@3 e5@3 c5@2 d5@6 d5 e5", AH: "f5@3 e5@3 c5@2 d5@6 c5@2", AI: "d5@3 a4 ~@2 a4 ~ b4@3 g4 ~@2 g4 ~", AJ: "a4",
})).s("gm_clarinet").gain(0.4)

// other · clarinet · "Trumpet 1" · soft notes
const clarinet_soft = note("<A B C D A E F G@2 ~@25 H I J K H I J@4 L ~@30>".pickRestart({
  A: "a4 ~ c5 ~ bb4@4", B: "g4 ~ c5 ~ a4@4", C: "g4 ~ c5 ~ c5 bb4 g4 a4", D: "f4 e4 f4 g4 d4@4",
  E: "e5 ~ c5 ~ d5@2 f5@2", F: "e5 d5 c5 e5 bb4@2 d5@2", G: "[c5 g4 a4 c5 a4@8 ~@4]/2", H: "f4", I: "g4", J: "d4",
  K: "e4!2", L: "e4@8 d4@3 f4@3 g4@2",
})).s("gm_clarinet").gain(0.15)

// other · trumpet · "Trumpet 2"
const trumpet = note(`<
  ~@14 A B C D ~@4 A B C E ~@4 F G H I J K L M J K L ~@4 N O P Q R O S ~@9 T U V W T U V X Y Z AA AB@2 AC
>`.pickRestart({
  A: "g4@6 d5@2 f4@3 g4 g4@2 a4@2", B: "g4@6 d5@2 f4@3 e5@3 c5@2", C: "f4@14 g4 d4", D: "e4 ~", E: "e4@4 d4 ~ d4 ~",
  F: "f4@4 f4@3 f4 ~@4 f4@4", G: "g4@4 g4@3 g4 ~@4 g4@4", H: "d4@4 d4@3 d4 ~@4 d4@4", I: "e4",
  J: "bb3 f4 e4 f4 d4@3 bb3@2 e4 f4 c5 a4@4", K: "c4 f4 e4 f4 d4@3 c4@2 e4 f4 c5 a4@4",
  L: "a3 f4 e4 f4 d4@3 a3@2 e4 f4 c5 a4@4", M: "c5@3 g5@3 f5@2 e5 d5@2 c5@3 e5@2", N: "d4@12 c4@2 c4 ~",
  O: "e4@6 g4@2 c4@2 g4 c4@3 c4 ~", P: "a3@12 d4@2 d4 ~", Q: "e4@6 g4@2 c4@2 g4 c4@3 c5 ~", R: "d4@12 bb3@2 bb3 ~",
  S: "a3", T: "eb4 f4 eb4 d4 c4 d4 c4 eb4 a3@3 a3@3 a3 d4", U: "eb4 f4 eb4 d4 a3 bb4 a4 g4 d4@2 e4@2 f4@3 b4",
  V: "a4 b4 a4 g4 f4 g4 a4 b4 f4@3 a3@3 d4 e4", W: "f4@3 g4@3 bb4@2 a4 ~@7", X: "bb3@3 e4@3 c4@2 bb3@6 d4 e4",
  Y: "c4@3 e4@3 c4@2 c4@6 d4 e4", Z: "bb4@3 e5@3 c5@2 bb4@6 d5 e5", AA: "c5@3 e5@3 c5@2 c5@6 c5@2",
  AB: "a4@3 d4 ~@2 d4 ~ g4@3 d4 ~@2 d4 ~", AC: "f4",
})).s("gm_trumpet").gain(0.64)

// other · trumpet · "Trumpet 2" · soft notes
const trumpet_soft = note("<A B C D A E F G@2 ~@32 H I J K ~@30>".pickRestart({
  A: "a4 ~ c5 ~ d5@4", B: "g4 ~ c5 ~ c5@4", C: "g4 ~ c5 ~ c5 bb4 g4 a4", D: "f4 e4 f4 g4 f4@4",
  E: "e5 ~ c5 ~ e5@2 f5@2", F: "e5 d5 c5 e5 e5@2 d5@2", G: "[c5 g4 a4 c5 d5@8 ~@4]/2", H: "bb3", I: "c4", J: "a3",
  K: "c4@8 a3@3 c4@3 d4 ~",
})).s("gm_trumpet").gain(0.24)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<A B C D A E F G@2 ~@5 H I J K ~@4 H I J L ~@49>".pickRestart({
  A: "a3 ~ c4 ~ bb3@4", B: "g3 ~ c4 ~ a3@4", C: "g3 ~ c4 ~ c4 bb3 g3 a3", D: "f3 e3 f3 g3 d3@4",
  E: "e4 ~ c4 ~ d4@2 f4@2", F: "e4 d4 c4 e4 bb3@2 d4@2", G: "[c4 g3 a3 c4 a3@8 ~@4]/2",
  H: "c4@6 d4@2 f3@3 g3 g3@2 a3@2", I: "c4@6 d4@2 f3@3 e4@3 c4@2", J: "a3@14 bb3 f3", K: "g3 ~", L: "g3@4 f4 ~ e4 ~",
})).s("gm_tenor_sax").gain(0.3)

// other · clarinet
const clarinet_2 = note("<~@9 A B C D E F G H I B C D E F G H J K@3 L K@3 L K@2 ~@2 K@2 ~@35>".pickRestart({
  A: "~@4 f4 ~ a4 ~", B: "g4@6 a4@2 d4@3 e4@3 f4@2", C: "a4@4 f4 ~ a4 ~", D: "g4@6 a4@2 d4@3 e4@3 c5@2",
  E: "a4@2 a4 bb4", F: "c5@6 d5@2 f4@3 g4 g4@2 a4@2", G: "c5@6 d5@2 f4@3 e5@3 c5@2", H: "a4@14 bb4 f4",
  I: "g4@4 f4 ~ a4 ~", J: "g4@4 f4 ~ e4 ~", K: "d5 f5 e5 f5 d5@3 d5@2 e5 f5 c6 a5@4",
  L: "c5@3 g5@3 f5@2 e5 d5@2 c5@3 e5@2",
})).s("gm_clarinet").gain(0.3)

// other · flute · "Flute 1"
const flute = note("<A B C D A E F G@2 H I J K L M N O P I J K L M N O Q R@3 S R@3 S R@2 ~@2 R@2 ~@35>".pickRestart({
  A: "f5 ~ a5 ~ g5@4", B: "e5 ~ g5 ~ f5@4", C: "d5 ~ f5 ~ e5@4", D: "c5 ~ d5 ~ a4@4", E: "c6 ~ g5 ~ a5@4",
  F: "a5 g5 a5 c6 d6@2 f6 ~", G: "[[e6,f6] e6 d6@2 c6@2 e6@2 d6@16 ~@8]/2", H: "~@4 f5 ~ a5 ~",
  I: "g5@6 a5@2 d5@3 e5@3 f5@2", J: "a5@4 f5 ~ a5 ~", K: "g5@6 a5@2 d5@3 e5@3 c6@2", L: "a5@2 a5 bb5",
  M: "c6@6 d6@2 f5@3 g5 g5@2 a5@2", N: "c6@6 d6@2 f5@3 e6@3 c6@2", O: "a5@14 bb5 f5", P: "g5@4 f5 ~ a5 ~",
  Q: "g5@4 f4 ~ e4 ~", R: "d5 f5 e5 f5 d5@3 d5@2 e5 f5 c6 a5@4", S: "c5@3 g5@3 f5@2 e5 d5@2 c5@3 e5@2",
})).s("gm_flute").gain(0.25)

// other · flute · "Flute 2"
const flute_2 = note("<A B C D A E F G@2 ~@17 H@3 I H@3 I H@2 ~@2 H@2 ~@35>".pickRestart({
  A: "f5 ~ a5 ~ g5@4", B: "e5 ~ g5 ~ f5@4", C: "d5 ~ f5 ~ e5@4", D: "c5 ~ d5 ~ a4@4", E: "c6 ~ g5 ~ a5@4",
  F: "a5 g5 a5 c6 d6@2 f6 ~", G: "[[e6,f6] e6 d6@2 c6@2 e6@2 d6@16 ~@8]/2", H: "d5 f5 e5 f5 d5@3 d5@2 e5 f5 c6 a5@4",
  I: "c5@3 g5@3 f5@2 e5 d5@2 c5@3 e5@2",
})).s("gm_flute").gain(0.25)

// other · flute · "Flute 4"
const flute_3 = note("<A B C D A E F G@2 ~@66>".pickRestart({
  A: "f5 ~ a5 ~ g5@4", B: "e5 ~ g5 ~ f5@4", C: "d5 ~ f5 ~ e5@4", D: "c5 ~ d5 ~ a4@4", E: "c6 ~ g5 ~ a5@4",
  F: "a5 g5 a5 c6 d6@2 f6 ~", G: "[[e6,f6] e6 d6@2 c6@2 e6@2 d6@16 ~@8]/2",
})).s("gm_flute").gain(0.25)

// other · trombone
const trombone = note("<A B C D A E F G@2 ~ H I J K H L M N H I J K H L M N O P Q R O P Q R ~@41>".pickRestart({
  A: "a3 ~ c4 ~ d4@4", B: "g3 ~ c4 ~ c4@4", C: "g3 ~ c4 ~ c4 bb3 g3 a3", D: "f3 e3 f3 g3 f3@4",
  E: "e4 ~ c4 ~ e4@2 f4@2", F: "e4 d4 c4 e4 e4@2 d4@2", G: "[c4 g3 a3 c4 d4@8 ~@4]/2",
  H: "bb2 f3 bb3 f3 bb2 f3 bb3 f3 bb2 f3 bb3 f3 bb2 f3 bb3 f3", I: "bb2 f3 bb3 f3 bb2 f3 bb3 f3 [bb2,bb3]@4 [c3,c4]@4",
  J: "d3 a3 d4 a3 d3 a3 d4 a3 d3 a3 d4 a3 d3 a3 d4 a3", K: "d3 a3 d4 a3 d3 a3 d4 a3 [d3,d4]@2 ~@2 [f3,f4]@2 ~@2",
  L: "c3 g3 c4 g3 c3 g3 c4 g3 c3 g3 c4 g3 c3 g3 c4 g3", M: "d3 a3 d4 a3 d3 a3 d4 a3", N: "[c3,g3,c4] ~", O: "f3",
  P: "g3", Q: "d3", R: "e3",
})).s("gm_trombone").gain(0.25)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@34 A@7 B ~@3 A@6 B ~@9 A@7 ~@7>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct("<~@74 x>").gain(0.8)

stack(
  clarinet, clarinet_soft, trumpet, trumpet_soft, tenor_sax, clarinet_2, flute, flute_2, flute_3, trombone, kick, snare,
  hihat, crash
)