Strudelify

final fantasy 8 - fragments of memories

Nobuo Uematsu

KeyG majorTempo120 bpm
0:00/0:00
// final fantasy 8 - fragments of memories — Nobuo Uematsu
// 120 bpm, 3/4, key G 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/1922266; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 144 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 · violin
const violin = note(`<
  A B C D E F G H I J K L M N O@2 I P Q R S T U V W Q X Y Z AA AB@2 AC AD AE AF AG AH AI@2 ~ AJ AK AL I J K L M N AM AN
  I P Q R S T U V W Q X Y Z AA AB@2 AC AD AE AF AG AH AO@3 AP AQ@3 AP AQ@3 AR AS@4 AT@2 AU@2 AV@2 AW AX AY@2 AZ BA BB@4
  BC@2 BD@2 BE BF BG BH BI BJ BK@2 BL@4 BM@4 BN@2 BO@2 BP@2 BQ@2 BR@2 BK@2 BS@2 BT@2 BU@2
>`.pickRestart({
  A: "c4@11 d4@2 c4@3", B: "b3@5 g4@11", C: "g4@11 a4@2 g4@3", D: "f#4@5 c5@11", E: "e5@5 c5@5 ~ a4@5",
  F: "c5@8 a4@3 g4@2 f4@3", G: "e4@5 c5@11", H: "~@5 c5@5 ~ d5@5", I: "e5@11 g5@5", J: "d5@11 g4@5", K: "c5@11 e5@5",
  L: "b4@11 g4@5", M: "a4@11 a4@5", N: "a4@5 b4@5 ~ c5@5", O: "[g4@21 c5@5 ~ d5@5]/2", P: "d5@11 g5@5",
  Q: "a5@5 b5@5 ~ c6@5", R: "b5@11 g5@5", S: "a5@11 a5@5", T: "a5@5 d6@5 ~ c6@5", U: "b5", V: "g#5", W: "c6@11 a5@5",
  X: "g5", Y: "e5", Z: "f5@5 d5@5 ~ e5@5", AA: "f5@11 a5@5", AB: "g5/2", AC: "a5@11 f5@5", AD: "f5@5 g5@5 ~ a5@5",
  AE: "g5@5 a5@5 ~ b5@5", AF: "c6", AG: "a5@5 d5@5 ~ f5@5", AH: "e5@11 d5@5", AI: "c5/2", AJ: "~@11 d4@5",
  AK: "a4@8 b4@3 a4@2 g4@3", AL: "f#4@5 c5@5 ~ d5@5", AM: "g4", AN: "g5@5 c5@5 ~ d5@5", AO: "c5/3",
  AP: "c5@5 b4@5 ~ c5@5", AQ: "a4/3", AR: "d5@5 c5@5 ~ a4@5", AS: "[b4@53 a4@5 ~ g4@5]/4", AT: "a4/2", AU: "g4/2",
  AV: "[g4@4 ~@3 g4@4 f#4@3 d5@7 d5@4 ~@3 d5@4]/2", AW: "c#5@4 g5@7 e5@4 ~", AX: "~@5 c5@4 ~@7",
  AY: "[d5@4 g4 g4@2 g4@4 g4@3 g4@4 g4@4 ~@3 d5@2 ~ g5@2 ~@2]/2", AZ: "~@4 d5@2 ~ f#5@2 ~@5 d5@2",
  BA: "~@2 g5@2 ~@5 d5@2 ~ f#5@2 ~@2",
  BB: "[~@4 c5@2 ~ g5@2 ~@2 g5@3 f#5@4 e5@3 d5@14 ~ g4@3 a4@4 b4@7 d5@3 a4@7 d5@4]/4",
  BC: "[e5@4 f#5@3 g5@4 f#5@7 d5@3 e5@7 e5@4]/2", BD: "[e5@4 a5@3 g5@4 f#5@10 d#5@11]/2",
  BE: "~@2 b4 ~ e5 g5 ~ b5 ~ b4 ~ e5@4 ~", BF: "~@7 b4 ~ d5 ~ g5 b5 ~ b4 ~", BG: "d5@4 ~@8 e4 ~ a4 ~",
  BH: "c5 ~ e5@2 ~@3 a5 ~ f#5 ~ g5 a5@2 ~@2", BI: "~@2 a5 ~ a5 g5 ~ g5 ~ d5 ~ d5 b4 ~ b4@2",
  BJ: "d5@2 d5@2 ~ e5@7 c5@4, ~@2 f#5 ~@5", BK: "[c5@4 d5@3 e5@4 d5@3 e5@4 f#5@3 g5@11]/2",
  BL: "[e5@4 a4@3 c5@4 b4@7 a4@3 g4@34 d5@2 d5@3 d5@4]/4", BM: "[d5@36 c5@3 b4@4 g5@7 e5@3 e5@4 f#5@3 g5@4]/4",
  BN: "[d5@11 b4@10 c5@4 a4@3 b4@4]/2", BO: "[c5@7 e5@4 d5@21]/2", BP: "[e5@7 c5@4 c5@3 d5@4 e5@3 d5@4 e5@3 f#5@4]/2",
  BQ: "[g5@11 e5@3 a4@4 c5@3 b4@7 a4@4]/2", BR: "[g4@21 e5@7 c5@4]/2", BS: "[e5@7 a4@4 c5@10 b4@11]/2",
  BT: "[a4@11 g4@21]/2", BU: "[g4@25 ~@7]/2",
})).s("gm_violin").gain(0.25)

