Strudelify
Holly Holy cover art

1969 · Touching You, Touching Me

Holly Holy

Neil Diamond

KeyA majorTempo125 bpm
0:00/0:00
// Holly Holy — Neil Diamond
// 125 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@4 A B@2 ~ C@3 ~ D@3 E F G ~ A B@2 ~ C@3 ~ D@3 E F G ~ H ~ I J K L@2 ~ M ~@3 N O P@2 N Q R@3 S@3 T@3 ~ C@3 ~ U@3 V F
  W@2 H ~ I J K L@2 ~ M ~@3 N O P@2 N Q R@3 S@3 X@3 ~ X@3 ~ Y@3 ~ Y@3 ~ A Z AA ~@2
>`.pickRestart({
  A: "g#4@3 f#4", B: "[a4@12 g#4@7 f#4 e4@4 ~@8]/2", C: "[g#4@6 f#4 a4@7 g#4 b3@5 ~@4]/3",
  D: "[~@5 b4 c#5 c#5@5 b4 e5@2 b4@5 b4 a4@2 g#4]/3", E: "e4@3 f#4 f#4@2 ~@2", F: "~@5 e4!2 g4",
  G: "g#4@3 f#4 e4@8 ~@4", H: "~@3 e4@2 e4 c#4 b3", I: "~@3 g#4@2 g#4 f#4 g#4", J: "b3 ~", K: "~@3 b4@2 b4 a4 b4",
  L: "[~@10 e5@2 e5@2 e5@5 c#5 b4@4 ~@8]/2", M: "e5 ~@3", N: "~@2 a4!5 c5", O: "b4 a4!2 a4@2 a4!2 c5",
  P: "[c#5 a4!2 a4@2 a4!2 a4@5 ~@4]/2", Q: "c#5 a4@2 a4@2 a4!2 c5", R: "[c#5 a4@2 a4@2 a4!2 a4@5 ~ a4!2 a4@9]/3",
  S: "[~@5 a4!2 b4@15 a4@2]/3", T: "[g#4@12 f#4@2 a4@14 g#4@2 g#4@5 f#4 e4@4 ~@8]/3",
  U: "[~@8 b4@2 c#5@4 c#5@6 ~@6 b4@2 c#5@2 b4@10 b4@3 a4@3 g#4@2]/3", V: "e4@3 f#4 f#4@4",
  W: "[g#4@3 f#4 e4@16 ~@12]/2", X: "[g#4@6 f#4 a4@7 g#4 g#4@3 ~@6]/3", Y: "[b4@6 a4 c#5@7 b4 b4@3 ~@6]/3",
  Z: "a4@3 g#4", AA: "g#4",
})).s("gm_string_ensemble_1").gain(0.2).pan(0.9)

// other · tuba
const tuba = note(`<
  A@2 B@2 C D@2 ~ E@3 ~ F@3 G H I ~ C D@2 ~ E@3 ~ F@3 G H I ~ J K L M N O P@2 Q@4 ~@2 R@2 S T U@3 V W X Y Z@2 AA AB@3 ~
  AC@2 AD AE AF AG ~ J K L M N O P@2 Q@4 ~@2 R@2 S T U@3 V W X AH@3 ~ AH@3 ~ AI@4 AJ@4 AK AL AM@2 AN
