Strudelify
Oh Carol cover art

Collections

Oh Carol

Neil Sedaka

KeyA majorTempo122 bpm
0:00/0:00
// Oh Carol — Sedaka Neil
// 122 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level. 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@2 B C D E F G A H C@2 I J K L H@2 M C E N O ~ A P Q C J I F R H A C S J T H U A H C@2 J@2 T V H@2 C@2 J W O ~ H@2
  C M I J T X H A C@2 J Y Z AA AB AC
>`.pickRestart({
  A: "a2@5 ~ e3@6 e2@4", B: "f#2@6 c#3@6 c#2@3 ~", C: "f#2@3 c#3@3 c#2@2", D: "b2@6 f#3@5 ~ f#2@4",
  E: "b2@6 f#3@6 b2@3 ~", F: "e3@6 b3@5 ~ b2@4", G: "e3 ~ e3@2 d3 ~ d3@2 c#3 ~ c#3@2 b2 ~ b2@2", H: "a2@3 e3@3 e2@2",
  I: "b2@5 ~ f#3@6 f#2@4", J: "b2@3 f#3@3 f#2@2", K: "e3@5 ~ b3@6 b2@4", L: "e3@4 d3 ~ d3@2 c#3@2 c#3@2 b2@4",
  M: "f#2@6 c#3@5 ~ c#2@4", N: "e3@5 ~ b3@6 e3@4", O: "a2@3 ~@9 a2@3 ~", P: "a2@5 ~ e3@6 a2@4",
  Q: "f#2@5 ~ c#3@6 c#2@4", R: "e3@4 d3@4 c#3 ~ c#3@2 b2@4", S: "f#2@3 c#3@3 f#2@2", T: "e3@3 b3@3 b2@2",
  U: "e3 d3 c#3 b2", V: "e3@4 d3 ~ d3@2 c#3@4 b2@4", W: "e3@3 b3@3 e3@2", X: "e3 ~ e3@2 d3@4 c#3 ~ c#3@2 b2 ~ b2@2",
  Y: "e3@6 b3@6 e3@3 ~", Z: "a2@3 e3@3 a2@2", AA: "d3@3 a3@3 d3@2", AB: "a2@3 f#3@2 e3 c#3@2",
  AC: "a2@2 ~@2 a2 ~ a2 ~ a2@3 ~@5",
})).s("gm_acoustic_bass").gain(0.41)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A@5 B@2 C D E F@3 G@3 H I@4 J K@2 L M@7 N O@5 P@2 Q R@7 S T@3 U V W@7 X@2 Y Z@8 AA@3
>`.pickRestart({
  A: "[~@16 [e3,a3,c#4]@20 ~@12 [f#3,a3,c#4]@23 ~@9, ~@15 a2@21 ~@11 c#3@7 ~@26]/5", // A F#m
  B: "[[b2,f#3]@25 ~@7, [b3,d4]@23 ~@9]/2", C: "[e3,g#3,b3]@7 ~, d4@3 ~",
  D: "[e4,g#4] ~ [e4,g#4]@2 [d4,f#4] ~ [d4,f#4]@2 [c#4,e4] ~ [c#4,e4] ~ [b3,d4] ~ [b3,d4] ~", E: "[a3,c#4], a2@7 ~@9",
  F: "[~@16 [a3,c#4]@17 ~@15, ~@15 [c#3,f#3]@19 ~@14]/3", // A F#5
  G: "[[b2,f#3,b3,d4]@23 ~@9 [g#3,b3,d4]@12 ~@4, ~@31 e3@14 ~@3]/3", // Bm G#dim
  H: "e4@2 [e4,g#4]@2 [d4,f#4] ~ [d4,f#4]@2 [c#4,e4] ~ [c#4,e4] ~ [b3,d4] ~ [b3,d4] ~, e3 ~@3, g#4 ~@15", // E D C#m Bm
  I: "[[a3,c#4]@18 ~@14 [a3,c#4]@19 ~@13, ~@31 f#3@19 ~@14, ~@31 c#3@5 ~@28]/4", J: "[b2,f#3,b3,d4]@13 ~@3",
  K: "[[e3,g#3,b3,d4]@11 ~@5 [e3,a3,c#4]@4 ~@8 [a2,e3,a3,c#4]@2 ~@2, ~@15 a2@5 ~@12]/2", // E7 A
  L: "[e3,g#3,b3,e4]@13 ~@2 c#3, b2 ~@3", // E
  M: "[[e3,a3,c#4]@24 ~@8 [f#3,a3,c#4]@20 ~@12 [b3,d4]@21 ~@11 [g#3,b3,e4]@13 ~@3, ~@31 c#3@6 ~@26 [b2,f#3]@21 ~@11 e3@15 ~@2]/7", // A F#m Bm E B5
  N: "~@15 c#3",
  O: "[[e3,a3,c#4]@24 ~@8 c#4@23 ~@9 [b3,d4]@13 ~@3, ~@31 [f#3,a3]@23 ~@26, ~@31 c#3@2 ~@30 [b2,f#3]@13 ~@4]/5", // A Bm F#m B5
  P: "[[e3,g#3,b3,d4]@12 ~@4 [e3,a3,c#4]@13 ~@3, ~@15 a2@3 ~@14]/2", // E7 A
  Q: "[g#3,e4] ~ [g#3,e4] ~ [f#3,d4] ~ [f#3,d4] ~ [e3,c#4] ~ [e3,c#4]@2 [d3,b3] ~ [d3,b3] ~, e3 ~@7", // C#m D C#m G
  R: "[[e3,a3,c#4]@19 ~@13 [f#3,a3,c#4]@19 ~@13 [d3,f#3,b3,d4]@16 ~@16 [e3,e4]@13 ~@3, ~@31 c#3@19 ~@13 b2@18 ~@14 b2@13 ~@4, ~@96 [g#3,b3]@11 ~@5]/7", // A F#m Bm E G#m
  S: "[e4,g#4] ~ [e4,g#4]@2 [d4,f#4] ~ [d4,f#4]@2 [c#4,e4] ~ [c#4,e4]@2 [b3,d4] ~ [b3,d4] ~, e3 ~@7", // E D C#m Bm
  T: "[[e3,c#4]@5 ~@3 [a3,c#4]@4, a3@18 ~@13 f#3@16 ~, ~@31 c#3@8 ~@9]/3", U: "~@15 b2",
  V: "[f#3,b3,d4]@13 ~@3, d3@3 ~@13", // Bm
  W: "[[e3,g#3,b3]@13 ~@3 [e3,a3,c#4]@3 ~@9 [a2,e3,a3,c#4]@2 ~@2 [b3,e4]@11 ~@5 [a3,c#4]@23 ~@9 [f#3,a3,c#4]@24 ~@7 b2, d4@11 ~@4 a2@4 ~@12 [e3,g#3]@12 ~@4 a2@5 ~@60, ~@48 e3@21 ~@10 c#3@5 ~@28]/7", // E A E5 A F#m E
  X: "[[f#3,b3,d4]@3 ~, d3 ~@7]/2", Y: "[e3,g#3,b3,d4]",
  Z: "[~@16 [e3,a3,c#4]@25 ~@7 [f#3,a3,c#4]@19 ~@12 b2 ~ b2 ~@14 [b3,d4]@11 ~@5 [e3,a3,c#4]@13 ~@3, ~@15 a2@26 ~@6 c#3@20 ~@12 f#3@13 ~@3 [e3,g#3]@13 ~@20, ~@80 [b3,d4]@13 ~@35, ~@80 d3@3 ~@28 a2@14 ~@3]/8", // A F#m Bm A E Bm
  AA: "[[d3,f#3,a3,d4]@11 ~@5 [e3,a3,c#4]@13 ~@3 [e3,a3,c#4] ~@3 [a3,c#4,a4] ~ [a3,c#4,a4] ~ [a3,c#4,a4]@2 ~@6, ~@15 a2@14 ~@2 a2@2 ~@15]/3", // D A
})).s("gm_electric_guitar_clean").gain(0.26).pan(0.3)

