Strudelify

Dear Santa (Oh Darlin)

The Beatles

KeyA majorTempo111 bpm
0:00/0:00
// Dear Santa (Oh Darlin) — The Beatles
// 111 bpm, 12/8, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 52 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(111/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 · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note(`<
  A B C D E F@2 G H B C D E F@2 G I J K L@2 M@2 N O B C D E F@2 G I J K L@2 M@2 N O B C D E F@2 G P@4
>`.pickRestart({
  A: "~ c5@3, ~@5 [c4,e4,g#4]@19", B: "~@3 [c#4,e4,a4,c#5] ~@5 [c#4,e4,a4,c#5] ~@2",
  C: "~@3 [e4,g#4,b4,e5] ~@5 [e4,g#4,b4,e5] ~@2", D: "~@3 [a3,c#4,f#4,a4] ~@5 [a3,c#4,f#4,a4] ~@2",
  E: "~@3 [d4,f#4,a4,d5] ~@5 [d4,f#4,a4,d5] ~@2", F: "~@3 [b3,d4,f#4,b4] ~@5 [e4,g#4,b4,e5] ~@2",
  G: "~@3 [c#4,e4,a4,c#5] ~@5 [d4,f#4,a4,d5] ~@2", H: "~ [c#4,e4,a4,c#5] ~@2",
  I: "~@3 [c#4,e4,a4,c#5] ~@5 [c#4,e4,g4,c#5] ~@2", // A C#dim
  J: "d4 ~ d5 ~ a4 ~ f#4 ~ a4 ~ f#4 ~ d4 ~ d5 ~ a4 ~ f#4 ~ a4 ~ f#4 ~",
  K: "f4 ~ f5 ~ c5 ~ a4 ~ c5 ~ a4 ~ f4 ~ f5 ~ c5 ~ a4 ~ c5 ~ a4 ~",
  L: "a3 ~ a4 ~ e4 ~ c#4 ~ e4 ~ c#4 ~ a3 ~ a4 ~ e4 ~ c#4 ~ e4 ~ c#4 ~",
  M: "b3 ~ b4 ~ f#4 ~ d#4 ~ f#4 ~ d#4 ~ b3 ~ b4 ~ f#4 ~ d#4 ~ f#4 ~ d#4 ~",
  N: "e4 ~ e5 ~ b4 ~ g#4 ~ b4 ~ g#4 ~ f4 ~ f5 ~ c5 ~ a4 ~ c5 ~ a4 ~", O: "e4@6 ~@7 c5@11, ~ [c4,e4,g#4]",
  P: "[~@3 [c4,g#4]@2 [c#4,a4]@34 ~@9]/4", // Fm F#m
})).s("gm_electric_guitar_jazz").gain(0.27).pan(0.2)

// chords · piano
const piano = note(`<
  A B C D E F G H I J K L M N O H P Q R S@2 T U V W J K L M N O H P Q R S@2 T U V W J K L M N O H X@4