>`.pickRestart({
  A: "~ e3 e4 e3 ~ e3 e4 e3", B: "[~ e3 e4 e3 ~ b3 d4 e4@2 e3 e4 e3 ~ b3 d4 e4]/2", C: "g#3@3 f#3",
  D: "[a3@12 g#3@7 f#3 e3@4 ~@8]/2", E: "[g#3@6 f#3 a3@7 g#3 b2@5 ~@4]/3",
  F: "[~@5 b3 c#4 c#4@5 b3 e4@2 b3@5 b3 a3@2 g#3]/3", G: "e3@3 f#3@3 ~@2", H: "g#4@4 a4 e4!2 g4",
  I: "g#4@3 f#4 e4@8 ~@4", J: "e4@2 ~ e3@2 e3 c#3 b2", K: "e4@2 e4 a4", L: "e4@2 ~ e4@2 ~@3", M: "b3@3 a4",
  N: "e4@2 ~ b3@2 b3 a3 b3", O: "e4@4 ~ e4!3", P: "e4!2 ~@2 e4!2 ~@2", Q: "a4!2 ~ a4!3 ~ a4",
  R: "[c#4 a3!2 a3@2 a3!2 a3@5 ~@4]/2", S: "~@2 a3!5 c4", T: "c#4 a3@2 a3@2 a3!2 c4",
  U: "[c#4 a3@2 a3@2 a3!2 a3@5 ~ a3!2 a3@3 a3@2 a3@2 a3@2]/3", V: "a4@2 a4@2 ~@3 g#3", W: "f#4!4", X: "f#4!3 a3",
  Y: "e4@2 e4 g#3 ~ g#3 f#3 a2", Z: "[e4@4 e4@2 ~@6 e4@2 e4@5 ~@5 e4@4 ~@4]/2", AA: "g#4 ~@3",
  AB: "[g#3@6 f#3 a3@7 g#3 b2@3 e3 ~@3 e3 ~]/3", AC: "[g#4@4 b3 c#4@2 c#4@3 c#4 f#4 c#4 ~@3]/2",
  AD: "~@8 b3@3 a3@3 a3@2", AE: "e3@3 f#3@5", AF: "g#4@4 a4 e3!2 g3", AG: "g#3@3 f#3 e3@12",
  AH: "[g#4@2 e4 g#3 ~ g#3 f#4 a4@7 g#4 g#4@3 ~@6]/3",
  AI: "[b4@6 a4 c#5@7 b4 b4@2 ~ b4 ~ b4 d5@2 e5@2 f#5@2 g#5@2 e5 b4@2]/4",
  AJ: "[b4@6 a4 c#5@7 b4 b4@2 ~ b4 ~@2 d5@2 e5@2 f#5@2 g#5@2 e5 b4@2]/4", AK: "g#4@3 f#4", AL: "a4@3 g#4", AM: "g#4/2",
  AN: "e4",
})).s("gm_tuba").gain(0.2).pan(1)

// other · french horn
const french_horn = note(`<
  ~@4 A B A@3 B A@2 C@3 ~ D E A@2 B A@3 B A@2 C@3 ~ D E A ~ F ~ F G H I J K L M L N@2 O P N@2 O Q@2 R S T U ~ V W@2 X Y
  Z AA@2 AB ~ AC A@2 ~ F ~ F G H I J K L M L N@2 O P N@2 O Q@2 R S T AD AE@2 AF AD AG@3 AH@3 AI AJ@4 AK AL AK@2 AM
