Strudelify

Tiento sobre Cum Sancto Spiritu de Beata Virgine de Jusquin

Antonio de Cabezónmid-16th c.

KeyG majorTempo150 bpm
0:00/0:00
// Tiento sobre Cum Sancto Spiritu de Beata Virgine de Jusquin — Antonio de Cabezónmid-16th c.
// 150 bpm, 4/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: ch 2 "Organ" named as an organ, played on drawbar organ (its fretless bass patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/6033368; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 109 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/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.

// chords · rock organ · "Organ"
const rock_organ = note(`<
  A@3 B C@6 D@2 E@4 F@6 G@6 H I@8 J@3 K@4 L@6 M N@7 O@3 ~@7 P ~@2 Q@3 R@2 S T@8 U@6 V@4 W@3 X Y@6 Z@4
>`.pickRestart({
  A: "[~@6 d5@40 c#5@13 d5@13]/3", B: "~ e5@13 c#5@10",
  C: "[~@22 c5@7 b4@13 ~@13 f#4@13 g4@13 [a4,c5]@13 f#4@13 ~@7 d5@7 e5@7 [f4,f5]@6 g5@6 e5@4, ~@3 d5@20 ~@19 a4@26 ~@26 d5@17 ~@33, ~@16 g4@40 ~@51 g4@20 ~@7 e4@10]/6", // Am F
  D: "[~@3 [d4,f5]@12 [c4,e5]@20 ~ [d4,d5]@6 [e4,c5]@6]/2", // Dm C D C
  E: "[f#4@6 ~ g4@7 e4@6 f4@6 g4@6 ~@7 b4@6 ~@7 e4@6 ~ [d4,f4]@12 [e4,b4]@13 [c#4,a4]@12, ~@7 b4@13 d4@26 c5@26 ~@24, ~@20 a4@12 ~ a4@19 ~@19 g4@25, ~@46 c4@13 ~@37]/4", // Dm E5 F#m
  F: "[~ f4@13 ~@7 c4@6 [b3,d5]@13 e5@13 ~ [f3,a4,f5]@13 e5@6 d5@7 c5@6 b4@7 [f3,d4,f4,a4]@13 d4@6 d4@6 ~ e4@7 [f3,f4,a4]@6 [g4,b4]@7 [e4,g4,c5]@5, ~ d4@20 ~@19 a3@26 ~@14 [a3,c4,e4]@13 ~@13 b4@13 g4@13 ~@12, ~@14 [g3,g4]@40 ~@13 [g3,g4]@13 ~@26 g3@20 ~@6 e3@12]/6", // Bm F Dm F G C Am G
  G: "[~ a4@7 b4@6 [c3,g4]@13 ~@7 [d4,b4]@6 ~@7 f3@6 g3@14 e3@13 ~@13 f#4@13 g4@13 [a4,c#5]@13 [f#4,d5]@12, ~ [d3,f4,d5]@13 [e4,c5]@20 ~@6 [c4,a4]@13 ~@14 g4@26 d5@26 ~@25, ~@28 e3@19 ~@33 d3@26 ~@38]/6", // C5 G A D Dm C F
  H: "~ g4@6 ~ f4@6 [e4,c5]@10, ~ e5@13 ~@10", // C
  I: "[~@3 [d4,d5]@13 e5@6 d5@6 ~ c5@6 b4@6 a4@6 c5@6 [g4,b4]@6 ~ [f4,a4]@6 b4@6 c5@6 [f3,f4,d5]@13 [g3,b4]@13 [a3,c#5]@12 f#3@13 ~@7 e4@6 f4@6 g4@6 ~@6 e3@6 ~ f3@6 [g3,b4]@6 [a3,c4,c5,e5]@12 ~, ~@16 c4@13 e4@12 f#4@12 g3@24 ~@39 d5@25 ~@13 a4@19 ~@19, ~@66 e4@12 ~@13 e4@25 d4@19 ~@19 d4@26 ~@12, ~@130 g3@12 d3@19 ~@31, ~@154 f5@13 f5@13 ~@12]/8", // D G F Dm G A G Am
  J: "[[a#3,d4,g4,d5]@13 [g3,e4]@13 c#4@13 f5@13 ~@7 g4@6 [c4,e4]@6 f4, ~@13 [a#4,g5]@26 d4@26 ~@7, ~@13 a3@13 e5@10, ~@39 a4@20 ~@13]/3", // Gm C D#
  K: "[~@5 [b3,d5]@12 ~ g3@13 c4@7 [d4,d5]@6 e4@6 ~ f4@6 g4@6 e4@6 ~ b4@6 a4@6 [g3,b4]@14, ~@5 g4@26 a3@25 ~ g3@13 [d4,f4]@26, ~@18 e5@20 ~@6 c5@25 ~ d3@13 ~@13]/4", // Bm D G Dm
  L: "[[c4,e4,c5]@13 b3@14 [f#3,a3]@13 ~@14 [d4,b4]@12 b4@13 [g3,b3,d5]@13 [e4,g4]@13 ~@7 b4@3 a4@3 b4@20 c5@3 d5@3, ~@13 [d4,d5]@27 g3@39 ~@13 a3@26 [g3,g4]@26, ~@66 g4@26 c5@19 ~@33, ~@35 [c4,f#4]@4 ~@9]/6", // C F#m G Em D G Cdim
  M: "~@7 e4@6 [a4,c5]@11, e5@13 ~@11", // Am
  N: "[~@2 d5@6 c5@6 [g4,b4]@6 ~ [f4,a4]@6 e4@6 d4@6 ~@6 e4@6 f#3@12 ~@7 b4@6 c4@7 b3@6 a3@6 g3@6 ~@15 f#4@13 ~@7 d5@6 e5@3 d5@3 e5@3 f5@3 g5@14, ~@2 f#4@12 g3@12 ~ g4@25 ~@24 g4@40 ~@13 g4@38 ~, ~@27 [e3,c4]@12 c4@25 [g3,b3]@12 [c3,e5]@13 [e3,c#5]@13 [d3,a3]@27 [g2,g3]@25 ~@14, ~@39 a3@12 d4@24 ~@27 d5@34 ~@32]/7", // G F C G C C#m D5 G
  O: "[~@6 g5@6 ~ [e4,g5]@13 [a4,f#5]@13 g4@27 ~@6, g4@13 ~@26 g5@12 ~@21]/3", P: "~@2 a3 ~",
  Q: "[~@34 b3@13 ~@12 e4@13, ~@21 d4@26 c4@25, ~@17 g4@19]/3",
  R: "[b3@6 a3@6 ~@7 f4@6 e4@6 d4@6 ~@7 b3@4, f#4@12 g3@25 e4@11, ~@12 g4@11 ~@2 g4@23]/2",
  S: "~ a3@3 g3@3 [f3,a4]@5, ~ f4@11", // F
  T: "[~@3 e4@6 d4@6 [e3,c4]@14 ~@6 b4@6 a4@6 g4@6 ~@7 e4@6 d4@12 c4@6 b3@6 d4@6 c4@6 ~@7 a3@6 [g3,b4]@12 f3@6 e3@6 [f4,d5]@12 d4@13 f4@7 e4@6 c4@6 d4@6 e4@3, ~@3 [g3,b4]@12 c5@20 ~@18 d4@13 ~@12 [a3,e4]@12 [f3,a3]@12 [g3,g4]@13 ~@12 [g3,g4,c#5]@12 [d3,a3]@25 ~@28, ~@29 [e4,g4]@12 [c#4,e4]@12 f4@25 a4@24 d4@25 ~@24 f5@26 e5@15]/8", // C G Dm G A5 F G Gdim …
  U: "[~@3 [f4,c5]@6 [g4,e5]@12 ~ d5@6 b4@6 [d4,d5]@12 ~ [a3,f4,c5]@12 [c4,e4]@6 [b3,d4]@6 [g3,e4]@6 [a3,f4]@6 [b3,g4]@6 [c4,e4]@6 ~@6 b4@6 [b3,g#4,d5]@12 [a4,c5]@6 ~ a4@6 [e3,e4,g4,c5]@12, ~@59 e5@24 d5@18 ~@43, ~@95 [d4,f#4]@12 ~@12 a3@12 ~@13]/6", // F5 C D F C Bm C Dm …
  V: "[g3 f3 d3 [e3,c4] [f3,a3] [g3,b3] [a3,c4] [b3,d4,g4] ~ a4 [a3,c4,c5]@2 b4 g4 [g3,b3,e4,b4]@2, d4@3 ~@5 [c4,e4]@2 ~@2 [g3,d4]@2 ~@2, [g4,b4]@2 d5@4 c5@3 ~@7, ~@2 f4@2 a4@3 ~@3 f4@4 ~@2]/4", // C F G Am G Am Em C …
  W: "[[f3,a4]@12 ~@6 e4@6 ~@7 g3@6 e3@12 ~@6 [d4,f4,g4]@6 b3@6 [f3,c4]@5, c4@24 c4@12 ~@25 [d4,b4]@11, f4@18 ~@19 [e4,g4,b4]@18 ~@17, ~@12 c5@25 ~@35, ~@12 a3@19 ~@18 g3@18 ~@5]/3", // F G7 F5 G Em
  X: "~ [f4,a4]@7 ~@12 e4@3 d4, ~ d4@22 ~, ~ d3@13 [f3,a4]@10, ~@2 f4@3 ~", // F
  Y: "[~@2 [e3,b3,e4]@13 ~@7 [a3,f4]@7 [b3,d4]@7 [f3,c4,e4]@7 f4@7 g4@7 a4@7 [c4,a#4]@7 a3@7 [e3,b3]@7 ~ c4@7 [b3,g4]@8 a3@7 g3@8 ~@16 f#4@12, ~@2 g4@20 ~@49 a4@22 ~@8 g4@32 ~@11, ~@16 g3@20 ~@7 d3@14 f3@22 ~@7 [c3,e4]@15 [e3,c#4]@16 ~@27, ~@16 d4@13 ~@14 d4@21 ~@7 f4@15 ~@30 [d3,a3,d4]@28]/6", // E5 Dm Bm Fmaj7 C7 E5 Em C …
  Z: "[~ g4 ~ e4 f#4 ~ [g2,g3,b3,g4]@75 ~@15, ~ f#4 ~@46]/4", // G
})).s("gm_rock_organ").gain(0.47)