>`.pickRestart({
  A: "~ [c5,e5]@3, ~@5 [e3,b3,g#4]@19", // C E
  B: "[c#4,e4,a4]!5 [f#2,c#4,e4,a4] [c#4,e4,a4]!3 [c#2,c#4,e4,a4] [d2,c#4,e4,a4] [d#2,c#4,e4,a4], a1@10 e2 ~ e2@6 ~@6", // A F#m7 A
  C: "[e4,g#4,b4]!5 [c#2,e4,g#4,b4] [e4,g#4,b4]!5 [b1,e4,g#4,b4], e2@10 b1 ~ b1@6 c#2@4 ~@2, ~@18 b1 ~@5", // E C#m7 E
  D: "[e4,f#4,a4]!5 [a2,e4,f#4,a4] [e4,f#4,a4]!6, f#2@10 f#2 ~ f#2@6 a1@6", // F#m7
  E: "[d4,f#4,a4]!5 [f#2,d4,f#4,a4] [d4,f#4,a4]!3 f#2@2 d2, d2@10 e2 ~ a2@6 [d4,f#4,a4]@6, ~@18 e2 ~@5", // D
  F: "[d4,f#4,a4]!6 [d4,e4,g#4]!6, b1 e2", G: "[d4,f#4,a4]!6 [d4,e4,g#4]!4 ~ g#3, b1 e2, ~@5 [d4,e4,g#4]",
  H: "[a1,a2,a3,c#4,e4]!4 [b1,b2,a3,c#4,f#4] [c#2,c#3,a3,c#4,a4] [d2,d3,a3,d4,f#4]!4 [c#2,c#3,a3,d4,a4] [b1,b2,a3,d4,f#4]", // A F#m D Dmaj7 Bm7
  I: "[a1,a2,a3,c#4,e4]!4 [g#1,g#2,a3,c#4,e4] [f#1,f#2,a3,c#4,e4] [e1,e2]@3 ~@3", // A Amaj7 F#m7 E
  J: "[c#4,e4,a4]!9 [c#2,c#4,e4,a4] [d2,c#4,e4,a4] [d#2,c#4,e4,a4], [a1,a2]@2 e2 ~", // A
  K: "[e4,g#4,b4]!5 [e1,e2,e4,g#4,b4] [e4,g#4,b4]!6, [e1,e2]@5 ~ [e1,e2]@3 [e1,e2]@3", // E
  L: "[e4,f#4,a4]!5 [f#1,f#2,e4,f#4,a4] [e4,f#4,a4]!6, [f#1,f#2]@5 ~ [f#1,f#2]@3 [f#1,f#2]@3", // F#m7 F#
  M: "[d4,f#4,a4]@2 [d4,f#4,a4]@2 [d4,f#4,a4]!2 [f#4,a4,d5]@2 [f#4,a4,d5]@2 [d2,d3,f#4,a4,d5]@2 [f#4,a4,d5]@2 [f#4,a4,d5]@2 [f#4,a4,d5]@2 [f#4,a4,d5]@2 [f#4,a4,d5]@2 [f#4,a4,d5]@2, [d2,d3]@5 ~ [d2,d3]@3 [c#2,c#3]@3", // D C#
  N: "[d4,f#4,a4]!5 [b1,b2,d4,f#4,a4] [d4,e4,g#4]!6, [b1,b2]@5 ~ e1@3 e1@3", // D Bm7 E7 B
  O: "[d4,f#4,a4]!5 [b1,b2,d4,f#4,a4] [d4,e4,g#4]!6, [b1,b2]@3 [b1,b2]@2 ~ [e2,e3]@3 [e2,e3]@3", // D Bm7 E7 B E
  P: "e4!12 g4!12, [a1,a2]!6 [c#2,c#3]!6", // A C#
  Q: "[a4,d5,f#5]!5 [d2,d3,a4,d5,f#5] [a4,d5,f#5]!3 [d2,d3,a4,d5,f#5] [d#2,d#3,a4,d5,f#5] [e2,e3,a4,d5,f#5], [d2,d3]@3 [d2,d3]@2 ~ [d2,d3]@3 ~@3", // D
  R: "[f5,a5,c6]!5 [f2,f3,f5,a5,c6]!6 [b2,f5,a5,c6], [f2,f3]@3 [f2,f3]@2 ~@7", // F
  S: "[e5,a5,c#6]!2 [a1,a2,e5,a5,c#6] [e5,a5,c#6]!2 [a1,a2,e5,a5,c#6] [e5,a5,c#6]!2 [a1,a2,e5,a5,c#6] [e5,a5,c#6]!2 [a1,a2,e5,a5,c#6], [a1,a2]@2 ~ [a1,a2]@2 ~ [a1,a2]@2 ~ [a1,a2]@2 ~", // A
  T: "[b1,b2,b5,d#6,f#6]!12", // B
  U: "[b1,b2,b5,d#6,f#6]!8 [c2,c3,b5,d#6,f#6] [c#2,c#3,b5,d#6,f#6] [d2,d3,b5,d#6,f#6] [d#2,d#3,b5,d#6,f#6]", // B Cdim B
  V: "b6!12 [f2,f3,a6,c7] [f2,f3,f6,a6]@2 [f2,f3,a6,c7] [f2,f3,f6,a6]@2 [f2,f3,a6,c7] [f2,f3,f6,a6]@2 [f2,f3,a6,c7] [f2,f3,f6,a6]@2, [e2,e3]!6 ~@6", // F E
  W: "[e3,e4,b6]@2 ~@11 [c5,e5]@11, ~ [b2,e3,g#4]", // E5 C E
  X: "[[a1,a2,a3,c#4,e4]@2 ~@4 [a#1,a#2,g#3,d4,f4]@4 [a1,a2,a3,c#4,e4]@69 ~@17]/4", // A A#7 A
})).s("gm_piano").gain(0.49).pan(0.8)

// bass · fretless bass
const bass = note(`<
  ~ A B C D E F G H A I J K L M N O P Q R S T@2 U V A I J K L M N O P Q R S T@2 U V A I J K L M G W@4