>`.pickRestart({
  A: "~@2 b3 ~@3 b3 ~", B: "~@2 c#4 ~@3 c#4 ~", C: "[b3@4 ~@3 e4@5 ~@3 e4@5 b3@4]/3", D: "c#4 ~", E: "~@3 b3 ~@2 b3 ~",
  F: "~@3 c#4", G: "~@3 e4@2 ~@3", H: "~@6 a4 ~", I: "~@4 e3!2 ~@2", J: "e3!2 ~@2 e3!2 ~@2", K: "c#4!2 ~ c#4!2 d4 ~ d4",
  L: "d4!2 ~ d4!3 ~ d4", M: "c#4!2 ~ c#4 d4!2 ~ d4", N: "[c#4!2 ~ c#4 d4@3 d4@4 d4@4 d4]/2", O: "c#4@3 d4@5",
  P: "g4 g#4 ~ g#4 f#4!2 ~ f#4", Q: "[d4!2 ~ d4!3 ~ c#4@3 c#4@2 c#4@2 c#4@2]/2", R: "c#4@2 c#4@2 c#4 ~ c#4 d#4",
  S: "b3!4", T: "b3!3 d4", U: "g#3 ~@3", V: "~@6 g#3 ~", W: "b3@2 b3 ~@3 b3 ~", X: "c#4@2 c#4 a3 ~ a3 c#4 b3",
  Y: "~@2 b3 e4 ~ e3 b3 e3", Z: "~@2 b3 ~@5", AA: "[b3@4 d4 ~@2 e4@3 e4 ~ e4 ~ e4 d#4]/2", AB: "d4@8 d#4@3 ~@5",
  AC: "c#4@4 c#4 ~ c#4 ~", AD: "b3 ~@3", AE: "[c#4@2 c#4 ~@3 e4 e4@3 ~@2 b2 d3@2 e3]/2", AF: "e3 f#3@2 e3@2 d3 b2@2",
  AG: "[c#4@2 c#4 ~@3 c#4 b3@3 ~@2 b2 d3@2 e3@2 f#3@2 e3@2 d3 b2@2]/3",
  AH: "[e4@2 e4@2 e4 e4@2 e4@3 e4@2 e4 e4@2 e4@2 ~ e4 ~ b2@2 d3@2]/3", AI: "e3@3 e3 b2@2 d3@2",
  AJ: "[e4@2 e4@2 e4 e4@2 e4@3 e4@2 e4 e4@2 e4@2 ~ e4 ~@4 e4@2 f#4@2 g#4@2 e4 b3@2]/4", AK: "b3", AL: "c#4", AM: "g#3",
})).s("gm_french_horn").gain(0.29).pan(0.2)

// other · piano · "Piano 2"
const piano = note(`<
  ~@4 A B C ~ C B ~@2 D@3 E@2 ~@2 A B C ~ C B ~@2 D@3 E@2 ~@3 F ~ F ~@4 G@4 ~@3 H ~@4 I@2 J K L M N O P ~@2 C ~@3 E@2 Q
  A ~ F ~ F ~@4 G@4 ~@3 H ~@4 I@2 J K R M ~@2 R M ~@2 S@3 ~ T@3 ~ U V U@2 W
>`.pickRestart({
  A: "~@2 g#3 ~@3 g#3 ~", B: "~@2 a3 ~@3 a3 ~", C: "~@2 g#3 ~@5", D: "e3 e3@2 e3", E: "~ e3 a3@2 ~ e3 a3@2",
  F: "~@3 a3", G: "a3!2 ~ a3!3 ~ a3", H: "d4!2 ~ d4!3 ~ d4", I: "a2!8", J: "b2!8", K: "b2 c#3 d#3 e3 f#3 g#3 a3 b3",
  L: "e2@3 e2 e2@4", M: "a2@3 a2 a2@4", N: "~@6 b3 ~", O: "~@2 g#3 e3 ~ e3 g#3 e3", P: "e3@2 ~ e3 ~ e3 ~@2",
  Q: "~@6 g#3 ~", R: "g#3 ~@3", S: "[b3@2 b3@2 b3 b3@2 c#4@3 c#4@2 c#4 c#4@2 b3@2 b3 ~@2 b3 ~@3]/3",
  T: "[b3@2 b3@2 b3 b3@2 c#4@3 c#4@2 c#4 c#4@2 b3@2 b3 ~@2 b3 d4@2 ~]/3", U: "g#3", V: "a3", W: "e3",
})).s("gm_piano").gain(0.25).pan(0.7)

// bass · fretless bass · "Fretless Bs."
const bass = note(`<
  A@4 B C A@2 B C D A E F E G F A@2 B C A@2 B C D A E F E G F A@2 H I H I H I H J K L K L K L K L K L K L M@2 N O E P
  A@2 E P A@2 E Q R G F A@2 H I H I H I H J K L K L K L K L K L K L M@2 N O S P A@2 S P A@2 S T A U S T A U E F A@2 V
