Strudelify

Los Campanilleros

Villancicos

KeyA minorTempo120 bpm
0:00/0:00
// Los Campanilleros — Villancicos
// 120 bpm, 3/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 3/4 at bar 2) are rendered on a constant 3/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 14 "Alto" viola (copy of ch 7 "Violon" violin)
// note: Transcription provider: pdmx. https://musescore.com/score/5975987; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 27 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

// 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 · piano · "Violon"
const piano = note("<A B C D E F G H@2 I J K J L M N@2 O@2 I J K J L M P@2>".pickRestart({
  A: "~@11 e4@2 e4@3", B: "a4@5 a4@5 ~ [e4,g#4,b4]@5", C: "[a3,e4,a4,c5]@5 [e4,g#4,b4]@5 ~ [a3,e4,a4,c5]@5",
  D: "[a3,e4,b4,d5]@5 [e4,a4,c#5]@5 ~ [a3,e4,b4,d5]@5", E: "[a3,a4,c5,e5]@5 [g#4,b4,e5]@5 ~ [a3,a4,c5,e5]@5",
  F: "[a3,c5,f5,a5]@5 [c5,f5,a5]@5 ~ [a3,c5,f5,a5]@5", // F
  G: "[b3,d5,f5,a5]@5 [e5,g5]@3 [d5,f5]@3 [e5,g5]@2 [d5,f5]@3, ~@5 g3@5 ~ b3@5", // Bm7b5 Em Dm Em Dm
  H: "[[g4,c5]@16 [g4,c5]@5 ~@6 [a4,c#5]@2 [b4,d5]@3, [c4,e5]@21 ~@6 e4@5]/2", // C5 A Bm C
  I: "[a3,a4,c#5,e5]@5 [a4,c#5,e5]@5 ~ [a3,a4,c#5,e5]@5", J: "[a3,c#5,e5,g5]@5 [a4,d5,f5]@5 ~ [a3,a4,c#5,e5]@5",
  K: "[a3,f4,a4,d5]@5 [e4,a4,c#5]@5 ~ [a3,f4,a4,d5]@5", L: "[a3,a4,d5,f5]@5 [a4,c5,e5]@5 ~ [a3,a4,b4,d5]@5",
  M: "[e4,g#4,b4]@5 [c5,d5] c5@5 [d4,e4,g#4,b4]@5, ~@5 [e4,a4]@5 ~@6", // E Csus2 E7 A5
  N: "[[a3,c4,e4,a4]@21 [a3,a4]@3 [b3,b4]@3 [a3,a4]@2 [b3,b4]@3]/2", // Am A B A B
  O: "[[c4,c5]@21 ~@6 [a4,c#5]@2 [b4,d5]@3, ~@27 e4@5]/2", P: "[a3@5 a3@10 ~@17, [c4,e4,a4]@21 ~@11]/2",
})).s("gm_piano").gain(0.2)

// other · violin · "Violon"
const violin = note("<A B C D E F G H@2 I J K J L M N@2 O@2 I J K J L M P@2>".pickRestart({
  A: "~@11 e4@2 e4@3", B: "a4@5 a4@5 ~ g#4@5", C: "a4@5 g#4@5 ~ a4@5", D: "b4@5 a4@5 ~ b4@5", E: "c5@5 b4@5 ~ c5@5",
  F: "f5@5 f5@5 ~ f5@5", G: "f5@5 e5@3 d5@3 e5@2 d5@3", H: "[c5@21 ~@6 a4@2 b4@3]/2", I: "c#5@5 c#5@5 ~ c#5@5",
  J: "e5@5 d5@5 ~ c#5@5", K: "a4@11 a4@5", L: "d5@5 c5@5 ~ b4@5", M: "g#4@5 b4 a4@5 g#4@5",
  N: "[e4@21 f4@3 g4@3 f4@2 g4@3]/2", O: "[g4@21 ~@6 a4@2 b4@3]/2", P: "[e4@21 ~@11]/2",
})).s("gm_violin").gain(0.2)

// other · violin · "Cello"
const violin_2 = note("<~@2 A@4 B C@2 A@5 D E@2 C@2 A@5 D F@2>".pickRestart({
  A: "a3@5 ~@6 a3@5", B: "b3@5 ~@6 b3@5", C: "[c4@21 ~@11]/2", D: "e4@5 ~@6 e4@5", E: "[a3@21 g3@5 ~ g3@5]/2",
  F: "[a3@21 ~@11]/2",
})).s("gm_violin").gain(0.4)

stack(piano, violin, violin_2)