Strudelify

Happy Christmas

Neil Diamond

KeyA majorTempo79 bpm
0:00/0:00
// Happy Christmas — Neil Diamond
// 79 bpm, 6/8, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 pad halo (copy of ch 3 pad new age)
// note: Full arrangement: all 81 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(79/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.

// other · pad new age
const pad_new_age = note(`<
  ~@16 A B C D E F G H ~ I J K L I M N O P Q R S P T U V B C D E F G H ~ I J K L I M N O P Q R S P T U V B C D E F G H ~
  I J K ~@5
>`.pickRestart({
  A: "~@2 d4 b4!3", B: "a4@4 g4@19 ~", C: "~@4 g4!2 g4@2 a4@2 b4@2", D: "a4@11 ~", E: "~@2 a4!2 g4 f#4",
  F: "e4@4 e4@19 ~", G: "~@2 e4!2 d4!2", H: "d4@11 ~", I: "a4@11 ~ g#4@11 ~", J: "b4@11 ~ a4@11 ~",
  K: "b4@11 ~ a#4@11 ~", L: "c#5@11 ~ b4@11 ~", M: "f#4@11 ~ g#4@11 ~", N: "a4 g#4", O: "b4@12 a4@11 ~",
  P: "d5@11 ~ c#5@11 ~", Q: "e5@11 ~ d5@11 ~", R: "e5@11 ~ d#5@11 ~", S: "f#5@11 ~ e5@11 ~", T: "b4@11 ~ c#5@11 ~",
  U: "d5 c#5", V: "e5@2 d4 b4!3, ~@12 d5@11 ~",
})).s("gm_pad_new_age").gain(0.8)

// other · pad new age · soft notes
const pad_new_age_soft = note(`<
  ~@76
  [c#5@11 ~ b4@11 ~]
  [a4@11 ~ g#4@11 ~]
  [f#4@11 ~ g#4@11 ~]
  [a4@11 ~ g#4@11 ~]
  [b4@11 ~ a4@11 ~]
>`).s("gm_pad_new_age").gain(0.08)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@17 A@2 B@2 C D E F G@2 ~@14 A@2 B@2 C D E F G@2 ~@14 H I J K L M N O P@2 Q@2 ~@4
>`.pickRestart({
  A: "[b4,d5,g5]/2", B: "[c#5,e5,a5]/2", C: "[g4,b4,e5]", D: "[g4,b4,d5]", E: "[f#4,a4,d5] a5", F: "d6@3 c#6@2 b5",
  G: "[a5@23 ~]/2", H: "[d5,d6]@3 [d5,d6] [e5,e6] [d5,d6]", I: "[b4,b5]@11 ~", J: "[e5,e6]@3 [e5,e6] [a5,a6] [e5,e6]",
  K: "[c#5,c#6]@11 ~", L: "[d5,d6]", M: "[f#5,f#6]", N: "[f#5,a5,d6]", O: "[g#5,b5,e6]", P: "[[a5,c#6,e6]@23 ~]/2",
  Q: "[[b5,d6,f#6]@23 ~]/2", // Bm
})).s("gm_string_ensemble_1").gain(0.29)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@77 A@2 B@2>".pickRestart({
  A: "[[g#5,b5,e6]@23 ~]/2", B: "[[a5,c#6,e6]@23 ~]/2",
})).s("gm_string_ensemble_1").gain(0.21)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~ A B@2 C D E A B F G H F B I F G ~@8 A B@2 C D E A B F G C F B I F G ~@8 A B@2 C D E A B F G C F B I F G ~@8 A B J
  ~@5
>`.pickRestart({
  A: "c#5!12 b4!12", B: "d5!12 c#5!12", C: "e5!12 d5!12", D: "a4!12 g#4!12", E: "f#4!12 g#4!12", F: "f#5!12 e5!12",
  G: "g5!12 f#5!12", H: "e5!12 d#5!12", I: "b4!12 c#5!12", J: "d5!9 ~@15",
})).s("gm_acoustic_guitar_nylon").gain(0.29).pan(0.3)

