Strudelify

Fire, Fire, Fire, Fire Loe Here I Burne

Thomas Campion

KeyG majorTempo76 bpm
0:00/0:00
// Fire, Fire, Fire, Fire Loe Here I Burne — Thomas Campion
// 76 bpm, 2/2, 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 (2/2 at bar 1, 3/4 at bar 14, 2/2 at bar 17, 3/4 at bar 46, ...) are rendered on a constant 2/2 grid of one bar per cycle
// note: Full arrangement: all 66 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(76/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 · harpsichord
const harpsichord = note("<A B C D E F G H I J K L M N@2 O@7 P@2 Q@6 R@7 S@7 T@4 U@7 V@2 W@6 X@3>".pickRestart({
  A: "[b3,d4]@3 [a3,d4]", B: "[b3,d4]@2 [b3,d4,g4] [d4,a4]", C: "[c4,e4] [b3,e4]", D: "[c#4,e4]@12 [a3,d4]@24 b3@11 ~",
  E: "b3@11 ~ [b3,e4]@24 [b3,e4]@12", F: "[a3,d4] c4 [b3,d4] [b3,e4]", G: "[c4,e4]@11 ~ [c4,e4]@12 [b3,e4]@24",
  H: "[c4,e4]@2 [b3,d4,g4] [c4,g4]", I: "[c4,f4,a4] [a3,f4] [b3,e4]@2", J: "[c#4,e4]@3 d4",
  K: "[c4,e4]@2 b3 c4 [a3,d4]@4, ~ g4 ~@2", L: "c4 [b3,d4] d4@2", M: "[b3,d4]",
  N: "[[b3,d4]@18 [a3,d4]@9 [b3,d4]@18 ~ d4@8 d4@9 g4@9 ~ f#4@8 ~ b3@14, ~@15 a3@3 b3@6 ~@3 [d4,g4]@5]/2", // Bm D5 Bm G5
  O: "[~@3 [a3,d4,a4]@9 [c4,e4]@18 [b3,e4]@9 ~ e4@17 [b3,d4]@9 ~ e4@8 ~ [c4,a4]@9 [a3,f4]@8 ~ e4@36 [b3,e4]@11 ~ b3@23 ~ [b3,e4]@24 e4@12 f4@12 c4@11 b3@12 ~ c4@23 ~ [d4,g4]@23 a4@24 g4@24 ~ f4@2, ~@39 c4@18 ~@9 c4@9 f4@9 ~@9 b3@36 ~@12 e4@24 ~@25 c4@24 d4@23 e4@24 b3@24 ~@51]/7", // D5 C E5 Bm F Dm E5 G5
  P: "[~@10 a3@6 b3@5 ~ c4@24 e4@24 d4@24 ~@2, ~@10 f4@11 e4@24 ~@51]/2",
  Q: "[~@10 d4@11 ~ d4@11 ~ [b3,d4]@12 [a3,d4]@11 ~ b3@11 ~ a3@24 [b3,d4]@23 ~ [d4,g4]@24 a4@24 g4@24 f4@11 ~@7 b3@5 ~ c4@24 e4@24 d4@24 ~@2, ~@9 b3@12 a3@12 ~@24 d4@11 ~ d4@24 ~@24 b3@23 ~@61 a3@6 ~@6 e4@24 ~@51, ~@101 f4@6 ~@37]/6", // Bm D5 Bm G5
  R: "[~@10 [b3,d4]@11 ~ d4@11 ~ d4@11 ~ [a3,d4]@12 [b3,d4]@12 [a3,d4]@24 [b3,d4]@48 [b3,d4]@36 [a3,d4]@12 [b3,d4]@24 [b3,d4,g4]@12 [d4,a4]@12 [c4,e4]@23 ~ e4@23 ~ [c#4,e4]@12 [a3,d4]@24 b3@12 b3@2, ~@7 a3@4 b3@4 ~@72 b3@8 ~@17]/7", // Bm D5 Bm D5 Bm D5 Bm G …
  S: "[~@10 b3@23 ~ e4@11 ~ a3@12 c4@12 [b3,d4]@12 [b3,e4]@11 ~ c4@12 [c4,e4]@12 [b3,e4]@24 [c4,e4]@24 [b3,d4,g4]@12 [c4,g4]@12 [c4,f4,a4]@12 [a3,f4]@12 [b3,e4]@24 [c#4,e4]@36 d4@12 [c4,e4]@12 b3@6 c4@6 [a3,d4]@24 c4@2, ~@9 e4@24 b3@11 ~ d4@12 ~@36 e4@11 ~@194 g4@12 ~@26]/7", // Bm E5 C E5 C G C5 F …
  T: "[~@10 [b3,d4]@12 d4@24 [b3,d4]@47 ~ d4@18 [a3,d4]@9 [b3,d4]@18 [a3,d4]@9 d4@9 g4@9 f#4@9 [b3,d4,g4]@17, ~@93 b3@17 ~@38 b3@18 ~@26]/4", // Bm D5 Bm D5 G
  U: "[~ [a3,d4,a4]@9 [c4,e4]@18 [b3,e4]@9 ~ c4@17 ~ d4@8 [c4,e4]@9 ~ [c4,f4,a4]@8 ~ f4@9 [b3,e4]@35 ~ e4@11 [b3,e4]@24 ~ [b3,e4]@24 e4@12 f4@11 ~ c4@12 b3@11 ~ e4@23 ~ [d4,g4]@24 a4@24 g4@24 f4@4, ~@37 e4@18 b3@9 ~@18 a3@9 ~@36 b3@11 ~@50 c4@23 d4@24 c4@24 b3@24 ~@53]/7", // D5 C E5 C F E5 G5
  V: "[~@7 a3@6 ~ b3@5 [c4,e4]@24 ~ e4@23 d4@24 ~@5, ~@7 f4@11 ~@78]/2", // C
  W: "[~@8 b3@11 ~ a3@11 ~ b3@11 [a3,d4]@12 [b3,d4]@12 ~ d4@23 ~ d4@23 ~ d4@23 a4@24 g4@24 ~ f4@11 a3@6 b3@6 [c4,e4]@24 e4@24 ~ d4@24 ~@4, ~@7 d4@12 d4@12 d4@12 ~@24 a3@24 b3@24 [b3,g4]@24 ~@60 f4@11 ~@78]/6", // D5 Bm C Em
  X: "[~@7 [b3,d4]@12 ~ [a3,d4]@11 ~ b3@12 [a3,d4]@11 ~ d4@11 ~ a3@24 [b3,d4]@48 ~@4, ~@31 d4@12 ~@12 b3@12 d4@24 ~@53]/3", // Bm D5 Bm
})).s("gm_harpsichord").gain(0.41).pan(1)