// other · pizzicato strings
const pizzicato_strings = note("<~@143 [~@9 g5@4 ~@3]>").s("gm_pizzicato_strings").gain(0.3)

// other · pizzicato strings
const pizzicato_strings_2 = note("<~@143 [~@9 b4@4 ~@3]>").s("gm_pizzicato_strings").gain(0.25)

// other · viola
const viola = note(`<
  A@2 B C A D B ~ E F E G H@2 B I J K L M N O M P Q E R I A S T U V W X Y ~ Z AA@2 AB A AC AD AB K A B AE AB B I AB AF
  AG@2 AH AI K AJ AK AL AM AN AO AP AQ AR V AS AT AU AV AW AX@2 AY AZ@2 BA BB BC BD BA BE@2 BF BG BF BG BH BI BJ BK BL
  BM BN BO BP BQ BR BS BT@2 BU@2 BV@2 BW@2 BX@2 BY@2 BZ@2 CA CB CC CD CE CF CG CH CI@2 CJ@2 CK@2 CL@2 CM CN CO@2 CP@2
  CQ@2 CR CS CT@2
>`.pickRestart({
  A: "a3", B: "g3", C: "f#3", D: "c4@3 d4@2 c4@5 ~ b3@5", E: "~@5 e4@11", F: "~@5 d4@11", G: "~@5 b3@11",
  H: "[~@5 c4@16 b3@5 ~ a3@5]/2", I: "b3@5 c4@5 ~ d4@5", J: "e4@11 c4@5", K: "b3", L: "c4@8 c4@3 a4@5", M: "g4",
  N: "f4@11 c5@5", O: "a4@5 a4@11", P: "f4@5 e4@5 ~ d4@5", Q: "c4@3 d4@2 c4@3 d4@3 c4@5", R: "b3@3 c4@2 b3@3 c4@3 b3@5",
  S: "c4@3 b3@2 c4@3 d4@3 e4@2 f4@3", T: "e4@13 d4@3", U: "e4@3 d4@2 c4@3 d4@3 c4@2 b3@3", V: "f4@8 e4@3 f4@5",
  W: "f4@5 e4@5 ~ f4@5", X: "g4@5 a4@5 ~ b4@5", Y: "f#4", Z: "~@11 f4@5", AA: "e4/2", AB: "c4",
  AC: "f4@8 g4@3 f4@2 e4@3", AD: "d4", AE: "f3", AF: "~@3 g3@2 a3@5 ~ b3@5", AG: "[c4@5 d4@5 ~ e4@10 d4@11]/2",
  AH: "g4@5 f4@11", AI: "a3@5 g#3@5 ~ a3@5", AJ: "g#4@5 a4@5 ~ b4@5", AK: "e4", AL: "c4@3 a3@2 c4@3 a3@3 c4@2 a3@3",
  AM: "b3@3 e4@2 g4@3 e4@3 g4@2 e4@3", AN: "b4@3 g4@2 b4@3 g4@3 b4@2 g4@3", AO: "a4@3 f4@2 a4@3 f4@3 a4@2 f4@3",
  AP: "~@3 a3@2 d4@3 a3@3 c4@2 d4@3", AQ: "e4@3 f4@2 g4@3 a4@3 e4@2 a4@3", AR: "b4@3 c5@2 b4@3 a4@3 c5@2 a4@3",
  AS: "f4@3 c4@2 g4@3 c4@3 a4@2 c4@3", AT: "e4@3 d4@2 e4@3 f4@3 e4@2 d4@3", AU: "f#4@3 g4@2 f#4@3 c5@3 c5@5",
  AV: "f4@3 e4@2 f4@3 e4@3 d4@2 c4@3", AW: "b3@11 g4@5", AX: "[e3@21 f3@5 ~ g3@5]/2", AY: "b3@5 a3@5 ~ g3@5",
  AZ: "[a3@5 e4@16 d4@5 ~ c4@5]/2", BA: "e3@5 f3@5 ~ g3@5", BB: "g3@5 f3@5 ~ e3@2 c3@3", BC: "d3",
  BD: "e4@5 d4@5 ~ c4@5", BE: "c4/2", BF: "e4@3 e4@2 g3@3 g3@3 e4@2 e4@3", BG: "e4@3 e4@2 b3@3 b3@3 e4@2 e4@3",
  BH: "e4@3 e4@2 d4@3 d4@3 c4@2 c4@3", BI: "d4@3 d4@2 c4@3 c4@3 b3@2 b3@3", BJ: "c4@3 c4@2 b3@3 b3@3 a3@2 a3@3",
  BK: "g3@5 a3@5 ~ b3@5", BL: "c4@4 ~@3 c4@4 c4@4 ~", BM: "~@5 b3@4 ~@3 b3@4",
  BN: "b3@2 a#3@2 ~@2 a4 g4, ~@11 b4@2 ~@3", BO: "a4@2 g4@2 ~ g4@2 e4@2 d4@2 ~ d4@2 c4@2, ~@4 e4@2 ~@5 e4@2 ~@3",
  BP: "b3 ~@3", BQ: "~@9 g4@2 ~ b4@2 ~@2", BR: "~@4 f#4@2 ~ a4@2 ~@5 g4@2", BS: "~@2 b4@2 ~@5 f#4@2 ~ b4@2 ~@2",
  BT: "[~@4 e4@2 ~ g4@2 ~@2 e4@3 f#4@4 g4@3 g4@5 ~@2 e4@2 f#4@2, ~@27 f#4@2 ~@3]/2",
  BU: "[d4@7 ~@7 g4@4 f#4@3 e4@7 d4@4]/2", BV: "[g4@4 a4@3 b4@4 b4@7 f#4@3 g4@7 g4@4]/2",
  BW: "[g4@7 b4@4 a4@10 f#4@4 f4@3 f#4@4]/2", BX: "[g4@7 e4@4 e4@3 f#4@4 g4@3 d4@11]/2",
  BY: "[b3@11 c4@3 a3@4 b3@3 c4@7 e4@4]/2", BZ: "[d4@14 c4@4 d4@4 ~@3 c4@2 ~ e4@4, ~@27 d4@2 ~@3]/2",
  CA: "~@2 f#3@2 ~ g3@2 a3@2 f#3@2 ~ e4@2 e4@2, ~@4 f#3@2 ~@5 d4@2 ~@3", CB: "b3@2 e4@2 ~ c#4@11, ~@2 g4 ~@5",
  CC: "~@5 d4@2 e4@4 ~@3 b3@2, ~@2 c4 ~@5", CD: "c4@2 d4@3 g3@2 a3@2 b3@2 ~ g3@2 a3@2, ~@11 a3@2 ~@3",
  CE: "b3@2 c4@2 ~ c4@2 b3@2 c4@2 ~ a3@2 g3@2, ~@4 d4@2 ~@5 b3@2 ~@3", CF: "a3@2 g3@2 ~ g3@11, ~@2 a3 ~@5",
  CG: "g3@2 a3@2 ~ a3@2 g3@2 a3@2 ~ c4@2 d4@2, ~@4 b3@2 ~@5 b3@2 ~@3",
  CH: "c4@2 b3@2 ~ b3@2 a3@2 g3@2 ~ g3@2 a3@2, ~@4 c4@2 ~@5 a3@2 ~@3",
  CI: "[g3@4 e3@3 f#3@4 ~@3 b3@4 b3@4 ~@3 b3@3 b3@4]/2", CJ: "[~@4 b3@3 b3@4 ~@3 d4@4 d4@4 ~@3 c4@3 b3@4]/2",
  CK: "[a3@2 b3@2 c4@3 e4@4 ~@3 b3@4 b3@3 b3@4 c4@3 d4@4]/2", CL: "[~@4 b3@3 c4@4 e4@3 d4@4 c4@3 b3@4 g4@3 f#4@4]/2",
  CM: "c#4@11 ~@3 c4@2", CN: "d4@2 e4@4 ~@3 b3@2 ~ d4@4, ~@11 c4@2 ~@3",
  CO: "[~@5 a3@2 b3@4 d4@7 e4@2 d4@2 ~@3 b3@3 c4@2 b3@2, ~@2 g3 ~@13]/2",
  CP: "[e4@4 d4@3 c4@4 b3@3 g4@4 f#4@3 c#4@11]/2",
  CQ: "[a3@2 b3@2 ~ b3@2 a3@4 a3@3 b3@4 c4@3 d4@7 c#4@4, ~@2 a3 ~@13]/2", CR: "c4@7 b3@4 ~ a#3@2 c4@2, ~@11 b3@2 ~@3",
  CS: "b3@2 a#3@3 a3@2 g#3@2 b3@2 ~ g#3@4, ~@11 a3@2 ~@3", CT: "[g3@25 ~@7]/2",
})).s("gm_viola").gain(0.2)

