Strudelify

Calendar Girl

Neil Sedaka

KeyE majorTempo122 bpm
0:00/0:00
// Calendar Girl — Sedaka Neil
// 122 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// 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(122/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E F G H I J K L M N O P Q R S T U V W X I J K L M N O P Q R S T U V W X I J K L M N O P Q R S T U V W X I J
  K L M N O P Q R S T U V W X A B C D E F G Y
>`.pickRestart({
  A: "e1@4 ~@2 b1@5 ~", B: "c#2@7 ~@3 g#1@2 ~@4 b1@2 c#2@3 ~ f#1 ~", C: "e1@8 ~@4 b1@9 ~@3",
  D: "c#2@7 ~@3 g#1@2 ~@4 b1@2 c#2@3 ~ b1@2", E: "e1@9 ~@3 b1@10 ~@2", F: "c#2@7 ~@3 g#1@2 ~@4 b1@2 c#2@3 ~ f#1@2",
  G: "a1@2 ~ a1@2 ~ b1@2 ~ b1@2 ~", H: "e1@3 ~@13 c#2@2 b1@3 ~ g#1@2", I: "e1@5 ~@5 e1@2 b1@6 ~@6", J: "e1 ~ b1 ~",
  K: "c#2@3 ~@2 c#2 g#1@3 ~@3", L: "c#2@3 ~@2 g#1 ~@2 g#1 c#2@2 b1", M: "e1@5 ~@7 b1@7 ~@5",
  N: "e1@3 ~@2 b1@3 e1 b1@2 ~", O: "c#2@5 ~@7 g#1@7 ~@5", P: "c#2@3 ~@2 c#2@4 b1@2 ~", Q: "a1@3 ~@2 a1 a2@5 ~",
  R: "a#1@8 ~@2 a#1@2 a#2@9 ~@3", S: "b1@11 ~ g#1@8 ~@4", T: "c#3@5 ~ b2@5 ~ g#2@5 ~ g2@4 ~@2",
  U: "f#2@5 ~ e2@5 ~ d#2@4 ~@2 c#2@5 ~", V: "b1@5 ~ a1@5 ~ g#1@4 ~@2 f#1@4 ~@2", W: "e1@5 ~ e1@5 ~ a1@5 ~ a1@4 ~@2",
  X: "e1@3 ~@13 c#2@2 b1@2 ~@2 g#1@2", Y: "e1 ~@7",
})).s("gm_acoustic_bass").gain(0.62)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C D E F G H I J K@2 L M N@2 O P Q R S T U V I J K@2 L M N@2 O P Q R S T U V W X Y Z AA AB Y AC O P Q R S T U V I
  J K@2 L M N@2 O P Q R S T U V A B C D E F G AD
>`.pickRestart({
  A: "~@4 [e4,g#4] ~ [e4,g#4]@2 ~@2 [e4,g#4] ~ [e4,g#4]@2 ~@2 [e4,g#4] ~ [e4,g#4]@2 ~@2 [e4,g#4] ~, [e3,g#3]@19 ~@3 d#3@2, e2@17 ~@7", // E
  B: "[d#4,f#4]@2 ~@2 [e4,g#4] ~ [d#4,f#4] ~@3 [c#4,e4]@12 ~@2, [c#3,e3,g#3]@17 ~@7", // D#m E D#m C#m
  C: "~@6 [e4,g#4]@11 ~ [e4,g#4]@2 ~@4, [e3,g#3]@7 ~, e2@17 ~@7", // E
  D: "[d#4,f#4]@3 ~ [e4,g#4] ~ [f#4,g#4] ~@3 [c#4,e4]@12 ~@2, [c#3,e3,g#3]@3 ~, ~@3 d#4 ~@8", // D#m E F#sus2 C#m
  E: "~@4 [e4,g#4] ~ [e4,g#4]@2 ~@2 [e4,g#4] ~ [e4,g#4]@2 ~@2 [e4,g#4] ~ g#4@2 ~@2 [e4,g#4] ~, [e2,e3,g#3]@18 e4 ~@5", // E
  F: "[d#4,f#4]@3 ~ [e4,g#4] ~ [d#4,f#4] ~@3 [c#4,e4]@11 ~@3, [c#3,e3,g#3]@3 ~", // D#m E D#m C#m
  G: "[a2,e3,a3,c#4,e4]@4 ~@2 [a2,e3,a3,c#4,e4]@4 ~@2 [b2,b3,d#4,f#4]@4 ~@2 [b2,b3,d#4,f#4]@3 ~@3", // A B
  H: "[e3,g#3,b3]@2 ~@14 c#3@2 b2@2 ~@2 g#2 ~", // E
  I: "[e3,g#3,b3]@4 ~@2 [e3,g#3,c#4]@4 b2@2 [e3,g#3,b3]@4 e2@2 [e3,g#3,c#4]@4 [e2,b2] ~, ~@4 e2@7 ~@5 b2 ~@7", // E C#m E C#m E5
  J: "[e3,g#3,b3]@2 e2 [e3,g#3,c#4] ~ [e3,g#3,b3]@4 [e3,g#3,b3]@3, ~@4 b2 ~@19", // E C#m E
  K: "[[c#4,e4,g#4]@4 ~@2 [d#4,g#4]@4 ~@2 [c#4,g#4]@4 g#3@2 [d#4,g#4]@4 g#3@2 [c#4,g#4]@4 g#3@2 [d#4,g#4]@2 ~@2 [c#4,g#4]@6 [c#3,e3,g#3]@2 [c#4,g#4]@3 ~ b2@2, [c#3,e3]@9 ~ [c#3,e3]@9 ~@3 [c#3,e3]@9 ~@17, g#3@2 ~@2 g#3@4 ~@2 g#3@5 ~@33, ~@12 d#4 ~@35]/2", // C#m G#5 C#5 G#5 C#5 G#5 C#5 C#m …
  L: "[e3,g#3,b3]@4 [e2,b2] ~ [e3,g#3,c#4]@4 [e2,b2] ~ [e3,g#3,b3]@4 [e2,b2] ~ [e3,g#3,c#4]@4 [e2,b2] ~", // E E5 C#m E5 E E5 C#m E5
  M: "[e3,g#3,b3]@4 [e2,b2] ~ [e3,c#4]@2 ~@2 [e3,g#3,b3]@6 [e2,b2] ~ [g#3,b3]@4 ~@2, ~@6 g#3 ~@11 e3@2 ~@4", // E E5 C#m E E5 G#m
  N: "[c#4@5 ~ [d#4,g#4]@4 g#3@2 [c#4,g#4]@4 g#3@2 [d#4,g#4]@4 ~@2 c#4@4 g#3@2 [d#4,g#4]@3 ~ [c#3,e3,g#3]@5 ~ [c#3,g#3]@2 c4@3 ~@3, [c#3,e3,g#3]@9 ~ [c#3,e3]@8 ~@4 [c#3,e3]@8 ~@10 e3 ~@7, ~@11 g#3@2 ~@4 [c#4,g#4]@3 ~@4]/2", // G#5 C#5 G#5 C#m C#5 C#m C#5
  O: "[a3,c#4,e4]@4 a2 ~ [a3,c#4,e4] ~@3 [a2,e3] ~ [a3,c#4,e4]@2 ~@2 e4@6 a3 ~, ~@16 c#4@5 ~@3, ~@16 a3@3 ~@5", // A A5 A
  P: "[a#3,c#4,e4]@4 a#2@2 [a#3,c#4,e4] ~@3 [a#3,c#4,e4]@6 a#2 ~ [a#3,c#4,e4] ~@3 g#3 ~", // A#dim
  Q: "[b3,e4]@4 g#3 ~ [g#3,b3] ~@3 g#3 ~ [b3,e4]@4 g#3 ~ [b3,e4]@4 g#3 ~, g#3@2 ~@4 e4@2 ~@4 g#3 ~@5 g#3 ~@5", // E5 G#m E5
  R: "~@8 c#4@2 ~@2 [c#4,g#4]@5 ~ [c#4,g#4]@2 ~@2 a#4 ~, c#3@19 ~@5, ~@4 f3@15 ~@5, ~@6 g#3@13 ~@5, ~@10 f4@7 ~ f4 ~@5", // C#5
  S: "[c#4,f#4,a#4]@4 [c#3,f#3,a#3] ~ [c#4,f#4,a#4] ~@3 [c#3,f#3,a#3] ~ [c#4,f#4,a#4]@4 [c#3,f#3,a#3] ~ [c#4,a#4]@2 ~@2 [c#3,a#3] ~, ~@18 f#4 ~@5", // F#
  T: "[b3,d#4]@4 b2 ~ [b3,d#4,f#4]@2 ~@2 b2 ~ [b3,d#4,f#4]@4 b2@2 [b3,d#4,f#4]@3 ~ e2 ~", // B
  U: "[e3,g#3,b3]@5 ~ [e3,g#3,b3]@4 ~@2 [a2,e3,a3,c#4,e4]@4 ~@2 [a2,e3,a3,c#4,e4]@3 ~@3, ~@12 c#3 ~@11", // E A
  V: "[g#3,b3,e4] ~@11", // E
  W: "[b4,e5,b5]@4 [g#4,g#5]@2 [c#5,e5,c#6]@4 [g#4,g#5] ~ [b4,e5,b5]@4 [g#4,g#5] ~ [c#5,e5,c#6]@3 ~ [g#4,g#5] ~", // E5 G# C#m G# E5 G# C#m G#
  X: "[b4,b5]@2 [g#4,e5,g#5] ~ [b4,b5]@2 [c#5,c#6]@3 ~ [b4,b5]@12 ~@2, e5 ~@3 e5 ~ e5 ~@3 e5@8 ~@6", // B C#m B C# B
  Y: "[c#5,e5,c#6]@4 [g#4,g#5]@2 [d#5,e5,d#6]@4 [g#4,g#5] ~ [c#5,e5,c#6]@4 [g#4,g#5]@2 [d#5,e5,d#6]@4 [g#4,g#5]@2", // C#m G# Emaj7 G# C#m G# Emaj7 G#
  Z: "[c#5,c#6]@2 [g#4,g#5]@2 [c#5,c#6] ~ [d#5,d#6]@3 ~ [c#5,c#6]@8 ~@6, e5 ~ e5 ~ e5@2 e5 ~@3 e5@11 ~@3", // C# G# C# D# C#
  AA: "[b4,e5,b5]@4 [g#4,g#5] ~ [c#5,e5,c#6]@4 [g#4,g#5] ~ [b4,e5,b5]@4 [g#4,g#5]@2 [c#5,e5,c#6]@4 [g#4,g#5]@2", // E5 G# C#m G# E5 G# C#m G#
  AB: "[b4,b5]@2 [g#4,g#5]@2 [b4,b5]@2 [c#5,c#6]@3 ~ [b4,e5,b5]@12 ~@2, e5 ~ e5 ~ e5 ~ e5 ~@17", // B G# B C# E5
  AC: "[c#5,e5,c#6] ~ [g#4,g#5]@2 [c#5,e5,c#6] ~ [d#5,d#6]@3 ~ [c#5,e5,c#6]@9 ~@5, ~@2 e5 ~@3 e5 ~@17", // C#m G# C#m D# C#m
  AD: "[e3,g#3,b3] ~@11", // E
})).s("gm_piano").gain(0.64)

