Strudelify

A Tender Feeling-- Sword Art Online

Ella Van Blaricom (

KeyA majorTempo130 bpm
0:00/0:00
// A Tender Feeling-- Sword Art Online — Ella Van Blaricom (
// 130 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: metre changes (3/4 at bar 1, 4/4 at bar 1) 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/6229900; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 67 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP Y AQ AR AS ~@21
>`.pickRestart({
  A: "~ e4 a4 b4", B: "~@3 e5, [a3,c#5], ~ e4@3, ~ a4", C: "~@3 e5, [g#3,b4], ~ e4@3, ~ g#4",
  D: "~ f#4, [f#3,a4], ~ c#4@3", E: "a4 ~@2 e5, f#4, ~ a4@3, ~ d5", F: "~@3 a5, [d4,f#5], ~ a4@3, ~ d5",
  G: "~@2 c#5!2, [c#4,e5], ~ a4@3", H: "~ b4, [b3,d5], ~ f#4@3", I: "~@3 a4, [b3,d5], ~ c#5@3, ~ [c#4,b4]",
  J: "~@3 e4, [b2,d4,f#4], ~ f#3@3, ~ b3", K: "~@3 b4, [b3,f#4], ~ g#4@3, ~ a4", L: "~@3 f#4, [c#3,b4], ~ g#3@3, ~ c#4",
  M: "~@3 e5, [c#4,g#4], ~ a4@3, ~ b4", N: "~ [f#3,c#5], [f#2,d5], ~ c#3@3", O: "[f#3,c#5]",
  P: "~@3 f#4, b2, f#4@3 ~, e4!2, ~ [f#3,d4]@3", Q: "[c#3,e4,g#4]", R: "~@3 c#4, [f#2,e4,a4], c#4@3 ~, ~ c#3@3, ~ f#3",
  S: "~@3 c#4, [e2,b3,e4,g#4], ~ c#3@3, ~ e3", T: "~ d3, [d2,c#4,f#4,a4], ~ a2@3", U: "~@3 e5, d3, ~ a4@3, ~ d5",
  V: "~@3 a5, [b2,a4,d5,f#5], ~ f#3@3, ~ b3", W: "~@3 c#5, [b2,a4,e5], c#5@3 ~, ~ f#3@3, ~ a3",
  X: "~ g#3, [g#2,f#4,b4,d5], ~ d3@3", Y: "~@3 f#4, g#3, ~ d4@3, ~ e4", Z: "~@3 c#3, [b1,f#4], ~ f#2@3, ~ b2",
  AA: "~@3 a4, d3, ~ c#5", AB: "~@3 [d3,f#4], [c#2,e4], ~ a2@3, ~ c#3", AC: "[e3,g#4]",
  AD: "~@3 g#3, [f#2,d4,e4,a4], ~ c#3@3, ~ f#3", AE: "~@3 d4, a3, ~ d4@2 ~, ~ e4",
  AF: "~@3 g#3, [f#2,c#4,e4,a4], ~ c#3@3, ~ f#3", AG: "~@3 e4, a3, ~ e4@2 ~, ~ g#3",
  AH: "~@3 c#4, [d2,f#3,a3], c#4@3 ~, ~ a2@3, ~ d3", AI: "~@3 d#4, [g#2,f#3,b3], d#4@3 ~, ~ d3@3, ~ g#3",
  AJ: "~@3 g#2, [c#3,g#3,b3,e4], ~ g#2@2 ~, ~ f#2", AK: "~@3 [e3,b4], [e2,g#3], [b3,e4] [c#3,b3,e4,a4], ~ g#2@3",
  AL: "~@3 a4, [d2,f#4], ~ a4@15 [d3,b4]@16, ~ c#5@15, ~ a2@3", AM: "~ [g#3,f#4,b4,d#5], [g#2,d#4], [f#4,b4] ~, ~ d3@3",
  AN: "~@3 a4, b2 b3, a4 f#3@3, ~ b4@31, ~ e5@15", AO: "~ a5, [b3,d5], ~ e5@3",
  AP: "~@3 d5, [g#2,d6], ~ [d3,a5]@3, ~ [g#3,f#5]", AQ: "~@3 f#4, c#3, f#4@3 ~, ~ g#3@3, ~ c#4", AR: "[c#3,b3,e4,g#4]",
  AS: "~@3 e5@29, e4, ~ g#4@31, ~ b4@15",
})).s("gm_piano").gain(0.4)

// chords · piano · soft notes
const piano_soft = note("<~@46 A B@4 C@5 D@7 E@4>".pickRestart({
  A: "~@20 e5@8 ~ a5@3",
  B: "[~@5 b5@8 ~@62 e6@8 ~@26 a5@17 ~ a5, ~@14 [a4,c#6]@37 b5@6 e5@26 f#4@45, ~@14 g#5@35 g#4@34 f#5@17 ~ f#5@27, ~@23 a5@60 a5@26 ~@19, ~@31 e5@9 e6@9 e5 g#5@34 ~@8 c#5@36]/4", // A
  C: "[~@16 e6@9 ~@60 c#6@9 ~@61 a5@5, ~@7 d6@17 ~ d4@17 d5@18 b5@2 e6@6 g#4@9 c#5@17 f#5@17 b4@9 [c#5,c#6]@9 [b4,d5,f#5,d6]@31, ~@25 a5@8 a4@61 ~@2 d6@15 b5@26 c#6@23, ~@26 d6@16 a5@9 a6@43 ~ b5@8 f#4@57, ~@27 f#6@32 [c#4,a5]@35 b3@52 [a4,c#5,e5,b5]@14]/5", // C# Bm F#m A
  D: "[~@3 a4@9 ~@52 b5@9 ~@34 [g#5,e6]@35 ~@61 e5@8 e5@13, ~@3 [d4,e5]@44 g#5@8 a5@17 ~@27 f#5@43 ~@26 e5@17 b5@26 ~@13, ~@3 f#5@35 f#5@35 ~@17 e5@52 ~@17 a4@17 ~ [a4,a5]@35 ~@12, ~@12 a4@61 [e4,d6]@64 ~@5 a3@52 c#6@17 ~@13, ~@21 d5@52 ~@8 b4@61 ~@9 e4@61 ~@12]/7", // C#m Dsus2 A E7
  E: "[~@23 [a5,b5]@100 ~@5, ~@11 [c#6,e6]@50 ~@3]/4", // Asus2 C#m
})).s("gm_piano").gain(0.2)

stack(piano, piano_soft)