Strudelify

Winchester Cathedral

New Vaudeville Band

KeyG majorTempo120 bpm
0:00/0:00
// Winchester Cathedral — New Vaudeville Band
// 120 bpm, 16/16, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 67 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 · [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.

// other · electric guitar jazz · "Gitara"
const electric_guitar_jazz = note(`<
  A B C D E ~ F@2 G@4 ~@2 F@2 G@4 ~@11 F@2 G@4 ~@2 F@2 G@4 ~@11 F@2 G@4 A B C D E
>`.pickRestart({
  A: "~@7 g3", B: "c4 e4 c5 a4@4 b3", C: "b3 d4 g4 e4@4 b3", D: "b3 d4 g4 e4@2 g3 a3@2", E: "c4 ~@7",
  F: "[~@3 g3 c4 e4 c5 a4@4 ~@5]/2", G: "[~@3 b3!2 d4 g4 e4@4 ~@5]/2",
})).s("gm_electric_guitar_jazz").gain(0.8).pan(0.4)

// bass · fretless bass · "Bas"
const bass = note(`<
  ~ A B@2 C D E F@3 G D H D E F I F@2 D H D J K L@2 M@2 F N D E F I F O D P D Q F I F G D H D@2 K L@2 M@2 ~ R D E F S
  F@2 D T A B@2 U
>`.pickRestart({
  A: "c2", B: "g1", C: "c2 ~ b1@6", D: "c2 g1", E: "c2@2 g1 c2", F: "g1 d2", G: "g1 b1", H: "c2@2 g1 b1",
  I: "g1@3 g1 d2@4", J: "c2@3 c2 g1@4", K: "c2 e2", L: "f2 c2", M: "d2 a1", N: "g1!2 a1 b1", O: "g1@2 d2 b1",
  P: "c2@4 g1@3 g1", Q: "c2@2 c2 a1", R: "g1@2 g1!2 a1@2 b1@2", S: "g1@4 d2@3 d2", T: "c2@4 c2 ~@3",
  U: "c2 ~@3 c2@2 ~@2",
})).s("gm_fretless_bass").gain(0.8)

// other · piano · "Intro"
const piano = note("<~@5 A@2 B@4 C D A@2 B@4 C D E@3 F G@3 H@2 ~@37>".pickRestart({
  A: "[~@2 c6@2 c6 a5 g5 c6@2 a5@7]/2", B: "[~@2 g5@2 g5 e5 g5 e5@2 d5@7]/2", C: "~@2 c6@2 a5 g5 e5@2", D: "c5",
  E: "[~@2 c6@2 c6 a5 g5 c6@5 a5 g5@2 e5@4 c5 d5 c5 d5@2]/3", F: "a5",
  G: "[~@2 d6@2 d6 b5 a5 d6@4 ~ b5 a5@2 e5@4 d5 e5 d5 e5@2]/3", H: "[g5@2 g5@2 a5 g5 a5 b5@9]/2",
})).s("gm_piano").gain(0.8).pan(0.6)

// chords · electric guitar clean · "Kontra"
const electric_guitar_clean = note("<~@21 A@2 B C@2 D@2 E ~@17 A@2 B C@2 D@2 ~@13 F>".pickRestart({
  A: "~@4 [c5,e5,g5] ~@7 [c5,e5,g5] ~@3", B: "~@4 [c5,e5,g5,a#5] ~@7 [c5,e5,g5,a#5] ~@3",
  C: "~@4 [c5,f5,a5] ~@7 [c5,f5,a5] ~@3", D: "~@4 [a4,d5,f#5] ~@7 [a4,d5,f#5] ~@3",
  E: "~@4 [b4,d5,g5] ~@7 [b4,d5,g5] ~@3", F: "~@4 [c5,e5,g5] ~@3",
})).s("gm_electric_guitar_clean").gain(0.5).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~ A@3 B C@48 ~@2 C@7 D A@3 D>".pickRestart({
  A: "x", B: "x ~@6 x", C: "x ~@3 x!2 ~ x", D: "x!2",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@4 A B@24 C B@23 ~ D B@7 ~@5>".pickRestart({
  A: "~ x ~@2", B: "~ x ~ x", C: "~@2 x ~ x!4", D: "x!4",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@4 A B@16 C@7 B@18 C@7 ~ B@8 D ~@3 A>".pickRestart({
  A: "x", B: "x!4", C: "x!8", D: "x!2",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@7 B ~@7 C ~@8 D ~@7 E ~@7 F ~@6 G ~ H ~@7 I ~@2 J ~>".pickRestart({
  A: "~@2 x!2 ~@6 x ~ x ~ x ~", B: "x!2 ~@2 x ~@2 x!2 ~ x ~ x ~ x ~", C: "x ~@2 x!2 ~@11", D: "x!8", E: "~@4 x!2 ~@2",
  F: "~@2 x!3 ~ x ~ x!3 ~ x ~ x ~", G: "x ~ x ~ x!3 ~@9", H: "x!3 ~", I: "x ~ x!3 ~@11", J: "~@5 x!2 ~",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@20 A ~@7 B ~@8 C ~@14 D ~ E ~@7 F ~@3 G>".pickRestart({
  A: "~@8 x ~@2 x!2 ~ x ~", B: "~@2 x!3 ~@5 x!3 ~@3", C: "~@6 x!2", D: "~@8 x!5 ~ x ~", E: "~@3 x", F: "~@3 x ~@4",
  G: "x",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct("<~ A@3 ~ A ~@7 A ~@7 A ~@8 A ~@7 A ~@7 A ~@8 A ~@6 B A@3 B>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.8)

stack(electric_guitar_jazz, bass, piano, electric_guitar_clean, kick, snare, hihat, mid_tom, high_tom, crash)