// other · pizzicato strings
const pizzicato_strings_3 = note("<~@143 [~@9 e4@4 ~@3]>").s("gm_pizzicato_strings").gain(0.25)

// other · cello
const cello = note(`<
  A@2 B C D@2 E ~ F G H I A@2 B J K@2 L M N O P Q R H S I T@2 U V W X Y H Z AA AB AC AD AE D AA E AF AG AA E AH AI AA E
  AF AG AA AJ AK AA AL R H AM I AJ AG U V AN X Y H D B AO@2 AP@2 AQ@2 E AR@3 AS AT AU AV AW AX AY@2 AP@2 AZ BA BB BC
  BD@2 BE@2 BF@2 BG BH BI BJ BK BL BM BN BO@2 BP@2 BQ@2 BR BS@3 BT@4 BU@2 BV@2 BW@2 BX BY BZ@2 CA@2 CB@2 CC@2 CD@2
>`.pickRestart({
  A: "f3", B: "e3", C: "d#3", D: "d3", E: "c3", F: "c4", G: "b3", H: "a3", I: "g3", J: "g2@5 a2@5 ~ b2@5",
  K: "[c3@27 b2@5]/2", L: "a2@5 e3@5 ~ a3@5", M: "g3@11 g2@5", N: "f2@5 c3@5 ~ f3@5", O: "f#3@11 d3@5",
  P: "g2@5 d3@5 ~ g3@5", Q: "g#3@11 e3@5", R: "a2@11 e3@5", S: "g2@11 e3@5", T: "f3/2", U: "c3@11 b2@5",
  V: "a2@11 g2@5", W: "f2@11 e3@5", X: "d3@5 e3@5 ~ f3@5", Y: "e3@5 f3@5 ~ g3@5", Z: "f2@5 a2@5 ~ g#2@5", AA: "g2",
  AB: "c2@11 g3@5", AC: "d4@5 c4@8 b3@3", AD: "a3@8 b3@3 a3@2 g3@3", AE: "f3@11 d3@5", AF: "b2", AG: "a2",
  AH: "f3@5 e3@5 ~ d3@5", AI: "e3@11 c3@5", AJ: "f2", AK: "f#2", AL: "g#2", AM: "g2@11 d3@5", AN: "f2@5 f3@5 ~ e3@5",
  AO: "a2/2", AP: "g2/2", AQ: "[f2@21 ~@6 c3@5]/2", AR: "[d3@3 c3@2 d3@3 a2@3 d3@2 d2@29 ~ a2@5]/3",
  AS: "e3@5 d3@5 ~ c3@5", AT: "d3@3 e3@2 f3@3 a2@3 b2@2 c3@3", AU: "e2@11 f2@5", AV: "g2@11 a2@5", AW: "b2@11 c3@5",
  AX: "d3@11 e3@5", AY: "f2/2", AZ: "c3@4 ~@3 c3@4 c3@4 ~", BA: "~@5 b2@4 ~@3 b2@4", BB: "b2@4 a#2@4 ~@3 a2@4 ~",
  BC: "~@5 d3@4 ~@7", BD: "[g2@4 ~@10 g3@4 a3@3 b3@7 d4@4]/2", BE: "[a3@7 d3@4 g3@7 b3@3 f#3@7 d3@4]/2",
  BF: "[e3@7 e3@4 e3@3 f#3@4 g3@3 d3@11]/2", BG: "d2@4 e2@3 f#2@4 g2@2 ~@3", BH: "~@5 f#2@2 ~@9",
  BI: "e2@2 ~@9 d2@2 ~@3", BJ: "~@5 c3@2 ~@2 e3@2 ~ e3@2 ~@2", BK: "c#3@2 ~@2 e3@2 ~ e3@2 ~@2 d2@2 ~ d3@2",
  BL: "~@2 c3@2 ~ b2@2 ~@2 a2@2 ~ f#2@2 ~@2", BM: "e2@2 ~@2 e3@2 ~ e3@2 ~@2 g3 f#3 ~ e3 ~",
  BN: "b2 ~ d3@3 d3@4 b2@3 d3@4", BO: "[f#3@2 e3@2 d3@3 b2@4 a2@3 e3@4 e3@3 d3@4 e3@3 f#3@4]/2",
  BP: "[g2@4 g3@3 g3@4 e3@3 e3@4 d3@3 c2@4 c3@3 b2@4]/2", BQ: "[a2@4 b2@3 c3@4 b2@3 c3@4 d3@3 e3@11]/2",
  BR: "c3@4 ~@7 d3@4 ~", BS: "[~@5 g2@32 ~@2 e2@2 e2@3 f#2@4]/3",
  BT: "[g2@34 g2@2 g2@3 f#2@4 e2@3 e3@4 e3@3 g2@4 e3@3 e3@4]/4",
  BU: "[b2@4 d3@3 d3@4 f#2@3 b2@4 b2@3 a2@4 e3@3 e3@4]/2", BV: "[c3@4 e3@3 e3@4 g2@3 d3@4 d3@3 g2@4 a2@3 b2@4]/2",
  BW: "[c3@4 g3@3 g3@4 c3@3 b2@4 c3@3 b2@4 c3@3 b2@4]/2", BX: "~@5 a2@2 a#2@4 a2@4 ~, ~@2 g2 ~@5",
  BY: "~@2 a2@3 d3@4 ~@3 d3@4", BZ: "[g2@4 d3@3 d3@4 g2@3 a2@4 b2@3 c3@4 g3@3 g3@4]/2",
  CA: "[c3@4 b2@3 c3@4 b2@3 c3@4 b2@3 c#3@11]/2", CB: "[a2@11 a2@3 b2@4 c3@3 d3@7 c#3@4]/2",
  CC: "[c3@7 b2@4 b2@7 a#2@3 a2@7 g#2@4]/2", CD: "[g2@21 g2@4 ~@7]/2",
})).s("gm_cello").gain(0.2)

// other · pizzicato strings
const pizzicato_strings_4 = note("<~@143 [~@9 g3@4 ~@3]>").s("gm_pizzicato_strings").gain(0.45)

stack(violin, pizzicato_strings, pizzicato_strings_2, viola, pizzicato_strings_3, cello, pizzicato_strings_4)

More by Nobuo Uematsu