Strudelify

Madrigal

Gaubert

KeyG majorTempo80 bpm
0:00/0:00
// Madrigal — Gaubert
// 80 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: metre changes (1/4 at bar 1, 4/4 at bar 2, 2/4 at bar 13, 4/4 at bar 13, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5846522; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 71 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · flute
const flute = note(`<
  ~ A B ~ C D E F G H I J K L M N O N@2 P Q R S T U@2 V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL@2 AM@3 AN ~@2 AO AP
  AQ AR AS ~@2 AT@6 AU@2 ~ AV AW@4
>`.pickRestart({
  A: "~ d5@23 ~ d5@23", B: "~ e5@23 ~ d5@11 ~@12", C: "~@43 a4@5", D: "~ c5@18 b4@6 a4@18 b4@5",
  E: "~ c5@6 d5@6 e5@11 ~ b4@18 d5@5", F: "~ g5@6 f#5@6 e5@6 d5@6 c5@6 b4@6 a4@6 g4@5",
  G: "~ f#4@6 e4@6 d4@12 d4@12 ~@11", H: "~ b4@46 ~", I: "~ b4@24 a4@23", J: "~ b4@24 c#5@23", K: "~ b4@23 ~@24",
  L: "~@25 c5@23", M: "~ d5@23 ~ c5@23", N: "~ b4@23 ~ g4@23", O: "~ c4@23 ~ d4@23", P: "~ c#5@23 ~ g#4@23",
  Q: "~ a4@23 ~ g#5@23", R: "~ a5@23 ~@19 a5@2 b5@3",
  S: "c#6@5 d#6@3 e6@3 f#6@5 e6@3 d#6@2 c#6@5 ~ b5@2 a5@3 g#5@3 f#5@2 e5@3 f#5@3 g#5@2 a5@3",
  T: "b5@5 g#5@5 ~ f#5@5 g#5@16 ~@5 a4@10 ~",
  U: "[a4@10 ~ c#4@10 d#4@10 ~ a4@10 ~ f#4@10 ~@11 b4@3 ~ e5@3 b5@3 ~@11 b5@3 ~ e6@3 b6@3 ~]/2",
  V: "~@12 d#5@11 ~@13 g#5@11 ~", W: "~@12 b4@11 ~@13 f4@11 ~", X: "~@12 g#5@11 ~@13 d5@11 ~",
  Y: "~@12 g#4@11 ~@13 d5@11 ~", Z: "g4@11 ~ c4@11 ~ d#4@11 ~ g4@11 ~", AA: "a4@11 ~@37", AB: "g4@11 ~ g4@23 ~@13",
  AC: "a#4@12 a#4@12 a4@23 ~", AD: "a4@24 f4@23 ~", AE: "~@24 a4@23 ~", AF: "a#4@23 ~@7 c5@6 f5@3 a5@3 c6@3 f6@3",
  AG: "e6@2 d6 c6 d6@2 c6 a#5 c6@2 a#5 g#5 f#5@2 g#5 f#5", AH: "a#5@11 ~@19 f5@6 f#5@3 g#5@3 f#5@3 g#5@3",
  AI: "a5@6 f#5@3 g#5@3 a5@6 f#5@3 ~ g#5@3 a5@7 f#5@3 g#5@3 ~ a5@7 a5@2",
  AJ: "~ b5@2 c#6@5 ~ d#6@2 e6@3 f#6@5 e6@3 d#6@3 c#6@5 b5@3 a5@2 g#5@3 f#5@3 e5@2 f#5@3 g#5@2",
  AK: "~ a5@2 b5@5 ~ g#5@5 f#5@5 g#5@16 ~@6 a4@7", AL: "[~@3 c#5@10 ~ b4@10 ~ d#5@10 a4@10 ~ c#5@10 ~ b4@15 ~@24]/2",
  AM: "[~@19 g#5@3 a#5@3 b5@2 c#6@3 d#6@3 f6@2 d#6@3 c#6@3 b5@2 a#5@3 g#5@15 ~ g#5@5 c6@16 g#5@5 ~ g#5@15 ~ g#5@2 a#5@3 c6@3 d6@2 d#6@3 f6@3 d#6@2 d6@3 c6@3 a#5@2 g#5@13]/3",
  AN: "~@9 c5@5 ~@34", AO: "~@5 e5 a5 e6 ~@3 f#5", AP: "a5 f#6 ~@3 e5 a5 e6 ~@3 d5", AQ: "g5 b5 ~@3 b4 e5 b5 ~@3 e5",
  AR: "g5 e6 ~@3 f#5 c6 d6 ~@3 d5", AS: "g5 b5 ~@10",
  AT: "[~@8 b4@23 ~ a4@23 ~@25 a4@24 b4@23 ~ a#4@24 b4@23 ~ g4@24 c4@23 ~ f#4@23 ~@7 d4@6 g4@3 b4@3 d5@3 g5@3 f#5@6 e5@10]/6",
  AU: "[~@2 d5@6 d5@23 ~ c4@11 ~ f#4@11 ~ b4@23 ~@17]/2", AV: "~@6 c#4@2 d4@2 g4@2 b4@2 d5@2 d5@3 e5@3 d5@2",
  AW: "[~@2 c5@6 b4@6 c5@12 d5@6 e5@12 f#5@12 g5@12 a5@12 b5@71 ~@41]/4",
})).s("gm_flute").gain(0.35)

