Strudelify

White Room

Cream

KeyG majorTempo110 bpm
0:00/0:00
// White Room — Cream
// 110 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 111, 4/4 at bar 112) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 3 "E.PIANO 2" epiano2 (copy of ch 4 "STEEL GTR" acoustic guitar steel)
// note: Full arrangement: all 148 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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@5 B@5 C D E F G D E F G D E F G D E F G H I J K H L M N O P D E F G D E F G D E F G D E F G H I J K H L M N O A@5
  B@5 C D E F G D E F G D E F G D E F G H I J K H L M N O A@5 B@5 Q@3 R S T U R S T U R S T U R S T U R S T U R S T V@3
  W@5 ~@6
>`.pickRestart({
  A: "[g2@19 ~ f2@19 ~ d2@19 ~ c2@18 ~@2]/5", B: "[g2@19 ~ f2@19 ~ d2@19 ~ c2@19 ~]/5", C: "a1 ~",
  D: "d2@3 ~ d2@4 c2 ~ c2@3 ~ c2@2", E: "b1@3 ~ b1@4 a#1@4 c2@3 ~", F: "d1@3 ~ d1@4 f1 ~ f1@3 ~ f1@2",
  G: "g1@2 f1@2 g1@2 a1@2 a#1@4 c2@3 ~", H: "c2@5 ~ c2@3 ~ c2@3 ~ c2@2", I: "b1@6 b2 b1 b2@2 b1@3 ~ b1 ~",
  J: "a#1@5 ~ a#1@3 ~ a#1@2 ~@2 a#1 ~", K: "a1@5 ~ a1@2 f#2@2 e2@2 c#2@2 a1@2", L: "g1@4 ~@2 g1@2 ~@2 g1 ~ g1@2 a1@2",
  M: "a#1@6 a#2@2 a#1 ~ a#1@3 ~ a#1@2", N: "c2@3 ~ c2@3 ~ c2@2 b1@2 c2@2 c#2@2",
  O: "d2@3 ~ d2@2 d2@2 d2 ~ d2 ~ d2 ~ d2 ~", P: "d2 ~@15", Q: "[a1@40 d2@3 ~ d2@4]/3",
  R: "c2 ~ c2@3 ~ c2@2 b1@3 ~ b1@4", S: "a#1@4 c2@3 ~ d1@3 ~ d1@4", T: "f1 ~ f1@3 ~ f1@2 g1@2 f1@2 g1@2 a1@2",
  U: "a#1@4 c2@3 ~ d2@3 ~ d2@4", V: "[a#1@4 c2@3 ~ g2@19 ~ f2@19 ~]/3", W: "[d2@19 ~ c2@19 ~ a1@40]/5",
})).s("gm_acoustic_bass").gain(0.72)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@5 B@5 C D E D E D E D E D E D E D E D E F G H I J G K L M N D E D E D E D E D E D E D E D E F G H I J G K L O A@5
  B@5 C D E D E D E D E D E D E D E D E F G H I J G K L O A@5 P@5 Q@3 R S R S R S R S R S R S R S R S R S R S R S R T@3
  U V W@8 ~
>`.pickRestart({
  A: "[[g4,a#4,d5]@19 ~ [f4,a4,c5]@19 ~ [d4,f4,a4]@20 [c4,e4,g4]@18 ~@2]/5", // Gm F Dm C
  B: "[[g4,a#4,d5] [f4,a4,c5] [d4,f4,a4] [c4,g4], ~@20 f#5 ~@39 e4@18 ~@2]/5", C: "[a3,c4,e4] ~",
  D: "[d3,a3]@4 [d3,a3]@4 [c3,g3] ~ [c3,g3]@4 [c3,g3]@2", // D5 C5
  E: "~@6 g3@2 [a#2,f3]@3 ~ [c3,g3]@4, b2!2 ~@2, ~@2 g3@4 ~@2 f#3 ~@7", // A#5 C5
  F: "[c4,e4]@5 ~@2 [c4,e4], g3@3 g3, ~@5 [c4,e4]@2 ~", G: "[g3,b3,d4]@5 [g3,b3,d4]@3",
  H: "[f3,a#3,d4]@5 [f3,a#3,d4]@3", I: "[a3,c#4]@7 ~, e4", J: "[g3,c4,e4]@5 [g3,c4,e4]@2 [g3,c4,e4]",
  K: "[f3,a#3,d4]@11 ~ [f3,a#3,d4]@4", L: "[g3,c4,e4]!2", M: "[a3,d4,f#4]@7 ~@9", N: "a3 c4 d4 ~ d4@2 c4 ~ d4 ~@7",
  O: "[a3,d4,f#4]@7 ~", P: "[[g4,a#4,d5] [f4,a4,c5] [d4,f4,a4] [c4,g4], ~@30 e4@9 ~]/5",
  Q: "[~@4 b5@15 ~ [d3,a3]@2 [d3,a3]@2, g4@13 ~@3, [a3,c4,e4]@17 ~@31]/3", // D5 Am
  R: "[c3,g3] ~ [c3,g3]@4 [c3,g3]@2 ~@6 g3@2, ~@2 b2!2, ~@5 g3@2 ~", // C5
  S: "[a#2,f3]@3 ~ [c3,g3]@4 [d3,a3]@4 [d3,a3]@4, f#3 ~@15", // A#5 C5 D5
  T: "[[a#2,f3]@3 ~ [c3,g3]@4 [g4,a#4,d5]@20 [f4,a4,c5]@20, f#3 ~@27 f#5 ~@19]/3", U: "[d4,f4,a4]", V: "~ [c4,e4,g4]@3",
  W: "[~@13 b5@115, ~@8 g4@39 ~@81, ~@8 c4@25 ~@95, ~@8 a3@21 ~@99, ~@8 e4@17 ~@103]/8",
})).s("gm_acoustic_guitar_steel").gain(0.64)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A@5 B@6 ~@51 A@5 B@6 ~@25 A@5 C@7 D ~@23 E@3 F@5 ~@6>".pickRestart({
  A: "[[g5,d6]@20 [f5,c6]@20 [d5,a5]@20 [c5,g5]@19 ~]/5", B: "[[g5,d6]@20 [f5,c6]@20 [d5,a5]@20 [c5,g5]@29 ~@7]/6",
  C: "[[g5,d6]@10 [f5,c6]@10 [d5,a5]@10 ~@10 b5@7 ~@9, ~@30 [c5,g5]@25 ~]/7", D: "[b5,d6]@7 ~@9",
  E: "[~@2 [g5,d6]@5 [f5,c6]@5]/3", F: "[[d5,a5]@10 ~@10 b5@7 ~@13, ~@2 [c5,g5]@5 ~]/5",
})).s("gm_string_ensemble_1").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  A B C D E A B C D E F G H G H G H G H G H G H G H G H G H@2 I G H@2 I H J G H G H G H G H G H G H G H G H G H@2 I G
  H@2 I H A B C D E A B C D E F G H G H G H G H G H G H G H G H G H@2 I G H@2 I H A B C D E A B C D E F ~ K L M L M L M
  L M L M L M L M L M L M L M L M L N D E A B O ~@8
