Strudelify

Andante from Trio Sonata Op. 8

Giuseppe Tartini

KeyG majorTempo92 bpm
0:00/0:00
// Andante from Trio Sonata Op. 8 — Giuseppe Tartini
// 92 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5910051; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(92/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · "Violin II"
const violin = note(`<
  A B C D C ~@3 E F G H I@2 J K L M N O P Q R S T U V W X@2 Y Z K@2 AA AB AC AD ~@5 AE AF AG AH AI AJ AK AL AM AN AO AP
  K AQ AR AS@2 AT AU AV AW AH ~ AX AY AZ
>`.pickRestart({
  A: "~@4 g4 a4 b4 c5", B: "d5 b4!3", C: "c5 b4 ~@2", D: "g5 f#5 e5 d5 e5 d5 c5 b4", E: "~@7 g4",
  F: "a4@2 g4 a4 b4@2 g4 b4", G: "c5@2 b4@2 c5 b4 a4 g4", H: "a4@2 g4@2 a4 g4 f#4 g4", I: "[f#4 a4 g4 a4 d4@5 ~@7]/2",
  J: "~ a4 g4 a4 d4@2 f#4@2", K: "g4 f#4 g4 f#4", L: "g4@2 f#4@2 b4 d5 a4 d5", M: "b4 d5 a4 d5 g4 a4 f#4 a4",
  N: "g4 f#4 f4!2", O: "e4@2 e4@2 e5 d5 c5 b4", P: "a4 g4 f4 e4 e4@2 e4@2", Q: "d4@2 d4@2 d5 c5 b4 a4",
  R: "g4 f#4 e4 d4 g4@2 g4@2", S: "g4 f#4 ~@2", T: "~@4 g4 e4 f#4 d4", U: "e4 c#4 d4 b3 c#4@4", V: "d4 ~", W: "~ d4!3",
  X: "e4 d4 e4 d4", Y: "e4 d4 ~@2", Z: "~ f#4!3", AA: "g4@2 f#4@2 a4@2 g4 f#4", AB: "e4 b3 ~@2", AC: "~@2 g4!2",
  AD: "a4@2 e4@2 c5 b4 a4 g4", AE: "c5 b4 a4 g4 a4@4", AF: "b4 a4 g4 f#4 g4@4", AG: "a4 g4 f#4 e4 f#4@4", AH: "g4 ~",
  AI: "~ a#4!3", AJ: "c5 a#4 ~@2", AK: "g5 f5 d#5 d5 d#5 d5 c5 a#4", AL: "c5 a#4 ~ g4", AM: "g4 f#4 ~ f4",
  AN: "f4 e4 ~ f#4", AO: "g4 f4 e4 d#4", AP: "d4@2 g4 f#4", AQ: "g4@2 f#4@2 c5 e5 b4 e5", AR: "c5 e5 b4 e5 c5 e5 b4 e5",
  AS: "c5 b4 c5 b4", AT: "c5@2 b4@2 e5 d5 c5 b4", AU: "b4@2 c5@2 c5 b4 a4 g#4", AV: "g#4@2 a4@2 a4 g4 f#4 e4",
  AW: "d4 b4 a4@2", AX: "~@4 a4 g4 f#4 e4", AY: "f#4 d4 g4 e4 f#4@4", AZ: "g4",
})).s("gm_violin").gain(0.4)

// other · violin · "Violin II" · soft notes
const violin_soft = note("<~@5 A B ~ C ~@4 D@2 ~@8 E F ~@10 G H ~ I@5 ~@21 J K L ~@2>".pickRestart({
  A: "g4 f#4 e4 d4 e4 d4 c4 b3", B: "c4 b3 ~@2", C: "~@4 g4@2 f#4 ~", D: "[~ a4 g4 a4 d4@5 ~@7]/2", E: "~@2 g4!2",
  F: "g4 f#4 ~@2", G: "~@4 a4@2 g4 f#4", H: "e4 b3 ~@2", I: "[b4@5 d5@4 ~]/5", J: "~@4 e5 d5 c5 b4",
  K: "b4@2 c5@2 c5 b4 a4 g#4", L: "g#4 a4 ~@2",
})).s("gm_violin").gain(0.2)

// other · cello · "Violoncello"
const cello = note(`<
  ~ A B ~ B ~@5 C D E ~ F G@2 H I J K L M N O P Q R S@2 T U V W X Y Z AA AB ~ AC AD AE AF AG AH AI A B ~ AJ AK AL AM AN
  ~ AO ~ AP ~ AQ AR AS AT AU ~ AV AT AW
>`.pickRestart({
  A: "~ g2!3", B: "c3 g2 ~@2", C: "c3 g2 c3 e3", D: "d3 g2 c3 e3", E: "d3 e3 f#3 e3", F: "d3 e3 f#3 d3", G: "d3!2",
  H: "d3 d4 c#4 d4", I: "a3 d3!3", J: "e3!2 g#3!2", K: "a3!2 c3!2", L: "d3!2 f#3!2", M: "g3!2 e3 a2", N: "b2 f#3 ~@2",
  O: "~@2 g2 d3", P: "a3 d3 a3 a2", Q: "d3 ~", R: "~ b2!3", S: "c3 b2 c3 b2", T: "c3 b2 ~@2", U: "~ d3!3",
  V: "g3 d3 g2 d3", W: "g2 d3 g2 d3", X: "g3 d3 d#3!2", Y: "e3!2 ~@2", Z: "~@2 e3!2", AA: "a3!4", AB: "b3 b2 ~@2",
  AC: "~@3 f#3", AD: "g3 f#3 g3 f#3", AE: "g3 d3 b2 g2", AF: "c3!2 f#3!2", AG: "b3!2 e3!2", AH: "a3!2 d3!2",
  AI: "g3 g2 ~@2", AJ: "c3 g2 ~ a2", AK: "d3 d2 ~ g2", AL: "c3 c2 ~ d3", AM: "g3 g2 g3!2", AN: "f#3 d3 ~@2",
  AO: "g3 d3 ~@2", AP: "a3 e3 ~@2", AQ: "c4 g3 ~@2", AR: "~ c4 c3@2", AS: "~ a3 a2 c4", AT: "c4@2 b3 c4 d4@2 d3@2",
  AU: "g3 ~", AV: "~@2 a2 c4", AW: "g3",
})).s("gm_cello").gain(0.4)

// other · cello · "Violoncello" · soft notes
const cello_soft = note("<~@6 A B C D ~@3 E ~@9 F G ~@10 H I ~ J K L ~@24 M N ~@2>".pickRestart({
  A: "c3 g2 b2 g2", B: "d3 d2 f#3 d3", C: "g3 g2 b2@2", D: "a2 g2", E: "d3 e3 f#3 e3", F: "~@2 e3 a2", G: "d3 d2 ~@2",
  H: "~@2 d#3!2", I: "e3!2 ~@2", J: "~@3 d#3", K: "e3 d#3 e3 d#3", L: "e3 b2 ~@2", M: "~ c4 c3@2", N: "~ a3 ~@2",
})).s("gm_cello").gain(0.2)

stack(violin, violin_soft, cello, cello_soft)