Strudelify

Left Behind - String Quintet

Ragdoll X

KeyA majorTempo70 bpm
0:00/0:00
// Left Behind - String Quintet — Ragdoll X
// 70 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 5 pizzicato strings (copy of ch 2 pizzicato strings)
// note: Transcription provider: pdmx. https://musescore.com/score/1394906; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 45 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/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 · violin
const violin = 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 ~@3
>`.pickRestart({
  A: "f#4 c#5 f#5 c#5 e4 b4 e5 b4", B: "d4 a4 d5 f#5 c#4 g#4 c#5 f5", C: "d4 f#4 a4 f#4 f4 g#4 c#5 g#4",
  D: "f#4 a4 c#5 f#5 ~@4", E: "~ c#4 f#4 g#4 a4 c#5@3", F: "e4 b3 e4 f#4 g#4 a4@3",
  G: "~ a3@2 ~@4 a3, ~@3 a3@4 ~, ~@2 d4!2, ~@5 f#4@3", H: "~@3 c#4, ~ f4@3 f4@4, ~ g#3@3, ~@3 c#4@3 ~@2",
  I: "~@5 c#5@2 c#5, f#4 f#4@3, ~ c#4@7, ~@3 g#4@5, ~ a4", J: "~@3 b4, e4@3 e4@5, ~ g#3@7, ~ b3@3, ~ g#4",
  K: "~@5 a4@3, d4@3 d4@5, ~ f#4@3 f#4@4, ~ a3@3", L: "~@3 a4, ~ f4@3 f4@4, ~ g#3@3, ~@3 c#4@5",
  M: "~@3 e4, f#4 f#4@3, ~ c#4@7, ~@3 a4@5, ~ c#5", N: "~@3 b3, b3 e5, ~ e4@7, ~ g#4@3, ~@3 b4@5",
  O: "~@3 a4, a3, ~ d4@7, ~ f#4@3, ~@3 a4 d5@4", P: "f#4", Q: "b4", R: "a4@6 b4 a4",
  S: "g#4@4 c#5@3 d5 c#5@2 b4@2 a4@2 g#4@2", T: "f#4@2 a5 g#5 f#5 c#5!2 d5", U: "b4@3 a4 g#4@3 f#4 e4@4 g#4@2 b4@2",
  V: "a4@4 d4 a4@2 d5", W: "c#5@3 g#4", X: "f#4 c#5 f#5 a5 c#6 f#6 a6 f#6", Y: "e4 g#4 b4 e5 g#5 b5 e6 g#6",
  Z: "~@7 a5, d4, ~ a4@7, ~@2 d5@3 f#5@3, ~@3 f#5 a5@2 d5@2",
  AA: "~@7 f6, c#4@4 f5 g#5 c#6@2, ~ f4@7, ~ g#4@3, ~@3 c#5@5", AB: "f#4 [g#4,f#5] [a4,f#5] [c#5,f#5]",
  AC: "e4@2 [f#4,e5]@2 e5 f#5 g#5 e5, ~@2 g#4 b4", AD: "d4 f#4 [a4,d5] [d5,f#5], d5 ~", AE: "c#5 b4 a4 g#4, f5 c#5",
  AF: "f#4@4 a4 b4 c#5 f#4", AG: "e4@3 d4 ~@2 e4 d4", AH: "c#4@3 ~ c#4 b3 e4 d4", AI: "c#4@3 ~@2 f4 g#4 a4",
  AJ: "f#4@4 ~@2 c#5 f#4", AK: "~@4 f#4 g#4 a4 d4", AL: "c#4@3 b3 c#4 b3 a3 d4", AM: "c#4@3 b3 c#4 b3 a3 g#3",
  AN: "f#4@3 ~",
})).s("gm_violin").gain(0.25)

// other · violin · soft notes
const violin_soft = note("<~@5 A ~ B C ~@3 C ~@21 D E F G H ~@6>".pickRestart({
  A: "f#4 ~@7", B: "d4!2 ~@2", C: "c#4@3 ~@5", D: "~@4 c#4 b3 ~@2", E: "~@3 b3 ~@4", F: "~@3 b3 c#4 ~@3",
  G: "~@4 a4 b4 ~@2", H: "e4 ~",
})).s("gm_violin").gain(0.15)

// chords · viola
const viola = note("<~@8 A B C D E F G H ~@3 I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE ~@3>".pickRestart({
  A: "~@3 c#4, ~ f3@7, ~ g#3@3, ~@3 c#4@3 ~@2, ~ f4", B: "~@5 c#5@2 c#5, f#3 a4, ~ c#4@7, ~ f#4@3, ~@3 g#4@5",
  C: "~@3 b4, e3 g#4, ~ g#3@7, ~ b3@3, ~@3 e4@5", D: "~@5 a4@3, ~ f#3@7, ~ a3@3, ~@3 d4@5, ~ f#4",
  E: "~@3 a4, ~ f3@7, ~ g#3@3, ~@3 c#4@5, ~ f4", F: "~@3 e3, f#3 c#5, ~ c#4@7, ~ f#4@3, ~@3 a4@5",
  G: "~@3 b3, b3@3 b3@3 ~@2, ~ e3@7, ~ g#3@3, ~ e4", H: "~@3 a3, a3@3 a3@3 ~@2, ~ d3@7, ~ f#3@3, ~ d4",
  I: "d3 f#3 a3 c#4 f#4 c#4 f#4 g#4 a4 c#5@3 c#5@2 a4@2", J: "c#3 f3 g#3 c#4 f4 c#4 f4@2 g#4@2 c#5@6",
  K: "f#3 c#4 f#4 g#4 a4 f#4 a4 c#5 f#5@2 c#5@2 a4@2 f#4@2", L: "b3@3 a3 g#3@3 f#3 e3@4 g#3@2 b3@2",
  M: "a3@4 d3 a3@2 d4", N: "~@3 g#3, c#4", O: "f#3 g#3 a3 c#4", P: "e3 f#3 g#3 b3", Q: "d3 f#3 a3 d4",
  R: "c#4 b3 a3 g#3", S: "~@7 f#5, f#3@4 c#5 f#5 a5@2, ~ c#4@7, ~ f#4@3, ~@3 a4@5",
  T: "~@7 g#5, e3@4 g#4 b4 e5@2, ~ g#3@7, ~ b3@3, ~@3 e4@5", U: "~@7 a4, d3, ~ a3@7, ~@2 d4@3 f#4@3, ~@3 f#4 a4@2 d4@2",
  V: "~@7 f5, c#3@4 f4 g#4 c#5@2, ~ f3@7, ~ g#3@3, ~@3 c#4@5", W: "~@7 f#4, f#3@2 ~ a3@5, ~ c#3@7, ~ c#4",
  X: "~ g#3@3 ~@3 g#4, ~@5 b3@3, ~@3 e4", Y: "~@7 a3, d3@2 ~ f#3@2 f#3@3, ~ a3@3 a3@3 ~, ~@3 d3",
  Z: "~@7 f5, c#3@5 g#4 c#5@2, ~ f3@7, ~ g#3@3, ~ f4", AA: "~@7 f#4, f#3, ~ c#4@7, ~ a4, ~@5 c#5@3",
  AB: "~@7 b3, ~ g#3@7, ~@2 b3@5 ~, ~ g#4, ~@5 b4@3", AC: "~@7 c#4, d3, ~ a3@3, ~@3 c#4@2 a4@3, ~ f#4",
  AD: "~@5 g#4@3, c#3 f4, ~ f3@7, ~ g#3@3, ~@3 c#4@5", AE: "f#3@3 ~",
})).s("gm_viola").gain(0.25)

// chords · viola · soft notes
const viola_soft = note("<~@8 A ~@2 B A ~@20 C D E F G H I ~@5>".pickRestart({
  A: "c#3", B: "d3", C: "~@3 a4, ~ f#3@3, ~@5 f#4@2 ~", D: "~ g#3, e3@3 e3@5, ~@2 b3@3 ~@3", E: "~ d3@2 ~",
  F: "~@3 c#4@5", G: "~@3 g#4@5, ~@2 f#4@5 ~", H: "~@3 e4@5, e3", I: "~ f#3@7",
})).s("gm_viola").gain(0.15)

// chords · pizzicato strings · "Violoncello"
const pizzicato_strings = note(`<
  ~@4 A@2 B C D E F G ~@2 H I J K L M N O L P Q R S T U R S T U V W X Y Z AA AB AC AD@3 ~
