Strudelify

Crackin' Rosie

Neil Diamond

KeyG majorTempo136 bpm
0:00/0:00
// Crackin' Rosie — Neil Diamond
// 136 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(136/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 · "FINGERDBAS"
const bass = note(`<
  ~ A B C D E F G H I J I K L M E F G H I J I K L M N@2 O P O Q O R S@5 T U@2 V ~ W@4 X@7 Y Z AA AB AA AC AA AD S@5 AE U
  AF ~ AG AH AI AJ AK AL AM AN AM AO AP AQ AR AS AT AU
>`.pickRestart({
  A: "d3@2 a2 b2@2 f#2 a2@2", B: "d2 f#2@2 b1@2 b1 d2@2", C: "e2", D: "e2 f#2@2 g2@2 a2@3", E: "d2@3 d2 d2@3 a1",
  F: "d2@3 d2 d2@2 b1 a1", G: "d2@3 d2 d2@3 b1", H: "a1 d2@2 d2 b1@2 a1@2", I: "g1@3 g1 g1@3 d2",
  J: "g1@3 d2 g2 d2 b1 a1", K: "g1@3 d2 g2@2 f#2 d2", L: "e2@3 e2 e2@3 e2", M: "a1@3 a1 a1@2 ~@2",
  N: "[d2@2 f#2@2 g2 g#2 a2 d3@2 a2 d2@2 f#2 g2 g#2 a2]/2", O: "d2!2 ~@2 g2!2 ~@2", P: "a2!2 ~@2 d2!2 ~@2",
  Q: "a2!2 ~@2 d2@2 a1@2", R: "a2!2 ~@2 d2!2 ~ d2", S: "e2!4", T: "e2@2 e2@2 e2 f#2 g2 g#2", U: "a2!8", V: "a2 ~@3",
  W: "[a1@2 b1@2 c#2@2 d2@3 d2 d2@3 a1 d2@3 a2 d3 a2 b2 a2 d2@3 d2 d2@3 a1 d2@2]/4",
  X: "[~ d2 b1@2 a1@2 g1@3 g1 g1@3 g1 g1@3 d2 g2 d2 b1 a1 g1@3 g1 g1@3 g1 g1@3 d2 g2@2 f#2 d2 e2@3 e2 e2@2 b1@2 a1@3 a1 a1@2 b1 c#2 d2@2]/7",
  Y: "f#2@2 g2 g#2 a2 d3 ~ a2", Z: "f#2@2 f#2 g2 g#2 a2 d2!2", AA: "~@2 g2!2 ~@2 a2!2", AB: "~@2 d2!2 ~@2 d2!2",
  AC: "~@2 d2@2 a1@2 d2!2", AD: "~@2 d2!2 ~ d2 e2@2", AE: "e2@2 e2 f#2 g2 g#2 a2!2", AF: "a2!6 a2@2", AG: "~@3 a1",
  AH: "b1@2 a#1@2 d#2@3 d#2", AI: "d#2@3 a#1 d#2@3 a#2", AJ: "d#3 a#2 c3 a#2 d#2@3 d#2", AK: "d#2@3 a#1 d#2@2 ~ d#2",
  AL: "c2@2 a#1@2 g#1@3 g#1", AM: "g#1@3 g#1 g#1@3 d#2", AN: "g#2 d#2 c2 a#1 g#1@3 g#1", AO: "g#2@2 g2 d#2 f2@3 f2",
  AP: "f2@2 c2@2 a#1@3 a#1", AQ: "a#1@2 c2 d2 d#2@2 g2@2", AR: "g#2 a2 a#2 d#3@2 a#2 d#2@2",
  AS: "a#2 b2 c3@2 f2 e2 f2 g2", AT: "g#2 g2 g#2 a#2 d#3 d3 c3 a#2", AU: "g#2 g2 f2 d2 d#2@4",
})).s("gm_electric_bass_finger").gain(0.56)

