Strudelify

Breaking Up Is Hard to Do

Carpenters

KeyB majorTempo120 bpm
0:00/0:00
// Breaking Up Is Hard to Do — Carpenters
// 120 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "BASS" named as a bass, played on electric bass finger (its piano patch is not one); ch 3 "RHYTHM GUITAR" named as a guitar, played on electric guitar clean (its piano patch is not one); ch 4 "STRINGS" named as a string part, played on string ensemble 1 (its piano patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · electric bass finger · "BASS"
const bass = note(`<
  ~@5 A B C D E F G H I J K L E F G H I J M N O P Q R S T U V L E F G H I J M N O P Q R S T U V L E F G H I J M E W E X
  Y Z AA AB
>`.pickRestart({
  A: "b3@5 ~ b3@2 g#3@5 ~ g#3@2", B: "e3@5 ~ e3 ~ f#3@5 ~ f#3 ~", C: "b3@5 ~ b3@2 e3@3 ~ e3@2 ~@2",
  D: "b2 ~@4 f#2 g#2 a#2", E: "b2@5 ~ b2@2 g#2@4 ~@2 g#2@2", F: "e2@4 e3@2 e2 ~ f#2 ~ f#2@4 a#2 ~",
  G: "b2@2 ~ b2 g#2@2 ~ g#2", H: "e2@4 e3@2 e2 ~ f#2 ~ f#2@2 g#2@2 a#2 ~", I: "b2@4 ~@2 b2@2 a#2@4 ~@2 a#2 ~",
  J: "g#2@4 ~@2 g#2 ~ d#3@3 ~ d#3@3 ~", K: "c#3@4 ~@2 c#3@2 g#2@4 c#3@2 g#2 ~", L: "f#2 ~@4 f#2 g#2 a#2",
  M: "c#3@4 ~@2 c#3 ~ f#2@4 f#3@2 f#2@2", N: "b2 ~@7", O: "b2@5 ~ b2@2 e2@5 ~ e2@2", P: "b2@5 ~ b2@2 e2@4 b2@4",
  Q: "a2@5 ~ a2@2 e3@5 ~ e3@2", R: "a2@5 ~ a2@2 e3@4 a2@2 ~@2", S: "a2@5 ~ a2@2 d3@5 ~ d3@2", T: "a2@5 ~ a2@2 d3@5 ~@3",
  U: "g2@5 ~ g3 ~ g3@2 d3@2 g2@2 g3@2", V: "f#2@6 f#3 ~ f#3@2 c#3@2 f#3@2 c#3@2",
  W: "e2@4 e3@2 e2 ~ f#2 ~ f#2@3 ~ f#2@2", X: "e2@4 e3@2 e2@2 f#2 ~ f#2@2 g#2@2 a#2 ~", Y: "b2@5 ~ b2 ~ g#2@5 ~ g#2 ~",
  Z: "e2@4 e3@2 e2 ~ f#2 ~ f#2@2 f#3@2 f#2 ~", AA: "b2@3 ~ b2@3 ~ e2 ~ e2@3 ~ e2@2", AB: "b2@2 ~@11 g#2 a#2@2",
})).s("gm_electric_bass_finger").gain(0.41)

