Strudelify

Canzon prima La Spiritata

Giovanni Gabrielli

KeyF majorTempo120 bpm
0:00/0:00
// Canzon prima La Spiritata — Giovanni Gabrielli
// 120 bpm, 2/2, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/2 at bar 1, 3/2 at bar 29, 2/2 at bar 41, 3/2 at bar 54, ...) are rendered on a constant 2/2 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/4937058; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · piano
const piano = note(`<
  ~ A B@2 C D@2 ~@5 A B@2 C E@3 ~ A B@2 C F@2 G@3 H I@3 ~@4 J H K@2 L M N ~ O P Q R S T U V W X Y@3 Z AA AB@2 V AC AD AE
  AF AG AH AI AJ AK AL AM AN AO AP AQ Y@3 Z AA AB@2 V AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT@2 AU AV
>`.pickRestart({
  A: "~@2 d5 g4", B: "[d5@2 e5@2 f5@6 f5@2 e5 d5 c5 bb4]/2", C: "a4 a5 g5 f5", D: "[e5 d5@2 ~]/2", E: "[e5 d5@4 ~]/3",
  F: "[e5@2 d5@3 d5 c5 bb4]/2", G: "[a4@4 g4@16 bb4@3 c5]/3", H: "d5 bb4 g4 bb4",
  I: "[a4@3 bb4 c5@2 d5@4 db5@2 d5@12]/3", J: "~@4 bb4@3 c5", K: "[a4@3 bb4 c5@2 d5@4 db5@2 d5@2 a4@2]/2",
  L: "bb4 c5 d5 f5 e5@2 d5@2", M: "c5 bb4 a4 c5", N: "bb4 a4 g4@2", O: "~@2 a4@2 bb4 c5 d5 f5", P: "e5 d5 c5 bb4",
  Q: "a4 g4", R: "~@3 c5", S: "d5 e5 f5 a5 g5@2 f5@2", T: "e5 d5@2 db5", U: "d5@3 a4 bb4 c5 d5 f5", V: "eb5 d5 c5 bb4",
  W: "~@2 a4 g4", X: "gb4 g4@2 f5", Y: "[g4!2 bb4 c5 d5@6 bb4@2 c5@6 bb4@2 bb4@2 a4 g4]/3", Z: "a4 bb4@2 a4",
  AA: "bb4 d5", AB: "[d5!2 d5@3 d5!2 f5]/2", AC: "a4 d5 a4 bb4", AD: "gb4@3 d5", AE: "a4 bb4 gb4 g4",
  AF: "a4 bb4 c5 d5", AG: "e5@2 f5@2 e5 d5@2 db5", AH: "d5 a4 f4 g4 a4@2 bb4@2", AI: "a4@2 g4@2 gb4 g4@2 gb4",
  AJ: "g4 d5 bb4 c5 d5@2 eb5@2", AK: "d5@2 c5@2 b4 c5@2 b4", AL: "c5 g5 e5 f5 g5@2 a5@2", AM: "g5@2 f5@2 e5 f5@2 e5",
  AN: "f5 c5 a4 bb4 c5@2 d5@2", AO: "c5@2 bb4@2 a4 bb4@2 a4", AP: "bb4 f4 d4 e4 f4@2 g4@2",
  AQ: "a4@2 bb4@2 a4 g4@2 gb4", AR: "g4@4 ~ d5 b4 c5", AS: "d5 eb5 d5 c5", AT: "b4@4 c5@4 ~@2 g5 f5 eb5@2 c5@2",
  AU: "b4 c5 e5@2", AV: "d5",
})).s("gm_piano").gain(0.3)