// other · trumpet
const trumpet = note(`<
  ~@3 A B ~@8 C D E@2 F@2 G@2 H@2 C D I@2 J K J L J M N@2 O@2 P@2 Q R S ~ T@6 U@2 V@5 W X W Y W Z@8 AA ~@2 AB@4 AC@2
  AD@2 AE AF AG@3 AH AI
>`.pickRestart({
  A: "~ g5@3", B: "g5 a5@2 b5@2 c#6@3", C: "e5 g5", D: "a5@3 b5 c#6@4", E: "[a5@7 b5]/2", F: "[a5@6 g5 f#5]/2",
  G: "[g5@5 g5!2 f#5]/2", H: "[g5@5 ~@3]/2", I: "d6/2", J: "f#5!2 ~@2 g5!2 ~@2", K: "e5!2 ~@2 f#5!2 ~@2",
  L: "e5!2 ~@2 d6 ~ a5 ~", M: "e5!2 ~@2 f#5@2 ~@2", N: "[e5@7 b5]/2", O: "[g5@7 d6]/2", P: "b5/2", Q: "c#6", R: "c#6!8",
  S: "c#6 ~@3", T: "[~@3 a5@7 b5 a5@6 g5 f#5 g5@5]/6", U: "[g5!2 f#5 g5@5]/2",
  V: "[~@6 e5@4 g5@4 a5@3 b5 c#6@4 d6@16 f#5!2]/5", W: "~@2 g5!2 ~@2 e5!2", X: "~@2 f#5!2 ~@2 f#5!2",
  Y: "~@2 d6 ~ a5 ~ f#5!2", Z: "[~@2 f#5@2 ~@2 e5@14 b5@2 g5@14 d6@2 b5@16 c#6@8 c#6!2]/8", AA: "c#6!6 c#6@2",
  AB: "[~@2 a#5@7 c6 a#5@6]/4", AC: "[g#5 g5 g#5@5 g#5]/2", AD: "[g#5 g5 g#5@5 ~]/2", AE: "~ f5", AF: "g#5@4 a#5@3 c6",
  AG: "[d6@8 d#6@12 a#5 c6 d#6@14 c6@4 f5@2 e5@2 f5@2 g5@2]/3", AH: "g#5 g5 g#5 a#5 g5!2 g#5 a#5",
  AI: "c6 d6 d#6 f6 g6@4",
})).s("gm_trumpet").gain(0.58).pan(0.3)

// other · alto sax
const alto_sax = note(`<
  ~@3 A B ~@8 C D E@2 F@2 G@2 H@2 C D I@2 J K J L J M N@2 O@2 P@2 Q R S ~ T@6 U@2 V@5 W X W Y W Z@8 AA ~@2 AB@4 AC@2
  AD@2 AE AF AG@3 AH AI
>`.pickRestart({
  A: "~ d4@3", B: "e4 f#4@2 g4@2 a4@3", C: "e4 g4", D: "a4@3 b4 c#5@4", E: "[f#4@7 g4]/2", F: "[f#4@6 d4!2]/2",
  G: "[e4@5 e4!2 d4]/2", H: "[e4@5 ~@3]/2", I: "d5/2", J: "d4!2 ~@2 d4!2 ~@2", K: "c#4!2 ~@2 d4!2 ~@2",
  L: "c#4!2 ~@2 d4 ~ a3 ~", M: "c#4!2 ~@2 d4@2 ~@2", N: "[e3@7 b3]/2", O: "[g3@7 d4]/2", P: "g4/2", Q: "a4", R: "a4!8",
  S: "a4 ~@3", T: "[~@3 f#4@7 g4 f#4@6 d4!2 e4@5]/6", U: "[e4!2 d4 e4@5]/2",
  V: "[~@6 e4@4 g4@4 a4@3 b4 c#5@4 d5@16 d4!2]/5", W: "~@2 d4!2 ~@2 c#4!2", X: "~@2 d4!2 ~@2 d4!2",
  Y: "~@2 d4 ~ a3 ~ d4!2", Z: "[~@2 d4@2 ~@2 e3@14 b3@2 g3@14 d4@2 g4@16 a4@8 a4!2]/8", AA: "a4!6 a4@2",
  AB: "[~@2 g4@7 g#4 g4@6]/4", AC: "[d#4!2 f4@5 f4]/2", AD: "[f4 d#4 f4@5 ~]/2", AE: "~ f4", AF: "g#4@4 a#4@3 c5",
  AG: "[d5@8 d#4@12 a#3 c4 d#4@14 c4@4 f3@2 e3@2 f3@2 g3@2]/3", AH: "g#3 g3 g#3 a#3 g3!2 g#3 a#3",
  AI: "c4 d4 d#4 f4 g4@4",
})).s("gm_alto_sax").gain(0.48).pan(0.6)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@3 A B ~@8 C D E@2 F@2 G@2 H@2 C D I@2 J K J L J M N@2 O@2 P@2 Q R S ~ T@6 U@2 V@2 W@3 X Y X Z X AA@8 AB ~@2 AC@4
  AD@2 AE@2 AF AG AH@3 AI AJ
