Strudelify

Medieval Circumstance

Gage Rose

KeyB♭ majorTempo72 bpm
0:00/0:00
// Medieval Circumstance — Gage Rose
// 72 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/1763366; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 42 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · flute
const flute = note("<A B@3 C D@2 E F G H I J K L H M N O@7 ~@8 P Q R S@3 T@3>".pickRestart({
  A: "~@19 [d5,g5]@29", // G5
  B: "[[g5,c6]@7 [g5,bb5]@7 [g5,a5]@7 ~ [g5,bb5]@7 [f5,bb5]@29 [d5,g5]@7 d5@7 [d5,f5]@7 [d5,a5]@7 [d5,g5]@2 [eb5,a5]@2 [d5,g5]@4 [c5,g5]@10 [d5,g5]@7 ~ [c5,g5]@3 d6@7 c6@4 bb5@4 a5@3 d5@4 f5@7]/3", // C5 Gm Gsus2 Gm Bb5 G5 Dm D5 …
  C: "[d5,g5]@29 [bb4,f5]@14 [d5,g5]@5", // G5 Bb5 G5
  D: "[~@2 [g4,d5]@7 ~ [g4,c5]@28 [g4,c5]@7 ~ [d5,f5]@21 [a4,d5]@14 ~ [eb4,bb4]@14]/2", E: "[bb4,g5] [d5,g5]",
  F: "[g4,g5]@4 a5 f5 d5 a4", G: "[f4,f5] [d4,d5] [g4,bb4]@4 [d4,d5]@2", H: "[g4,g5]", I: "[g4,g5]@2 [g4,g5] [bb4,bb5]",
  J: "[g4,g5] [d4,d5]", K: "[e4,e5]", L: "[d5,g5]", M: "[g4,c5]", N: "[bb4,f5]",
  O: "[[d5,g5]@31 [d5,g5]@8 d5@7 [d5,f5]@8 [d5,a5]@8 [f5,bb5]@31 [d5,g5]@7 d5@8 [d5,f5]@8 [d5,a5]@7 [d5,g5]@2 [eb5,a5]@2 [d5,g5]@4 [c5,g5]@12 [d5,g5]@7 [c5,g5]@4 d6@8 c6@4 bb5@4 a5@4 d5@3 f5@8 [d5,g5]@31 [bb4,f5]@15 [d5,g5]@8 [g4,d5]@8 [g4,c5]@31 [g4,c5]@7 [d5,f5]@23 ~ [a4,d5]@15 [eb4,bb4]@12]/7", // G5 Dm D5 Bb5 G5 Dm D5 G5 …
  P: "~@3 [d5,g5]@31 [g5,c6]@8 [g5,bb5]@6", Q: "~@2 [g5,a5]@7 [g5,bb5]@8 [f5,bb5]@31",
  R: "[d5,g5]@8 d5@7 [d5,f5]@8 [d5,a5]@8 [d5,g5]@2 [eb5,a5]@2 [d5,g5]@4 [c5,g5]@9", // G5 Dm D5 G5 Ebdim G5 C5
  S: "[~@2 [d5,g5]@8 [c5,g5]@4 d6@7 c6@4 bb5@4 a5@4 d5@4 f5@8 [d5,g5]@30 [bb4,f5]@15 ~ [d5,g5]@8 [g4,d5]@7 [g4,c5]@31 [g4,c5]@7]/3", // G5 C5 G5 Bb5 G5 C5
  T: "[~ [d5,f5]@23 [a4,d5]@15 [eb4,bb4]@15 ~ [a4,d5]@15 [f4,f5]@15 ~ [d4,g5]@31 ~@27]/3", // Dm D5 Eb5 D5 F G5
})).s("gm_flute").gain(0.4)

