Strudelify
Sweet Caroline cover art

1987 · Sweet Caroline

Sweet Caroline

Neil Diamond

KeyG majorTempo120 bpm
0:00/0:00
// Sweet Caroline — Neil Diamond
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 13 "MUTE GUITAR" electric guitar muted (copy of ch 5 "EL.GUITAR" electric guitar clean)
// note: Full arrangement: all 109 bars on a 24-step grid, each part at one level. 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.

// other · acoustic guitar steel · "GUITAR"
const acoustic_guitar_steel = note("<A B C D E F G H ~@75 A B C D E F G ~@19>".pickRestart({
  A: "a2@2 b2 c3@6 a2@2 b2", B: "c3@2 b2 a2@3 c3@2 b2 a2@3", C: "c3@2 d3 e3@6 c3@2 d3", D: "e3@2 d3 c3@3 e3@2 d3 c3@3",
  E: "e3@2 f#3 g3@6 e3@2 f#3", F: "g3 f#3", G: "b3 a3", H: "g3",
})).s("gm_acoustic_guitar_steel").gain(0.49)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@34 A B@2 ~@3 C B@2 D E ~@9 F G@2 H@2 I J K@2 L@2 M@2 N@2 O@2 P Q B@2 ~@3 C B@2 ~@10 R S@2 ~@3 C B@2 T@2 U V@3 ~@3
>`.pickRestart({
  A: "~@12 [c6,e6]@3 ~@3 [b3,b5,d6]@4 ~@2, ~@12 c4@5 ~@7", B: "[e3,e5,g5]/2", C: "~@4 [c4,c6,e6] ~ [b3,b5,d6] ~",
  D: "[d3,f#5,a5] [c3,e5,g5]", E: "[b2,d5,f#5] [a2,c5,e5]", F: "~ d4 g4 d4", G: "[e4@6 ~ [f#3,a3]]/2", H: "[g3,b3]/2",
  I: "[a3,d5,f#5] [b3,e5,g5] [a3,f#5,a5] [g3,e5,g5]", J: "[f#3,d5,f#5] [e3,c5,e5] [d3,b4,d5] [c3,a4,c5]",
  K: "[g2,g4,b4]/2", L: "[g2,g4,b4,e5]/2", M: "[d3,a4,d5,f#5]/2", N: "[c3,c5,e5,g5]/2",
  O: "[d5@7 [b2,b4,d5] [c3,c5,e5] [d3,d5,f#5] [e3,e5,g5] [f#3,f#5,a5], [d3,f#5,a5]@5 ~@3]/2", P: "[g3,g5,b5]",
  Q: "[g3,g5,c6]@4 [c4,c6,e6] ~ [b3,b5,d6] ~", R: "~@4 [c4,c6,e6] ~ [b5,d6] ~, ~@18 b3@5 ~", S: "[[e5,g5], e3@23 ~]/2",
  T: "[[d3,d5,f#5,a5]@13 ~@5 [d3,d5,f#5]@6]/2", U: "[e3,e5,g5]@11 [f#3,f#5,a5]@12 ~", V: "[[g3,d5,g5]@7 ~]/3",
})).s("gm_string_ensemble_1").gain(0.44)

// chords · trumpet
const trumpet = note("<~@32 A B ~@4 A C ~@30 A C ~@4 A C ~@17 A C ~@4 D E F@3 ~@3>".pickRestart({
  A: "~@2 [d4,b4] ~ [e4,c5] ~ [f#4,d5] ~ [g4,e5] ~ [a4,f#5] ~", B: "[b4,g5]@3 ~", C: "[b4,g5]@7 ~@5", D: "~ [a4,f#5]",
  E: "[b4,g5]@11 [c5,a5]@13", F: "[[d5,g5,b5]@7 ~]/3",
})).s("gm_trumpet").gain(0.5)

// chords · electric guitar clean · "EL.GUITAR"
const electric_guitar_clean = note(`<
  A@7 B@2 C@2 B@2 A@2 B@2 D@2 B@2 E F G@2 H@2 I@2 J@2 K L B C@3 M N B C@3 O P B@2 C@2 B@2 A@2 B@2 D@2 B@2 E F G@2 H@2
  I@2 J@2 K L B C@3 M N B C@3 O P A@7 B C@3 M N B C@3 Q@3 R@3 ~@3
