Strudelify

Bergentrückung + Asgore (Undertale)

Toby Radiation Fox

KeyF majorTempo120 bpm
0:00/0:00
// Bergentrückung + Asgore (Undertale) — Toby Radiation Fox
// 120 bpm, 2/4, key F 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/2563946; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 171 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/2)

// 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 · piano
const piano = note(`<
  A B@5 C D@5 E@8 F G H I F G J I K L M N O P@2 Q F G H I F G J I K L M N O R@2 S T U V U V U V W X Y Z Y Z Y Z AA AB Y
  Z Y Z Y Z W X Y Z Y Z Y Z AA AB Y Z Y Z Y Z W X Y Z Y Z Y Z AA AB AC@2 AD AE AF AG AH AI AJ@2 AK AL AF AM AK AN AO AM
  AK AL AP@2 AQ AR AS AT AU AV AS AT AW AX AY AZ BA BB AY AZ BC BD BE BF BG BH BI BJ BK BL BE BF BG BH BI BJ BM BN BM BN
  BM BN BM BN BO BP BO BP BQ@4
>`.pickRestart({
  A: "~@9 [a2,f4]@7", // Dm
  B: "[~ [c3,a4]@8 ~ [bb2,d3,g3,g4]@17 ~ [g2,e4]@8 [bb2,g4]@8 ~ [f2,a2,c3,f4]@17 ~ [g2,d4]@8 [c3,f4]@8 ~]/5", // F Gm C Eb F G5 F5
  C: "[g2,c3,e3]@4 bb2@4 ~ g2@4 a2@3, e4", // C
  D: "[~ f2@4 ~ e2@4 f2@4 ~ g2@4 [d2,a2,d3,a3]@17 [a2,f4]@8 ~ [c3,a4]@8 ~ [bb2,d3,f3,g3,g4]@17 [e3,c5]@8 ~, ~ c4@8 ~ d4@8 ~@62]/5", // D5 Dm F Gm7 C
  E: "[[c3,g4]@8 ~ [d3,e3,a3]@8 f3@8 ~ [e3,a4]@4 ~ [d3,g4]@4 [c3,a4]@4 [e3,c5]@4 ~ [g2,e3,g3,d5]@8 [d3,f5]@8 ~ e5 f5 e5@2 ~ [g2,d5]@4 [a2,c5]@4 ~ [c3,e5]@4 [a2,d3,g3]@20 ~@2 gb3@26 ~, ~@9 a4@17 ~@35 c3@4 ~@14 d5@46 ~@3]/8", // C5 Dsus2 A5 G5 F C Em7 Dm …
  F: "[d4,f4]@3 ~ [c4,a4]@3 ~", G: "[bb3,d4,g4]@11 ~ a4@4", H: "d4@3 e4@3 f4@2", I: "a4@15 ~", J: "d4@3 e4@3 c5@2",
  K: "[a3,d4,f4,a4]@3 ~ [bb3,f4,g4,bb4]@3 ~", L: "[d4,f4,bb4,c5]@11 ~ [g4,d5]@4", M: "f4@3 g4@3 a4@2",
  N: "[e4,g4,a4,c5]@11 ~ [d4,d5,d6]@4", O: "[f3,f4,f5]@3 [e4,e5,e6]@3 [c4,c5,c6]@2",
  P: "[[a3,a4,a5]@27 ~ [bb3,bb4,bb5]@2 [a3,a4,a5]@2]/2", Q: "[g3,g4,g5]@15 ~",
  R: "[[f4,f5,f6]@27 ~ [g4,g5,g6]@2 [f4,f5,f6]@2]/2", S: "[e4,e5,e6]@15 ~", T: "[d4,f4] [d4,e4]",
  U: "d4 f4 e4 f4 d4@3 d4", V: "~ e4 f4 c5 a4@4", W: "c4@3 g4@3 f4@2", X: "e4 d4@2 c4@3 e4@2",
  Y: "[d4,f4] [f4,a4] [e4,g4] [f4,a4] [d4,f4]@3 [d4,f4]", Z: "~ [e4,g4] [f4,a4] [c5,e5] [a4,c5]@4",
  AA: "db4@3 g4@3 f4@2", AB: "e4 d4@2 db4@3 e4@2", AC: "[[d4,f4,bb4,d5]@23 ~ [d4,a4]@4 c5@4]/2",
  AD: "[g4,c5,d5]@11 ~ [f4,f5]@4", AE: "[g4,g5] [f4,f5]@2 [e4,e5]@3 [f4,f5]@2", AF: "[f4,a4,c5,d5]@15 ~",
  AG: "a4@2 a4 c5@2 c5 f5@2", AH: "[g4,a4,c5,e5]@15 ~", AI: "[d4,d5]@3 [f4,f5]@3 [g4,g5]@2",
  AJ: "[[a4,d5,f5,a5]@23 ~ f5@4 g5@4]/2", AK: "[a4,c5,e5,a5]@11 ~ g5@4", AL: "f5@2 g5 e5@3 c5@2", AM: "~@2 f5 g5",
  AN: "f5@2 g5 e5@3 c6@2", AO: "[a4,d5,f5,a5]@15 ~", AP: "[[f4,a4,c5,d5]@15 ~]/2", AQ: "c5@2 e5 f5",
  AR: "e5@2 d5 db5@3 e6@2", AS: "f6 e6 d6 c6 d6@2 a5@2", AT: "b5@3 g5 ~@2 d5 e5", AU: "f5@3 g5 ~ d5 c6@2",
  AV: "a5@15 ~", AW: "f5@3 e5@2 c5 e5@2", AX: "d5@15 ~",
  AY: "[a4,d5,f5,a5,d6,f6] [e5,e6] [d5,d6] [c5,c6] [d5,d6]@2 [a4,a5]@2", // Dm E D C D A
  AZ: "[d4,g4,b4,d5,g5,b5]@3 [g4,g5] ~@2 [d4,d5] [e4,e5]", // G D E
  BA: "[bb3,d4,f4,bb4,d5,f5]@3 [e4,g4,e5,g5]@2 [d4,d5] [c5,c6]@2", BB: "[d4,f4,a4,d5,f5,a5]@15 ~",
  BC: "[bb3,d4,f4,bb4,d5,f5]@3 [e4,e5]@2 [c4,c5] [e4,e5]@2", BD: "[f3,a3,d4,f4,a4,d5]@15 ~",
  BE: "[c4,eb4,g4,c5,eb5,g5] [f4,f5] [eb4,eb5] [d4,d5] [a3,c4,eb4,a4,c5,eb5] [d4,d5] [c4,c5] [eb4,eb5]", // Cm F Eb D Adim D C Eb
  BF: "[d3,a3,d4,a4,d5]@3 [a3,a4] ~@2 [a3,a4] [d4,d5]", // D5 A D
  BG: "[c4,eb4,g4,c5,eb5,g5] [f4,f5] [eb4,eb5] [d4,d5] [a3,c4,eb4,a4,c5,eb5] [d4,d5] [a4,a5] [g4,g5]", // Cm F Eb D Adim D A G
  BH: "[f4,f5]@2 [g4,g5]@2 [a4,a5]@2 [a4,a5] [b4,b5]", // F G A B
  BI: "[a4,c5,a5,c6] [b4,b5] [a4,a5] [g4,g5] [f4,a4,f5,a5] [g4,g5] [a4,a5] [b4,b5]", // Am B A G F G A B
  BJ: "[a4,a5]@3 [d4,d5]@3 [d4,d5] [e4,e5]", BK: "[f4,f5]@3 [g4,g5]@3 [bb4,bb5]@2",
  BL: "[a4,a5] [e4,e5] [db4,db5] [a3,a4]", BM: "[g4,c5,f5]@3 e5@3 c5@2", BN: "[g4,c5,d5]@11 ~ [d4,d5]@2 [e4,a4,e5]@2",
  BO: "[d3,d4,d6]@3 [a2,d4,a5]@3 [c3,d4,c6]@2", BP: "[b2,d4,b5]@3 [g2,d4,g5]@3 [a2,d4,a5]@2",
  BQ: "[[d2,d3,d4,f4,a4,d5]@61 ~@3]/4", // Dm
})).s("gm_piano").gain(0.4)

