Strudelify

Shades Of Grey

The Monkees

KeyC majorTempo105 bpm
0:00/0:00
// Shades Of Grey — The Monkees
// 105 bpm, 4/4, key C 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(105/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 · english horn · "tk1"
const english_horn = note(`<
  ~@4 A B C ~ A D E F G H I J K L M N O P Q R O S T U ~ A B V ~ A D E F G H W J K X M Y Z AA AB AC Z AD T U ~@8 F G H W
  J AE L M Y Z AA AB AC Z AD T U ~ AF AG@2 ~@5
>`.pickRestart({
  A: "~@2 c4!2 c4@2 b3@2", B: "f3@5 ~ f4@2 f4@7 ~", C: "~@2 f4@2 f4@2 e4 ~ d4@7 ~", D: "f3@5 ~ f4@2 f4@5 ~ a4@2",
  E: "a4@5 ~ g4@2 g4@7 ~", F: "~@2 c5 d5", G: "e5@2 e5@2 e5@2 e5@2 e5@5 ~ d5@2", H: "d5 b4 a4 g4@3 ~@2",
  I: "c5@2 c5@2 c5@2 c5@2 c5@7 ~", J: "b4 g4@2 e4@3 ~@2", K: "~@2 f4!2 g4@2 a4@2", L: "g4 e4 d4 c4@3 ~@2",
  M: "f4!2 e4!2", N: "d4@7 ~@5 g4@2 g4@2", O: "a4!2 b4!2", P: "c5 g4@2 e4@3 ~ g4", Q: "f4!2 d4 f4",
  R: "f4 e4@2 g4@3 ~ g4", S: "c5 b4@2 a4@3 ~@2", T: "g4!2 f4 e4", U: "d4@7 ~", V: "e4@5 ~ d4@2 d4@7 ~",
  W: "~@4 c5@2 c5@2 c5@5 ~ c5@2", X: "g4 e4 d4 c4@3 ~ c4", Y: "d4@7 ~@5 [g4,c5]@2 [g4,c5]@2", Z: "[a4,c5]!2 [b4,d5]!2",
  AA: "c5 [g4,d5]@2 e4@3 ~ [g4,c5], e5@2 ~ c5@2 ~@3", AB: "[f4,c5]!2 [d4,d5] [f4,d5]",
  AC: "[f4,d5] c5!2 e5 e5@2 ~ [g4,e5], ~ e4@2 g4@3 ~@2", AD: "[c5,e5] g5!2 a5 a5@2 ~@2, ~ b4@2 a4@3 ~@2",
  AE: "~@2 f4!2 g4@2 a4!2", AF: "[g4,c5]!2 [f4,c5] [e4,c5]", AG: "[c5@7 ~ c5@7 ~, d4@15 ~]/2",
})).s("gm_english_horn").gain(0.64)

// other · french horn · "tk2"
const french_horn = note("<~@27 A@2 ~@23 A@2 B C D E B F G ~@16 A@2 ~@4 H@2 I@2>".pickRestart({
  A: "[d4@15 ~]/2", B: "~@2 c4!2 c4@2 d4@2", C: "e4 f4 d4 e4", D: "e4@5 ~ f4@2 d4@7 ~", E: "e4@2 f4@2 ~@2 d4@9 ~",
  F: "g4@5 ~ a4@2 g4@4 ~@4", G: "g4 a4@2 f4 g4@2 g4!2", H: "[g4@2 g4@2 d5@19 ~@7 d4@2]/2", I: "[g4@2 g4@2 d5@19 ~@9]/2",
})).s("gm_french_horn").gain(0.3).pan(0.8)