// chords · piano
const piano = note(`<
  ~ A@2 B@2 C@2 D E F G H I J K L M F G H I J K N O P Q R S T U V W X F G H I J K N O P Q R S T U V W X F G H I J K N
  C@6 D E
>`.pickRestart({
  A: "[[d#5,f#5,b5]@3 ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5]@3 ~ [e5,g#5,b5]@8 ~@2 [f#5,a#5] ~ [f#5,a#5] ~ [f#5,a#5] ~ [f#5,a#5] ~]/2", // B E F#
  B: "[[d#5,f#5,b5]@3 ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~@3 [e5,g#5,b5]@8 ~@2 [f#5,a#5] ~ [f#5,a#5] ~ [f#5,a#5] ~ [f#5,a#5] ~]/2", // B E F#
  C: "[[b3,d#4,f#4]@3 ~ b3@2 b3@2 [g#3,b3,d#4] ~ [g#3,b3,d#4]@4 ~@6 e3@2 e3@2 [f#3,a#3,c#4]@4 [f#3,a#3,c#4]@4, b2@4 ~@3 [e3,g#3,b3]@3 [g#3,b3]@2 ~@4, ~ [d#4,f#4] ~@2 e2@2 f#2@2, ~@9 b2@3 ~@4]/2", // B G#m F# E G#m D#m
  D: "[b3,d#4,f#4]@4 [b3,d#4,f#4]@3 ~ b3 ~ b3@2 [b3,e4,g#4]@4, b2@7 ~ e3@8, ~@2 [e4,g#4] ~", // B E
  E: "[b2,f#3,b3,d#4,f#4] ~@15", // B
  F: "f#4@4 ~@2 b3@2 [g#3,b3,d#4]@3 ~ [g#3,b3,d#4]@2 g#3 ~, [b2,d#4]@8 g#2@7 ~, b3@3 ~@5, ~ [c#4,f#4] ~@2", // G#m B F#5
  G: "[e3,g#3,b3] ~ [e3,g#3,b3]@3 ~ [f#3,a#3,c#4]@2 ~@2 [f#3,a#3,c#4] ~ [f#3,a#3,c#4]@3 ~, ~@2 f#2 ~", // E F#
  H: "[b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~@3 [g#3,b3,d#4] ~ [g#3,b3,d#4]@4 [g#3,b3,d#4] ~, [b2,f#3] ~@3", // B G#m B5
  I: "~@2 [e3,g#3,b3]@4 [f#3,a#3,c#4]@2 ~@2 [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~, e2@6 ~@2 f#2@7 ~", // E F#
  J: "[b2,b3,d#4,f#4]@4 [b3,d#4]@2 a#2 ~ [d#3,g3,a#3] ~ [d#3,g3,a#3]@3 ~ [d#3,g3,a#3] ~, ~@4 f#4 ~@11", // B D#
  K: "~@2 d#3 ~ [g#3,b3,d#4] ~@3 d#3@2 d#3@2 [g#3,d#4]@2 ~@2, g#2@7 ~, ~@6 [g#3,b3,d#4]@5 ~ b3 ~@3", // G#m G#5 G#m
  L: "[c#3,g#3,b3,f4]@5 ~ [g#3,b3,f4] ~ [g#3,b3,f4]@2 c#3 ~ [g#3,b3,f4]@4", M: "[f#2,a#3,c#4] ~@7, f#3 ~@15",
  N: "[b3,f4,g#4]@3 ~ [b3,f4,g#4]@4 [f#3,a#3,c#4]@3 ~ [f#3,a#3,c#4]@4, [c#3,g#3] ~", // Fdim F# C#5
  O: "[b2,f#3,d#4] ~@15, [b3,f#4] ~@7", // B B5
  P: "[b2,b3,d4,f#4] ~ [b3,d4,f#4] ~ [b3,d4,f#4] ~ [b3,d4,f#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~", // Bm E
  Q: "[b2,b3,d4,f#4,a4] ~ [b3,d4,f#4,a4] ~ [b3,d4,f#4,a4] ~ [b3,d4,f#4,a4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~", // Bm7 E
  R: "[a2,e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,g#3,c#4] ~ [e3,g#3,c#4] ~ [e3,g#3,c#4] ~ [e3,g#3,c#4] ~", // A C#m
  S: "[e3,f#3,c#4] ~ [e3,f#3,c#4] ~ [e3,f#3,c#4] ~ [e3,f#3,c#4] ~ [e3,g#3,c#4] ~ [e3,g#3,c#4] ~ [e3,g#3,c#4] ~ [e3,g#3,c#4] ~", // F#7 C#m
  T: "[g3,c4,e4]@2 [g3,c4,e4]@2 [a3,c4,f#4,a4]@2 c4!2, a2 d3, ~@3 [f#4,a4]", // C F#dim F#m
  U: "~@2 [g3,c4,e4] ~ [g3,c4,e4]@2 ~@4 [c4,f#4,a4]@3 ~@3, a2@4 ~@2 [d3,a3]@7 ~@3", // C F#dim D5
  V: "[g3,b3,d4]@6 [a3,d4] ~ d4@4 [g3,b3,d4]@3 ~, g2@15 ~, ~@8 a3@7 ~", // G D5 G
  W: "[f#2,f#3,a#3,c#4] ~ [f#2,f#3,a#3,c#4] ~ [f#2,f#3,a#3,c#4] ~ [f#2,f#3,a#3,c#4] ~ [f#2,f#3,a#3,c#4] ~ [f#2,f#3,a#3,c#4] ~ [f#2,f#3,a#3,c#4] ~ [f#2,f#3,a#3,c#4] ~", // F#
  X: "[f#2,f#3,a#3,c#4] ~@15", // F#
})).s("gm_piano").gain(0.36)

