Strudelify

Cherry, Cherry

Neil Diamond

KeyF majorTempo170 bpm
0:00/0:00
// Cherry, Cherry — Neil Diamond
// 170 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 156 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/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(`<
  ~@4 A B C B C D A B C D A B A B C B A E F G H I F J H K L M N O P Q R S T O P O P O P O U V W X A B C B C D A B C D A
  B C B C B A E F G H I F J H K L M N O P Q R V T Q P O P O P O U V Y X A B C B C D A B A D A B C B C B A E F G H I F J
  H K L V R O P Q R V T Q P O T O P O U V Z X AA AB AA AB F G H I F J H K L AC
>`.pickRestart({
  A: "c2@3 e2 f2@4", B: "bb2@6 f2@9 ~", C: "c2@6 e2@2 f2@7 ~", D: "bb2@3 f2@5", E: "bb2@5 ~ f2@8 ~@2",
  F: "c2@5 ~ e2@2 f2@5 ~ a2@2", G: "bb2@5 ~ e2@2 f2@3 ~ eb2@3 ~", H: "c2@5 ~ e2@2 f2@6 a2@2", I: "bb2@3 e2 f2 ~ f2 ~",
  J: "bb2@3 e2 f2@2 eb2@2", K: "bb2@5 ~ b2@2 c3@3 ~ c3@4", L: "f2 ~ f2@3 a2 bb2 c3",
  M: "~@2 c3@2 ~@2 c3@2 bb2@2 ~@2 bb2@3 ~", N: "f2 ~ f2 ~ bb2 a2 bb2 c3", O: "~@2 c3@2 ~@2 c3@2 bb2@3 ~ bb2@4",
  P: "f2 ~ f2@2 bb2 a2 bb2 c3", Q: "~ c3 ~ c3 bb2 ~ bb2@2", R: "f2@2 ~@2 f2@3 ~ bb2@2 a2@2 bb2@2 c3@2",
  S: "~@2 c3@3 ~ c3@2 bb2@3 ~ bb2@3 ~", T: "f2@3 ~ f2@4 bb2@2 a2@2 bb2@2 c3@2",
  U: "f2@2 ~@2 f2@4 bb2@2 a2 ~ bb2@2 c3@2", V: "~@2 c3@2 ~@2 c3@2 bb2@3 ~ bb2@3 ~",
  W: "f2@2 ~@2 f2@3 ~ bb2@2 a2 ~ bb2@2 c3@2", X: "~@2 c3@2 ~@2 c3@2 bb2 ~@3 bb2@2 ~@2",
  Y: "f2@2 ~@2 f2@2 ~@2 bb2@2 a2 ~ bb2 ~ c3@2", Z: "f2@2 ~@2 f2@3 ~ bb2@2 a2 ~ bb2 ~ c3@2", AA: "c2 ~@5 e2 ~ f2 ~@7",
  AB: "bb2 ~@5 f2 ~@9", AC: "~@2 c3 ~@3 c3@2 bb2@2 ~@2 f3@2 ~@2",
})).s("gm_acoustic_bass").gain(0.56)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F G H I B J H I F K D L M K N O P Q F R S T U Q V W X Y X Z@4 AA@2 AB@2 AC@2 AD@2 AA@2 AE@2 AF F G AG I B J
  AH I F K D L M K N O AI Q F R S T U Q V W X Y X AJ AK AL AK AJ AK AJ AK AJ AK AJ AM AJ AK AJ AN E F G H AO B J AH AP F
  K D L M K N O AQ Q F R S T AR Q V W X Y X AJ AK AL AK AJ AK AJ AK AJ AK AJ AM AJ AK AJ AN AF F G H Q F R S T U Q V AS
  AT
>`.pickRestart({
  A: "~@2 [c4,e5,g5,c6]@4 ~@2 [f4,f5,a5,c6]@7 ~, ~@3 c4@2 ~@3", B: "[bb4,bb5,d6]@3 [f4,a5,c6]@5, f5",
  C: "~ [e5,g5,c6]@2 c4 [f4,f5,a5]@4, c4@5 ~@3 c6@6 ~@2", D: "[f5,bb5,d6]@5 ~ f4@6 eb4@4, bb4@3 [f5,a5,c6]@5",
  E: "~ c6@2 c4 [f4,f5,a5]@4, c4@5 ~@11, ~ [e5,g5]@3 c6@3 ~", F: "[bb4,f5,bb5]@3 [f4,f5,a5,c6]@5, d6 ~@3",
  G: "~ [e5,g5,c6]@2 c4 [f4,a5]@4, c4@5 ~@3 [f5,c6]@6 ~@2", H: "[bb4,f5,bb5]@3 f4@3 eb4@2, d6@2 ~ [f5,a5,c6]@5",
  I: "~@2 [e5,g5,c6]@5 ~ [f4,a5]@8, c4@4 [f5,c6]@3 ~", J: "~@2 [e5,g5,c6]@5 ~ [f4,f5,a5,c6]@8, c4 ~",
  K: "~@2 [e5,g5,c6]@5 ~ [f4,f5,a5]@8, c4@7 ~ c6@6 ~@2", L: "~@2 [e5,g5,c6]@5 ~ [f4,f5,a5]@8, c4@4 c6@3 ~",
  M: "[f5,bb5,d6]@5 ~ [f4,f5,a5,c6]@10, bb4@3 ~@5", N: "[bb4,f5,bb5]@3 f4@3 eb4@2, d6@3 ~@3 [f5,a5,c6]@10",
  O: "~ [e5,g5]@3 [f4,f5,a5,c6]@4, c4@7 ~@9, ~ c6@2 ~@5", P: "[bb4,f5,bb5]@6 f4@6 eb4@3 ~, d6@4 ~@2 [f5,a5,c6]@9 ~",
  Q: "~@2 e5@4 ~@2 [f5,a5,c6]@7 ~, c4@3 f4@5, ~ [g5,c6]@3 ~@4", R: "~@2 [e5,g5,c6]@4 ~@2 [f5,a5,c6]@7 ~, c4@3 f4@5",
  S: "[bb4,f5,bb5,d6]@3 [f4,f5,a5,c6]@5", T: "~@2 [e5,g5,c6]@4 ~@2 [f5,a5,c6]@7 ~, c4@6 f4@9 ~",
  U: "[bb4,bb5,d6]@3 [f4,a5,c6]@5, f5@15 ~", V: "[bb4,f5,bb5,d6]@6 [g5,c6,e6]@9 ~, ~@6 c5@7 ~@3",
  W: "f3 ~ [f3,f4]@3 [a3,a4] [bb3,bb4] [c4,c5], f4 ~@15", X: "~@2 [c4,c5]@3 ~ [c4,c5]@2 [bb3,bb4]@3 ~ [bb3,bb4]@4",
  Y: "[f3,f4]@2 ~@2 [f3,f4]@4 [bb3,bb4]@2 [a3,a4] ~ [bb3,bb4]@2 [c4,c5]@2", // F Bb A Bb C
  Z: "[f3@2 ~@2 f3@4 bb3@2 a3@2 bb3@2 c4@3 ~ c4@3 ~ c4@2 bb3@3 ~ bb3@4 f3@3 ~ f3@4 bb3@2 a3@2 bb3@2 c4@3 ~ c4@3 ~ c4@2 bb3@3 ~ bb3@4, [f5,a5,c6]@7 ~ [f5,bb5,d6]@5 ~ [e5,g5,c6]@9 ~ f5@15 ~ [f5,bb5,d6]@5 ~ [e5,g5,c6]@9 ~ [f5,bb5,d6]@7 ~, ~@24 [bb5,d6]@7 ~ [a5,c6]@7 ~@25]/4", // F Bb C Bb C Bb Am
  AA: "[f3@3 ~ f3@4 bb3@2 a3@2 bb3@2 c4@3 ~ c4@3 ~ c4@2 bb3@3 ~ bb3@4, [f5,a5,c6]@7 ~ [f5,bb5,d6]@5 ~ [e5,g5,c6]@9 ~ [f5,bb5,d6]@7 ~]/2", // F Bb C Bb
  AB: "[f3@3 ~ f3@4 bb3@2 a3@2 bb3@2 c4@3 ~ c4@3 ~ c4@2 bb3@3 ~ bb3@4, [f5,a5,c6]@7 ~ [f5,bb5,d6]@5 ~ [e5,g5,c6]@8 ~@2 [f5,bb5,d6]@7 ~]/2", // F Bb C Bb
  AC: "[f3@3 ~ f3@4 bb3@2 a3@2 bb3@2 c4@3 ~ c4@3 ~ c4@2 bb3@3 ~ bb3@4, [f5,a5,c6]@7 ~ [f5,bb5,d6]@4 ~@2 [e5,g5,c6]@9 ~ [f5,bb5,d6]@7 ~]/2", // F Bb C Bb
  AD: "[f3@3 ~ f3@4 bb3@2 a3@2 bb3@2 c4@3 ~ c4@6 bb3@3 ~ bb3@4, [f5,a5,c6]@7 ~ [f5,bb5,d6]@5 ~ [e5,g5,c6]@9 ~ [f5,bb5,d6]@7 ~]/2", // F Bb C Bb
  AE: "[f3@2 ~@2 f3@4 bb3@2 a3@2 bb3@2 c4@3 ~ c4@3 ~ c4@2 bb3@4 c4@3 ~, [f5,a5,c6]@7 ~ [f5,bb5,d6]@4 ~@2 [e5,g5,c6]@9 ~ [f5,bb5,d6]@7 ~]/2", // F Bb C Bb
  AF: "~@2 c6@4 c4@2 [f4,f5,a5,c6]@7 ~, c4@5 ~@11, ~ [e5,g5]@3 ~@4", // F Em
  AG: "[bb4,f5,bb5,d6]@3 f4@3 eb4@2, ~@3 [f5,a5,c6]@5", AH: "[bb4,f5,bb5]@6 f4@6 eb4@3 ~, d6@2 ~ [f5,a5,c6]@5",
  AI: "[bb4,f5,bb5,d6]@6 f4@6 eb4@3 ~, ~@6 [f5,a5,c6]@9 ~", // Bb F
  AJ: "[f3,f5,a5,c6] ~@3 f3 ~@3 [bb3,f5,bb5,d6] ~ a3 ~ bb3 ~ [c4,e5,g5,c6] ~", // F Bb C
  AK: "~@2 c4 ~@3 c4 ~ [bb3,f5,bb5,d6] ~@3 bb3 ~@3", // Bb
  AL: "[f3,a5,c6] ~@3 f3 ~@3 [bb3,f5,bb5,d6] ~ a3 ~ bb3 ~ [c4,e5,g5,c6] ~", // F Bb C
  AM: "~@2 c4 ~@5 [bb3,f5,bb5,d6] ~@3 bb3 ~@3", AN: "~@2 c4 ~@3 c4 ~ [bb3,f5,bb5,d6] ~@3 c4 ~@3",
  AO: "~ [e5,g5]@3 [f4,a5]@4, c4 ~, ~ c6@2 ~ [f5,c6]@3 ~", // Em F F5
  AP: "~@2 [e5,g5,c6]@5 ~ [f4,a5]@8, c4@4 [f5,c6]@3 ~, ~@8 db6 ~@7", // C F F5
  AQ: "[f5,bb5,d6]@5 ~ f4@6 eb4@3 ~, bb4@6 [f5,a5,c6]@9 ~", AR: "[bb4,bb5,d6]@3 [f4,a5]@5, f5@15 ~, ~@3 c6@4 ~",
  AS: "[f3,f4] ~ [f3,f4]@3 [a3,a4] [bb3,bb4] c4, ~@14 c5 ~", // F A Bb
  AT: "~@2 [c4,c5] ~@3 c5@2 bb3@2 ~@2 [f4,c5,f5]@2 ~@2, ~@6 c4 ~ bb4 ~@3 a5 ~@3", // C F5
})).s("gm_piano").gain(0.44)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A@8 ~@8 B@6 C@8 ~@20 D@8 ~@4 E@4 ~@2 F@8 ~@20 D@8 ~@4 E@4 ~@2 F@8 ~@20 G@8 ~@3 H ~@2
>`.pickRestart({
  A: "[~ c5, ~ c4@63]/8", B: "c5/6", C: "[c6@120 [a5,f6] ~@3 [a5,f6] ~@3]/8", D: "[~ c5@3, c4]/8", E: "c5/4",
  F: "[c6@118 ~@2 [a5,f6] ~@3 [a5,f6] ~@3]/8", G: "[~ c6, c4, ~ c5@3]/8", H: "~@8 [c6,f6]@2 ~@2 [c6,f6] ~@3",
})).s("gm_synth_strings_1").gain(0.43)

// other · piano · "HONKY TONK"
const piano_2 = note("<~@100 A@5 B@3 C D@3 E F G ~@41>".pickRestart({
  A: "[c6 ~ g5@2 a5@2 bb5@3 ~ c6@4 bb5@4 a5@4 g5 ~@3 f5@29 ~ e5@2 f5@2 gb5 ~ g5@5 ~ g5@3 ~ f5@2 ~@2 g5@2 ~@2]/5",
  B: "[eb5 e5 ~ c5 ~ c5@18 g4]/3", C: "c6@2 g5@2 a5@2 bb5 ~@3 c6 ~@3 bb5 ~",
  D: "[~@2 a5 ~@3 g5 ~@3 g6@35 ~@3, ~@10 gb6 ~@37]/3", E: "e6@2 f6@2 gb6@2 g6@2 ~@2 e6 ~@3 f6 ~",
  F: "~@2 d6@2 ~@2 e6@2 ~@2 c6@2 ~@2 g5 ~", G: "c6 ~@15",
})).s("gm_piano").gain(0.78)

// other · piano · "A.PIANO 2"
const piano_3 = note("<~@99 A@5 B@3 C D@3 E F G ~@42>".pickRestart({
  A: "[c5 ~ g4@2 a4@2 bb4@3 ~ c5@4 bb4@4 a4@4 g4 ~@3 f4@29 ~ e4@2 f4@2 gb4 ~ g4@5 ~ g4@3 ~ f4@2 ~@2 g4@2 ~@2]/5",
  B: "[eb4 e4 ~ c4 ~ c4@18 g3]/3", C: "c5@2 g4@2 a4@2 bb4 ~@3 c5 ~@3 bb4 ~",
  D: "[~@2 a4 ~@3 g4 ~@3 g5@35 ~@3, ~@10 gb5 ~@37]/3", E: "e5@2 f5@2 gb5@2 g5@2 ~@2 e5 ~@3 f5 ~",
  F: "~@2 d5@2 ~@2 e5@2 ~@2 c5@2 ~@2 g4 ~", G: "c5 ~@15",
})).s("gm_piano").gain(0.78)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@21 A B@7 C ~ D E ~ E ~ E F E ~ E G E ~ E F E ~ E G ~@17 A B@7 C ~ D E ~ E ~ E F E ~ E G E ~ E F E ~ E G ~@17 A B@7 C
  ~ D E ~ E ~ E F E ~ E G E ~ E F E ~ E G ~@3 H B@7 C E I
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~", D: "~@10 x!3 ~@3", E: "~ x ~@6", F: "~@2 x ~@5 x ~ x!3 ~@3",
  G: "~@9 x!2 ~@5", H: "~@5 x!3", I: "~@3 x",
})).gain(0.71)

// drums · clap
const clap = s("cp").struct("<~@2 [~ x ~ x]!154>").gain(0.71)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@32 A B A B A C A B A D A B A C A B A D ~@28 A B A B A C A B A D A B A C A B A D ~@28 A B A B A C A B A D A B A C A B
  A D ~@12 A B
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "~@2 x!2", C: "~@3 x", D: "~@6 x!2",
})).gain(0.71)

// drums · open hat
const open_hat = s("oh").struct("<A@22 ~@8 A@2 ~@19 A@17 ~@8 A@2 ~@19 A@17 ~@8 A@2 ~@19 A@3 ~@10>".pickRestart({
  A: "~ x ~ x",
})).gain(0.57)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@32 A B A B A C A B A B A B A C A B A B ~@28 A B A B A C A B A B A B A C A B A B ~@28 A B A B A C A B A B A B A C A B
  A B ~@12 A B
>`.pickRestart({
  A: "~@6 x!2", B: "~@3 x ~@4", C: "~@5 x ~@2",
})).gain(0.71)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@32 A B A B A ~ A B A B A B A ~ A B A B ~@28 A B A B A ~ A B A B A B A ~ A B A B ~@28 A B A B A ~ A B A B A B A ~ A B
  A B ~@12 A B
>`.pickRestart({
  A: "~ x", B: "~ x ~@6",
})).gain(0.71)

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

// drums · ride
const ride = s("rd").struct("<~@32 A@14 B A@3 ~@28 A@14 B A@3 ~@28 A@14 B A@3 ~@12 A@2>".pickRestart({
  A: "x!4", B: "~ x!3",
})).gain(0.71)

// drums · tambourine
const tambourine = s("tb").struct("<A@22 ~@8 A@2 ~@19 A@17 ~@8 A@2 ~@19 A@17 ~@8 A@2 ~@19 A@3 ~@10>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2",
})).gain(0.57)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct(`<
  ~@22 A@8 ~@12 A@7 ~@19 A@8 ~@12 A@7 ~@19 A@8 ~@12 A@7 ~@5 A@8 ~@2
>`.pickRestart({
  A: "x!8",
})).gain(3.65)

stack(
  bass, piano, synth_strings_1, piano_2, piano_3, kick, snare, clap, low_tom, open_hat, mid_tom, high_tom, crash, ride,
  tambourine, agogo_bells
)

More by Neil Diamond