>`.pickRestart({
  A: "a1@5 f#2 e2@3 c#2 d2 d#2, ~@10 e2 ~@13", B: "e2@5 c#2 b1@3 c#2@2 b1, ~@10 b1 ~@7 b1 ~@5",
  C: "f#2@5 a2 f#2@4 a1 e1, ~@10 f#2 ~@13", D: "d2@5 f#2 a2@3 f#2@2 d2, ~@10 e2 ~@7 e2 ~@5",
  E: "b1@4 f#2 b1 e2@3 g#2@3, ~@18 f#2 ~@5", F: "b1@4 f#2 b1 e2@6", G: "a1!4 b1 c#2 d2!4 d#2 e2",
  H: "a2!4 g#2 f#2 e2@3 ~@3", I: "e2@5 c#3 b2@3 g#2 b2 g#2, ~@10 b2 ~@7 f#2 ~@3 f#2 ~", J: "f#2@5 a2 c#3@3 b2 f#2 e2",
  K: "d2@5 f#2 a2@3 f#2 a2 f#2, ~@10 e2 ~@7 e2 ~@3 e2 ~", L: "b1@4 d#2 f#2 e2@3 e2@2 g#2, ~@8 c#2 ~@13 f#2 ~",
  M: "b1@4 f#2 b1 e2@3 e2 g#2 b2, ~@20 f#2 ~@3", N: "a1!4 b1 c#2 d2!4 c#2 b1", O: "a1!6 b1!2 c2 c#2!2 b1",
  P: "d2@2 d2 d2@2 d2 d2@2 d2!2 d#2 e2", Q: "f2@3 f2@2 c2 f1@2 f1 c2 f2 c2", R: "a1 b1 c2 c#2",
  S: "a2@6 e2 f#2@2 e2 f#2@2 e2@4 c2@2 c#2@2 e2@2 f#2@2", T: "b1@3 d#2@3 f#2@3 g#2 b2@2, ~@18 f#2 ~@5",
  U: "e2!4 g#2@2 f2!4 a2@2, ~@8 f#2 ~@11 g#2 ~@3", V: "e2 ~@5", W: "[a1 ~@5 a#1@2 ~@2 a1@68 ~@18]/4",
})).s("gm_fretless_bass").gain(0.64)

// other · lead 8 bass lead · "Synth"
const lead_8_bass_lead = note("<~@49 A@3>".pickRestart({
  A: "[f#5@3 c#5@3 b4@2 f#4@3 c#4@3 a3@39 ~@19]/3",
})).s("gm_lead_8_bass_lead").gain(0.2).pan(0.3)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@7 A B ~@7 C ~@15 C ~@18 D>".pickRestart({
  A: "~@22 x!2", B: "~@7 x ~ x ~ x ~@12", C: "~@18 x!5 ~", D: "~ x ~@4",
})).gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@7 A B ~@14 A B ~@18 C>".pickRestart({
  A: "~@18 x!2 ~@4", B: "~ x!3 ~ x ~ x ~ x!3 ~@2 x ~@2 x ~@6", C: "~ x ~@6",
})).gain(0.44)

// drums · high tom
const high_tom = s("ht").struct("<~@7 A B ~@6 A C ~@14 A C ~@14 A ~@3 D>".pickRestart({
  A: "~@7 x ~@4", B: "~ x ~ x ~ x ~@18", C: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x!3 ~@6", D: "~ x ~@10",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct("<~ A ~@7 A ~@7 A@3 ~ A ~@3 A ~@7 A@3 ~ A ~@3 A ~@6 B ~@2 C>".pickRestart({
  A: "x", B: "~@3 x ~ x ~@6", C: "~@5 x ~@18",
})).gain(0.49)

// drums · ride
const ride = s("rd").struct(`<
  ~ A B@5 C ~ D E@2 B E@2 C ~ D@3 F D F C ~ D E@2 B E@2 C ~ D@3 F D F C ~ D E@2 B E@2 C ~@4
>`.pickRestart({
  A: "~@2 x!5 ~ x ~ x ~ x ~ x!5 ~ x ~ x ~", B: "x ~ x!5 ~ x ~ x ~ x ~ x!5 ~ x ~ x ~", C: "x!6 ~@6", D: "~ x!11",
  E: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!5 ~ x ~ x ~", F: "x!12",
})).gain(0.44)

stack(electric_guitar_jazz, piano, bass, lead_8_bass_lead, kick, snare, low_tom, mid_tom, high_tom, crash, ride)

More by The Beatles