Strudelify

Big Girls Don't Cry

The Four Seasons

KeyD majorTempo133 bpm
0:00/0:00
// Big Girls Don't Cry — The Four Seasons
// 133 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(133/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(`<
  ~@5 A B A C A C A C A C A C A C A C D E F G H@2 I J K L A C A C A C A C A C A C A C A C A C D E F G H@2 I J K L A C A
  C A C A C K L K L K L K L E
>`.pickRestart({
  A: "g2 ~@2 g2 e2 ~@2 e2", B: "a2@2 ~@4 a2@2 d3@4 c3@2 b2 ~", C: "a2@4 ~@2 a2@2 d3@2 a2@2 d2@3 ~",
  D: "g2@2 ~@2 a2 ~ b2 ~ c3@3 ~ c3@2 b2@2", E: "g2 ~@7", F: "e3 ~ e3@2 g#3@2 e3@2 b3 ~ b3@2 g#3@2 e3 ~",
  G: "e3 ~ e3@2 g#3@2 e3 ~ b3 ~ b3@2 g#3@2 e3 ~", H: "a2 ~ a2@2 c#3@2 a2 ~ e3 ~ e3@2 c#3@2 a2 ~",
  I: "d3 ~ d3@2 f#3@2 d3 ~ a3 ~ a3@2 f#3@2 d3 ~", J: "d3 ~ d3@2 f#3@2 d3 ~ a3 ~ a3 ~ f#3@2 d3@2", K: "g2 ~@3 d3 ~@3",
  L: "c3@2 ~@6 d3@5 ~@3",
})).s("gm_acoustic_bass").gain(0.62)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@5 A B A C A C A C A C A C A C A C D E F G H I J K L M A C A C A C A C A C A C A C A C A C D E F G H I J K L M A C A
  C A C A C L M L M L M L M N
>`.pickRestart({
  A: "~@4 [g4,b4,d5] ~@7 [g#4,b4,e5] ~@3", B: "~@4 [a4,c5,e5] ~@7 [a4,d5,f#5] ~ [a4,d5,f#5] ~",
  C: "~@4 [a3,e4,a4,c5,e5] ~@5 d5 ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~", // Am D
  D: "[g3,d4,g4,b4,d5]@3 ~ [g3,d4,g4,b4,d5]@2 ~@2 [c4,g4,c5,e5]@3 ~ [c4,g4,c5,e5]@2 ~@2", // G C
  E: "[g3,d4,b4] ~@7 [d2,d3]@3 ~ [d#2,d#3]@3 ~, [g4,d5] ~@7", // G D D# G5
  F: "~@4 [d4,e4,b4]@2 [d4,a#4] ~ [d4,e4,a4] ~ [d4,e4,g#4] ~@3 [d4,e4,g#4] ~", // E7 Gm Dsus2 E7
  G: "~@4 [d4,e4,g#4] ~ [d4,e4,g#4] ~@5 [d4,e4,g#4] ~@3", // E7
  H: "~@4 [a4,e5,a5]@2 [a4,d#5,a5] ~ [a4,d5,a5] ~ [a4,c#5,a5]@3 ~ [a4,c#5,a5] ~", // A5 Adim D5 A
  I: "~@2 [a4,c#5,a5] ~@3 [a4,c#5,a5]@4 a4 ~ [c#5,a5] ~@3", // A F#m
  J: "~@4 [d4,a4] ~ [d4,g#4,d5]@2 [d4,g4,d5] ~ [d4,f#4,d5] ~@3 [d4,f#4,d5] ~, ~@2 d5 ~@5", // D5 Ddim G5 D
  K: "~@2 [d4,f#4,d5] ~ [d4,f#4,d5] ~ [d4,f#4,d5]@3 ~ [d4,f#4,d5] ~@5", // D
  L: "[g3,d4,g4,b4,d5]@3 ~@5 [d3,d4,f#4,a4]@2 ~@6, ~@8 a3 ~@7", M: "[c3,g3,c4,e4,g4]@2 ~@6 [d3,a3,d4,f#4,a4]@5 ~@3",
  N: "[b4,d5,g5] ~@7, [g2,d3,g3] ~@15", // G G5
})).s("gm_piano").gain(0.64)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  ~@6 A ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@2 C ~@8 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@2 C ~@8 B ~ B ~ B ~ B ~@9
>`.pickRestart({
  A: "~@10 [a4,d5,f#5] ~@5", B: "~@10 [a4,f#5] ~@5", C: "~@6 e4 ~@9",
})).s("gm_piano").gain(0.4)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@5 A B C D C D C D C D C D C D C D E F G H I J K@2 L M C D C D C D C D C D C D C D C D C D E F G H I J K@2 L M C D C
  D C D C D L M L M L M L M N
>`.pickRestart({
  A: "[g3,b3,d4]@2 [g3,b3,d4]@2 [e3,g#3,b3]@2 e3!2, [g2,d3] e2, ~@3 [g#3,b3]", // G E G5 G#m
  B: "~@2 [a3,c4,e4]@2 ~ [f#3,a3,d4]!3, a2 ~, ~ e3@3 d3@4", // Am D
  C: "d3@4 g3@2 g3@2 [e3,g#3,b3]@3 ~ [e3,g#3,b3]@4, g2 ~, ~ [b3,d4] ~@2", // E Bm
  D: "~@2 e3@2 a3@2 a3@2 d3 ~@3 [f#3,a3,c#4]@2 [f#3,a3,d4] ~, a2@8 ~@2 d3@5 ~, ~ [c4,e4] ~@2", // F#m D C
  E: "[g2,d3,g3,b3,d4]@8 [c3,g3,c4,e4]@7 ~", F: "[g2,d3,g3,b3,d4] ~@7",
  G: "[e3,g#3,b3]@2 [e3,g#3,b3] [e3,b3]!2 [e3,g#3,b3]!3, e2@3 e2@3 e2@2, ~@3 g#3@2 ~@3", // E E5 E
  H: "[e2,e3,g#3,b3] ~ [e3,g#3,b3] ~@2 [e3,g#3,b3] e3!2, ~ [e3,g#3,b3] ~ [e3,g#3,b3]@2 ~ [g#3,b3]@2, ~@3 e2@5 e2@8", // E G#m
  I: "[a2,g3,c#4,e4]@2 [g3,c#4,e4] ~@2 [g3,c#4,e4]!3, ~ a2!3, ~@3 [g3,c#4,e4]@2 ~@3", // A7 C#dim
  J: "[a2,g3,c#4,e4] ~ [g3,c#4,e4]!4 [g3,c#4,e4]@2, ~ [g3,c#4,e4] ~@6, ~@3 a2@5 a2@8", // A7 C#dim
  K: "[[f#3,a3]@4 [f#3,a3,d4]@2 ~@4 [f#3,a3,d4]@2 ~@2 d3 ~ [f#3,a3,d4]@4 [f#3,a3,d4]@2 ~@4 [f#3,a3,d4]@2 ~ [f#3,a3,d4]@2 ~, d3@8 d3@6 ~ d3@9 d3@4 d3@3 ~, ~@3 [f#3,a3,d4]@2 ~ [f#3,a3,d4]@2 ~@3 [f#3,a3,d4]@2 ~@3]/2", // F#m D
  L: "[g2,g3,b3,d4]@2 ~@6 [d3,f#3,a3,d4] ~@7", M: "[c3,g3,c4,e4,g4] ~@3 [f#3,a3,d4]@2 ~@2", N: "[g3,d4,g4,b4] ~@7",
})).s("gm_acoustic_guitar_nylon").gain(0.45)