>`.pickRestart({
  A: "[d2,a2] ~@2 [d2,a2] ~@2 [d2,a2] ~@2 [d2,a2] ~@2", B: "[g2,d3] ~@2 [g2,d3] ~@2 [g2,d3] ~@2 [g2,d3] ~@2",
  C: "[c3,g3] ~@2 [c3,g3] ~@2 [c3,g3] ~@2 [c3,g3] ~@2", D: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~",
  E: "[d2,a2] ~ [d2,b2] ~ [d2,c3] ~ [d2,b2] ~", F: "[d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~", G: "[g2,d3]",
  H: "[g2,e3]", I: "[a2,f#3]", J: "[c3,g3]", K: "[d3,a3] ~ [d3,a3] ~ d3 ~ [d3,a3] ~, ~@12 a3 ~@11",
  L: "[d3,a3] ~ a3 ~ [d3,a3] ~ [d3,a3] ~, ~@6 d3 ~@17", M: "[d3,a3] ~@2 [d3,a3] ~@2 [d3,a3] ~@2 d3@2 ~, ~@9 a3 ~@2",
  N: "[d3,a3] ~@2 [d3,a3] ~@2 [d3,a3] ~@2 [d3,a3] ~@2", O: "[d3,a3]@5 ~ [c3,g3]@5 ~", P: "[b2,f#3]@5 ~ [a2,e3]@5 ~",
  Q: "[d3@36 f#3@12 [e3,g3]@11 [f#3,a3]@12 ~, a3@59 ~@13, ~ d3]/3", R: "[[b2,g3]@7 ~]/3",
})).s("gm_electric_guitar_clean").gain(0.32)

// chords · pad poly · "PAD"
const pad_poly = note(`<
  A@2 B@2 C@3 D@2 E@2 F@2 B@2 F@2 E@2 G@2 B@2 H@2 I@2 J@2 K@2 L@2 ~ M@3 N@2 ~ O@3 P Q D@2 E@2 F@2 B@2 F@2 E@2 G@2 B@2
  H@2 I@2 J@2 K@2 L@2 ~ M@3 N@2 R O@3 P Q A@2 B@2 C@3 S M@3 N@2 R O@3 T U V W@3 ~@3
>`.pickRestart({
  A: "[[a3,f#4], d4@23 ~]/2", B: "[[a3,d4,f#4]@23 ~]/2", C: "[[a3,d4,f#4]@35 ~]/3", D: "[[b3,g4], d4@23 ~]/2",
  E: "[[c4,e4,g4]@23 ~]/2", F: "[[b3,d4,g4]@23 ~]/2", G: "[[b3,g4]@23 ~, d4]/2", H: "[[b3,g4]@23 ~, d4@11 ~]/2",
  I: "[[b3,e4,g4]@23 ~]/2", J: "[[d4,f#4,a4]@23 ~]/2", K: "[e4,g4,c5]/2", L: "[a3,d4,f#4]/2", M: "[[c4,e4,g4]@35 ~]/3",
  N: "[[f#4,a4]@11 ~, d4@23 ~]/2", O: "[[c4,e4]@35 ~, g4@17 ~]/3", P: "[f#4,a4]@6 [e4,g4]@5 ~",
  Q: "[d4,f#4]@6 [c4,e4]@5 ~", R: "[b3,g4], d4@11 ~", S: "[b3,d4]@11 ~, g4", T: "[f#4,a4]", U: "~ [d4,f#4]",
  V: "[e4,g4]@11 [f#4,a4]@12 ~", W: "[[d4,g4,b4]@7 ~]/3",
})).s("gm_pad_poly").gain(0.18)

// other · baritone sax · "BARI SAX"
const baritone_sax = note("<~@32 A B ~@4 A C ~@30 D C ~@4 D C ~@17 D C ~@4 E F G@3 ~@3>".pickRestart({
  A: "~@3 b2@2 ~@3 c3@2 ~@2 d3@2 ~ e3@2 ~@3 f#3@2 ~@2", B: "g3@3 ~", C: "g3@7 ~@5", D: "~@2 b2 ~ c3 ~ d3 ~ e3 ~ f#3 ~",
  E: "~ d2", F: "e2@11 f#2@13", G: "[g2@7 ~]/3",
})).s("gm_baritone_sax").gain(0.5)

// chords · rock organ · "ORGAN"
const rock_organ = note(`<
  A B C D C E F G ~ H ~ I ~@3 J ~ H ~ J ~ K L M@2 N@2 O@2 P@2 Q@2 R S T@2 U@2 R S T@2 V W I ~ H ~ I ~@3 J ~ H ~ J ~ K L
  M@2 N@2 O@2 P@2 Q@2 R S T@2 X@2 R S T@2 V W A B C D C E F Y S T@2 X@2 R S T@2 Z AA AB AC@3 ~@3