// other · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@75
  [~@9 d5!3 c#5!12]
  [e5!12 d5!12]
  [a4!12 g#4!12]
  [f#4!12 g#4!12]
  [c#5!12 b4!12]
  [d5!12 c#5!12]
>`).s("gm_acoustic_guitar_nylon").gain(0.04).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A@2 B@2 C@2 A@2 D@2 E@2 A@2 D@2 F@2 A@2 E@2 D G A@2 B@2 C@2 A@2 D@2 E@2 A@2 D@2 F@2 A@2 E@2 D G A@2 B@2 C@2 A@2 D@2
  E@2 A@2 D@2 F@2 A@2 E@2 D H A@2 B I ~@4
>`.pickRestart({
  A: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!4 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!4", // A
  B: "[b2,f#3,b3,d4,f#4]@2 [b2,f#3,b3,d4,f#4]!4 [b2,f#3,b3,d4,f#4]@2 [b2,f#3,b3,d4,f#4]!4", // Bm
  C: "[b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4]!4 [b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4]!4", // E
  D: "[a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!4 [a2,d3,a3,d4,f#4]@2 [a2,d3,a3,d4,f#4]!4", // D
  E: "[e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4]!4 [e2,b2,e3,g3,b3,e4]@2 [e2,b2,e3,g3,b3,e4]!4", // Em
  F: "[g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]!4 [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]!4", // G
  G: "[e2,b2,e3,g#3,d4,e4]@2 [e2,b2,e3,g#3,d4,e4]!4 [e2,b2,e3,g#3,d4,e4]@2 [e2,b2,e3,g#3,d4,e4]!4", // E7
  H: "[e2,b2,e3,g#3,d4,e4]@2 [e2,b2,e3,g#3,d4,e4]!4 [e2,b2,e3,g#3,d4,e4]@2 [e2,b2,e3,g#3,d4,e4]@2 [e2,b2,e3,g#3,d4,e4]@2", // E7
  I: "[b2,f#3,b3,d4,f#4]@2 [b2,f#3,b3,d4,f#4]!4 [b2,f#3,b3,d4,f#4]@2 [b2,f#3,b3,d4,f#4] ~@3", // Bm
})).s("gm_acoustic_guitar_steel").gain(0.29).pan(0.8)

// chords · acoustic guitar steel · soft notes · Bm E A
const acoustic_guitar_steel_2 = note(`<
  ~@76
  [~@9 [b2,f#3,b3,d4,f#4]!3]
  [[b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4]!4 [b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4]!4]!2
  [[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!4 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!4]!2
>`).s("gm_acoustic_guitar_steel").gain(0.13).pan(0.8)

// bass · electric bass finger
const bass = note(`<
  ~@8 A B C D E F G H I J K L M N O P Q ~@7 A R S D T U V H I J K L M N O P Q U W X Y D Z F G R S D T U V H I J K L M N
  O P Q U AA AB AC D AD AE ~
>`.pickRestart({
  A: "~@3 a2 b2 c#3", B: "d3@19 ~ d3@2 a2@2", C: "d3@4 d3 d#3", D: "e3@11 b2", E: "e3@4 e3 g3", F: "a3@11 e3",
  G: "a3@11 ~ a2@4 b2@4 c#3@4", H: "d3@11 a2", I: "d3@11 ~ d3@4 e3@4 f#3@4", J: "g3@19 ~ g3@2 d3@2",
  K: "g3 g3@3 g3 g#3", L: "a3@19 ~ a3@2 e3@2", M: "a3@4 g3 f#3", N: "e3@4 e2 f#2", O: "g2 g2@3 g2 a2", P: "f#3@4 f#3!2",
  Q: "e3@11 ~ e2@4 f#2@4 g#2@4", R: "d3@2 d3@9 a2", S: "d3 d3@3 d3 d#3", T: "e3@4 d3 b2", U: "a2@11 e3",
  V: "a2@11 ~ a2@4 b2@4 c#3@4", W: "a3@11 ~ a3@11 ~", X: "b3@11 f#3", Y: "b3@11 ~ b3@11 ~",
  Z: "e3@11 ~ e3@4 f#3@4 g#3@4", AA: "a3@19 ~ a#2@4", AB: "b2@11 f#2", AC: "b2@4 b2@11 ~ f#3@4 f#3@4",
  AD: "e3@4 e3@11 ~ e3@4 b2@4", AE: "a2@11 ~",
})).s("gm_electric_bass_finger").gain(0.29)

// bass · electric bass pick
const bass_2 = note(`<
  ~@8 A B C D E F G H I J K L M N O P Q ~@7 A R S D T U V H I J K L M N O P Q U W X Y D Z F G R S D T U V H I J K L M N
  O P Q U AA AB ~@5
>`.pickRestart({
  A: "~@3 a1 b1 c#2", B: "d2@19 ~ d2@2 a1@2", C: "d2@4 d2 d#2", D: "e2@11 b1", E: "e2@4 e2 g2", F: "a2@11 e2",
  G: "a2@11 ~ a1@4 b1@4 c#2@4", H: "d2@11 a1", I: "d2@11 ~ d2@4 e2@4 f#2@4", J: "g2@19 ~ g2@2 d2@2",
  K: "g2 g2@3 g2 g#2", L: "a2@19 ~ a2@2 e2@2", M: "a2@4 g2 f#2", N: "e2@4 e1 f#1", O: "g1 g1@3 g1 a1", P: "f#2@4 f#2!2",
  Q: "e2@11 ~ e1@4 f#1@4 g#1@4", R: "d2@2 d2@9 a1", S: "d2 d2@3 d2 d#2", T: "e2@4 d2 b1", U: "a1@11 e2",
  V: "a1@11 ~ a1@4 b1@4 c#2@4", W: "a2@11 ~ a2@11 ~", X: "b2@11 f#2", Y: "b2@11 ~ b2@11 ~",
  Z: "e2@11 ~ e2@4 f#2@4 g#2@4", AA: "a2@19 ~ a#1@4", AB: "b1@11 ~",
})).s("gm_electric_bass_pick").gain(0.52)

// bass · electric bass pick · soft notes
const bass_soft = note("<~@75 [~@11 f#1] [b1@4 b1@11 ~ f#2@4 f#2@4] [e2@11 b1] [e2@4 e2@11 ~ e2@4 b1@4] [a1@11 ~] ~>")
  .s("gm_electric_bass_pick").gain(0.23)

// other · tubular bells
const tubular_bells = note(`<
  ~@9 A B C A D E A B ~@8 F D@2 C G H F D A B C A D E A B ~@8 F D@2 C G H F D A B C A D E A B ~@8 F D@2 C G H F D
>`.pickRestart({
  A: "f#5@11 ~", B: "g5@11 ~", C: "e5@11 ~", D: "d5@11 ~", E: "b4@11 ~", F: "c#5@11 ~", G: "a4@11 ~", H: "f#4@11 ~",
})).s("gm_tubular_bells").gain(0.29)

// drums · kick
const kick = s("bd").struct("<~@8 A B@7 C D@7 C@2 ~@6 A B@7 C D@7 C B@7 E B@7 C D@7 F B@3 G B@2 ~@2>".pickRestart({
  A: "~@11 x", B: "x ~@10 x", C: "x", D: "x ~ x ~@8 x", E: "x!3 ~@3", F: "x!2", G: "x ~@7 x ~ x!2",
})).gain(0.66)

// drums · snare
const snare = s("sd").struct("<~@17 A@7 B ~@16 A@7 B A@7 ~ A@7 ~ A@7 C A@6 ~@2>".pickRestart({
  A: "~ x", B: "~ x!3 ~@2", C: "~ x!5",
})).gain(0.66)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A ~@7 B ~@15 C ~@7 B ~@7 D ~@7 C ~@16>".pickRestart({
  A: "~@10 x!14", B: "~@7 x!2 ~ x ~", C: "x ~ x ~ x ~@3 x ~ x ~@3 x!10", D: "~@14 x!10",
})).gain(0.46)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@16 A ~@23 B ~@15 B ~@7 B ~@16>".pickRestart({
  A: "~ x!9 ~@14", B: "~@12 x!2 ~@10",
})).gain(0.26)

// drums · crash
const crash = s("cr").struct("<~@17 A ~@6 A@2 ~@15 A ~@6 A@2 ~@7 A ~@7 A ~@7 A ~@7>".pickRestart({
  A: "x",
})).gain(0.66)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9 A@7 ~ B C@6 D A@7 B A@7 ~ B C@6 D E C@6 F E C@6 ~ B C@6 G H G@2 I ~@4
>`.pickRestart({
  A: "~ x", B: "~@3 x!3", C: "x!6", D: "~ x!2 ~@3", E: "~ x!5", F: "x!3 ~@3", G: "x!12", H: "~ x!11", I: "x!2 ~@10",
})).gain(0.66)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@76 [~@2 x!10] [x!12]!2 ~@2>").gain(0.33)

stack(
  pad_new_age, pad_new_age_soft, string_ensemble_1, string_ensemble_1_soft, acoustic_guitar_nylon,
  acoustic_guitar_nylon_2, acoustic_guitar_steel, acoustic_guitar_steel_2, bass, bass_2, bass_soft, tubular_bells, kick,
  snare, mid_tom, mid_tom_soft, crash, tambourine, tambourine_soft
)

More by Neil Diamond