// chords · drawbar organ · "Organ"
const drawbar_organ = note("<~@60 A@6 B@7 ~@36>".pickRestart({
  A: "[~@5 d5@13 e5@12 d4@14 ~@6 e5@6 ~ c#5@14 ~@6 e4@6 c#4@14 ~@6 d5@6 f4@12 ~ e4@6 d4@6 [e4,g4,c#5]@10, ~@30 f5@20 ~@21 d5@12 e5@20 ~@6 d5@25 ~@10, ~@44 e4@12 ~ f4@20 ~@20 d4@12 ~@35]/6", // C#dim
  B: "[~@3 a4@12 g3@14 ~@6 a4@6 [d4,f4]@12 ~@7 a3@6 f3@13 ~@6 [e4,g4]@6 d4@6 ~ c4@6 ~@6 b4@6 [f#4,a4]@6 [e4,g4]@6 [d4,f#4,a4]@26 ~@14, ~@3 [d4,d5]@26 a3@12 a#3@19 ~@19 [g3,b4]@12 c5@18 ~@59, ~@15 a#4@20 ~@18 [e4,g4]@12 ~ [f4,a4]@19 ~@6 g4@24 ~@53, ~@91 e3@12 ~ [d3,d4]@24 ~@40]/7", // Dm Em F#m Em D G Em F …
})).s("gm_drawbar_organ").gain(0.48)

stack(rock_organ, drawbar_organ)