// other · trumpet · D E D B G E D G …
const trumpet = note(`<
  ~@39
  [~@6 [d5,d6] ~ [e5,e6] ~ [d5,d6] ~ [b4,b5] ~ [g4,g5] ~]
  [[g4,g5] ~@3 [g4,g5] ~@3 [e4,e5]@2 [d4,d5]@2 ~@4]
  [~@6 [g4,g5] ~ [b4,b5] ~ [d5,d6] ~ [e5,e6] ~ [d5,d6] ~]
  [~@6 [d5,d6] ~ [b4,b5] ~ [g4,g5] ~ [e4,e5] ~ [g4,g5] ~]
  ~@32
  [[g4,g5] ~@15]
>`).s("gm_trumpet").gain(0.72)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@4 A ~@9 B ~@15 C ~@27 C ~@15 A ~>".pickRestart({
  A: "~@11 x ~@4", B: "~@3 x!2 ~@3", C: "~@10 x!2 ~@4",
})).gain(0.21)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!21 ~@7 [~ x ~ x]!21 ~@7 [~ x ~ x]!18 ~>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@14 [~@7 x] ~@61>").gain(0.71)

// drums · hihat
const hihat = s("hh").struct("<A B@4 A@17 B A@6 B@2 A@19 B A@6 B@2 A@8 B@8 ~>".pickRestart({
  A: "x!4", B: "~ x ~ x",
})).gain(0.71)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@5 A@17 ~ A@6 ~@2 A@19 ~ A@6 ~@2 A@8 ~@9>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<[x!2] ~@13 [~@3 x] ~@61>").gain(0.71)

// drums · high tom
const high_tom = s("ht").struct("<[~@2 x!3 ~ x ~@3 x!3 ~ x ~] ~@13 [~@5 x ~@2] ~@61>").gain(0.71)

// drums · crash
const crash = s("cr").struct("<x ~@75>").gain(0.71)

// drums · ride
const ride = s("rd").struct("<~@23 [x!4]!6 ~@22 [x!4]!6 ~@19>").gain(0.71)

stack(
  bass, piano, piano_soft, acoustic_guitar_nylon, trumpet, kick, snare, snare_soft, clap, low_tom, hihat, hihat_soft,
  mid_tom, high_tom, crash, ride
)

More by The Four Seasons