Strudelify

Angels We Have Heard on High (SATB)

Old French Song

KeyG majorTempo112 bpm
0:00/0:00
// Angels We Have Heard on High (SATB) — Old French Song
// 112 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 4 "Bass" named as a bass, played on electric bass finger (its cello patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/144009; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 21 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/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 · viola · "Alto"
const viola = note("<A B C D A B C D E@3 F ~@2 G H I F J K L>".pickRestart({
  A: "g4!4", B: "g4 f#4 g4@2", C: "g4 f#4 g4 b4", D: "g4 f#4 d4@2",
  E: "[g4@2 b4 a4 g4@2 g#4@4 a4 g4 a4@2 f#4@4 g4 f#4 e4@4]/3", F: "d4@3 d4 c4@4", G: "g4@2 b4 a4 g4@2 g#4@2",
  H: "g4@2 a4 g4 a4@2 f#4@2", I: "f#4@2 g4 f#4 e4@2 e4@2", J: "d4!3 e4", K: "g4 e4 g4 f#4", L: "d4",
})).s("gm_viola").gain(0.3)

// other · cello · "Baritone"
const cello = note("<A B A C D B A C E F G H I J E F G H K L M>".pickRestart({
  A: "d4!4", B: "e4 d4 d4@2", C: "d4 c4 b3@2", D: "d4 d#4 e4 d4", E: "b3@2 b3 e4", F: "e4 d4", G: "d4@2 c4 a3",
  H: "g3 f#3 e3 f#3", I: "b3 d4!2 e4", J: "d4 e4 d4@2", K: "g3@2 f#3@2 g3@2 g3 a3", L: "b3 c4 d4 c4", M: "b3",
})).s("gm_cello").gain(0.3)

// bass · electric bass finger · "Bass"
const bass = note("<A B C D E B C F G H I J K L G H I J M N O>".pickRestart({
  A: "g3!3 b3", B: "a3 d4 g3@2", C: "g3 d3 g3 b3", D: "d4 d3 b3@2", E: "g3 b3 e4 b3", F: "d4 d3 g3@2", G: "g3 e3",
  H: "a3@2 f#3 d3", I: "g3@2 c3 c#3", J: "d3!2 d3@2", K: "g3 d3 g3 c4", L: "d4 c#4 d4@2", M: "b2 d3 g3 c3", N: "d3",
  O: "g3",
})).s("gm_electric_bass_finger").gain(0.3)

stack(viola, cello, bass)