Strudelify

Angels We Have Heard on High

French Carol

KeyA majorTempo120 bpm
0:00/0:00
// Angels We Have Heard on High — French Carol
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/2627566; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 42 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// melody · violin
const violin = note("<A B C D ~@3 E F G H I J K F G H I J K L A B C D ~@3 E F G H I J K F G H I J K L>".pickRestart({
  A: "c#5!3 e5", B: "e5@3 d5 c#5@4", C: "c#5 b4 c#5 e5", D: "c#5@3 b4 a4@4", E: "~ a4", F: "e5@4 f#5 e5 d5 c#5",
  G: "d5@4 e5 d5 c#5 b4", H: "c#5@4 d5 c#5 b4 a4", I: "b4@3 e4 e4@4", J: "a4 b4 c#5 d5", K: "c#5 b4", L: "a4",
})).s("gm_violin").gain(0.4)

// melody · violin · soft notes
const violin_soft = note("<~@4 A B C D ~@17 A B C D ~@13>".pickRestart({
  A: "c#5!3 e5", B: "e5@3 d5 c#5@4", C: "c#5 b4 c#5 e5", D: "c#5@3 b4 ~@4",
})).s("gm_violin").gain(0.2)

stack(violin, violin_soft)