>`.pickRestart({
  A: "c5@2 d5 e5@6 c5@2 d5", B: "e5@2 d5 c5@3 e5@2 d5 c5@3", C: "[c5,e5]@2 [d5,f#5] [e5,g5]@6 [c5,e5]@2 f#5, ~@22 d5 ~",
  D: "[e5,g5]@4 f#5@2 [c5,e5]@6 [e5,g5]@4 [d5,f#5]@2 [c5,e5]@5 ~, ~@4 d5 ~@19", E: "[e5,g5] [d5,f#5]",
  F: "[b5,d6] [a5,c6]", G: "[g5,b5,d6]@2 ~ [g5,b5,d6]@2 ~@7", H: "[c6,e6]@2 ~ [c6,e6]@3 ~@6",
  I: "[b5,d6]@2 ~ [b5,d6]@2 ~@7", J: "[b5,d6]@2 ~ [b5,d6]@3 ~@6", K: "[d5,f#5] [e5,g5] [f#5,a5] [e5,g5]",
  L: "[d5,f#5] [c5,e5] [b4,d5] [a4,c5]", M: "[[b4,g5], d5@23 ~]/2", N: "[[b4,e5,g5]@23 ~]/2", O: "[[d5,f#5,a5]@23 ~]/2",
  P: "[[e5,g5,c6]@23 ~]/2", Q: "[[d5,f#5,a5]@7 [d5,f#5] [e5,g5] [f#5,a5] [g5,b5] [a5,c6]]/2", R: "[g5,b5,d6]",
  S: "[g5,c6,e6]@2 [g5,c6,e6] [g5,b5,d6]", T: "[e5,g5,c6]/2",
  U: "[f#5@7 [d5,f#5] [e5,g5] [f#5,a5] [g5,b5] [a5,c6], [a5,d6]@5 ~@3]/2", V: "[f#5,a5,d6] [e5,g5,c6]",
  W: "[d5,f#5,a5] [c5,e5,g5]", X: "[[f#5,a5]@5 [f#5,a5] [g5,b5] [a5,c6], d6@3 ~]/2", Y: "[g5,b5]", Z: "[f#5,a5,d6]",
  AA: "~ [d5,f#5]", AB: "[e5,g5]@11 [f#5,a5]@12 ~", AC: "[[d5,g5,b5]@7 ~]/3",
})).s("gm_rock_organ").gain(0.12)

// other · timpani
const timpani = note(`<
  ~@33 A B@3 C D A B@3 E F G ~ G ~ G ~ H ~ G ~ G ~ G ~ I J K L@3 M@2 L@2 N O A B@3 C D A B@3 E F P Q O Q P O R A B@3 C D
  A B@3 S@3 T@3 ~@3
>`.pickRestart({
  A: "g2 ~ d2 ~ g2 ~ d2 ~", B: "c3 ~ g2 ~ c3 ~ g2 ~", C: "d3@3 ~@3 a2@3 ~@3 d3@3 ~@3 d3@2 a2@2 f#2@2",
  D: "d2@2 ~ d2@3 e2@3 f#2@2 ~", E: "d3 c3", F: "b2 a2", G: "g2!2 ~@2", H: "d2!2 ~@2", I: "d2@2 ~ d2!4 ~@2 d2!3",
  J: "d2 ~@2 d2!4 ~@2 d2 ~@2", K: "g2@4 ~ g2 g2@5 ~", L: "g2@4 g2!2 g2@5 ~", M: "a2@4 a2!2 a2@5 ~",
  N: "d3@2 ~ a2@2 ~ d3@2 ~ d3 a2 f#2", O: "d2@2 ~ d2@2 ~ d2@2 ~ d2@2 ~", P: "d2 ~@2 d2@2 ~ d2@2 ~ d2@2 ~",
  Q: "d2@2 ~ d2@2 ~ d2@2 ~ d2 ~ a2", R: "d2!12", S: "[d3@36 ~@12 e3@11 f#3@12 ~, ~ d3]/3",
  T: "[g2 d2 g2 d2 ~ g2 d2 g2 d2 g2 ~ d2 g2 d2 g2 ~ d2 g2 d2 ~ g2 d2 g2 ~ d2 g2 d2 ~ g2 d2 ~ g2 d2 g2 ~ d2 g2 d2 ~ g2 d2 g2 ~ d2 g2 ~ d2 g2 d2 ~ g2 d2 g2 ~ d2 g2 d2 ~ g2 d2 ~ g2 d2 ~@9, g3@7 ~]/3",
})).s("gm_timpani").gain(0.45)

// bass · fretless bass · "BASS"
const bass = note(`<
  A B A B A@3 C@6 D@2 C@6 E F G H G@2 I@2 J@2 K L M N@3 K L M N@3 O P C@6 D@2 C@6 E F G H G@2 I@2 J@2 K L M N@3 K L M
  N@3 O P A B A B A@3 M N@3 K L M N@3 Q@2 R S@3 ~@3
