Strudelify

Concerto for 2 Cellos in G minor RV 531

A. Vivaldi

KeyF majorTempo40 bpm
0:00/0:00
// Concerto for 2 Cellos in G minor RV 531 — A. Vivaldi
// 40 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6097828; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 32 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(40/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 · cello · "Violoncello"
const cello = note("<A B C D E F G H I J K L M N O P A B C D E F G H I J K L M N O P>".pickRestart({
  A: "~@16 g3@4 bb3@3 d4 g4@4 d4@4", B: "[eb4,f4]!4 d4@4 ~@4 bb3@4 c4@3 bb3 bb3@3 a3 a3@3 g3 g3@3 gb3",
  C: "gb3@8 ~@8 d3@4 g3@3 a3 bb3@4 a3@3 g3", D: "db4 d4@2 db4", E: "d4@2 f4@2 e4@2 d4@2 [db4,d4]!6 [d4,e4]!2 d4@16",
  F: "~@16 d3@4 f3@3 a3 d4@4 a3@4", G: "[bb3,c4]!4 a3@4 ~@4 d4@4 e4@3 d4 d4@3 db4 db4@3 b3 b3@3 a3",
  H: "a3@4 ~@2 a3@2 bb3@6 a3 g3", I: "a3@6 g3 f3 g3@6 f3 e3", J: "f3@6 e3 d3 e3@6 e3@2",
  K: "f3@4 ~@2 f3 g3 a3@2 bb3 c4 bb3 a3 g3 gb3", L: "g3@2 ~ g4 gb4@3 gb4",
  M: "g4@4 g3@4 ~@4 bb3@4 [c4,d4]!4 bb3@4 ~@4 d4@4", N: "[eb4,f4]!4 d4@4 ~@4 bb3@4 [c4,d4]!4 bb3@4 ~@4 d4@4",
  O: "[eb4,f4]!4 d4@4 ~@24", P: "~@2 bb3@2 a3@2 bb3@2 [gb3,g3]!6 g3@2 g3@16",
})).s("gm_cello").gain(0.2)

// other · cello · "Violoncello"
const cello_2 = note("<A B C D E F G H I J K L M N O P A B C D E F G H I J K L M N O P>".pickRestart({
  A: "g3 g2 ~ g2 c3 g2 ~ g2", B: "c3 g2 bb2 g2 c3@3 c3", C: "d3 c3 bb2 g2", D: "a2@2 d3@2 a3@3 a2",
  E: "d3 g3 a3 a2 d3@4", F: "d3 d2 ~ d3 g2 d2 ~ d3", G: "g3 d3 f3 d3 g2@3 g2", H: "a2@2 ~ d3 g3@2 c3@2",
  I: "f3 bb2 e3 a2", J: "d3@2 g2@2 c3@3 c3", K: "f3@2 ~@2 gb3@3 gb3", L: "g3@2 ~ c3 d3@3 d3",
  M: "g3 g2 bb2 g2 ~ g2 bb2 g2", N: "~ g2 bb2 g2 ~ g2 bb2 g2", O: "~ g2 bb2 g2 ~@4", P: "g2 d3 g2@2",
})).s("gm_cello").gain(0.15)

// chords · harpsichord
const harpsichord = note("<A B C@2 D E F@4 G H I@3 J A B C@2 D E F@4 G H I@3 J>".pickRestart({
  A: "g3 g2 ~ [g2,bb3,d4] [c3,g3,eb4] [g2,bb3,d4] ~ [g2,bb3,d4], [bb3,d4] ~@3", // Gm Cm Gm Bb
  B: "[c3,g3,eb4] [g2,bb3,d4] [bb2,g3,d4] [g2,bb3,d4] c3@3 c3, ~ [g3,eb4]", // Cm Gm Cm
  C: "[d3@2 c3@2 bb2@2 g2@2 [a2,db4]@2 [d3,f4]@2 ~@3 a2, [gb3,d4]@2 g4@3 d4@2 db4, ~ [g3,d4] ~ e4, ~@12 a3@3 ~]/2", // A Dm D G5
  D: "[d3,f3,d4] [g3,d4,bb4] [a3,a4] [a2,g4] [d3,d4,f4]@4, ~ db4 ~@2", // Dm Gm A A7 Dm
  E: "d3 d2 ~ [d3,f3,a3] [g2,d3,bb3] [d2,f3,a3] ~ [d3,a3,f4], [f3,a3] ~@3", // Dm Gm Dm F
  F: "[[g3,bb3,d4]@2 [d3,a3,f4]@2 [f3,a3,d4]@2 [d3,d4]@2 d4@4 db4@2 ~ b3 [a2,db4]@4 ~@2 [d3,a4]@2 g3@4 c3@4 f3@4 bb2@4 e3@4 a2@4 d3@4 g2@4 ~@4 a3@2 [c3,g3]@2, ~@2 e4@3 f4@2 e4@2 d4@2 c4@2 bb3@2 ~, ~@4 g2@3 g2 ~@4 bb4@4 a4@4 g4@4 f4@4 e4@4, ~@28 c3@3 ~]/4", // Gm Dm D A D5 C5
  G: "[f3,a3,f4]@2 ~@4 d4 [gb3,c4], ~ a4@3, ~ c4@2 ~, ~@4 gb3@3 ~", // F Gbdim
  H: "[g3,bb3,g4]@4 a3@2 ~ g3 d3@6 d3@2, ~@3 [c3,eb4] [gb3,d4]@4", // Gm Cm D
  I: "[g3 g2 bb2 g2 ~ g2 bb2 g2 ~ g2 bb2 g2 ~ g2 bb2 g2 ~ g2 bb2 g2 ~@4, ~ [g3,d4]@2 d4@2 ~@7, ~@3 g3 g3 [g3,d4]@2 [g3,d4]@2 [g3,d4]@2 ~]/3", // G5
  J: "[g2,d3,g3,bb3] [d3,gb3,a3] [g2,bb2,d3,g3]@2", // Gm D Gm
})).s("gm_harpsichord").gain(0.15)

stack(cello, cello_2, harpsichord)