// chords · electric guitar clean · "RHYTHM GUITAR"
const electric_guitar_clean = note(`<
  ~@9 A B A C D E F G A B A C D E H I J K L M N O P Q R A B A C D E H I J K L M N O P Q R A B A C D E H S@2 T@2 S@2 U V
>`.pickRestart({
  A: "~@4 [d#4,f#4,b4] ~@7 [d#4,g#4,b4] ~@3", B: "~@4 [e4,g#4,b4] ~@7 [c#4,f#4] ~@3",
  C: "~@4 [e4,g#4,b4] ~@7 [f#4,a#4,c#5] ~@3", D: "~@4 [b3,d#4,f#4] ~@7 [d#4,g4,a#4] ~@3",
  E: "~@4 [d#4,g#4] ~@7 [d#4,g#4,b4] ~@3", F: "~@4 [c#4,f4,g#4] ~@7 [c#4,f4,g#4] ~@3",
  G: "[c#4,f#4] ~@9 [f#2,f#3] ~ [g#2,g#3] ~ [a#2,a#3] ~", H: "~@4 [b3,f4,g#4] ~@7 [f#3,a#3,c#4] ~@3",
  I: "[b2,f#3,b3,d#4] ~@15", J: "~@3 f#4 ~@3 b3, b2 e2, ~@2 b3@7 ~ e3@6, ~@4 d4@5 ~@3 g#3@4",
  K: "~@3 b3 ~@3 g#3, b2 e3, ~ b3@2 ~@2 g#3@2 ~, ~ d4 ~ b3",
  L: "~@3 c#4 a3 ~@2 a2, a2@4 ~ a2@2 ~, ~ e3@3 ~@4, ~ a3 ~ g#3", M: "~@4 e3@2 e3 ~, [f#3,c#4]!2 ~@2, ~ a2@2 a2@4 ~",
  N: "~@3 e4 ~@3 f#4, a2 d3, ~@2 a3@7 ~ a3@6, ~@4 c4@5 ~@3 d4@4",
  O: "~@3 a4 ~@2 f#4 ~, a3 ~, ~ c4@3 ~ d4@2 ~, ~ e4 ~@2",
  P: "~@6 g4@2 a4 ~@3 a4@2 g4 ~, g3@15 ~, ~@2 b3@13 ~, ~ d4@2 ~, ~@10 b4@5 ~",
  Q: "f#3 ~ f#3@2 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@2 [f#3,c#4,f#4]@2", // F#5
  R: "[f#3,c#4,f#4] ~@9 [f#2,f#3]@2 [g#2,g#3] ~ [a#2,a#3] ~", // F#5 F# G# A#
  S: "[[d#5,f#5,b5]@3 ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5]@3 ~ [e5,g#5,b5]@8 ~@2 [f#5,a#5] ~ [f#5,a#5] ~ [f#5,a#5] ~ [f#5,a#5] ~]/2", // B E F#
  T: "[[d#5,f#5,b5]@3 ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5]@2 ~@2 [e5,g#5,b5]@8 ~@2 [f#5,a#5] ~ [f#5,a#5] ~ [f#5,a#5] ~ [f#5,a#5] ~]/2", // B E F#
  U: "[d#5,f#5,b5]@6 ~@2 [e5,g#5,c#6]@3 ~ [e5,g#5,c#6]@3 ~", V: "[d#5,f#5,b5] ~@7",
})).s("gm_electric_guitar_clean").gain(0.41)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@25 A B ~@2 C D E F G ~@8 A B ~@2 C D E F G ~@15>".pickRestart({
  A: "[d4,a4] [b3,g#4]", B: "[d4,a4]@4 [b3,g#4]@3 ~", C: "[a3,c4,e4] [d4,f#4]", D: "[e4,g4]@4 [d4,f#4]@3 ~", E: "g4",
  F: "~ c#5, [f#3,f#4,a#4]", G: "[f#3,f#4,a#4,f#5] ~@7",
})).s("gm_string_ensemble_1").gain(0.36)

// chords · string ensemble 1 · "STRINGS" · soft notes · G
const string_ensemble_1_soft = note("<~@31 [[g3,b3,d4]] ~@16 [[g3,b3,d4]] ~@17>").s("gm_string_ensemble_1").gain(0.26)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A B@7 A B@7 C B@7 C B@7 D A B@7 C B@7 D C B@13 E ~>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~@2", C: "~@4 x!2 ~ x!2 ~ x ~ x ~@3", D: "~@2 x!4 ~@2", E: "~@2 x!2 ~@4 x!2 ~@2 x!2 ~@2",
})).gain(0.15)

// drums · clap
const clap = s("cp").struct("<~ A@7 ~ A@7 ~ A@7 ~@10 A@7 ~@10 A@7 ~@8>".pickRestart({
  A: "~@2 x!2 ~@2 x ~",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<A B@7 C B@7 D B@7 D B@8 C B@7 D B@8 D B@14 ~>".pickRestart({
  A: "x!2 ~@2", B: "x!4", C: "~ x ~ x", D: "~ x ~@2",
})).gain(0.51)

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

// drums · open hat
const open_hat = s("oh").struct("<A ~@15 B ~@7 B ~@16 B ~@8 B ~@15>".pickRestart({
  A: "~ x", B: "~@5 x!3",
})).gain(0.51)

// drums · ride
const ride = s("rd").struct("<~@25 A@7 B ~@9 A@7 B ~@8 A@6 C ~>".pickRestart({
  A: "x!4", B: "x", C: "x!2 ~@2",
})).gain(0.51)

stack(
  bass, piano, electric_guitar_clean, string_ensemble_1, string_ensemble_1_soft, kick, snare, snare_soft, clap, hihat,
  hihat_soft, open_hat, ride
)

More by Carpenters