>`.pickRestart({
  A: "x ~@3 x!2 ~ x!2 ~@3 x ~ x ~", B: "x ~@3 x ~@3 x!2 ~ x!2 ~@3", C: "x ~ x ~ x ~@3 x ~@3 x!2 ~ x",
  D: "x ~ x!3 ~ x ~", E: "x!2 ~ x!2 ~@3 x ~ x ~ x ~@3", F: "x", G: "x ~@3 x!2 ~ x", H: "x ~@2 x ~ x ~ x",
  I: "~ x ~ x ~ x ~ x", J: "~ x!4 ~@3", K: "~ x", L: "x!2 ~ x!2 ~@2 x", M: "~ x ~ x!2 ~@3",
  N: "~@2 x ~@3 x ~ x ~@3 x!2 ~ x", O: "x!3 ~ x ~@3",
})).gain(0.74)

// drums · snare
const snare = s("sd").struct(`<
  A B C D ~ A B C D ~ E F G F B F G F B F H F B F G F B F@3 I F@3 I F C F G F B F G F B F H F B F G F B F@3 I F@3 I F A
  B C D ~ A B C D ~ E F G F B F G F B F H F B F G F B F@3 I F@3 I F A B C D ~ A B C D ~@3 J F K F D F K F D F L F D F K
  F L F K F D F K F C D ~ A B ~@9
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~ x", D: "~@3 x", E: "x!2", F: "~ x ~ x", G: "~@4 x ~@3 x ~ x ~@2 x ~@2",
  H: "~@2 x ~ x ~@2 x", I: "~ x!3", J: "~@6 x!2 ~@4 x ~@3", K: "x ~ x ~@2 x ~@6 x ~@3", L: "x ~@2 x ~@2 x ~",
})).gain(0.74)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@12 A ~ B ~ A ~ B ~ C ~ B ~ A ~ B ~ D ~@3 D ~@5 A ~ B ~ A ~ B ~ C ~ B ~ A ~ B ~ D ~@3 D ~@15 A ~ B ~ A ~ B ~ C ~ B ~
  A ~ B ~ D ~@3 D ~@16 E F G ~ E F G ~ H I G ~ E F H I E F G ~ E F G ~@14