// other · flute
const flute_2 = note(`<
  A B C D E F G H I J K L M N ~ O P Q R S T U V@2 W@2 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL@2 AM@2 AN AO AP@2 ~@6 AQ
  AR AS AT@2 AU AV@6 AW@5
>`.pickRestart({
  A: "~@43 a5@5", B: "~ c6@17 ~ a#5@6 a5@11 ~@7 a5@5", C: "~ d6@17 ~ a#5@6 a5@11 ~@7 a4@5",
  D: "~ d5@17 ~ c5@6 c5@17 ~ b4@5", E: "~ b4@24 a4@11 ~@12", F: "~ a4@46 ~", G: "~ a4@24 g4@23", H: "~ b4@24 d5@23",
  I: "~ a4@24 d5@23", J: "~@13 b4@4 e5@4 b5@4 ~@12 f#4@4 b4@4 f#5@3", K: "~@13 b4@4 e5@4 b5@4 ~@12 c#5@4 f#5@4 c#6@3",
  L: "~@13 d5@4 g#5@4 d6@4 ~@12 e5@4 a5@4 e6@3", M: "~ g#4@23 ~@13 a4@4 c#5@4 f#5@3", N: "~@13 a5@4 c#6@4 f#6@4 ~@23",
  O: "~@19 b5@6 e6@6 d6@6 c6@6 b5@5", P: "~ a5@6 g5@6 f#5@6 e5@6 d5@6 c5@6 b4@11",
  Q: "~ b4@12 ~@6 d4@6 g4@6 a4@6 b4@6 c#5@5", R: "~ b4@17 ~ b4@6 b4@6 c#5@6 d5@6 e5@5",
  S: "~ c#5@17 ~ f#5@6 g#5@6 a5@6 g#5@6 f#5@5", T: "~ f#5@6 e5@3 c#5@3 a4@6 e4@6 f#4@6 g#4@6 f#4@3 e4@3 f#4@5",
  U: "~ a4@23 ~@24", V: "[c#4@10 ~ f#4@10 c#4@10 ~ e4@10 ~ b4@10 g#4@5 ~ f#4@5 g#4@10 ~@11 c#5@10 ~]/2",
  W: "[d#4@10 ~ g#4@10 b4@10 ~ e5@10 ~ c#5@10 b5@20 ~@18 g#4@5]/2", X: "b4@18 g#4@6 g#4@17 ~ g#4@6",
  Y: "b4@6 c#5@6 b4@6 a#4@6 g#4@17 ~ g#4@6", Z: "c5@18 g#4@6 g#4@17 ~ g#4@3 a#4@3",
  AA: "c5@2 d5 d#5 d5@2 c5 a#4 g#4@5 a#4 c5 d5", AB: "d#5@2 f5 g5 a5@2 a#5 c6 a#5 a5 g5 f5 d#5 d5 c5 a#4",
  AC: "a4@3 a#4@3 c5@6 a4@6 g4@6 a4@23 ~", AD: "a#4@11 ~ d#4@23 ~@13", AE: "g4@12 d4@12 c4@23 ~", AF: "c5@24 a4@23 ~",
  AG: "~@24 f4@23 ~", AH: "g4@23 ~ a4@23 ~", AI: "a#5!2 g#5 f#5",
  AJ: "a#5@6 f5@6 f#5@3 g#5@3 f#5@3 g#5@3 a#5@6 ~@6 f#5@11 ~", AK: "f#5 ~@7",
  AL: "[~@3 f#4@10 ~ b4@10 ~ f#4@10 e4@10 ~ b4@10 ~ a4@10 b4@15 ~@7 a5@7]/2",
  AM: "[~@3 b4@10 ~ c#5@10 ~ g#4@10 e5@10 ~ f#5@10 ~ g#5@15 ~@17 b5@7]/2", AN: "~@14 f6@10 ~@11 b5@10 ~@3",
  AO: "~@9 f6@10 ~@11 g#5@10 ~@8", AP: "[~@3 d6@10 ~@12 g#5@10 ~@11 d6@10 ~ d5@5 ~@34]/2",
  AQ: "~ d4@3 g4@3 a4@3 b4@3 c#5@3 b4@8", AR: "~ b4@3 b4@3 c#5@3 d5@3 e5@3 c#5@8",
  AS: "~@2 f#5@6 g#5@6 a5@6 g#5@6 f#5@6 f#5@6 e5@3 c#5@3 a4@4",
  AT: "[~@2 e4@6 f#4@6 g#4@6 f#4@3 e4@3 f#4@6 a4@23 ~@37 c4@4]/2", AU: "d#4 f4 ~@3 d4 f4 b4 ~@3 g4",
  AV: "[a#4@4 e5@4 ~@12 f#4@4 b4@4 g5@4 f5@24 g5@23 ~ a4@24 b4@23 ~ a4@24 g4@23 ~ g4@11 ~ c4@11 ~ d4@23 ~ f#4@24 g4@23 ~ b4@6 c#5@6 b4@4]/6",
  AW: "[~@2 a4@6 g4@23 ~ a#4@24 f4@23 ~ e4@46 ~@2 b4@68 ~@44]/5",
})).s("gm_flute").gain(0.35)

