Strudelify

please come home for christmas

Charles Brown

KeyD♭ majorTempo90 bpm
0:00/0:00
// please come home for christmas — Charles Brown
// 90 bpm, 12/8, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5859196; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 42 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/6)

// 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 B C D E F G J K L M B N L O H I B C D E P Q R S B C D T U V W X@2>".pickRestart({
  A: "[b3,b4]!3 ~", B: "[ab5,b5,e6]!6 [gb5,b5,eb6]!6, e2@11 ~ b2@11 ~",
  C: "[ab5,b5,d6]!9 [e2,ab5,b5,d6] [gb2,ab5,b5,d6] [ab2,ab5,b5,d6], e2@11 ~ b2@6 ~@6", // Abdim E7 Abm7b5 Abdim
  D: "[e5,a5,db6]!9 [a2,e5,a5,db6] [ab2,e5,a5,db6] [a2,e5,a5,db6], a2@11 ~ a2@6 ~@6", // A Amaj7 A
  E: "[e5,g5,db6]!10 [bb2,e5,g5,db6] [b2,e5,g5,db6], bb2@11 ~ bb2@8 ~@4", // Dbdim Bbdim Dbm7b5
  F: "[ab5,b5,e6]!4 [gb2,ab5,b5,e6] [ab2,ab5,b5,e6] [a5,db6,e6]!4 [ab2,a5,db6,e6] [gb2,a5,db6,e6], e2@2 ~ a2@2 ~", // E A Amaj7 Gbm7
  G: "[ab5,b5,e6]!5 [e2,ab5,b5,e6] [ab5,db6,e6]!6, e2@9 ~@3 db2@11 ~", // E Dbm
  H: "[bb5,db6,e6]!10 [ab2,bb5,db6,e6] [bb2,bb5,db6,e6], gb2@11 ~ gb2@8 ~@4", // Bbdim Bbm7b5 Bbdim
  I: "[b5,eb6,gb6]!6 [a5,eb6,gb6]!6, b2 [b1,b2]!3", // B Ebdim B
  J: "[bb5,db6,e6]!5 [bb2,bb5,db6,e6] [b5,eb6,gb6]!3 [b1,a5,eb6,gb6] [db2,a5,eb6,gb6] [eb2,a5,eb6,gb6], gb2@3 ~ b2@2 ~@2", // Bbdim B B7 Ebm7b5 Ebdim
  K: "[ab5,b5,e6]!6 [ab5,b5,d6]!3 [e2,ab5,b5,d6] [gb2,ab5,b5,d6] [ab2,ab5,b5,d6], e2!3 ~", // E Abdim E7 Abm7b5 Abdim
  L: "[e5,a5,db6]!12, a2@11 ~ a2@11 ~", M: "[e5,a5,c6]!10 [ab2,e5,a5,c6] [gb2,e5,a5,c6], a2@11 ~ a2@8 ~@4",
  N: "[ab5,b5,d6]!9 [e2,ab5,b5,d6] [gb2,ab5,b5,d6] [ab2,ab5,b5,d6], e2@11 ~ e2@6 ~@6", // Abdim E7 Abm7b5 Abdim
  O: "[e5,a5,c6]!10 [a2,e5,a5,c6] [ab2,e5,a5,c6], a2@11 ~ a2@8 ~@4", // Am
  P: "[ab5,b5,e6]!6 [gb5,c6,eb6]!6, e2@11 ~ ab2@11 ~", // E Cdim
  Q: "[ab5,db6,e6]!3 [ab5,d6,e6]!3 [a5,db6,e6]!3 [gb5,db6,e6]!3, db3 b2 a2 bb2", // Dbm E7 A Gb7
  R: "[ab5,b5,e6]!3 [ab5,db6,e6]!3 [bb5,db6,e6]!3 [a5,b5,eb6]!3, b2 db3 gb2 b2", // E Dbm Bbdim B7
  S: "[ab5,b5,e6]!3 [e2,ab5,b5,e6] [eb2,ab5,b5,e6] [db2,ab5,b5,e6] [gb5,b5,eb6]!3 [gb5,a5,eb6]!3, e2 ~ b1!2", // E Emaj7 Dbm7 B Ebdim
  T: "[e5,g5,db6]!10 [bb1,bb2,e5,g5,db6] [b1,b2,e5,g5,db6], bb2@11 ~ bb2@8 ~@4", // Dbdim Bbdim Dbm7b5
  U: "[ab5,b5,e6]!6 [gb5,c6,eb6]!6, [e1,e2]@11 ~ [ab1,ab2]@11 ~", // E Cdim E Ab
  V: "[ab5,db6,e6]!3 [ab5,d6,e6]!3 [a5,db6,e6]!3 [gb5,db6,e6]!3, [db2,db3] [b1,b2] [a1,a2] [bb1,bb2]", // Dbm E7 A Gb7 Db B A Bb
  W: "[ab5,b5,e6]!3 [ab5,db6,e6]!3 [bb5,db6,e6]!3 [a5,b5,eb6]!3, [b1,b2] [db2,db3] [gb1,gb2] [b1,b2]", // E Dbm Bbdim B7 B Db Gb B
  X: "[[e2,e3,ab5,b5,e6]@7 ~ [a1,a2,e3,a3,db4,e4,a4,db5]@2 [a1,a2,e3,a3,db4,e4,a4,db5]@2 ~ [a1,a2,e3,a3,db4,e4,a4,db5]@2 ~@2 [b4,e5]@13 ~@18, ~@5 [e1,e2,ab3,b3]@5 ~@6, ~@8 [e4,ab4]@7 ~@9]/2", // E A E5 E
})).s("gm_piano").gain(0.3)

// bass · electric bass pick · "Bass Guitar"
const bass = note("<~ A B C D E F G H A B C D E F I J K L A M K N G H A B C D O P Q R A B C S T U V W@2>".pickRestart({
  A: "e2 b2", B: "e2@6 b2@3 e2 gb2 ab2", C: "a2@6 a2@3 a2 ab2 a2", D: "bb2@6 bb2@4 bb2 b2",
  E: "e2@4 gb2 ab2 a2@4 ab2 gb2", F: "e2@5 e2 db2@6", G: "gb2@6 gb2@4 ab2 bb2", H: "b2 [b1,b2]!3",
  I: "gb2@5 bb2 b2@3 b1 db2 eb2", J: "e2@3 e2@3 e2@3 e2 gb2 ab2", K: "a2!2", L: "a2@6 a2@4 ab2 gb2",
  M: "e2@6 e2@3 e2 gb2 ab2", N: "a2@6 a2@4 a2 ab2", O: "e2 ab2", P: "db3 b2 a2 bb2", Q: "b2 db3 gb2 b2",
  R: "e2@3 e2 eb2 db2 b1@3 b1@3", S: "bb2@6 bb2@4 [bb1,bb2] [b1,b2]", T: "[e1,e2] [ab1,ab2]",
  U: "[db2,db3] [b1,b2] [a1,a2] [bb1,bb2]", V: "[b1,b2] [db2,db3] [gb1,gb2] [b1,b2]",
  W: "[[e2,e3]@7 ~ [a1,a2]@2 [a1,a2]@2 ~ [a1,a2]@2 [e1,e2]@15 ~@18]/2", // E A E
})).s("gm_electric_bass_pick").gain(0.25)

stack(piano, bass)