// chords · harpsichord
const harpsichord_2 = note("<A B C D E F G H I J K L M N@2 O P@8 Q@6 R@8 S@3 T@7 U V@8 W@6 X@3>".pickRestart({
  A: "[g2,g3]@3 [d3,f#3]", B: "g3@4 g3@2 f#3 g3", C: "a3 [e3,g#3]", D: "a3 [d3,f#3]@2 [e3,g#3]",
  E: "[d#3,f#3]@2 [e3,g#3]@3 f#3 g#3 e3", F: "f#3 g3 a3@2 a3@2 g#3@2", G: "a3 [a2,a3] [e3,g#3]@2", H: "a3@4 g3 f3 e3@2",
  I: "f3 d3 a3 g#3, ~ e3", J: "[a2,a3]@3 [b2,g3]", K: "c3 e3 g3 f#3, g3@23 ~ d3@24", L: "[e3,g3] g3!2 f#3, ~ d3",
  M: "[g2,g3]", N: "[g3@18 f#3@9 g3@18 [d3,f#3]@9 ~ g3@17 a3@9 g3@15]/2", O: "~@3 [d3,f#3]@9 ~ a3@17 g#3@9 ~ a3@8",
  P: "[~@10 e3@9 a3@9 f3@9 d3@8 ~ g#3@36 [e3,g#3]@12 [e3,g#3]@24 [e3,g#3]@24 a3@24 ~@11 g2@12 ~ [c3,g3]@24 g3@23 ~ f3@23 e3@24 ~ d3@23 a2@24 ~ c3@24 ~@11 g3@12 a2@3, ~@45 e3@36 ~@85 g3@24 ~@168 b2@24 ~@2]/8", // E C5
  Q: "[~@3 f#3@6 ~ [g2,g3]@12 f#3@11 g3@12 ~@13 g3@11 g3@11 ~@2 f#3@11 ~ g3@23 g3@24 f3@24 ~ e3@24 d3@24 a2@24 c3@24 ~@11 g3@12 a2@3, ~@46 d3@23 d3@24 g2@24 ~@145 b2@24 ~@2]/6", // G
  R: "[~@3 f#3@6 ~ g3@12 f#3@12 g3@12 ~@12 g3@12 g3@12 f#3@12 g2@47 ~ [g2,g3]@36 [d3,f#3]@12 g3@23 ~ g3@11 ~ f#3@6 g3@6 a3@24 [e3,g#3]@23 a3@12 ~ f#3@24 [e3,g#3]@12 [d#3,f#3]@12 [e3,g#3]@18 f#3@5 g#3@6 ~ e3@6 f#3@2, ~@9 g2@12 ~@25 d3@24 d3@24 ~@203 d3@24 ~@63]/8", // G D E D#m E
  S: "[~@2 g3@3 a3@6 a3@6 g#3@6 a3@6 [a2,a3]@6 [e3,g#3]@12 a3@12 g3@3 f3@3 e3@6 f3]/3", // A E
  T: "[~@10 d3@12 a3@12 g#3@12 [a2,a3]@36 [b2,g3]@12 c3@12 e3@12 g3@12 f#3@12 [e3,g3]@12 g3@12 g3@12 f#3@12 [g2,g3]@48 g3@18 f#3@9 g3@18 [d3,f#3]@9 g3@18 a3@9 g3@17, ~@11 e3@12 ~@24 g3@12 d3@12 ~@12 d3@12 ~@73]/7", // A Em G D
  U: "~ [d3,f#3]@9 a3@18 g#3@9 a3@11", // D
  V: "[~@8 e3@8 a3@9 ~ f3@9 d3@9 [e3,g#3]@35 ~ e3@11 [e3,g#3]@24 [e3,g#3]@24 ~ a3@23 ~@13 g2@11 ~ c3@24 g3@23 f3@24 ~ e3@24 d3@24 a2@23 c3@24 ~@25 a2@4, ~@79 g#3@11 ~@73 g3@24 g3@24 ~@144 b2@24 ~@5, ~@367 g3@17]/8", // E
  W: "[~@2 f#3@5 ~ g3@12 f#3@12 g3@11 ~@13 g3@11 g3@11 ~@2 f#3@11 ~ g2@23 g3@23 ~@2 f3@24 e3@23 d3@24 a2@24 ~ c3@23 ~@25 a2@4, ~@7 g2@12 ~@24 d3@24 d3@24 g3@24 ~@144 b2@24 ~@5, ~@271 g3@17]/6",
  X: "[~@2 f#3@6 [g2,g3]@11 f#3@12 g3@12 ~@13 g3@12 g3@12 f#3@12 g2@48 ~@4, ~@43 d3@24 ~ d3@24 ~@52]/3", // G
})).s("gm_harpsichord").gain(0.41).pan(1)