// chords · flute · soft notes
const flute_soft = note("<~@25 A@7 B ~@9>".pickRestart({
  A: "[~ [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [g4,d5]@2 [g4,d5]@2 [g4,d5]@2 [g4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [g4,d5]@2 [f4,d5]@2 [e4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [g4,d5]@2 [g4,d5]@2 [g4,d5]@2 [g4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [g4,d5]@2 [f4,d5]@2 [e4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [g4,d5]@2 [g4,d5]@2 [g4,d5]@2 [g4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [a4,d5]@2 [g4,d5]@2 [f4,d5]@2 [e4,d5]@2 [c5,c6]@4 [a4,a5]@4 [f4,f5]@4 [e4,e5]@3]/7", // D5 G5 D5 G5 Dm E7 D5 G5 …
  B: "~ [d4,d5]@15", // D
})).s("gm_flute").gain(0.2)

// other · clarinet · "Bb Clarinet"
const clarinet = note("<A B C@2 D E@2 F G H I J K L M N O@2 P@2 Q R@4 S T U V S T W X Y Z AA@4 AB@3>".pickRestart({
  A: "~@19 d4@7 d4@7 ~ d4@7 d4@7", B: "d4@7 d4@7 d4@7 ~ d4@7 f3@7 f3@7 f3@5",
  C: "[~@2 f3@7 ~ c4@7 c4@7 c4@7 c4@7 c4@7 ~ c4@7 eb4@7 eb4@7 bb3@7 bb3@7 ~ f4@7 f4@7]/2",
  D: "d4@14 f4@14 ~ d4@14 bb3@5", E: "[~@2 d4@7 ~ c4@28 c4@7 ~ d4@21 bb3@14 ~ bb3@14]/2", F: "g3 bb3 d4 g4",
  G: "bb3@4 f4 d4 a3 f3", H: "d3 g3@2 bb3", I: "g4 d4 bb3 g3", J: "bb3@2 bb3 d4", K: "bb3", L: "g3", M: "g3 c4",
  N: "g3 bb3 d4@2", O: "c4",
  P: "[f4@4 ~@4 a4@4 ~@3 bb4@4 ~@4 a4@4 ~@4 g4@4 ~@4 bb4@4 ~@3 c5@4 ~@4 bb4@4 ~@4 f4@4 ~@3 a4@4 ~@4 bb4@4 ~@4 a4@4 ~@4 g4@3]/2",
  Q: "~@4 bb4@4 ~@4 c5@4 ~@4 bb4@4 ~@3 c4@4 ~@4 f4@4 ~@4 g4@4 ~",
  R: "[~@3 g4@4 ~@3 a4@4 ~@4 c5@4 ~@4 d5@4 ~@3 c5@4 ~@4 d4@31 d4@15 bb3@8 d4@8 c4@31 c4@7 d4@23 ~ bb3@15 bb3@12]/4",
  S: "~@3 d4@4 d4@4 d4@4 f4@12 a4@12 c5@9", T: "~@3 b4@4 b4@4 b4@4 g4@12 a4@21",
  U: "~@3 f4@2 d4@2 d4@4 d4@4 f4@12 a4@12 d5@9", V: "~@3 c5@4 c5@4 c5@4 a4@12 b4@21", W: "~ c5@4 a4@4 f4@4 e4@3",
  X: "~ d4@15", Y: "~@3 d4@8 d4@8 d4@8 d4@7 d4@8 d4@6", Z: "~@2 d4@7 d4@8 f3@8 f3@8 f3@7 f3@8",
  AA: "[c4@8 c4@7 c4@8 c4@8 c4@8 c4@7 eb4@8 eb4@8 bb3@7 bb3@8 f4@8 f4@8 d4@15 f4@15 d4@15 ~ bb3@8 d4@7 c4@31 c4@7]/4",
  AB: "[~ d4@23 bb3@15 bb3@15 ~ d4@15 bb3@15 ~ d4@31 ~@27]/3",
})).s("gm_clarinet").gain(0.4)

stack(flute, flute_soft, clarinet)