Strudelify

Adeste Fideles

Traditional

KeyA♭ majorTempo114 bpm
0:00/0:00
// Adeste Fideles — Traditional
// 114 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/3014761; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 63 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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 · piano
const piano = note(`<
  A B C D E F G H I J K L M N O D P Q R S T ~@11 U ~ V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS
  AT@5
>`.pickRestart({
  A: "~@3 ab4", B: "ab4@2 eb4 ab4", C: "bb4 eb4", D: "c5 bb4 c5 db5", E: "c5@2 bb4 ab4", F: "ab4@2 g4 f4",
  G: "g4 ab4 bb4 c5", H: "g4@4 f4@3 eb4", I: "eb4@15 ~", J: "eb5@2 db5 c5", K: "db5 c5", L: "bb4 c5 ab4 bb4",
  M: "g4@3 f4 eb4@2 ab4@2", N: "ab4 g4 ab4 bb4", O: "ab4@2 eb4 c5", P: "c5@2 bb4 [e4,c5]",
  Q: "[f4,db5] [f4,c5] [e4,bb4] [f4,ab4]", R: "[eb4,g4] [bb3,e4] [c4,f4,ab4] [f4,db5]",
  S: "[eb4,c5]@4 [eb4,bb4]@3 [eb4,ab4]", T: "[eb4,ab4]@15 ~",
  U: "[eb4,g4]@3 [d4,f4] [eb3,g3,bb3,eb4]@2 ~@2, [bb2,bb3] ~", V: "~@3 [ab3,c4,eb4,ab4,c5]",
  W: "[ab3,c4,eb4,ab4,c5] [g3,bb3,eb4,g4,bb4] [ab3,c4,eb4,ab4,c5] [g3,bb3,eb4,g4,bb4,db5]", // Ab Eb Ab Eb7
  X: "[ab3,c4,eb4,ab4,c5]@2 [g3,bb3,eb4,g4,bb4] [g3,bb3,e4,g4,c5]", // Ab Eb C7
  Y: "[f3,bb3,f4,bb4,db5] [f3,ab3,c4,f4,ab4,c5] [e3,g3,db4,e4,g4,bb4] [f3,ab3,c4,f4,ab4]", // Bbm Fm Edim Fm
  Z: "[e3,g3,c4,e4,g4] [c3,e3,g3,c4,e4] [f3,ab3,c4,f4,ab4] [db3,f3,ab3,bb3,db4,f4,ab4,bb4,db5]", // C Fm Bbm7
  AA: "[eb3,ab3,eb4,ab4,c5]@4 [eb4,g4,bb4]@3 ab4, ~ [eb3,g3]", AB: "[ab2,ab3,c4,eb4,ab4]@15 ~",
  AC: "[ab3,c4,eb4,ab4]@2 eb4 [eb4,ab4], ~ [ab3,c4]", AD: "[g3,bb3,eb4,g4,bb4] [eb3,g3,bb3,eb4]",
  AE: "[ab3,c4,eb4,ab4,c5] [g3,bb3,eb4,g4,bb4] [ab3,c4,eb4,ab4,c5] [f3,ab3,db4,f4,ab4,db5]", // Ab Eb Ab Db
  AF: "[eb3,ab3,c4,eb4,ab4,c5]@2 [eb3,g3,bb3,eb4,g4,bb4] [f3,ab3,c4,f4,ab4]", // Ab Eb Fm
  AG: "[f3,ab3,c4,f4,ab4]@2 [e3,g3,c4,e4,g4] [f3,ab3,c4,f4]", // Fm C Fm
  AH: "[e3,g3,bb3,db4,e4,g4] [f3,ab3,c4,f4,ab4] [e3,g3,bb3,db4,e4,g4,bb4] [f3,ab3,c4,f4,ab4,c5]", // Edim Fm Edim Fm
  AI: "[g3,bb3,eb4,g4]@4 [d4,f4]@3 eb4, ~ [f3,bb3]", AJ: "[eb3,g3,bb3,eb4]@15 ~",
  AK: "[ab3,c4] eb4 [g3,bb3,db4,eb4,g4,bb4,db5] [ab3,c4,eb4,ab4,c5], [ab4,c5,eb5] ~", // Ab Eb7 Ab
  AL: "[g3,bb3,db4]@2 db4!2 c4@2 bb3@2 [f3,ab3,c4]@4 ab3@4, [e4,g4,bb4,db5] [f4,ab4,c5]", // Gdim Fm Edim Fm
  AM: "[e3,g3,bb3,db4,e4,g4,bb4] [f3,ab3,c4,f4,ab4,c5] [ab3,c4,f4,ab4] [d3,f3,bb3,d4,f4,bb4]", // Edim Fm Bb
  AN: "[eb3,g3,bb3,eb4,g4]@3 [d3,f3,bb3,d4,f4] [eb3,g3,bb3,eb4]@2 [eb3,ab3,c4,eb4,ab4]@2", // Eb Bb Eb Ab
  AO: "[ab3,c4,eb4,ab4] [g3,bb3,eb4,g4] [ab3,c4,eb4,ab4] [g3,bb3,eb4,g4,bb4]", // Ab Eb Ab Eb
  AP: "[ab3,c4,eb4,ab4]@2 eb4 [eb4,ab4,c5], ~ [ab3,c4]", // Ab
  AQ: "[ab3,c4,eb4,ab4,c5] [g3,bb3,eb4,g4,bb4] [ab3,c4,eb4,ab4,c5] [g3,bb3,db4,eb4,g4,bb4,db5]", // Ab Eb Ab Eb7
  AR: "[ab3,c4] c4 bb3 ab3 [g3,bb3,eb4,g4,bb4]@2 [g3,bb3,c4,e4,g4,bb4,c5]@2, [eb4,ab4,c5] ~", // Ab Eb C7 Ab
  AS: "[f3,bb3,db4,f4,bb4,db5] [f3,ab3,c4,f4,ab4,c5] [e3,g3,bb3,db4,e4,g4,bb4] [f3,ab3,c4,f4,ab4]", // Bbm Fm Edim Fm
  AT: "[~ [c3,e3,g3,c4,e4,g4]@4 [e3,g3,c4,e4]@5 [f3,ab3,c4,f4,ab4]@5 [f3,ab3,bb3,db4,f4,ab4,bb4,db5]@5 [eb3,ab3,c4,eb4,ab4,c5]@10 ~ [eb4,g4,bb4]@9 ~ ab4@3 [ab2,ab3,c4,eb4,ab4]@28 ~@8, ~@31 [eb3,g3,bb3]@12 ~@37]/5", // C Fm Bbm7 Ab Eb Ab Eb
})).s("gm_piano").gain(0.4)