// other · piano
const piano_2 = note(`<
  ~@5 A B@2 C@3 D@4 E F@2 G@5 E H@5 ~@2 I J K@3 L M@2 N O ~ P Q R S T U R V W X Y Z AA AB AC AD AE AF AG AH ~@2 AI AJ AK
  AL AM AN AO AP AQ AR AS AT AM AU AB AC AD AE AF AG AH ~@2 AI AJ AK AL AM AN AO AP AQ AR AS AT AM AU AV AW AX AY AZ BA
>`.pickRestart({
  A: "~@2 d4 g3", B: "[d4@2 e4@2 f4@6 f4@2 e4 d4 c4 bb3]/2", C: "[a3 d4 db4 d4@2 db4 d4@3 bb3 c4@2]/3",
  D: "[bb3@2 d4@2 e4 gb4 g4@4 gb4@2 g4@6 f4 e4 d4@8 ~@4]/4", E: "~@2 f4@2 g4 a4 bb4@2", F: "[g4 a4 d4@4 d4 g3]/2",
  G: "[d4@2 e4@2 f4@6 f4@2 e4@6 d4 c4 d4@8 d4@8 ~@4]/5", H: "[g4 a4 d4@3 f4 eb4 eb4@2 d4 b3@8 ~@2]/5",
  I: "~@4 bb3@3 c4", J: "d4 bb3 g3 bb3", K: "[a3@3 bb3 c4@2 d4@4 db4@2 d4@12]/3", L: "c4@3 bb3", M: "[a3 d4@2 bb3]/2",
  N: "c4@3 f4", O: "e4 d4", P: "~@3 a3", Q: "bb3 c4 d4 f4 e4@2 d4@2", R: "c4@2 bb3@2 c4@3 g3",
  S: "bb3@2 a3@2 g3 a3 bb3 d4", T: "c4 bb3 c4@2", U: "d4@2 d4@2 g3 a3 bb3 d4", V: "bb3@2 a3 d4 g3@2 ~ d4",
  W: "e4 f4 g4 d4 f4@2 e4@2", X: "d4@2 ~ a3", Y: "bb3 c4 d4 f4 eb4@2 d4@2", Z: "~@2 c4 bb3", AA: "a3 g3 a3@2",
  AB: "g3@4 ~ g3 bb3 c4", AC: "d4 c4", AD: "d4@6 c4 bb3", AE: "c4 d4 c4@2", AF: "bb3", AG: "f4@2 f4!2", AH: "f4",
  AI: "~ d4 a3 bb3", AJ: "gb3 g3 a3 bb3", AK: "c4 d4 e4 f4", AL: "e4 d4 e4@2", AM: "d4@8 ~@2 d4 c4 bb3@2 g3@2",
  AN: "d4 a3 bb3@2 a3@4", AO: "g3@8 ~@2 g4 f4 eb4@2 c4@2", AP: "g4 d4 eb4@2 d4@4", AQ: "c4!3 d4 e4@2 f4@2",
  AR: "e4 a4 g4@2", AS: "f4@8 ~@2 f4 e4 d4@2 bb3@2", AT: "f4 c4 d4@2 c4@4", AU: "d4@2 d4@3 bb3 a3@2",
  AV: "g3 d4 b3 c4 d4@4", AW: "g3 c4 b3 c4", AX: "d4 eb4 d4 c4", AY: "d4 g3 d4 c4", AZ: "d4 g3 c4@2", BA: "b3",
})).s("gm_piano").gain(0.3)

// other · piano
const piano_3 = note(`<
  ~@4 A B@2 C D E F G H@2 ~@2 A B@2 I@3 ~@3 J K@3 ~@2 L@2 M N@2 ~ O@2 M P@2 ~ Q R S ~ Q R T U V W@3 X Y Z AA AB AC AD AE
  AF AG@2 AH@2 AI AJ AK AL AM AN AO AP AQ AJ X Y Z AA AB AC AD AE AF AG@2 AH@2 AI AJ AK AL AM AN AO AP AQ AJ AR AS AT AU
  AV AR
>`.pickRestart({
  A: "~@2 g3 d3", B: "[g3@2 a3@2 bb3@6 bb3@2 a3 g3 f3 e3]/2", C: "d3@2 d4@2 c4 bb3 a3 g3", D: "f3@2 e3 d3 e3@2 f3@2",
  E: "e3@4 d3 c3 bb2 a2", F: "g2 g3 f3@2", G: "g3@2 bb3@2 c4 d4 eb4@2", H: "[c4 d4 g3@4 ~@2]/2",
  I: "[d3@2 d4@2 c4@6 bb3 a3 g3@8 ~@4]/3", J: "~@2 bb2@2 c3 d3 eb3@2", K: "[c3 d3 g2@8 ~@2]/3", L: "[~ g2@2 g2]/2",
  M: "f3@3 d3", N: "[e3 d3@3]/2", O: "[~ g3@2 g3]/2", P: "[a3 d3@2 ~]/2", Q: "~@2 d3@2 e3 f3 g3 bb3", R: "a3 g3 f3 e3",
  S: "d3 g3", T: "d3@2 d3@2 g3 a3 bb3 d4", U: "c4 bb3 a3@2", V: "d3 gb3 g3 f3", W: "[g3 c3@2 d3@2 ~]/3",
  X: "g3@4 ~ g3!2 a3", Y: "bb3 a3", Z: "bb3 g3", AA: "f3", AB: "bb2", AC: "bb3@2 bb3!2", AD: "bb3@3 bb3", AE: "c4!2",
  AF: "d4", AG: "d3", AH: "a3", AI: "d3 ~", AJ: "~@2 d3 c3 bb2@2 g2@2 d3@8", AK: "g3 ~",
  AL: "~@2 g3 f3 eb3@2 c3@2 g3@8", AM: "c3 ~", AN: "~@2 c4 bb3 a3@2 f3@2 c4@8", AO: "f3 ~",
  AP: "~@2 f3 e3 d3@2 bb2@2 f3@8", AQ: "bb2 ~", AR: "g3", AS: "~@10 g3 f3 eb3@2 c3@2", AT: "g3 c4 b3 c4",
  AU: "g3@2 g3 f3 eb3@2 c3@2 b2@4 c3@4", AV: "g2@2 g3 f3 e3@2 c3@2 c3@8",
})).s("gm_piano").gain(0.3)

stack(piano, piano_2, piano_3)