>`.pickRestart({
  A: "f#3 ~@6 f#3", B: "e3 ~@6 e3", C: "d3 ~@6 b2", D: "c#3!2 f3 f#3", E: "f#3 ~@6 c#3", F: "e3 ~@6 b2", G: "d3 ~@6 a2",
  H: "~@3 b2, b2 e4, ~ e3@7, ~ g#3@3, ~@3 b3@5", I: "~@3 a3, a2, ~ d3@7, ~ f#3@3, ~@3 a3 d4@4",
  J: "~@3 g#4, g#2@4 c#4 f4@3, ~ c#3@7, ~ f3@3, ~@3 g#3@5",
  K: "~@7 f#3, f#2@5 c#4 a3@2, ~ c#3@15, ~@2 f#3@2 a3 f#3 a3 c#4 f#4@8, ~@3 g#3@13",
  L: "~@15 g#3, e2@3 b3@2 e3@2 b3, ~ b2@6 g#3@2 b2@7, ~ e3@3 e2@4, ~@3 g#3 b3 e4@6 g#3 b3 e4@3",
  M: "~@9 c#4@3 ~@2 a3@2, d2@6 f#3 g#3 a3@4 c#4@4, ~ f#2@15, ~ a2@7, ~@3 c#3 f#3 c#3@11",
  N: "~@5 c#4@3, c#2@3 f3 g#3@4, ~ f2@15, ~ g#2@7, ~@3 c#3 f3 c#3@11",
  O: "f#2 c#3 f#3 g#3 a3 f#3 a3 c#4 f#4@2 c#4@2 a3@2 f#3@2",
  P: "~@9 c#4@3 ~@2 g#3@2, d2@6 f#3 g#3 a3@4 c#4@4, ~ f#2@15, ~ a2@7, ~@3 c#3 f#3 c#3@11",
  Q: "~ c#4, c#2@6 f3 g#3@9, ~ f2@15, ~ g#2@7, ~@3 c#3 f3 c#3@11",
  R: "~@7 f#4, f#2@4 c#4 f#4 a4@2, ~ c#3@7, ~ f#3@3, ~@3 a3@5",
  S: "~@7 g#4, e2@4 g#3 b3 e4@2, ~ g#2@7, ~ b2@3, ~@3 e3@5", T: "~@7 a3, d2, ~ a2@7, ~@2 d3@3 f#3@3, ~@3 f#3 a3@2 d3@2",
  U: "~@7 f4, c#2@4 f3 g#3 c#4@2, ~ f2@7, ~ g#2@3, ~@3 c#3@5", V: "~ c#4", W: "~@7 g#4",
  X: "~@7 a3, d2, ~@4 a3@3 ~, ~@3 d3", Y: "~@7 f4, c#2, ~ f2@7, ~@5 g#3@3, ~@3 c#4", Z: "~@5 c#4@3, f#2, ~ a3",
  AA: "~@5 b3@3, ~@2 b2@5 ~", AB: "~@5 a3@3, d2, ~@3 c#3@4 ~, ~ f#3", AC: "~@5 g#3@3, c#2, ~ g#2@3, ~@3 c#3@5, ~ f3",
  AD: "[~@7 [a3,a4] ~@16, ~ a2@16 ~@7, ~ c#3@8 ~@3, ~@3 f#3@2 c#4@3 ~@16, ~@4 a3@3 ~@17]/3", // A
})).s("gm_pizzicato_strings").gain(0.3)

// chords · pizzicato strings · "Violoncello" · soft notes
const pizzicato_strings_soft = note("<~@33 A B C D E F G H I@2 J ~>".pickRestart({
  A: "~@7 f#4, f#2@5 f#4 a4@2, ~ c#3@7, ~ f#3@3, ~@3 a3@5", B: "~@3 e4, e2@4 g#3 b3@3, ~ g#2@7, ~ b2@3, ~@3 e3@5",
  C: "~@3 f#3@2 f#3@3, ~ a2@7, ~ d3@2 ~", D: "~ f3, ~ g#2@3, ~@3 c#3@5", E: "~@7 f#3, ~ c#3@7, ~@2 f#3@5 ~, ~@3 g#3@5",
  F: "~@7 b2, e2, ~ g#2@7, ~@3 e3@5, ~ g#3", G: "~@7 c#3, ~ f#2@7, ~ a2@3", H: "~ f2@7",
  I: "[~@6 [f#3,f#4] ~ [c#4,c#5] [f#4,f#5] [a4,a5] [c#5,c#6] [f#5,f#6]@4, f#2]/2", J: "f#2",
})).s("gm_pizzicato_strings").gain(0.2)

// bass · acoustic bass · "Contrabass"
const bass = note(`<
  ~@4 A@2 B C D E F G ~@2 H I J K L M N K L O P Q R S T Q R S T ~ U V W X Y Z AA AB@3 ~