// chords · piano · soft notes
const piano_soft = note("<~@21 A B C D E F G H I J K L M N ~@28>".pickRestart({
  A: "[ab3,c4,ab4]@2 [c4,eb4] [c4,ab4], ~ ab3", B: "[g3,eb4,bb4] [eb3,g3,bb3,eb4]",
  C: "[ab3,eb4,c5] [g3,eb4,bb4] [ab3,eb4,c5] [f3,f4,db5]", D: "[eb3,eb4,c5]@2 [eb3,eb4,bb4] [f3,f4,ab4]",
  E: "[f3,c4,f4,ab4]@2 [e3,c4,e4,g4] [f3,ab3,c4,f4]", // Fm C Fm
  F: "[e3,bb3,e4,g4] [f3,c4,f4,ab4] [e3,db4,e4,g4,bb4] [f3,c4,f4,ab4,c5]", G: "[bb3,eb4,g4]@4 [d4,f4]@3 eb4, ~ bb3",
  H: "eb4@11 ~ eb4 [f4,g4] [ab4,bb4] [c5,db5], [eb3,g3,bb3]@15 ~", // Fsus2 Absus2 Dbmaj7 Eb
  I: "[ab3,c4,eb4,ab4,eb5]@2 [g3,bb3,eb4,g4,db5] [ab3,c4,eb4,ab4,c5]", J: "[g3,bb3,e4,g4,bb4,db5] [ab3,c4,f4,ab4,c5]",
  K: "[g3,bb3,db4,e4,g4,bb4] [f3,ab3,c4,f4,ab4,c5] [f3,ab3,c4,f4,ab4] [f3,bb3,d4,f4,bb4]", L: "~@3 [ab3,c4,eb4,ab4]",
  M: "[ab3,c4,eb4,ab4] [g3,bb3,eb4,g4] [ab3,c4,eb4,ab4] [g3,bb3,eb4,g4,bb4]", // Ab Eb Ab Eb
  N: "[c4,eb4,ab4]@2 [c4,eb4] ~, ab3@11 ~@5", // Ab Cm
})).s("gm_piano").gain(0.2)