>`.pickRestart({
  A: "~@4 g4@11 ~", B: "g4 ~ a4@3 ~ b4@3 ~ c#5@5 ~", C: "e4@7 ~ g4@7 ~", D: "a4@5 ~ b4 ~ c#5@7 ~",
  E: "[a4@27 ~ b4@3 ~]/2", F: "[a4@23 ~ g4@3 ~ f#4@3 ~]/2", G: "[g4@19 ~ g4@3 ~ g4@3 ~ f#4@3 ~]/2", H: "[g4@19 ~@13]/2",
  I: "[d5@31 ~]/2", J: "f#4 ~ f#4 ~@5 g4 ~ g4 ~@5", K: "e4 ~ e4 ~@5 f#4 ~ f#4 ~@5", L: "e4 ~ e4 ~@5 d5 ~@3 a4 ~@3",
  M: "e4 ~ e4 ~@5 f#4@3 ~@5", N: "[e4@27 ~ b4@3 ~]/2", O: "[g4@27 ~ d5@3 ~]/2", P: "[b4@31 ~]/2", Q: "c#5@15 ~",
  R: "c#5 ~ c#5 ~ c#5 ~ c#5 ~ c#5 ~ c#5 ~ c#5 ~ c#5 ~", S: "c#5@3 ~@13",
  T: "[~@12 a4@27 ~ b4@3 ~ a4@23 ~ g4@3 ~ f#4@3 ~ g4@19 ~]/6", U: "[g4@3 ~ g4@3 ~ f#4@3 ~ g4@19 ~]/2",
  V: "[~@12 e4@7 ~ g4@7 ~ a4@4]/2", W: "[~@2 b4 ~ c#5@7 ~ d5@31 ~ f#4 ~ f#4 ~]/3", X: "~@4 g4 ~ g4 ~@5 e4 ~ e4 ~",
  Y: "~@4 f#4 ~ f#4 ~@5 f#4 ~ f#4 ~", Z: "~@4 d5 ~@3 a4 ~@3 f#4 ~ f#4 ~",
  AA: "[~@4 f#4@3 ~@5 e4@27 ~ b4@3 ~ g4@27 ~ d5@3 ~ b4@31 ~ c#5@15 ~ c#5 ~ c#5 ~]/8",
  AB: "c#5 ~ c#5 ~ c#5 ~ c#5 ~ c#5 ~ c#5 ~ c#5@3 ~", AC: "[~@8 a#4@27 ~ c5@3 ~ a#4@23 ~]/4",
  AD: "[g#4@3 ~ g4@3 ~ g#4@19 ~ g#4@3 ~]/2", AE: "[g#4@3 ~ g4@3 ~ g#4@19 ~@5]/2", AF: "~@8 f4@7 ~",
  AG: "g#4@7 ~ a#4@5 ~ c5 ~", AH: "[d5@7 ~ d#5@11 ~ a#4 c5 d#5@13 ~ c5@3 ~ f4 ~ e4 ~ f4 ~ g4 ~]/3",
  AI: "g#4 ~ g4 ~ g#4 ~ a#4 ~ g4 ~ g4 ~ g#4 ~ a#4 ~", AJ: "c5 ~ d5 ~ d#5 ~ f5 ~ g5@7 ~",
})).s("gm_brass_section").gain(0.46).pan(0.8)

// other · trombone
const trombone = note(`<
  ~ A B C D ~@10 E@2 F@2 G@2 H@2 ~@2 I@2 J K J L J M N@2 O@2 P@2 Q R S ~ T@6 U@2 ~@2 V@3 W X W Y W Z@8 AA ~@2 AB@4 AC@2
  AD@2 ~@2 AE AF AG AH AI