// other · flute
const flute_3 = note(`<
  ~@5 A@2 B C D E F G H I J K L ~@2 M N O P Q R S@2 T@2 U V W X Y Z AA AB AC AD AE@4 AF AG AH@2 ~@2 AI AJ AK AL ~@3 AM@7
  AN ~@6
>`.pickRestart({
  A: "~ e4@24 d4@23", B: "~ e4@24 a4@23", C: "~ d4@24 g4@11 ~@7 d4@5", D: "~ g4@6 a4@6 b4@6 c#5@6 b4@17 ~ b4@5",
  E: "~ b4@6 c#5@6 d5@6 e5@6 c#5@17 ~ f#5@5", F: "~ g#5@6 a5@6 g#5@6 f#5@6 f#5@6 e5@3 c#5@3 a4@6 e4@5",
  G: "~ f#4@6 g#4@6 f#4@3 e4@3 f#4@6 a4@23", H: "~@25 e4@23", I: "~ f#4@23 ~ e4@23", J: "~ d4@23 ~ d4@23",
  K: "~ e4@23 ~ a4@23", L: "~ d4@23 ~@24", M: "~@25 d5@23", N: "~ a5@23 ~@19 f#5@2 g#5@3",
  O: "a5@5 b5@3 c#6@3 d#6@5 c#6@3 b5@2 a5@5 ~ g#5@2 f#5@3 e5@3 d#5@2 c#5@3 d#5@3 e5@2 f#5@3",
  P: "g#5@5 c#5@10 ~ d#5@15 ~ d#5@3 e5@2 f#5@3 e5@3 d#5@5",
  Q: "c#5@5 b4@3 a4@3 g#4@2 f#4@3 e4@3 f#4@2 g#4@5 ~ a4@2 b4@3 c#5@3 d#5@2 e5@5 ~ e5@5", R: "c#5@5 e5@20 ~@23",
  S: "g#4@23 ~ c#4@23 ~", T: "f4@23 ~ a#4@23 ~", U: "d#5@11 ~ a4@11 ~ a#4@11 ~ d#5@11 ~",
  V: "c5@11 ~ a4@6 g4@6 d4@23 ~", W: "d#4@3 f4@3 g4@6 d#4@11 ~ g4@23 ~", X: "d#4@12 f4@12 f4@23 ~",
  Y: "~@3 f4 a4 f5 ~@3 a#4 f5 a#5", Z: "~@12 e4@4 a#4@4 e5@4 ~@6 c4@6 f4@3 a4@3 c5@3 f5@3",
  AA: "e5@6 d5@11 ~ c5@6 c5@23 ~", AB: "g4 a#4 d5 c5", AC: "d5@11 ~ c5@11 ~ a#4@11 ~ g#4@11 ~", AD: "d5 ~@7",
  AE: "[~@3 c#5@10 ~ f#5@10 ~ c#5@10 c#5@10 ~ e4@10 ~ c#4@10 d#4@10 ~@6 d#6@3 e6@3 f#6@2 e6@3 d#6@5 c#6@5 ~ b5@2 a5@3 g#5@3 f#5@2 e5@3 f#5@3 g#5@5 a5@3 b5@2 c#6@3 d#6@3 e6@5 e6@5 c#6@5 ~ e6@15 ~@17 d#5@7]/4",
  AF: "~@14 g#5@10 ~@11 d#5@10 ~@3", AG: "~@9 g#5@10 ~@11 c5@10 ~@8",
  AH: "[~@3 g#5@10 ~@12 c5@10 ~@11 g#5@10 ~ f4@5 ~@34]/2", AI: "~@4 c5@9 b4@3 a4@8",
  AJ: "~@2 b4@6 c5@6 d5@6 e5@11 ~ b4@16", AK: "~ d5@3 g5@3 f#5@3 e5@3 d5@3 c5@3 b4@3 a4@2",
  AL: "~ g4@3 f#4@3 e4@3 d4@6 d4@6 ~@2",
  AM: "[~@8 e4@23 ~ f#4@23 ~ f#4@4 a4@4 c#5@4 f#5@4 c#6@4 f#6@4 d#4@24 f4@23 ~ e4@24 d4@23 ~ b4@24 c5@23 ~ c4@24 d4@23 ~ c5@23 ~@7 d5@6 g5@3 b5@3 d6@3 g6@3 f6@6 d#6@10]/7",
  AN: "~@2 d6@6 d6@11 ~@29",
})).s("gm_flute").gain(0.35)

