Strudelify

Carol of the Bells

Larry Clark

KeyA minorTempo172 bpm
0:00/0:00
// Carol of the Bells — Larry Clark
// 172 bpm, 3/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5903585; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 167 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(172/3)

// 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 · acoustic guitar nylon · "Classical Guitar 2"
const acoustic_guitar_nylon = note(`<
  A@2 B ~@15 C@4 D@4 ~@15 E F G H I J@2 K L M L F G H I N J L@2 O P Q R L S L S T@2 U@2 V@2 W@2 T@2 U@2 X L C@2 ~@14 Y@8
  O P Q R L S L S Z@2 AA AB@2 AC AD AE@2 AF@7 AG@6 AH@6 AI@5 AJ@5 ~ AK@8 AL@5 AM
>`.pickRestart({
  A: "b3/2", B: "a3@5 ~@11", C: "c3@5 b2@3 c3@3 a2@5", D: "e3@5 d3@3 e3@3 c3@5", E: "a3@3 b3@2 c4@3 d4@3 d4@2 d4@3",
  F: "e4", G: "e4@8 d4@3 c4@5", H: "b3@11 g3@5", I: "g3@8 a3@3 g3@5", J: "e3@11 e3@5", K: "g#3@11 e3@5", L: "e3",
  M: "b3@11 g#3@5", N: "a3@8 b3@3 a3@5", O: "e4@5 e4@3 e4@3 e4@2 d4@3", P: "c4@5 c4@3 c4@3 a3@2 a3@3",
  Q: "a3@5 a3@3 a3@3 c4@2 a3@3", R: "a3@5 a3@3 a3@3 e3@5", S: "f#3@5 g#3@5 ~ a3@5", T: "a3/2", U: "g3/2", V: "f3/2",
  W: "[e3@27 e3@5]/2", X: "f3", Y: "c4@5 b3@3 c4@3 a3@5", Z: "e3@3 f#3@2 g#3@3 a3@3 b3@2 c4@3",
  AA: "a3@3 b3@2 a3@3 b3@3 c4@2 d4@3", AB: "e4/2", AC: "~ e4@7", AD: "~@4 d4@5 c4@7", AE: "[~@5 b3@23 g3@4]/2",
  AF: "[~@7 d3@23 g3@11 ~ e3@34 e3@34 f#3@2]/7",
  AG: "[~@10 g#3@23 e3@6 f#3@5 g#3@6 a3@6 b3@5 c4@6 a3@6 b3@6 a3@5 b3@6 c4@6]/6",
  AH: "[d4@6 e4@34 e4@17 d4@6 c4@11 b3@22]/6", AI: "[~ g3@11 ~ e3@34 e3@33]/5", AJ: "[~@2 e3@69 ~@9]/5",
  AK: "[~@3 e3@8 d3@8 c3@8 d3@8 e3@8 d3@8 e3@8 g3@5]/8", AL: "[~@6 a3@32 c#4@32 c#4@5 ~ a3@2 a3@2]/5",
  AM: "~ a3@3 a3@2 a3@5 ~@5",
})).s("gm_acoustic_guitar_nylon").gain(0.25)