>`.pickRestart({
  A: "e2@2 b1 d2", B: "e2!2", C: "a2!2", D: "e2@7 ~ b1@4 d2@4", E: "e2@3 e2 e2@4", F: "a2@3 a2 a2@4",
  G: "a2@3 a2 a2@3 a2", H: "e2!8", I: "e2!5 f#2 a2@2", J: "e2!5 d2 c#2 b1", K: "a1!2 a2 c#2 d2!2 d3 d2",
  L: "d2!2 d3 d2!3 c#2 b1", M: "a1!8", N: "b1!8", O: "b1 c#2 d#2 e2 f#2 g#2 a2 b2", P: "a1@3 a1 a1@4",
  Q: "a2@3 a2 a2@2 a2@2", R: "e2@3 e2 e2@2 g2@2", S: "e2@3 e2 e2@3 e2", T: "a1@3 a1 a1@2 a2 a1", U: "e2@3 e2 b1@2 d2@2",
  V: "e2",
})).s("gm_fretless_bass").gain(0.48)

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

// drums · rim
const rim = s("rim").struct("<A@3 ~ A@3 ~ A@3 ~ A@4 ~ A ~ A@3 ~ A@3 ~ A@4 ~ A ~@40 A@23 ~@22>".pickRestart({
  A: "~ x ~ x",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A ~@3 B ~@3 B ~@4 B ~ C ~@3 D ~@3 D ~@7 E@14 C E@7 B E@15 D ~@23 B E@7 ~ E@3 D E@3 A E@2 C E ~
>`.pickRestart({
  A: "~@8 x!2 ~@2 x ~ x!2", B: "x ~@7 x ~@3 x!2 ~@2", C: "x ~@2 x ~@2 x!2", D: "x!3 ~ x ~ x ~ x ~ x ~ x ~@3",
  E: "~ x ~ x",
})).gain(0.32)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@7 A ~@3 A ~@4 A ~ B ~@29 B ~@7 A ~@39 A ~@18 B ~@2>".pickRestart({
  A: "~@11 x ~@4", B: "~ x!2 ~ x!2 ~@2",
})).gain(0.2)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!117 ~>").gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@3 A ~@4 A ~@14 B ~ B ~@22 A ~@39 A ~@7 B ~@11 C ~>".pickRestart({
  A: "~@7 x", B: "~@5 x!2 ~", C: "~@5 x ~@2",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B A C D A@3 E A@2 C E A@6 E A@2 C E A@2 C A@45 C A C A C A C E A E A@4 C A C A C E A E A@16 B A@4 F
>`.pickRestart({
  A: "x!4", B: "x ~ x!3 ~@3 x ~@3 x ~@3", C: "x!7 ~", D: "x ~@3 x ~@3 x ~@3 x ~@2 x", E: "x!3 ~ x ~ x ~", F: "x",
})).gain(0.32)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<[~ x ~ x ~ x ~ x]!117 ~>").gain(0.2)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@6 B ~@2 C B ~@7 C ~ C B C ~ C ~@14 B ~@9 D ~@4 B ~ E D B ~ B ~@3 B ~@3 C ~@5 C ~ C B ~@13 B ~@12 C ~@3 A ~@5
>`.pickRestart({
  A: "~@2 x!2 ~@4", B: "~@3 x ~@4", C: "~@7 x", D: "~@5 x ~@2", E: "~ x ~@6",
})).gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@7 A ~@3 A ~@4 A ~@14 B ~ B ~@22 A ~@39 A ~@7 B ~@13>".pickRestart({
  A: "~ x ~@6", B: "~ x!2 ~@5",
})).gain(0.28)

// drums · ride
const ride = s("rd").struct(`<
  A ~@3 A ~@3 A ~@3 A ~@4 A ~ A ~@3 A ~@3 A ~@3 B A B A ~@14 A ~@7 A ~@15 A ~@23 A ~@6 B A ~@3 A ~@3 A ~@2 C A
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x ~@6 x",
})).gain(0.28)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@3 A ~@3 A ~@3 A ~@4 A ~ A ~@3 A ~@3 A ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~@23 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~@2
>`.pickRestart({
  A: "~@4 x!2 ~@2",
})).gain(0.28)

stack(
  string_ensemble_1, tuba, french_horn, piano, bass, kick, rim, snare, snare_soft, clap, low_tom, hihat, hihat_soft,
  mid_tom, open_hat, high_tom, ride, tambourine
)

More by Neil Diamond