// other · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  ~ A B C@2 D@2 E F B@2 C@2 D@2 G H I B C J D K L ~ A@2 C@2 D@2 M N B O C@2 D M P H B Q C R D S T H B@2 C R U V W ~ B P
  C R D U M X Y P C R U T Z AA AB AC
>`.pickRestart({
  A: "a4 ~ a4 c#5 e5@2 a5 ~@3 e5 ~ c#5 ~ e5 ~", B: "a4 ~ a4 c#5 e5 ~ a5 ~@3 e5 ~ c#5 ~ e5 ~",
  C: "f#4 ~ f#4 a4 c#5 ~ f#5 ~@3 c#5 ~ a4 ~ c#5 ~", D: "b4 ~ b4 d5 f#5 ~ b5 ~@3 f#5 ~ d5 ~ f#5 ~",
  E: "e4 ~ e4 g#4 b4@2 e5 ~@3 b4 ~ g#4 ~ e4 ~",
  F: "[e5,g#5] ~ [e5,g#5] ~ [d5,f#5] ~ [d5,f#5] ~ [c#5,e5,f#5] ~ [c#5,e5] ~ [b4,d5] ~ [b4,d5] ~", // E D F#7 C#m Bm
  G: "e4 ~ e4 g#4 b4 ~ e5 ~@3 b4 ~ g#4 ~ e4 ~",
  H: "[e5,g#5] ~ [e5,g#5] ~ [d5,f#5] ~ [d5,f#5] ~ [c#5,e5] ~ [c#5,e5] ~ [b4,d5] ~ [b4,d5] ~", // E D C#m Bm
  I: "[a4,c#5] ~ a4 c#5 e5 ~ a5 ~@3 e5 ~ c#5 ~ e5 ~", J: "f#4 ~ f#4 a4 c#5 ~ f#5 ~@3 c#5 ~ a4 ~ [f#4,c#5] ~",
  K: "e4 ~ e4 g#4 b4@2 d5 ~@3 b4 ~ e4 ~ g#4 ~", L: "[a4,c#5,e5] ~@5 [a4,c#5,e5] ~",
  M: "e4 ~ e4 g#4 b4 ~ d5 ~@3 b4 ~ g#4 ~ e4 ~", N: "e4 ~ e5 ~ e5 ~ e4@9 ~",
  O: "a4 ~ a4 c#5 e5 ~ a5 ~@3 e5 ~ a4 ~ c#5 ~", P: "a4 ~ a4 c#5 e5 ~ a5 ~@3 e5 ~ c#5 ~ a4 ~",
  Q: "a4 ~ a4 c#5 e5@2 a5@2 ~@2 e5 ~ c#5 ~ e5 ~", R: "f#4 ~ f#4 a4 c#5 ~ f#5 ~@3 c#5 ~ a4 ~ f#4 ~",
  S: "b4 ~ b4 d5 f#5 ~ b5 ~@3 f#5 ~ d5 ~@3", T: "e4 ~ e4 g#4 b4@2 d5 ~@3 b4 ~ g#4 ~ e4 ~",
  U: "b4 ~ b4 d5 f#5 ~ b5 ~@3 f#5 ~ d5 ~ b4 ~", V: "e4 ~ e4 g#4 b4 ~ [c#5,d5] ~@3 b4 ~ g#4 ~ e4 ~",
  W: "a4 ~@11 a4@2 ~@2, ~@12 e5 ~@3", X: "e4 ~ e5 ~ e5 ~ e4 ~ e4@5 ~ e4 ~",
  Y: "a4 ~ a4 c#5 e5 ~ a5 ~@3 e5@2 c#5 ~ e5 ~", Z: "a4 ~ a4 c#5 e5 ~ a5@2 ~@2 e5 ~ c#5 ~ a4 ~",
  AA: "a4 ~ a4 d5 f#5 ~ a5 ~@3 f#5 ~ d5 ~ a4 ~", AB: "a4 ~ c#5 ~@3 a5 ~@3 e5 ~ c#5 ~ e5 ~",
  AC: "a4 ~@3 [c#5,a5] ~ [c#5,a5] ~ [c#5,a5] ~@7", // F#m
})).s("gm_pizzicato_strings").gain(0.31).pan(0.6)

// chords · drawbar organ · "ELEC ORGAN"
const drawbar_organ = note("<~ A@4 B@4 C@8 D@7 ~ E@7 F@7 G H I@4 J@3 K L@4 M@3 ~ N@7 O@7 P@3 Q>".pickRestart({
  A: "[e4@31 ~ f#4@31 ~, [a4,c#5]@63 ~]/4", // A
  B: "[f#4@30 ~@2 g#4@16 [e5,g#5] ~ [e5,g#5] ~ [d5,f#5] ~ [d5,f#5] ~ [c#5,e5] ~ [c#5,e5] ~ [b4,d5] ~ [b4,d5] ~, b4@3 ~, d5@23 ~@9, ~@32 e4@19 ~@13]/4", // E D C#m Bm
  C: "[e4@32 ~@64 g#4@16 [e5,g#5] ~ [e5,g#5]@2 [d5,f#5] ~ [d5,f#5]@2 [c#5,e5] ~ e5@2 [b4,d5] ~ [b4,d5] ~, [a4,c#5]@4 b4@3 ~, ~@16 f#4@32 e4@9 ~@7, ~@64 d5@46 ~@12 c#5 ~@5]/8", // E D C#m Bm A
  D: "[~@2 e4@30 ~@48 g#4@15 ~ [a4,c#5]@4 ~@8 [a3,e4,a4]@3 ~, [a4,c#5]@4 [b4,d5]@2 ~, ~@8 f#4@12 e4@5 ~@3]/7", // A A5 A Bm
  E: "[e4@2 ~@4 [e4,g#4], [a4,c#5]@63 ~ [b4,d5]@48, ~@2 f#4@4 ~]/7", // E A Bm
  F: "[e4@2 e5 ~ e5@2 e4 ~@89 [e4,g#4]@15 ~, ~@8 e4@40 f#4@47 ~@17, ~@16 [a4,c#5]@63 ~ [b4,d5]@31 ~]/7", // E A Bm
  G: "[e4,a4,c#5]", H: "[e5,g#5] ~ [e5,g#5] ~ [d5,f#5] ~ f#5@2 [c#5,e5] ~ [c#5,e5] ~ [b4,d5] ~ [b4,d5] ~, ~@6 d5 ~@9",
  I: "[e4@30 ~@2 f#4@31 ~, [a4,c#5]@63 ~]/4", J: "[f#4@31 ~ e4@15 ~, [b4,d5]@15 ~, ~@32 g#4@9 ~@7]/3",
  K: "[e5,g#5] ~ [e5,g#5]@2 [d5,f#5] ~ [d5,f#5] ~ [c#5,e5] ~ e5@2 [b4,d5] ~ [b4,d5] ~, ~@10 c#5 ~@5", // E D C#m Bm
  L: "[e4@32 f#4@31 ~, [a4,c#5]]/4", // A
  M: "[f#4@15 ~ g#4@15 ~ [a4,c#5]@3 ~@9 [a3,e4,a4]@3 ~, [b4,d5]@31 ~@17, ~@16 e4@19 ~@13]/3", // A A5 Bm
  N: "[e4@31 ~@65 g#4@16, [a4,c#5]@63 ~ [b4,d5]@48, ~@32 f#4@63 ~ e4@14 ~@2]/7", // A Bm
  O: "[e4@2 e5 ~ e5@2 ~@90 [e4,g#4]@15 ~, ~@6 e4@42 f#4@47 ~@17, ~ [a4,c#5]@4 [b4,d5]@2]/7", // E A Bm
  P: "[[e4,c#5]@16 [d4,f#4,d5]@16 [e4,c#5]@15 ~, a4@47 ~]/3", // C#m D C#m
  Q: "[e4,a4,c#5] ~@3 [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~@7", // A
})).s("gm_drawbar_organ").gain(0.36).pan(0.4)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@7 A ~@6 B C ~@7 D ~@7 A ~@7 A ~@6 B C ~@7 A ~@10>".pickRestart({
  A: "~@6 x!2", B: "~@3 x", C: "~@7 x", D: "~@5 x!3",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<~ A@22 B ~ A@30 B ~ A@17 C>".pickRestart({
  A: "x!8", B: "x ~@2 x", C: "x ~ x!3 ~@3",
})).gain(0.46)

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

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

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

// drums · cowbell
const cowbell = s("cb").struct("<~ [~@6 x!2]!22 ~@2 [~@6 x!2]!30 ~@2 [~@6 x!2]!17 [~@2 x!3 ~@3]>").gain(0.41)

// drums · claves
const claves = s("clave:2").struct("<~ A@7 B A@7 ~ A@6 B ~ A@7 ~ A@7 B A@7 B A@6 C ~ A@7 D A@9 E>".pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "x", C: "x ~@2 x", D: "x ~@2 x ~@4", E: "x ~ x!3 ~@3",
})).gain(2.01)

stack(
  bass, electric_guitar_clean, pizzicato_strings, drawbar_organ, kick, snare, low_tom, hihat, mid_tom, high_tom, crash,
  cowbell, claves
)

More by Neil Sedaka