// other · acoustic guitar nylon · "Classical Guitar 3"
const acoustic_guitar_nylon_2 = note(`<
  A@2 B@8 ~@32 C@2 D@2 C@2 E F G H C@2 D@2 C I C@2 J K L M N O N O P@2 Q@2 R@2 S@2 P@2 Q@2 T N U@2 V W ~@2 X ~ Y Z P@2
  ~@8 N AA AB AC J K L M AD AE AD AE E@2 AF AG@5 AH@2 AI@8 AJ@4 AK@6 AL@5 AM@5 ~@9 AN@5 AO
>`.pickRestart({
  A: "d3/2", B: "c3@5 b2@3 c3@3 a2@5", C: "c4@5 b3@3 c4@3 a3@5", D: "b3@5 a3@3 b3@3 g3@5",
  E: "e3@3 f#3@2 g#3@3 a3@3 b3@2 c4@3", F: "d4@3 e4@2 d4@5 ~ c4@5", G: "g#3@11 b3@5", H: "c4@5 b3@5 ~ a3@5",
  I: "e3@3 f#3@2 g#3@3 a3@3 b3@2 g#3@3", J: "c4@5 c4@3 c4@3 c4@2 a3@3", K: "a3@5 a3@3 a3@3 f3@2 e3@3",
  L: "f3@5 f3@3 f3@3 a3@2 f3@3", M: "e3@5 e3@3 e3@3 c3@5", N: "e3", O: "f#3@5 g#3@5 ~ a3@5", P: "a3/2", Q: "g3/2",
  R: "f3/2", S: "[e3@27 e3@5]/2", T: "f3", U: "[e3@27 a3@5]/2", V: "c4@11 d4@5", W: "e4@8 e4@3 d4@5",
  X: "d4@8 e4@3 d4@5", Y: "c4", Z: "b3@11 c4@5", AA: "f#3", AB: "g3@5 f3@5 ~ e3@5", AC: "a3@3 g3@2 f#3@5 ~ e3@5",
  AD: "e2", AE: "f#2@5 g#2@5 ~ a2@5", AF: "a3@3 b3@2 a3@3 b3@3 a3@2 a3@3", AG: "[c4@34 c4@34 ~ b3@11]/5",
  AH: "[a3@11 ~ d3@11 a2@9]/2", AI: "[~@3 b2@23 b2@11 c3@23 d3@11 c3@23 b2@34]/8",
  AJ: "[~ f#2@34 a3@6 b3@6 a3@5 b3@6 a3@6]/4", AK: "[a3@6 c4@34 c4@34 b2@11 ~ a2@6 b2@4]/6",
  AL: "[~ g2@11 ~ b2@11 a2@6 b2@6 g2@11 a2@33]/5", AM: "[~@2 a3@69 ~@9]/5", AN: "[~@6 e4@32 e4@32 e4@5 ~ a3@2 a3@2]/5",
  AO: "~ a3@3 a3@2 a3@5 ~@5",
})).s("gm_acoustic_guitar_nylon").gain(0.3)

// other · acoustic guitar nylon · "Classical Guitar 3" · soft notes
const acoustic_guitar_nylon_3 = note("<~@18 A@8 ~@127 B@8 ~@6>".pickRestart({
  A: "c3@5 b2@3 c3@3 a2@5", B: "[~@3 c4@8 b3@8 a3@8 b3@8 c4@8 b3@8 c4@8 d4@5]/8",
})).s("gm_acoustic_guitar_nylon").gain(0.2)

// other · acoustic guitar nylon · "Classical Guitar 4"
const acoustic_guitar_nylon_4 = note(`<
  A@2 B C D E D E F E G ~@7 G ~@6 H I J K L M N O P I J K L Q R F@2 S T U@2 V W X Y Z Y S T U@2 AA T AB F ~@8 AC@2 AD@2
  AC@2 AE@2 AC@2 AD@2 AC AE AF@2 AG@2 ~@2 AH ~ AI AJ A@2 ~@12 B@2 AK B ~@4 AL@2 AJ AM@2 AN@8 AO@5 AP@5 AQ@5 AR@5 AS@5
  ~@11 AT AU AV AW
>`.pickRestart({
  A: "e2/2", B: "e3", C: "d3", D: "c3", E: "b2", F: "a2", G: "a2@5 ~@11", H: "~@11 a2@5", I: "c3@11 d3@5",
  J: "e3@8 f3@3 e3@5", K: "d3@11 b2@5", L: "g2@8 a2@3 b2@5", M: "c3@11 a2@5", N: "a2@8 g#2@3 a2@5", O: "b2@11 g#2@5",
  P: "e2@11 a2@5", Q: "c3@8 b2@3 g2@5", R: "g#2@8 f#2@3 g#2@5", S: "c3@11 c3@5", T: "e3@11 e3@5", U: "g3@11 g3@5",
  V: "a3@11 g3@5", W: "f3@11 f3@5", X: "d3@11 b3@5", Y: "c4@5 b3@5 ~ a3@5", Z: "e3@11 b3@5", AA: "a3@11 a3@5",
  AB: "a3@11 e3@5", AC: "c3@5 b2@3 c3@3 a2@5", AD: "b2@5 a2@3 b2@3 g2@5", AE: "g#2@5 f#2@3 g#2@3 e2@5", AF: "a2/2",
  AG: "e3/2", AH: "b2@8 c3@3 b2@5", AI: "f2", AJ: "e2", AK: "a2@11 g2@5", AL: "[~@5 e3@27]/2",
  AM: "[~@11 g3@11 ~ e3@9]/2", AN: "[~@2 c3@34 ~ g2@34 g2@34 ~ a2@22]/8", AO: "[~ g2@11 f2@34 e2@34]/5",
  AP: "[~ e2@46 e3@11 d3@11 ~ c3@10]/5", AQ: "[~ b2@6 c3@6 a2@11 c3@11 b2@6 c3@6 a2@11 g2@22]/5",
  AR: "[~ f2@11 ~ e2@34 e2@33]/5", AS: "[~@2 e2@45 c3@11 ~ b2@11 ~@10]/5", AT: "~@3 a3@5", AU: "~ g3@11 f3@4",
  AV: "~ e3@5 a3@5 ~ a2@2 a2@2", AW: "~ a2@3 a2@2 a2@5 ~@5",
})).s("gm_acoustic_guitar_nylon").gain(0.3)