// chords · piano · "E.PIANO 2"
const piano_2 = note(`<
  ~ A B A C D E F G H ~ I ~ J ~ I ~ K L M N O P Q R H ~ I ~ J ~ I ~ K L M N O P Q R S T U@2 V W X@2 K L M N O P Q R H ~
  I ~ J ~ I ~ K L M N O P Q R A B A C D E F G
>`.pickRestart({
  A: "[e2,g#3,b3,e4]", B: "[c#3,e3,g#3,c#4,e4,g#4]", C: "[c#4,e4,g#4]@9 [c#4,e4,g#4] ~@2, [c#3,e3,g#3]@5 ~",
  D: "[e2,g#3,b3,e4], a#3 ~@23", E: "[c#3,e3,g#3,c#4,e4,g#4]@23 ~",
  F: "[a3,c#4,e4]@5 ~ [a3,c#4,e4]@6 [b2,b3,d#4,f#4]@5 ~ [b3,d#4,f#4]@2 ~@4, [a2,e3] ~", G: "[e2,g#3,b3,e4] ~@7",
  H: "[b3,e4,g#4]@4 [b3,e4,g#4] ~@19, f#4 ~@23", I: "[c#4,e4,g#4]@3 ~ [c#4,e4,g#4] ~@19",
  J: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~@19", // E
  K: "~@10 c#4@2 [c#4,e4,a4]@3 ~ c#4@6 c#4@2, a2@5 ~@3, [e4,a4]@3 ~ [e4,a4]@2, c#4@5 ~@7, ~@2 e3@3 ~@3", // A A5
  L: "[c#4,e4,a#4]@4 [c#4,e4,a#4]@3 ~", M: "~@10 e4@2 [e4,g#4,b4]@3 ~ [e4,g#4,b4]@8, e3, [g#4,b4] ~, e4@5 ~@7, ~ b3@3",
  N: "[c#4,f4,g#4]@10 ~@2 c#3@9 ~@3, c#3 ~, ~@10 [c#4,f4,g#4]@11 ~@3", // C#
  O: "~@4 c#4 ~ c#4@4 [c#4,f#4]@2 [c#4,e4]@10 [f#2,c#3,f#3] ~, [f#2,c#3,f#3]@7 ~, ~ e4 ~@2", // F#5 C#m F#5
  P: "~@4 f#4@2 [b4,d#5]@4 [g#4,b4,d#5]@2 [f#4,b4,d#5]@5 ~ [f#4,b4,d#5]@3 ~@3, [b2,d#3,f#3,b3]@7 ~, ~ f#4 ~@2", // B G#m B
  Q: "~@4 g#4 ~ [g#4,b4,e5]@4 [g#4,b4,e5]@2 [a3,c#4,e4,a4,c#5,e5]@4 ~@2 [a3,c#4,e4,a4,c#5]@3 ~@3, [e3,g#3,b3]@12 ~@6 e5@5 ~", // E A E
  R: "[e3,g#3,b3,g#4,b4,e5] ~@7", // E
  S: "[e4,g#4,b4]@4 ~@2 [e4,g#4,c#5]@4 b3@2 [e4,g#4,b4]@4 e3@2 [e4,g#4,c#5]@4 [e3,b3] ~, ~@4 e3@7 ~@5 b3 ~@7", // E C#m E C#m E5
  T: "[e4,g#4,b4]@2 e3 [e4,g#4,c#5] ~ [e4,g#4,b4]@4 [e4,g#4,b4]@3, ~@4 b3 ~@19", // E C#m E
  U: "[[c#5,e5,g#5]@4 ~@2 [d#5,g#5]@4 ~@2 [c#5,g#5]@4 g#4@2 [d#5,g#5]@4 g#4@2 [c#5,g#5]@4 g#4@2 [d#5,g#5]@2 ~@2 [c#5,g#5]@6 [c#4,e4,g#4]@2 [c#5,g#5]@3 ~ b3@2, [c#4,e4]@9 ~ [c#4,e4]@9 ~@3 [c#4,e4]@9 ~@17, g#4@2 ~@2 g#4@4 ~@2 g#4@5 ~@33, ~@12 d#5 ~@35]/2", // C#m G#5 C#5 G#5 C#5 G#5 C#5 C#m …
  V: "[e4,g#4,b4]@4 [e3,b3] ~ [e4,g#4,c#5]@4 [e3,b3] ~ [e4,g#4,b4]@4 [e3,b3] ~ [e4,g#4,c#5]@4 [e3,b3] ~", // E E5 C#m E5 E E5 C#m E5
  W: "[e4,g#4,b4]@4 [e3,b3] ~ [e4,c#5]@2 ~@2 [e4,g#4,b4]@6 [e3,b3] ~ [g#4,b4]@4 ~@2, ~@6 g#4 ~@11 e4@2 ~@4", // E E5 C#m E E5 G#m
  X: "[c#5@5 ~ [d#5,g#5]@4 g#4@2 [c#5,g#5]@4 g#4@2 [d#5,g#5]@4 ~@2 c#5@4 g#4@2 [d#5,g#5]@3 ~ [c#4,e4,g#4]@5 ~ [c#4,g#4]@2 c5@3 ~@3, [c#4,e4,g#4]@9 ~ [c#4,e4]@8 ~@4 [c#4,e4]@8 ~@10 e4 ~@7, ~@11 g#4@2 ~@4 [c#5,g#5]@3 ~@4]/2", // G#5 C#5 G#5 C#m C#5 C#m C#5
})).s("gm_piano").gain(0.62)