// chords · piano
const piano_2 = note(`<
  ~ A B C D E F G H I J K L M N O P Q R S T ~@10 U V ~@3 W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR@6
>`.pickRestart({
  A: "[ab3,c4,eb4]@15 ~", B: "[g3,bb3,eb4]@15 ~", C: "[ab3,c4,eb4] [g3,bb3,eb4] [ab3,c4,eb4] [f3,ab3,db4]",
  D: "[eb3,ab3,c4]@2 [eb3,g3,bb3] [f3,ab3]", E: "[f3,ab3,c4]@2 [e3,g3,c4] [f3,ab3,c4]",
  F: "[e3,g3,bb3,db4] [f3,ab3,c4] [db3,e3,g3,bb3] [f3,ab3,c4]", G: "[bb2,bb3,eb4,g4] [bb2,bb3,d4,f4]",
  H: "[eb3,g3,bb3,eb4]@15 ~", I: "[ab3,c4,eb4]@2 [g3,bb3,db4,eb4] [ab3,c4,eb4]", J: "[e3,g3,bb3,db4] [f3,ab3,c4]",
  K: "[e3,g3,bb3,db4] [f3,ab3,c4] [ab3,c4,f4] [f3,bb3,d4]", // Edim Fm Bb
  L: "[eb3,g3,bb3,eb4]@3 [d3,f3,bb3] [eb3,g3,bb3]@2 [ab3,c4,eb4]@2", // Eb Bb Eb Ab
  M: "[ab3,c4,eb4] [g3,bb3,eb4] [ab3,c4,eb4] [g3,bb3,eb4]", N: "[ab3,c4,eb4]@2 [ab3,c4,eb4]!2",
  O: "[ab3,c4,eb4] [g3,bb3,eb4] [ab3,c4,eb4] [g3,bb3,db4,eb4]", P: "[ab3,c4,eb4]@2 [g3,bb3,eb4] [e3,g3,bb3,c4]",
  Q: "[f3,bb3,db4] [f3,ab3,c4] [e3,g3,bb3,db4] [f3,ab3,c4]", R: "eb3 e3 [f3,ab3,c4] [f3,ab3,bb3,db4], [g3,bb3] ~",
  S: "[eb3,ab3,c4]@4 [eb3,g3,bb3]@3 [ab3,c4]", T: "[ab3,c4]@15 ~", U: "~@15 f2",
  V: "g2 bb2 eb3 g3 bb3 g3 d3 bb2 eb2 g2 bb2 eb3 ~@4", W: "~@11 g3 e3 c3 g2 c3",
  X: "[f2,f3] [eb2,eb3] [db2,db3] [c2,c3] [bb1,bb2] [ab1,ab2] [g1,g2] [f1,f2] [e1,e2] [f1,f2] [g1,g2] [ab1,ab2] [bb1,bb2] [ab1,ab2] [g1,g2] [f1,f2]", // F Eb Db C Bb Ab G F …
  Y: "[e1,e2] [f1,f2] [g1,g2] [ab1,ab2] [bb1,bb2] [c2,c3] [d2,d3] [e2,e3] [f2,f3] [c2,c3] [ab1,ab2] [f1,f2] [ab1,ab2] [bb1,bb2] [db2,db3] [f2,f3]", // E F G Ab Bb C D E …
  Z: "[eb2,eb3] [c2,c3] [ab1,ab2] [eb1,eb2] [ab1,ab2] [bb1,bb2] [c2,c3] [db2,db3] [eb2,eb3] [bb1,bb2] [g1,g2] [eb1,eb2] [g1,g2] [ab1,ab2] [bb1,bb2] [c2,c3]", // Eb C Ab Eb Ab Bb C Db …
  AA: "[ab1,ab2] [c2,c3] [eb2,eb3] [ab2,ab3] [c3,c4] [ab2,ab3] [eb2,eb3] [c2,c3] [ab1,ab2]@2 [ab2,c3]!2 [ab1,eb2,ab2,c3]@2 [ab2,c3]@2", // Ab C Eb Ab C Ab Eb C …
  AB: "[ab1,eb2,ab2,c3]@2 [ab2,c3,eb3]!2 [ab1,ab2,c3,eb3]@2 [ab2,c3,eb3]@2 [ab1,eb2,ab2]@2 [ab2,c3]!2 [ab1,ab2,c3,eb3]@2 [ab2,c3,eb3]@2", // Ab Ab5 Ab
  AC: "[g1,eb2,g2]@2 [g2,bb2,eb3]!2 [eb1,g2,bb2,eb3]@2 [g2,bb2,eb3,g3]!2 [eb1,eb2,g2,bb2,eb3,g3]@2 [g2,bb2,eb3]!2 [eb1,g2,bb2,eb3]@2 [g2,bb2,eb3]@2", // Cm Eb
  AD: "[ab1,eb2,ab2]@2 [ab2,c3]!2 [eb1,g2,bb2,eb3]@2 [g2,bb2,eb3]@2 [ab1,eb2,ab2]@2 [ab2,c3]!2 [db1,ab2,db3]@2 [ab2,db3,f3]@2", // Ab5 Ab Eb Ab5 Ab Db5 Db
  AE: "[eb1,eb2,ab2,c3,eb3]@2 [eb2,ab2,c3]!2 [eb1,eb2,ab2]@2 eb2@2 [eb1,eb2,g2,bb2,eb3]@2 [eb2,g2,bb2]!2 [f1,f2,ab2]@2 f2@2", // Ab Ab5 Eb Fm
  AF: "[ab1,f2,ab2]@2 [ab2,c3]!2 [ab1,ab2,c3]@2 [ab2,c3,f3]@2 [c2,e2,g2]@2 [g2,c3]!2 [f1,ab2,c3]@2 [ab2,c3,f3]@2", // Db Ab Fm C C5 Fm
  AG: "[e1,db2,g2,bb2,db3]@2 [g2,bb2,db3]!2 [f1,f2,ab2,c3]@2 [f2,ab2]@2 [g1,e2,g2,bb2]@2 [g2,bb2]!2 [f1,f2,ab2]@2 f2@2", // Edim Gdim Fm Edim Gm Fm
  AH: "[bb1,eb2,g2]@2 [g2,bb2]!2 [bb1,g2,bb2]@2 [g2,bb2,eb3]@2 [bb1,d2,f2]@2 [f2,bb2]!2 [bb1,f2,bb2]@2 [f2,bb2,d3]@2", // Eb Gm Eb Bb Bb5 Bb
  AI: "[eb1,bb1,eb2]@2 [eb2,g2,bb2]!2 [eb1,eb2,g2,bb2]@2 [g2,bb2,eb3]!2 [bb1,eb2,g2,bb2,eb3]@2 [g2,bb2,eb3,g3]!2 [eb1,g2,bb2,eb3,g3]@2 [bb2,eb3,g3,bb3]@2", // Eb5 Eb
  AJ: "[ab1,eb2,ab2,c3,eb3,ab3]@2 [ab2,c3]!2 [ab1,ab2,c3]@2 [ab2,c3]@2 [g1,eb2,g2,bb2,db3]@2 [g2,bb2,db3]!2 [ab1,ab2,c3,eb3]@2 [ab2,c3,eb3]@2", // Ab Eb7 Gdim Ab
  AK: "[e1,db2,g2,bb2,e3]@2 [g2,bb2,db3]!2 [e1,g2,c3]@2 [g2,bb2]@2 [f1,c2,f2,ab2,c3,f3]@2 [f2,ab2,c3]!2 [f1,f2,ab2]@2 f2@2", // Edim Gdim C Gm Fm
  AL: "[e1,db2,g2]@2 [g2,bb2,db3]!2 [f1,ab2,c3]@2 ab2@2 [f1,c2,f2]@2 [f2,ab2,c3]!2 [bb1,f2,bb2,d3]@2 [f2,bb2]@2", // Dbdim Gdim Fm F5 Fm Bb Bb5
  AM: "[eb1,bb1,eb2,g2,bb2,eb3]@2 [eb2,g2,bb2]!2 [eb1,eb2,g2]@2 f2@2 [eb1,bb1,eb2]@2 [eb2,g2,bb2]!2 [eb1,eb2,ab2,c3,eb3]@2 [eb2,ab2,c3,eb3]@2", // Eb Eb5 Eb Ab
  AN: "[ab1,eb2,ab2]@2 [ab2,c3]!2 [g1,g2,bb2,db3]@2 [g2,bb2,eb3]@2 [ab1,eb2,ab2,c3]@2 [ab2,c3,eb3]!2 [eb1,g2,bb2,eb3,g3]@2 [g2,bb2,eb3]@2", // Ab5 Ab Gdim Eb Ab Eb
  AO: "[ab1,eb2,ab2,c3,eb3,ab3]@2 [ab2,c3,eb3]!2 [ab1,ab2,c3]@2 ab2@2 [ab1,c2,eb2]@2 [eb2,ab2]!2 [ab1,eb2,ab2,c3]@2 [eb2,ab2]@2", // Ab Ab5 Ab Ab5
  AP: "[ab1,eb2,ab2]@2 [ab2,c3]!2 [eb1,g2,bb2,db3]@2 [g2,bb2,eb3]@2 [ab1,eb2,ab2,c3]@2 [ab2,c3,eb3]!2 [eb1,g2,bb2,eb3,g3]@2 [g2,bb2,eb3]@2", // Ab5 Ab Eb7 Eb Ab Eb
  AQ: "[ab1,eb2,ab2,c3,eb3,ab3]@2 [ab2,c3,eb3]!2 [ab1,ab2,c3]@2 ab2@2 [eb1,bb1,eb2]@2 [eb2,g2]!2 [c2,e2,g2,bb2]@2 [e2,g2,c3]@2", // Ab Eb5 Eb C7 C
  AR: "[[f1,db2,f2,bb2,db3]@2 [f2,bb2,db3,f3]!2 [f1,f2,ab2,c3]@2 [f2,bb2]@2 [e1,db2,e2,g2]@2 e2!2 [f1,f2]@2 ~ [f2,ab2,c3]@2 [c2,e2,g2,c3]@2 [g2,d3]!2 [c2,g2,c3,e3]@2 ~ [g2,c3]@2 [f1,c2,f2,ab2,c3,f3]@2 ~ [f2,ab2,c3,eb3]!2 [bb1,f2,bb2,db3]@3 [f2,bb2]@2 [eb1,eb2,ab2,c3,eb3]@3 [ab2,db3]!2 ~ [eb1,ab2,c3]@2 ab2@3 [eb1,eb2,g2,bb2]@3 [g2,c3]@2 g2 [eb1,g2,bb2,db3]@3 ~ [g2,bb2,eb3]@3 ab2@2 ab3@2 ab2@2 ~ ab2 ~ ab3 ab2 ab3 ab2 ab3 ab2 ab3 [ab2,ab3] ab2 [ab2,ab3]!2 ab3 [ab2,ab3]!2 [ab2,c3,eb3,ab3]@4 ~@9, ~@26 c3 ~@3 [ab1,eb2]@14 ~@4, ~@33 ab3 ~@14]/6", // Bbm Fm Bb5 Dbdim F Fm C G5 …
})).s("gm_piano").gain(0.4)