// chords · cello · "tk3"
const cello = note(`<
  ~@4 A B C@2 A D E F G H I J K L M N O P O G O Q R ~@2 A B C@2 A D E F G H I J K L M N O P O G O Q R ~@2 S T U V S T W
  X G H I J K L M N O P O G O Q R ~@10
>`.pickRestart({
  A: "c3@11 ~ d3@2 e3@2", B: "f3@7 ~", C: "g3@7 ~", D: "f3@11 ~ a3@4", E: "c4@7 ~", F: "b3@7 ~", G: "[c4,e4]@7 ~",
  H: "[b3,d4]@7 ~", I: "[a3,c4]@7 ~", J: "[g3,b3]@7 ~", K: "[f3,a3]@7 ~", L: "g3@7 ~ a3@7 ~",
  M: "[d3,a3]@7 ~ [e3,b3]@7 ~", N: "[f3,c4]@7 ~ [g3,d4]@7 ~", O: "[a3,c4]@7 ~ [b3,d4]@7 ~", P: "c4@7 ~ a3@7 ~, e4@15 ~",
  Q: "[c4,e4]@2 [b3,d4]@2 ~@2 a3@2 a3@7 ~, ~@6 c4@9 ~", R: "e4@7 ~", S: "c4@11 ~ b3@4", T: "a3@7 ~ b3@4 c4@4",
  U: "c4@5 ~ b3@2 g3@7 ~", V: "b3@2 c4@2 ~@2 b3@9 ~", W: "c4@5 ~ d4@2 d4@7 ~", X: "e4 f4@2 g4@3 g4!2",
})).s("gm_cello").gain(0.3).pan(0.3)

// other · pizzicato strings · "tk4"
const pizzicato_strings = note(`<
  ~@80
  [g3@7 ~ d3@2 e3@2 ~@2 g3@2]
  [g3@7 ~ d3@2 e3@2 ~@4]
  [g3@7 ~ d3@2 e3@2 ~@2 g3@2]
  [g3@7 ~ d3@2 e3@2 ~@4]
  [g3@7 ~ d3@2 e3@2 ~@2 g3@2]
  [g3@7 ~ d3@2 e3@2 ~@4]
  ~
>`).s("gm_pizzicato_strings").gain(0.3).pan(0.8)

// other · piano · "tk6"
const piano = note(`<
  A@4 B C D@2 B C D@2 E F G H I J K L M N M O P Q B R@2 B C D@2 B C D@2 E F G H I J K L M N M O P Q B R@2 B S T@2 B S
  T@2 E F G H I J K L M N M O P Q B R@2 B T@6 ~
>`.pickRestart({
  A: "[[g2,g3]@15 ~]/2", B: "c3@7 ~", C: "f2@7 ~", D: "[g2@27 ~ g2@4]/2", E: "c3@5 ~ c3@2 c3@5 ~ c3@2",
  F: "g3@5 ~ g3@2 g3@5 ~ g3@2", G: "a3@5 ~ a3@2 a2@5 ~ a3@2", H: "e3@5 ~ e3@2 e3@5 ~ e3@2",
  I: "f3@5 ~ f3@2 f3@5 ~ f3@2", J: "c3@5 ~ b2@2 a2@5 ~ a2@2", K: "d3@5 ~ d3@2 e3@5 ~ e3@2",
  L: "f3@5 ~ f3@2 g3@5 ~ g3@2", M: "f3!2 g3!2", N: "c3@5 ~ b2@2 a2@7 ~", O: "c3!4", P: "f3!4",
  Q: "a3@2 g3@2 ~@2 f3@9 ~", R: "[g3@27 ~ g3@4]/2", S: "f3@7 ~", T: "[g3@15 ~]/2",
})).s("gm_piano").gain(0.3).pan(0.8)