>`.pickRestart({
  A: "~@6 x!2 ~@4 x ~@3", B: "~ x ~@6", C: "~@2 x ~@3 x!2 ~@2 x!2 ~@4", D: "~@10 x!2 ~@4", E: "~@14 x!2", F: "~ x ~@2",
  G: "~@5 x ~@2", H: "~@10 x ~@3 x!2", I: "~@2 x!2 ~@12",
})).gain(0.22)

// drums · low tom
const low_tom = s("lt").struct(`<
  A B C D E A B C D E F ~@3 G ~@3 G ~ H ~ G ~@13 I ~@3 G ~@3 G ~ H ~ G ~@13 A B C D E A B C D E F ~@3 G ~@3 G ~ H ~ G
  ~@13 A B C D E A B C D E F ~@5 J ~@3 J ~ K ~ J ~@3 K ~@3 J ~@3 L D E A B M ~@8
>`.pickRestart({
  A: "~@4 x!2 ~ x!2 ~@3 x ~ x ~", B: "x ~@7 x!2 ~ x!2 ~@3", C: "x ~ x ~ x ~@7 x!2 ~ x", D: "x ~ x!3 ~@3",
  E: "x!2 ~ x!2 ~@3 x ~ x ~ x ~@3", F: "x", G: "~@12 x ~ x!2", H: "~@14 x!2", I: "~@2 x!2 ~@4", J: "~@4 x ~ x!2 ~@8",
  K: "~@6 x!2 ~@8", L: "~@12 x!2 ~ x", M: "x!3 ~ x ~@3",
})).gain(0.74)

// drums · hihat
const hihat = s("hh").struct("<~@10 A B@22 C@2 ~ D B@22 C@2 ~@11 A B@22 C@2 ~@11 E@2 F B@23 G ~@13>".pickRestart({
  A: "~ x!2 ~", B: "x!4", C: "x!2 ~ x", D: "~ x", E: "~ x ~ x", F: "~ x!3", G: "x!2 ~@2",
})).gain(0.74)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@11 A@16 B C B C B C D E B ~ A@16 B C B C B C D E B ~@11 A@16 B C B C B C D E B ~@12 F A@23 G ~@13
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~ x ~@5 x", D: "~ x ~@3 x ~@2", E: "~@7 x", F: "~@5 x ~ x",
  G: "~ x ~ x ~@4",
})).gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@12 A ~ B ~ A ~ B ~ C ~ B ~ A ~ D ~@9 E ~ A ~ B ~ A ~ B ~ C ~ B ~ A ~ D ~@21 A ~ B ~ A ~ B ~ C ~ B ~ A ~ D ~@23 F ~ G
  ~ F ~ G ~ H ~ G ~ F ~ H ~ F ~ G ~ F ~ I ~@13
>`.pickRestart({
  A: "~@9 x ~@3 x!2 ~", B: "~@10 x!2 ~@4", C: "~@12 x!2 ~@2", D: "~@12 x!4", E: "x!2 ~@6", F: "~ x ~@3 x!2 ~@9",
  G: "~@2 x!2 ~@12", H: "~@4 x!2 ~@10", I: "~@4 x!4 ~@8",
})).gain(0.74)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@27 A B A B A B C D E F ~@16 A B A B A B C D E ~@27 A B A B A B C D E ~@50
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~ x ~@2", C: "~@3 x!2 ~@2 x", D: "~ x ~ x!3 ~@2", E: "x ~ x ~ x ~ x!2", F: "x!2 ~@2",
})).gain(0.74)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@14 A ~@3 A ~@3 A ~@3 B ~@13 A ~@3 A ~@3 A ~@3 B ~@23 A ~@3 A ~@3 A ~@3 B ~@24 C D ~@2 C D ~@2 C D ~@6 C D ~@3 E ~@13
>`.pickRestart({
  A: "~@6 x!3 ~@7", B: "~@8 x!4 ~@4", C: "~@14 x!2", D: "x", E: "x!4 ~@12",
})).gain(0.74)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@35 A B ~@24 A ~@35 A ~@12 C D E F C D E F C G H F C D I G C D E F C D E J ~@5 K L ~@7
>`.pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "~@4 x!4", D: "x!3 ~ x ~ x!2", E: "x ~@3 x!2 ~ x", F: "x!5 ~ x ~", G: "x!2 ~ x!3 ~@2",
  H: "~@4 x!2 ~ x", I: "x ~@3 x!4", J: "x!4 ~ x ~ x", K: "~@14 x!2", L: "~ x ~ x ~ x ~ x ~ x ~@2 x ~@2 x",
})).gain(0.74)

stack(
  bass, acoustic_guitar_steel, string_ensemble_1, kick, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, high_tom, crash, ride
)

More by Cream