// bass · contrabass
const bass = note("<A B C D E F G H I J K L M N@2 O P@8 Q@6 R@8 S@6 T@4 U V@8 W@6 X@3>".pickRestart({
  A: "g2@3 d3", B: "g3@4 g3@2 f#3 g3", C: "a3 e3", D: "a3 d3@2 e3", E: "d#3@2 e3@3 f#3 g#3 e3",
  F: "f#3 g3 a3@2 a3@2 g#3@2", G: "a3 a2 e3@2", H: "a3@4 g3 f3 e3@2", I: "f3 d3 e3@2", J: "a2@3 b2", K: "c3 e3 d3@2",
  L: "e3 g3 d3@2", M: "g2", N: "[g3@18 f#3@9 g3@18 ~ d3@8 g3@18 ~ a3@8 g3@15]/2", O: "~@4 d3@8 a3@18 g#3@9 a3@9",
  P: "[~@10 e3@9 a3@9 f3@9 d3@9 e3@36 e3@12 e3@24 e3@24 a3@24 ~@12 g2@12 c3@24 g3@24 f3@24 e3@24 d3@24 a2@24 c3@24 b2@24 a2@2]/8",
  Q: "[~@10 g2@12 f#3@12 g3@12 d3@24 d3@24 g2@24 g3@23 f3@24 ~ e3@24 d3@24 a2@23 c3@24 ~ b2@24 a2@2]/6",
  R: "[~@9 g2@12 ~ f#3@12 g3@12 d3@24 d3@24 g2@48 g2@36 d3@12 g3@24 g3@12 f#3@6 g3@6 a3@23 e3@24 ~ a3@12 d3@24 e3@12 d#3@11 e3@18 ~ f#3@6 g#3@5 e3@6 ~ f#3@2]/8",
  S: "[~@3 g3@6 ~ a3@12 a3@11 g#3@12 ~ a3@12 a2@12 e3@24 a3@24 g3@6 f3@6 e3@12 f3@12 d3@12 e3@24 a2@36 b2@12 c3@12 e3@12 d3@24 e3@2]/6",
  T: "[~@10 g3@11 d3@24 ~ g2@48 g3@18 f#3@9 g3@18 d3@9 g3@18 a3@9 g3@17]/4", U: "~ d3@9 a3@18 g#3@9 a3@11",
  V: "[~@8 e3@8 a3@9 ~ f3@8 d3@9 e3@36 ~ e3@12 e3@23 ~ e3@24 a3@24 ~@12 g2@12 c3@23 g3@24 f3@24 ~ e3@23 d3@24 ~ a2@24 c3@23 b2@24 ~ a2@4]/8",
  W: "[~@8 g2@12 f#3@12 g3@11 d3@24 d3@24 g2@24 g3@24 f3@24 ~ e3@24 d3@23 a2@24 c3@24 b2@24 ~ a2@4]/6",
  X: "[~@2 g2@3 f#3@3 g3@3 d3@6 d3@6 g2@12 ~]/3",
})).s("gm_contrabass").gain(0.51).pan(0.4)

stack(harpsichord, harpsichord_2, bass)

More by Thomas Campion