// chords · pad bowed · "tk7"
const pad_bowed = note(`<
  ~@15 A B@2 C@2 D E F G H I ~@14 A B@2 C@2 D E F G H I ~@4 J K ~@2 L M ~@4 A B@2 C@2 D E F G H I ~@4 N@6 ~
>`.pickRestart({
  A: "~@12 [g5,b5]!2 [f#5,a#5]!2", B: "[[f5,a5]@11 ~ e5@8 ~ g#5 a5@5 ~@5, ~@10 [g5,b5] ~@5]/2",
  C: "[f5,a5]@5 ~@2 [f#5,a#5] [g5,b5]@4 ~@4, ~@6 [f5,a5]@2 [f#5,a#5] ~@7", D: "~ a5 f5@2 [g5,b5]@2 [g5,b5]@2",
  E: "~ c6@2 c6!3 a5 e5", F: "~ a5 f5 c5 ~ b5 g5 d5", G: "~@2 c6@5 ~ c6@2 c6@2 e5@2 c5@2", H: "~ a5 c5@2 ~ b5 d5@2",
  I: "~@2 c6@2 ~@2 a5@9 ~", J: "~@14 [f5,a#5] [f5,f#5,a#5,b5], ~@7 [e5,a5]", K: "[g5,c6]@7 ~, [f#5,b5] ~@15",
  L: "~@13 f5 [f5,f#5,a#5] [f#5,a#5], ~@3 [e5,a5]", M: "[g5,c6]@11 ~ c6@2 c6@2", N: "c6 g5 c6 g5 c6 g5 c6 g5",
})).s("gm_pad_bowed").gain(0.16).pan(0.3)

// other · orchestral harp · "tk8"
const orchestral_harp = note(`<
  ~@12 A B C D E F G H I J K L K M N O@2 ~@8 A B C D E F G H I J K L K M N O@2 A P Q@2 A R S T A B C D E F G H I J K L K
  M N O@2 N O@2 ~@5
>`.pickRestart({
  A: "c3@5 ~ c3@2 c3@5 ~ c3@2", B: "g3@5 ~ g3@2 g3@5 ~ g3@2", C: "a3@5 ~ a3@2 a2@5 ~ a2@2",
  D: "e3@5 ~ e3@2 e3@5 ~ e3@2", E: "f3@5 ~ f3@2 f3@5 ~ f3@2", F: "c3@5 ~ b2@2 a2@5 ~ a2@2",
  G: "d3@5 ~ d3@2 e3@5 ~ e3@2", H: "f3@5 ~ f3@2 g3@4 g3@2 g3@2", I: "f3@2 f3 c3 g3@2 g3 c3",
  J: "c4@5 ~ c4@2 a3@5 ~ a3@2", K: "f3@2 f3 c3 g3@2 g3 d3", L: "c3@7 ~ c3@4 c3@4", M: "a3@2 g3@2 ~@2 f3@9 ~",
  N: "c3@7 ~", O: "[g3@15 ~]/2", P: "f2@5 ~ f2@2 f2@7 ~", Q: "g2@5 ~ g2@2 g2@7 ~", R: "f2@5 ~ f2@2 f2@5 ~ f2@2",
  S: "g2@5 ~ g2@2 g2@5 ~ g2@2", T: "g3!4",
})).s("gm_orchestral_harp").gain(0.19).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@12 A@7 B A B A C B ~ D ~@10 A@7 B A B A C B ~ D ~@2 C B@4 A@2 C ~ A@7 B A B A C B ~ D ~@9
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x!2 ~@3", C: "x!2", D: "x",
})).gain(0.14).pan(0.6)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A ~@24 A ~@14 B ~@10 A ~@14>".pickRestart({
  A: "~@12 x!4", B: "~@14 x!2",
})).gain(0.14).pan(0.6)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@12 A@7 B A C A C B D ~@11 A@7 B A C A C B D ~@3 A@7 C ~ A@7 B A C A C B D ~@10
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!5 ~@3", D: "x!6 ~@2",
})).gain(0.14).pan(0.6)

// drums · high tom
const high_tom = s("ht").struct("<~@61 [~@12 x!2 ~@2] ~@25>").gain(0.14).pan(0.6)

// drums · crash
const crash = s("cr").struct("<~@26 x ~@24 x ~@25 x ~@9>").gain(0.14).pan(0.6)

stack(
  english_horn, french_horn, cello, pizzicato_strings, piano, pad_bowed, orchestral_harp, kick, snare, mid_tom,
  open_hat, high_tom, crash
)

More by The Monkees