>`.pickRestart({
  A: "f#2 ~@6 f#2", B: "e2 ~@6 e2", C: "d2 ~@6 b1", D: "c#2!2 f2 f#2", E: "f#2 ~@6 c#2", F: "e2 ~@6 b1", G: "d2 ~@6 a1",
  H: "~@3 b1, b1 e3, ~ e2@7, ~ g#2@3, ~@3 b2@5", I: "~@3 a2, a1, ~ d2@7, ~ f#2@3, ~@3 a2 d3@4",
  J: "~@3 g#3, g#1@4 c#3 f3@3, ~ c#2@7, ~ f2@3, ~@3 g#2@5",
  K: "~@7 f#2, f#1@5 c#3 a2@2, ~ c#2@15, ~@2 f#2@2 a2 f#2 a2 c#3 f#3@8, ~@3 g#2@13",
  L: "~@15 g#2, e1@3 b2@2 e2@2 b2, ~ b1@6 g#2@2 b1@7, ~ e2@3 e1@4, ~@3 g#2 b2 e3@6 g#2 b2 e3@3",
  M: "~@9 c#3@3 ~@2 a2@2, b1@6 f#2 g#2 a2@4 c#3@4, ~ f#1@15, ~ a1@7, ~@3 c#2 f#2 c#2@11",
  N: "~@5 c#4@3, c#2@3 f3 g#3@4, ~ f2@15, ~ g#2@7, ~@3 c#3 f3 c#3@11",
  O: "~@9 c#3@3 ~@2 g#2@2, b1@6 f#2 g#2 a2@4 c#3@4, ~ f#1@15, ~ a1@7, ~@3 c#2 f#2 c#2@11",
  P: "~ c#3, c#2@2 g#1@5 g#2@9, ~ f1@15, ~@3 c#2@2 c#2@11, ~@2 f2 f2@5",
  Q: "~@7 f#3, f#1@4 c#3 f#3 a3@2, ~ c#2@7, ~ f#2@3, ~@3 a2@5",
  R: "~@7 g#3, e1@4 g#2 b2 e3@2, ~ g#1@7, ~ b1@3, ~@3 e2@5", S: "~@7 a2, b1, ~ a1@7, ~@2 d2@3 f#2@3, ~@3 f#2 a2@2 d2@2",
  T: "~@7 f3, c#2@3 c#2@2 g#2 c#3@2, ~ f1@7, ~ g#1@3, ~ f2", U: "~@7 g#3", V: "~@7 a2, b1, ~@3 d2",
  W: "~@7 f3, c#2@3 ~@2 g#2@3, ~ f1@7", X: "~@5 c#3@3, f#1, ~ a2", Y: "~@5 b2@3, ~@2 b1@5 ~",
  Z: "~@5 a2@3, b1, ~@3 c#2@4 ~, ~ f#2", AA: "~@5 g#2@3, c#2@3 c#2@5, ~ g#1@3, ~ f2",
  AB: "[~@5 c#4@16 ~@3, ~ a2@16 ~@7, ~ c#3@8 ~@3, ~ a3@4 ~]/3",
})).s("gm_acoustic_bass").gain(0.3)

// bass · acoustic bass · "Contrabass" · soft notes
const bass_soft = note("<~@33 A B C D E F G H I@3 ~>".pickRestart({
  A: "~@7 f#3, f#1@4 c#3 f#3 a3@2, ~ c#2@7, ~ f#2@3, ~@3 a2@5", B: "~@3 e3, e1@4 g#2 b2@3, ~ g#1@7, ~ b1@3, ~@3 e2@5",
  C: "~@5 f#2@3, ~ a1@7, ~ d2@2 ~, ~@3 f#2@2 ~@3, ~@4 a2@3 ~", D: "~@3 c#3, ~ g#1@3, ~@3 c#2@5, ~ f2",
  E: "~@7 f#2, ~ c#2@7, ~@2 f#2@5 ~, ~@3 g#2@5", F: "~@7 b1, e1, ~ g#1@7, ~@3 e2@5, ~ g#2",
  G: "~@7 c#2, ~ f#1@7, ~ a1@3", H: "~ f1@7", I: "[~@2 f#1, f#2@2 ~, ~@3 f#3@16 ~@5]/3",
})).s("gm_acoustic_bass").gain(0.2)

stack(violin, violin_soft, viola, viola_soft, pizzicato_strings, pizzicato_strings_soft, bass, bass_soft)