>`.pickRestart({
  A: "d4@3 ~ a3@2 b3@4 f#3@2 a3@4", B: "d3 f#3@2 b2@2 b2 d3@2", C: "~ b3@3", D: "e3@2 f#3@3 ~ g3@4 a3@5 ~",
  E: "[d4@27 ~ d4@4]/2", F: "[d4@6 b3 a3]/2", G: "[b3@5 b3!2 a3]/2", H: "[b3@5 ~@3]/2", I: "d3/2",
  J: "d3!2 ~@2 g3!2 ~@2", K: "a3 ~ a3@2 ~@4 d3@2 d3@2 ~@4", L: "a3!2 ~@2 d3 ~ a2 ~", M: "a3!2 ~@2 d3@2 ~@2",
  N: "[e3@7 b3]/2", O: "[g3@28 d4@3 ~]/2", P: "[d4@31 ~]/2", Q: "e4", R: "e4 ~ e4@2 e4@2 e4 ~ e4 ~ e4 ~ e4 ~ e4@2",
  S: "e4@3 ~@13", T: "[~@12 d4@28 d4@3 ~ d4@24 b3@4 a3@4 b3@19 ~]/6", U: "[b3@4 b3@4 a3@3 ~ b3@20]/2",
  V: "[~@12 d3@32 d3 ~ d3@2]/3", W: "~@2 g3!2 ~@2 a3!2", X: "~@2 d3!2 ~@2 d3!2", Y: "~@2 d3 ~ a2 ~ d3!2",
  Z: "[~@4 d3@4 ~@4 e3@28 b3@4 g3@28 d4@4 d4@32 e4@15 ~ e4 ~ e4@2]/8", AA: "e4 ~ e4@2 e4@2 e4@2 e4@2 e4 ~ e4@3 ~",
  AB: "[~@8 d#4@28 d#4@4 d#4@23 ~]/4", AC: "[c4@3 ~ a#3@4 c4@19 ~ c4@4]/2", AD: "[c4@4 a#3@3 ~ c4@19 ~@5]/2",
  AE: "~@8 d#3@3 ~ g3@4", AF: "g#3@2 a3@2 a#3 ~ d#4@3 ~ a#3@2 d#3@4", AG: "a#3 b3 c4@2 f3 e3 f3 g3",
  AH: "g#3 ~ g3 ~ g#3@2 a#3@2 d#4@2 d4@2 c4@2 a#3@2", AI: "g#3 g3 f3 d3 d#3@4",
})).s("gm_trombone").gain(0.4).pan(0.3)

// other · tubular bells · "TUBULARBEL"
const tubular_bells = note(`<
  ~ A B C D ~ E F ~@2 G H I J K ~ E F ~@2 G H I J K L@2 ~@6 M N O@2 P@2 Q R S ~ T@2 U@8 V@3 ~@5 W@8 X ~ Y Z@2 AA@2 AB@5
  AC AD@3 AE AF