// chords · piano · soft notes
const piano_soft_2 = note("<~@21 A B C D E F G H I J K L M N M O ~@26>".pickRestart({
  A: "ab2 c3 eb3 ab3 c4 ab3 eb3 c3 ab2 c3 eb3 ab3 c4 ab3 eb3 c3",
  B: "g2 bb2 eb3 g3 bb3 g3 eb3 bb2 eb2 g2 bb2 eb3 g3 eb3 db3 bb2",
  C: "ab2 c3 eb3 ab3 g2 bb2 eb3 g3 ab2 c3 eb3 ab3 ab2 db3 f3 ab3",
  D: "eb2 ab2 c3 eb3 ab3 eb3 c3 ab2 eb2 g2 bb2 eb3 ab3 f3 c3 ab2",
  E: "f2 ab2 c3 f3 ab3 f3 c3 ab2 e2 g2 c3 e3 f2 ab2 c3 f3", F: "e2 g2 bb2 e3 f2 ab2 c3 f3 e2 g2 db3 g3 ab3 f3 c3 ab2",
  G: "bb2 eb3 g3 bb3 g3 eb3 bb2 g2 bb2 d3 f3 ab3 f3 d3 bb2 d3",
  H: "eb2 g2 bb2 eb3 g3 eb3 bb2 g2 eb2 g2 bb2 eb3 g3 eb3 g3 bb3",
  I: "ab2 c3 eb3 ab3 c4 ab3 eb3 c3 g2 bb2 db3 eb3 ab2 c3 eb3 ab3",
  J: "g2 bb2 e3 g3 e3 db3 bb2 g2 ab2 c3 f3 ab3 f3 c3 ab2 f2", K: "e2 g2 bb2 e3 f3 c3 ab2 f2 ab2 c3 f3 ab3 f3 d3 bb2 ~",
  L: "~@12 c3 ab2 eb2 ab2", M: "ab2 c3 eb3 ab3 g2 bb2 eb3 g3 ab2 c3 eb3 ab3 bb2 eb3 g3 bb3",
  N: "ab2 c3 eb3 ab3 c4 ab3 eb3 c3 eb2 ab2 c3 eb3 ab3 eb3 c3 ab2", O: "ab2 c3 eb3 ab3 c4 ab3 eb3 c3 g2 bb2 eb3 ~@5",
})).s("gm_piano").gain(0.2)

stack(piano, piano_soft, piano_2, piano_soft_2)

More by Traditional