>`.pickRestart({
  A: "d2 ~ d2 ~ d2 ~ d2 ~", B: "d2@3 ~@3 d2@3 ~@3 d2@3 ~@3 d2@3 ~ a1@2", C: "g1 ~ g1 ~ g1 ~ g1 ~",
  D: "d1 ~ d1 ~ d1 ~ d1 ~", E: "d2@6 d2@5 a1", F: "d2 c2 b1 a1", G: "g1@5 g1 g1@6", H: "g1@5 g1 g1@5 ~",
  I: "a1@5 a1 a1@6", J: "c2@5 c2 c2@6", K: "d2@3 ~@3 a1@3 ~@3 d2@3 ~@3 d2@2 a1@2 f#1@2", L: "d1@2 ~ d1@3 e1@3 f#1@2 ~",
  M: "g1 ~ d1 ~ g1 ~ d1 ~", N: "c2 ~ g1 ~ c2 ~ g1 ~", O: "d2 c2", P: "b1 a1", Q: "[d2@3 d2]/2", R: "e2@11 f#2@12 ~",
  S: "[g2@7 ~]/3",
})).s("gm_fretless_bass").gain(0.6)

// chords · drawbar organ · "ORGAN"
const drawbar_organ = note("<~@46 A B@2 C@2 ~@2 D@4 E@2 F@2 ~@48>".pickRestart({
  A: "~ d4 g4 d4", B: "e4/2", C: "[g3,d4]/2", D: "[[b3,d4]@47 ~ [c4,e4]@48, g4]/4", E: "[b3,d4,g4]/2",
  F: "[a3,d4,f#4]/2", // D
})).s("gm_drawbar_organ").gain(0.55)

// chords · pizzicato strings · "PIZZACATOSTRINGS" · Em F#m Em F#m
const pizzicato_strings = note(`<
  ~@83
  [~@2 a5 ~, ~@12 a4 ~@11]
  [~@12 [e4,g5] ~@5 [f#4,a5] ~@5]
  [~@12 [f#4,a5] ~@11]
  [~@12 [e4,g5] ~@5 [f#4,a5] ~@5]
  [~@12 [f#4,a5] ~@11]
  ~@21
>`).s("gm_pizzicato_strings").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A@2 B C D C D C D C D C D C D C D E F E@8 G A H I H J@2 K J I H J E@2 C D C D C D C D C D C D C D E F E@8 G A
  H I H J@2 K J I H J E@2 A B A B A@2 B H I H J@2 K J I H J C J L C ~@5
>`.pickRestart({
  A: "x!4", B: "x ~@2 x ~@2 x ~@2 x ~ x", C: "x", D: "~@11 x", E: "x ~@4 x!2 ~@5", F: "~@2 x!2 ~@2 x ~@2 x ~@2",
  G: "x ~@4 x!2 ~@4 x", H: "x ~@5 x ~@4 x", I: "x ~ x!2", J: "x!2", K: "x ~@4 x!2 ~ x ~@2 x", L: "x ~@10 x ~@12",
})).gain(0.34)

// drums · rim
const rim = s("rim").struct("<~@23 [~ x ~ x]!9 ~@29 [~ x ~ x]!9 ~@39>").gain(0.49)

// drums · snare
const snare = s("sd").struct("<~@32 A B@12 ~@25 A B@12 ~@7 B@10 ~ C ~@7>".pickRestart({
  A: "~ x!3", B: "~ x ~ x", C: "x",
})).gain(0.29)

// drums · hihat
const hihat = s("hh").struct("<~@7 A B@14 C D@22 A B@14 C D@22 ~@7 D@10 E F G ~@6>".pickRestart({
  A: "x!2 ~ x", B: "~ x ~ x", C: "~ x!3", D: "x!4", E: "x", F: "x!2", G: "x ~@10 x ~@12",
})).gain(0.29)

// drums · crash
const crash = s("cr").struct(`<
  ~@33 A B A ~@4 B A ~ C@2 ~@26 A B A ~@4 B A ~ C@2 A ~ A ~ A ~ C A B A ~@4 B A ~ A D E A ~ F ~@3
>`.pickRestart({
  A: "x", B: "~@2 x!2", C: "x!2", D: "~ x", E: "x ~@10 x ~@12", F: "~@5 x ~@2",
})).gain(0.29)

stack(
  acoustic_guitar_steel, string_ensemble_1, trumpet, electric_guitar_clean, pad_poly, baritone_sax, rock_organ, timpani,
  bass, drawbar_organ, pizzicato_strings, kick, rim, snare, hihat, crash
)

More by Neil Diamond