// other · glockenspiel · "TUBULARBEL"
const glockenspiel = note(`<
  ~@2 A B A B A C D ~@8 E F G H I J K L ~@8 E F G H I J K L ~@8 E F G H I J K L ~@8 E F G H I J K L ~ A B A B A C D
>`.pickRestart({
  A: "~@4 e5 ~ g#5 ~@3 c#6 ~@5 b5 ~ c#6 ~@5", B: "b5 ~@23", C: "a5 ~@11 b5 ~@11", D: "e5 ~@23",
  E: "~@4 a6 ~ e6 ~@3 a6 ~@11 a6 ~", F: "a#6 ~@3 a#6 ~ f#6 ~@3 a#6 ~@13", G: "b6 ~@5 g#6 ~@5 e6 ~@5 g#6 ~@5",
  H: "d#6 ~@5 c#6 ~@17", I: "f#6 ~@9 g#6 ~ f#6 ~@11", J: "b6 ~@9 b6 ~ b6 ~@11", K: "~@6 e6 ~@5 g#6 ~@5 a6 ~@5",
  L: "g#6 ~@23",
})).s("gm_glockenspiel").gain(0.28)

// drums · kick
const kick = s("bd").struct("<~ A@7 B A@15 B A@15 B A@15 B A@15 B A@7 C>".pickRestart({
  A: "x ~@4 x!2 ~ x ~@2 x", B: "x ~@10 x", C: "x",
})).gain(0.71)