// other · flute · soft notes
const flute_soft = note("<~ A B C@2 ~@59 D@7>".pickRestart({
  A: "~ d5@23 ~ f#5@23", B: "~ e5@23 ~ f#5@11 ~@12", C: "[~ d#4@91 ~@4]/2",
  D: "[~@32 d4@24 e4@23 ~ f#4@24 d4@23 ~ e4@24 d4@23 ~ c5@46 ~@2 d4@68 ~@44]/7",
})).s("gm_flute").gain(0.2)

// other · flute · "Bass Flute"
const flute_4 = note(`<
  ~ A B C@3 D E F G H I J K L M N M O P Q R S@2 T@2 U@2 V@2 W X Y Z AA AB AC AD AE AF AG AH@4 AI AJ@2 ~@2 AK AL AM AN AO
  AP AQ AR AS@7 AT AU@5
>`.pickRestart({
  A: "~ a#3@24 d4@23", B: "~ c4@24 d4@23", C: "[~ f3@96 a3@4 e4@4 c5@4 ~@12 d4@4 a4@4 d5@4 ~@11]/3",
  D: "~ a3@4 e4@4 c5@4 ~@12 g3@4 d4@4 b4@4 ~@11", E: "~ e3@4 b3@4 g4@4 ~@12 a3@4 e4@4 c5@4 ~@11",
  F: "~ d3@4 a3@4 d4@4 ~@12 g3@4 d4@4 b4@4 ~@11", G: "~ e3@4 b3@4 g4@4 ~@12 b3@4 f#4@4 d5@4 ~@11",
  H: "~ e4@4 b4@4 g5@4 ~@12 a4@4 c#5@4 f#5@4 ~@11", I: "~ b4@4 d5@4 g#5@4 ~@12 c#5@4 e5@4 a5@4 ~@11",
  J: "~ e4@24 f#3@4 c#4@4 f#4@4 ~@11", K: "~ f#4@4 c#5@4 f#5@4 ~@12 a3@23", L: "~ d4@24 a3@23", M: "~ g3@24 e3@23",
  N: "~ a3@24 d3@23", O: "~ b3@24 e3@23", P: "~ f#3@24 b3@23", Q: "~ c#4@24 e3@23",
  R: "~ a3@4 e4@4 f#4@4 a4@4 c#5@4 f#5@4 a5@12 ~@11",
  S: "[f#3@11 b3@10 f#3@11 c#4@11 e3@10 a3@11 g#3@4 d#4@3 b4@4 d#5@10 a3@11]/2",
  T: "[b3@11 c#4@10 g#3@11 f#3@11 a3@10 e3@4 b3@3 g#4@4 ~@11 e4@3 b4@4 g#5@4 ~@10]/2", U: "g#3 ~ c#4 ~",
  V: "f3 ~ a#3 ~", W: "c4 f3 g3 c4", X: "f4 a#3 a3@2", Y: "d#3@3 d4@3 c4 a#4 d#5 f3 d#4 a4",
  Z: "d#3 a#3 g4 a#3 f4 a#4 f3 c4 f4 e4@3", AA: "d4 a4 d5 ~@3 g3 d4 f4 ~@3", AB: "c4 g4 a#4 ~@9", AC: "c4 f4",
  AD: "c4 f4 a#3 d#4", AE: "a#3 d#4 d4 d#4", AF: "a3@23 f#4",
  AG: "~ g#4@2 a4@5 ~ b4@2 c#5@3 d#5@5 c#5@3 b4@3 a4@5 g#4@3 f#4@2 e4@3 d#4@3 c#4@2 d#4@3 e4@2",
  AH: "[~ f#4@2 g#4@5 ~ c#4@10 g#3@16 b3@3 c#4@3 f#4@5 g#4@5 a4@5 ~ g#4@2 f#4@3 e4@3 d#4@2 c#4@3 d#4@5 e4@3 f#4@3 g#4@2 a4@3 b4@3 c#5@5 c#5@5 a4@5 ~ e5@11 ~@21 g#3@11 ~@10 c#4@11 ~@10 g#3@11 ~@2]/4",
  AI: "~@9 c#4@11 ~@10 f3@11 ~@7", AJ: "[~@3 a#3@11 ~@11 f3@11 ~@10 a#3@11 a#3@5 ~@34]/2",
  AK: "~@2 a3 e4 c5 ~@3 d4 a4 d5 ~", AL: "~@2 a3 e4 c5 ~@3 g3 d4 b4 ~", AM: "~@2 e3 b3 g4 ~@3 a3 e4 c5 ~",
  AN: "~@2 d3 a3 d4 ~@3 g3 d4 b4 ~", AO: "~@2 e3 b3 g4 ~@3 b3 f#4 d5 ~", AP: "~@2 e3 b3 g4 ~@3 a3 c#4 f#4 ~",
  AQ: "~@2 b3 d4 g#4 ~@3 c#4 e4 a4 ~", AR: "~@2 g#3@6 f#3 c#4 f#4 a4",
  AS: "[c#5@2 f#5@2 ~@12 f3@12 g3@12 c4@12 g3@6 f#3@6 f3@12 e3@12 d3@12 g3@12 a3@12 b3@12 c4@6 g#3@6 g3@9 b3@3 d4@8]/7",
  AT: "~ b3@3 b3@9 b3@3 d4@3 e4@3 d4@2", AU: "[~ c#4@3 b3@12 c4@12 g3@12 c4@24 g3@36 ~@20]/5",
})).s("gm_flute").gain(0.25)

stack(flute, flute_2, flute_3, flute_soft, flute_4)