Strudelify

Adastra Main Theme

Magic38

KeyD majorTempo66 bpm
0:00/0:00
// Adastra Main Theme — Magic38
// 66 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 35, 4/4 at bar 35) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5597789; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 37 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(66/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 · piano
const piano = note("<A B C D E@4 F@4 G@4 H@4 I@6 J K L M N@7>".pickRestart({
  A: "a4@11 ~ d5@2 a4@2, d4@15 ~", B: "~@7 a4, d3, c#5 c#5@3, ~ a4@2 a4@2 a4 e5@2, ~ d5", C: "[g3,g5]@15 ~",
  D: "[d4,b4] a4", // G
  E: "[~@4 g4@2 ~@6 d4@2 ~@5 d5 d5@2 ~@6 [a3,d5]@4, d3@8 d3@6 d4 c#3@7 [d5,g5] f#5 g3 d4 g4 b4@5, ~ a3@8 a3@2 a3@5 [d5,f#5] b3@15, ~ d4@4 d4 ~ f#4@2 b4 a5@6, ~@3 g4@3 g4@2 b2@8]/4", // D5 G5 D
  F: "[d5!3 ~ d5 ~@3 d5 ~@5 [a3,f#5]@2, d3@13 a4 g5@6 a5@4 [g3,f#5] d4 g5 [g3,d4]@5, ~@6 d5@2 ~@2 d5@5 a4@4 b3@13, ~@7 d4@4 d4@10 a4 g5 a4@9, ~@6 a5@2 b3 d5@7]/4", // D Gmaj7 G5
  G: "[~@36 b4@3 ~@17 d5@8, b3@8 b3@5 f#4 g5 f#5 [g3,b3,d4]@6 d5 [b4,e5] a3 e4 g4 b4@5, e5@4 e5@12 e5@4 e5@14 g4@5 d5 a5@24, ~ f#4@2 f#4@6 f#4@2 f#4 b5@8 b4 g5@11, ~@4 f#5@9 a5@2 f#4@7 f#5@10]/4", // G E5
  H: "[~ a4 [a4,c#5] ~@7 a4@2 [a4,d5] ~@2 a4, d3@7 d4 d3@9 d4@7 a3@2 [a4,d5] a3 [a4,c#5] a3@3, ~ d4@5 a4@3 d4 a4 d4 a4 f#2@7 c#5@4 a2@8, ~@2 d5@8 d5@2 c#5@2 [a4,d5] d4 g2@16, ~@6 c#5@6 f#3@6 [a4,d5] g3@13]/4", // A D5 A D5
  I: "[~@4 a4@2 ~@2 a4@2 ~@2 a4@2 d3 ~@5 [a4,d5]@2 ~@24 d5!2, d3@3 d3@4 d3@4 d3@3 c#5@2 a4 g3 a4 g3@3 d5@2 [a2,c#5]@12 a4 b3@7 [a4,a5] g5 f#5@2, a4@2 a4@2 ~@2 a4@2 ~@2 a4@2 d5@4 a2@6 a4 g3@9 b2@16, ~ d2@3 d2@4 d2@4 d2@12 a4 a3 a4 a3 d5@2 a4 a3 [a4,f#5] b3 a4 b3 f#5@2 [a4,d5] a3@9, ~@14 a4 d3@13 a4 a3 e5@10 [g2,a4,a5] g3 [a4,a5] [g2,g3]@5]/6", // D5 A D D5 Gsus2 A G
  J: "d5@2 d5 f#4 [g3,f#5]@4, f#3 ~", K: "~ f#4 a4 f#4 [d5,a5] g5 [d5,f#5] d5, a3 ~",
  L: "[a4,d5]@2 [a4,e5]@2 [a4,f#5]@2 [a4,e5] f#4, f#3 g3", M: "[a4,d5] e5 [a4,c#5]@2, a3@15 ~",
  N: "[~@46 d6@2 ~ [d6,a6]@2 [d6,a6]@2 [d6,a6]@2 ~@23 a4@26 ~@8, a6@11 d6@2 a5@3 g4@17 d5 f#5 g6@5 f#5 d6@3 [a4,f#6]@4 g4@23 ~ d2@3 [d2,a3]@2 f#4@27 ~@8, ~ d6@3 a5@2 g6@8 d6@2 g6@7 a5@25 c#6@7 ~@21 d4@28 ~@8, ~@2 f#6@6 d6@2 a5@2 a6@8 a5 d6 a6@2 d6@8 a6@4 d5 f#5 f#6 d5@16 ~@19 d3@30 ~@8, ~@3 g6@2 d6@2 a5@2 f#6@8 a5 d6 f#6@6 g6@7 b4@23 ~@18 a2@31 ~@8]/7", // D5 D D5
})).s("gm_piano").gain(0.3)

// chords · synth strings 1 · "String Synthesizer"
const synth_strings_1 = note("<A@2 B ~@5 A@2 C@2 D@2 E@2 F@2 G H I@2 ~@6 J@2 K L@6>".pickRestart({
  A: "[d4,a4]/2", B: "[d4,g4]", C: "[~@3 c#5, [d4,g4]]/2", D: "[b4,e5]/2", E: "~@3 [b4,d5]", F: "[a4,d5]/2",
  G: "[g4,d5]", H: "~ [a4,c#5]", I: "e5/2", J: "[a4 a4, [d5,e5]]/2", K: "[d5,a5]",
  L: "[g5@2 a5@2 g5@3 [d4,a4,d5]@4 ~, d5@7 ~@5]/6", // D5
})).s("gm_synth_strings_1").gain(0.2)

stack(piano, synth_strings_1)