// drums · snare
const snare = s("sd").struct(`<
  A B C B C B C D E F G F G F G F G B C B C B C D E F G F G F G F G B C B C B C D E B C B C B C B C B C B C B C D E F G
  F G F G F G B C B C B C D E B C B C B C D H
>`.pickRestart({
  A: "~@16 x!3 ~@3 x ~", B: "~@3 x ~ x ~@3 x ~@2", C: "~@6 x ~@3 x ~@5 x!3 ~@3 x ~",
  D: "~@4 x!3 ~@3 x ~ x ~ x ~ x ~ x ~ x ~ x ~", E: "~@4 x!3 ~@3 x!3 ~@3 x!3 ~@3 x ~", F: "~@2 x!2 ~ x ~@3 x ~@2",
  G: "~@4 x ~ x ~@3 x ~@5 x!3 ~@3 x ~", H: "x",
})).gain(0.21)

// drums · hihat
const hihat = s("hh").struct("<~ A@7 ~ A@15 ~ A@15 ~ A@15 ~ A@15 ~ A@7 ~>".pickRestart({
  A: "x!4",
})).gain(0.71)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ A@7 ~ A@15 ~ A@15 ~ A@15 ~ A@15 ~ A@7 ~>".pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x",
})).gain(0.21)

// drums · ride
const ride = s("rd").struct("<~ A@7 ~@9 A@7 ~@9 A@7 ~ A@15 ~@9 A@7 ~ A@7 ~>".pickRestart({
  A: "x!4",
})).gain(0.71)

stack(bass, piano, piano_2, glockenspiel, kick, snare, hihat, hihat_soft, ride)

More by Neil Sedaka