>`.pickRestart({
  A: "d6@2 a5 b5@2 f#5 a5@2", B: "d5 f#5@2 b4@2 b4 d5@2", C: "e5 [e5,g5,b5,d6]@3",
  D: "[e5,g5] ~ [f#5,a5]@4 [g5,b5]@4 [a5,c#6]@6", E: "~@4 d6 a5 b5 f#5", F: "a5@3 ~", G: "~@4 b5 a5 f#5 a5",
  H: "g5 ~@3", I: "~@4 b5 a5 f#5@2", J: "e5 g5", K: "a5@3 b5 c#6@4", L: "d6/2", M: "e5", N: "g5@3 b5",
  O: "[[b5,d6]@7 [b5,d6]]/2", P: "[g5,g6]/2", Q: "[c#6,a6]", R: "[a5,a6]!8", S: "[a5,a6]@3 ~@13",
  T: "[[a5,a6]@2 [b5,b6]@2 [c#6,c#7]@2 [d6,d7]@6 [a5,a6] [b5,b6]@2 [f#5,f#6]]/2", // A B C# D A B F#
  U: "[[a5,a6] [a5,f#6] [b5,g6] [a5,f#6]@6 [g5,g6] [a5,a6] [g5,g6]@3 [f#5,f#6] [e5,e6]@3 f#5 [g5,g6]@3 [f#5,f#6] [e5,e6]@4 [e5,e6]@2 [g5,g6]@2 [a5,a6], ~@18 f#6@3 ~@11]/8", // A D Em D G A G F# …
  V: "[~ [b5,b6] [c#6,c#7]@4 [d6,d7]@16 ~@2]/3", // B C# D
  W: "[~@6 e5@8 g5@6 b5@2 [b5,d6]@14 [b5,d6]@2 [g5,g6]@16 [c#6,a6]@8 [a5,a6]!2]/8", // Bm G F#m A
  X: "[a5,a6]@2 [a5,a6]@2 [a5,a6]@2 [a5,a6]@2 [a5,a6]@2 [a5,a6]@2 [a5,a6]@3 ~", Y: "~@3 [a5,a6]",
  Z: "[[b5,b6]@2 [a#5,a#6]@2 [d#6,d#7]@6 [a#5,a#6] [c6,c7]@2 [g5,g6] [a#5,a#6]@2]/2", // B A# D# A# C G A#
  AA: "[[a#5,g6] [c6,g#6] [a#5,g6]@6]/2", // D# Fm D#
  AB: "[[g#5,g#6] [a#5,a#6] [g#5,g#6]@3 [g5,g6] [f5,f6]@3 [g5,g6] [g#5,g#6]@3 [g5,g6] [f5,f6]@4 [f5,f6]@2]/5", // G# A# G# G F G G# G …
  AC: "[g#5,g#6]@4 [a#5,a#6]@3 [c6,c7]", // G# A# C
  AD: "[[d6,d7]@8 [d#6,d#7]@12 [a#5,a#6] [c6,c7] [d#6,d#7]@14 [c6,c7]@4 [f5,f6]@2 [e5,e6]@2 [f5,f6]@2 [g5,g6]@2]/3", // D D# A# C D# C F E …
  AE: "[g#5,g#6] [g5,g6] [g#5,g#6] [a#5,a#6] g5!2 g#5 a#5", AF: "c6 d6 d#6 f6 d#6@4, ~@4 g5@3 ~",
})).s("gm_tubular_bells").gain(0.23).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~ A@4 B@22 A@14 C ~ A D@12 A@14 ~ E F G@9 H A I J K>".pickRestart({
  A: "x!4", B: "x ~@2 x!2 ~@3", C: "x", D: "~ x!2 ~@3 x ~", E: "~@3 x", F: "x ~ x ~ x ~@2 x", G: "x ~@3 x ~@2 x",
  H: "x ~ x!2", I: "x!3 ~ x ~ x ~", J: "x!3 ~ x ~ x!2", K: "x ~ x!3 ~@3",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@2 A B C D@9 E D@9 E D@16 F G ~ H@9 I ~@2 H@13 J ~ K G D@9 L D M N O>".pickRestart({
  A: "~@5 x!3", B: "~ x ~@2", C: "x ~ x ~@3 x ~@3 x ~ x ~ x!2", D: "~ x ~ x", E: "~@2 x ~@2 x!2 ~", F: "x", G: "~@3 x",
  H: "x!2", I: "x ~@2 x!2 ~@3", J: "x ~ x!2", K: "~ x", L: "~ x!2 ~@3 x ~", M: "~@2 x!2 ~@2 x!2",
  N: "~@4 x ~ x ~@5 x ~ x!2", O: "x ~ x!3 ~ x ~ x ~@7",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@14 A ~@9 A ~@2 B@14 ~ C ~@10 D ~@2 E@14 ~ F ~@10 G ~@4>".pickRestart({
  A: "~@7 x", B: "~ x ~ x", C: "~@3 x", D: "~@5 x ~@2", E: "x!2", F: "~ x", G: "~@3 x ~@4",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@5 A@22 B C B@4 ~@8 D E F G@11 H B I B@3 E ~@8 B J K L@11 M L N>".pickRestart({
  A: "x!7 ~", B: "x!4", C: "x!2 ~ x", D: "~ x!3", E: "x!3 ~", F: "~@6 x!2", G: "x!5 ~ x!2", H: "x!5 ~ x ~",
  I: "x ~ x!2", J: "x!2 ~@2", K: "~@4 x!4", L: "x!3 ~ x!4", M: "x!8", N: "x!3 ~ x ~@3",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A@22 B@6 C D C D C D C D ~@3 E@11 F G@5 H I J I J I J I K ~@3 L@11 ~ L@2
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@3 x ~@2", C: "x ~ x ~ x ~ x!2", D: "x ~ x ~ x!4", E: "~@5 x ~@2", F: "~@5 x ~ x",
  G: "~@3 x ~@3 x", H: "~@3 x ~@2 x ~", I: "x ~ x ~ x!3 ~", J: "x ~ x!5 ~", K: "x ~ x!4 ~@2", L: "~@3 x ~@4",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ B ~ A ~@9 A ~@11 A ~@3 A ~ A@2 ~ A ~ C A ~ A ~ D ~@11 E ~@3 E ~ E@2 ~ E ~ E F ~ E ~ E G ~@9 H@3 I J
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "x ~@2 x", D: "x!4", E: "~@3 x", F: "~@2 x!2", G: "x!3 ~", H: "~ x", I: "~ x!2 ~",
  J: "~@3 x!2 ~@3",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct("<~@27 A B A@2 C ~@24 D E D@2 F ~@26>".pickRestart({
  A: "~@3 x ~@4", B: "~@3 x!2 ~@3", C: "~@7 x", D: "~ x ~@6", E: "~ x!2 ~@5", F: "~@5 x ~@2",
})).gain(0.8)

// drums · congas
const congas = s("conga:13").struct("<~@32 [~@7 x] ~@54>").gain(2.56)

// drums · shaker
const shaker = s("sh").struct("<~@29 [~@7 x] ~@28 [~@5 x ~@2] ~@28>").gain(0.8)

// drums · claves
const claves = s("clave:2").struct("<~@31 [~@3 x ~@4]!2 ~@27 [~ x ~@6]!2 ~@25>").gain(3.92)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@61 [~@5 x ~@2] ~@25>").gain(3.46)

stack(
  bass, trumpet, alto_sax, brass_section, trombone, tubular_bells, kick, snare, low_tom, hihat, open_hat, crash,
  tambourine, congas, shaker, claves, jingle_bells
)

More by Neil Diamond