// chords · piano
const piano_2 = note(`<
  ~@53 A B C D E F G@2 H I J K L M N@2 O P Q R S T U@2 O P Q R S T U@2 O P Q R S T U@2 O P Q R S T U@2 V@2 W@2 X@2 W@2
  X@2 W@2 V@2 W@2 X@2 W@2 Y@2 Z AA AB AC AD AB@2 AC AD AB AE AF AG AH AE AF AG AH AI AJ AI AK AL AH AM AN AI AJ AI AK AL
  AH AO@2 AP@2 AO@2 AP@2 AQ AR AQ AR AS@4
>`.pickRestart({
  A: "d4@2 ~@2 d4 ~@2 d4, [bb2,d3,f3,bb3]@15 ~", B: "~ d4!2 e4, [bb2,d3,f3,bb3]@15 ~",
  C: "d4@2 ~@2 d4 ~@2 d4, [c3,e3,g3,c4]@15 ~", D: "~ d4!2 e4, [c3,e3,g3,c4]@15 ~",
  E: "f4@2 ~@2 f4 ~@2 f4, [d3,f3,a3,d4]@15 ~", F: "~ f4!2 e4, [d3,f3,a3,d4]@15 ~", G: "[a2,c3,e3,a3]@15 ~",
  H: "[d2,bb2]@4 [bb2,f3,bb3]@3 [bb2,f3,bb3,d4,d5], [d4,d5]@2 ~@2 [d4,d5] ~@3", // Gm Bb5 Bb D
  I: "~ [d4,d5]!2 [e4,e5], ~ [bb2,f3,bb3]", J: "[c2,c3]@4 [c3,g3,c4]@3 [c3,g3,c4,d4,d5], [d4,d5]@2 ~@2 [d4,d5] ~@3",
  K: "~ [d4,d5]!2 [e4,e5], ~ [c3,g3,c4]", L: "[d2,d3]@4 [d3,a3]@3 [d3,a3,f4,f5], [f4,f5]@2 ~@2 [f4,f5] ~@3",
  M: "~ [f4,f5]!2 [e4,e5], ~ [d3,a3,d4]", N: "[a2,e3]@15 ~",
  O: "[bb1,bb2] f3 [bb2,bb3] f3 [bb2,d4,d5] f3 [bb2,bb3] [f3,d4,d5], [d4,d5] ~@3", // Bb Dm D
  P: "[bb1,bb2] f3 [bb2,bb3] f3 bb2 f3 [bb2,bb3] f3, ~ [d4,d5]!2 [e4,e5]", // Bb D E
  Q: "[c2,c3] g3 [c3,c4] g3 [c3,d4,d5] g3 [c3,c4] [g3,d4,d5], [d4,d5] ~@3", // C Csus2 C G5 D
  R: "[c2,c3] g3 [c3,c4] g3 c3 g3 [c3,c4] g3, ~ [d4,d5]!2 [e4,e5]", // C D E
  S: "[d2,d3] a3 [d3,d4] a3 [d3,f4,f5] a3 [d3,d4] [a3,f4,f5], [f4,f5] ~@3", // D Dm D Dm F
  T: "[d2,d3] a3 [d3,d4] a3 d3 a3 [d3,d4] a3, ~ [f4,f5]!2 [e4,e5]", U: "[a1,a2] e3 [a2,a3] e3 a2 e3 [a2,a3] e3",
  V: "bb1 bb2 f2 bb2 bb1 bb2 f2 bb2", W: "c2 c3 g2 c3 c2 c3 g2 c3", X: "d2 d3 a2 d3 d2 d3 a2 d3",
  Y: "[bb1,bb2] f3 [bb2,d4] f3 [bb1,bb2] f3 [bb2,d4] f3", Z: "[c4,e4,g4]@15 ~", AA: "[db4,e4,a4]@15 ~", AB: "d4@15 ~",
  AC: "g3@15 ~", AD: "bb3 c4", AE: "d2 a2 d3 a3", AF: "g2 b2 d3 g3", AG: "bb2 c3 a2 e3", AH: "d3 a2 f2 d2",
  AI: "[bb1,bb2]!2 g3 bb3", AJ: "[d2,d3] a3 d4 d3", AK: "[d2,d3] [e2,e3] [f2,f3]@2", AL: "[f2,f3]@15 ~",
  AM: "bb2@3 f2@2 ~ bb2@2", AN: "a3 e3 db3 a2", AO: "[d2,bb2,d3]@3 [d2,bb2,d3] ~@2 [d2,bb2,d3]@2",
  AP: "[e2,c3,e3]@3 [e2,c3,e3] ~@2 [e2,c3,e3]@2", AQ: "[d2,d3,d4,d5]@3 [a2,a4]@3 [d3,c5]@2",
  AR: "[g2,g3,b4]@3 [b2,g4]@3 [d3,a4]@2", AS: "[[d2,d6]@61 ~@3]/4",
})).s("gm_piano").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@21 A@15 ~ A@15 ~@17 A@54 ~@18 A@26 ~@4>".pickRestart({
  A: "x!2",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct("<~@21 A@15 ~ A@15 ~@17 A@54 ~@18 A@26 ~@4>".pickRestart({
  A: "~ x ~ x",
})).gain(0.2)

// drums · hihat
const hihat = s("hh").struct("<~@21 A@15 ~ A@15 ~@17 A@54 ~@18 A@26 ~@4>".pickRestart({
  A: "x!4",
})).gain(0.2)

stack(piano, piano_2, kick, snare, hihat)

More by Toby Radiation Fox