// other · acoustic guitar nylon · "Classical Guitar 4" · soft notes
const acoustic_guitar_nylon_5 = note("<~@94 A B C D C D E F@3 G H ~@47 I@8 ~@6>".pickRestart({
  A: "a3", B: "g3", C: "f3", D: "e3", E: "d3", F: "a2", G: "a2@11 a2@5", H: "a2@11 e3@5",
  I: "[~@3 a3@8 g3@8 f3@8 e3@8 f3@8 e3@8 d3@8 e3@5]/8",
})).s("gm_acoustic_guitar_nylon").gain(0.2)

// bass · acoustic bass
const bass = note(`<
  A@2 B C D E D E F E G ~@7 G ~@7 A@2 H@2 I@2 J@2 A@2 H@2 K L M N O P Q@2 R S T P@3 O P Q@2 U P V N ~@22 A@4 ~@2 W ~ K L
  A@2 ~@12 N@2 X N ~@4 Y@2 L Z@2 AA@8 AB@5 AC@5 AD@5 AE@5 AF@5 ~@11 AG AH AI AJ
>`.pickRestart({
  A: "a1/2", B: "a2", C: "g2", D: "f2", E: "e2", F: "d2", G: "a1@5 ~@11", H: "g1/2", I: "f1/2", J: "[e1@27 e1@5]/2",
  K: "f1", L: "e1", M: "a1@5 c2@5 ~ b1@5", N: "a1", O: "c2@11 c2@5", P: "e2@11 e2@5", Q: "g2@11 g2@5", R: "a2@11 g2@5",
  S: "f2@11 f2@5", T: "e2@11 b1@5", U: "a2@11 a2@5", V: "a2@11 e2@5", W: "g1", X: "d2@11 d2@5", Y: "[~@5 e2@27]/2",
  Z: "[~@11 g2@11 ~ e2@9]/2", AA: "[~@2 c2@34 ~ g1@34 g1@34 ~ a1@22]/8", AB: "[~ g1@11 f1@34 e1@34]/5",
  AC: "[~ e1@46 e2@11 d2@11 ~ c2@10]/5", AD: "[~ b1@6 c2@6 g1@11 c2@11 b1@6 c2@6 a1@11 g1@22]/5",
  AE: "[~ f1@11 ~ e1@34 f1@33]/5", AF: "[~@2 e1@45 c2@11 ~ b1@11 ~@10]/5", AG: "~@3 a2@5", AH: "~ g2@11 f2@4",
  AI: "~ e2@5 a2@5 ~ a1@2 a1@2", AJ: "~ a1@3 a1@2 a1@5 ~@5",
})).s("gm_acoustic_bass").gain(0.4)

// bass · acoustic bass · soft notes
const bass_soft = note("<~@94 A B C D B D E F@3 G H ~@47 I@8 ~@6>".pickRestart({
  A: "a2", B: "g2", C: "f2", D: "e2", E: "d2", F: "a1", G: "a1@11 a1@5", H: "a1@11 e2@5",
  I: "[~@3 a2@8 g2@8 f2@8 e2@8 f2@8 e2@8 d2@8 e2@5]/8",
})).s("gm_acoustic_bass").gain(0.2)

stack(
  acoustic_guitar_nylon, acoustic_guitar_nylon_2, acoustic_guitar_nylon_3, acoustic_guitar_nylon_4,
  acoustic_guitar_nylon_5, bass, bass_soft
)