Strudelify

Strange Brew

Cream

KeyB♭ majorTempo113 bpm
0:00/0:00
// Strange Brew — Cream
// 113 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 11 voice oohs (copy of ch 4 synth brass 2, 0.292 beats late)
// note: Full arrangement: all 119 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(113/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
const bass = note(`<
  ~@8 A B C D E B C F@2 B C D G B C D G B C D G B C H I J K L M N O@2 P B Q D R B C D R B C D S@2 ~@2 T J K L M N U@2 V
  ~ W X G B Q D G B Q D G B Y Z@2 AA C Z@2 B C H K J K L M N AB@2 ~@4 AC@2 I J K L AD AE AF@3 AG@2 AH AI AJ@2 AK@2
>`.pickRestart({
  A: "bb1 ~ bb1 ~ ab2 ~ bb1 ~ ab2@2 bb1 ~ db2 ~ eb2@2", B: "~@2 eb2@2 db3@2 eb2 ~ db3@2 f1 ~ ab1 ~ bb1@2",
  C: "~@2 bb1@2 ab2@2 bb1 ~ ab2@2 bb1@2 ~@2 ab1@2", D: "~@2 bb1@2 ab2@2 ~@2 ab2 ~ f1 ~ ab1@2 bb1@2",
  E: "~@2 bb1@2 ab2@2 bb1 ~ ab2@2 bb1 ~@3 eb2@2",
  F: "[~@2 bb1 ~ ab2 ~ bb1 ~ ab2@2 ~@4 [db3,g3]@4 ~@2 ab2@2 bb1 ~ ab2@2 bb1 ~@3 eb2@2]/2", // Dbdim
  G: "~@4 ab2@2 bb1 ~ ab2@2 bb1 ~@3 eb2@2", H: "~@2 bb1@2 ab2@2 ~@2 ab2 ~ f1 ~ ab1@2 ~@2",
  I: "bb1@5 ~@3 bb1 ~ bb1 ~ a1 ~ g1 ~", J: "f1@4 ~@3 f1!2 ~ f1@2 g1@2 a1 ~", K: "bb1@7 ~ bb1 ~ bb1 ~ a1 ~ g1 ~",
  L: "f1@6 ~ f1!2 ~ f1 ~ g1 ~ a1 ~", M: "bb1@6 ~ bb1!2 ~ bb1 ~ a1 ~ g1 ~", N: "f1@6 ~ f1 f1@2 f1 ~ b1@3 ~",
  O: "[eb2@7 g1 g1@6 bb1@13 ~ ab1@3 ~]/2", P: "bb1@3 ~ ab2@2 bb1 ~ ab2@2 bb1 ~@3 eb2@2",
  Q: "~@2 bb1@2 ab2@2 bb1 ~ ab2@2 bb1@3 ~ ab1@2", R: "~@2 bb1 ~ ab2@2 bb1 ~ ab2@2 bb1 ~@3 eb2@2",
  S: "[~@2 bb1 ~ ab2@2 bb1 ~ ab2@2 bb1 ~ db2 ~ eb2@4 ~@14]/2", T: "bb1@6 ~@2 bb1 ~ bb1 ~ a1 ~ g1 ~",
  U: "[eb2@7 g1 g1@6 bb1@12 f1@6]/2", V: "bb1 ~@15", W: "bb1 ~ bb1 ~ ab2 ~ bb1 ~ ab2@2 bb1 ~@3 bb1@2",
  X: "~@2 bb1 ~ ab2 ~@5 f1 ~ ab1 ~ bb1@2", Y: "~@2 bb1@2 ab2@2 bb1 ~ ab2@2 bb1 ~@3 ab1@2",
  Z: "[~@2 bb1@2 ab2@2 ~@2 ab2 ~ f1 ~ ab1@2 bb1@4 ~@2 ab2@2 bb1 ~ ab2@2 bb1 ~@3 eb2@2]/2",
  AA: "~@2 eb2 ~ db3@2 eb2 ~ db3@2 f1 ~ ab1 ~ bb1@2", AB: "[eb2@7 g1 g1@6 bb1@13 ~ eb2@3 ~]/2",
  AC: "[eb2@7 g1 g1@6 bb1@9 ~ g2@4 f2@4]/2", AD: "bb1@6 ~ bb1!2 ~ c2 ~ db2 ~ e1 ~",
  AE: "f1@4 f1!2 eb2 f1 f1@2 g1 ~ a1 ~ bb1 ~", AF: "[eb2@7 g1 g1@6 bb1@12 d3@9 bb1@5 ~@4 bb1!2 ~ a1]/3",
  AG: "[~ g1 ~ f1@4 ~@3 f1!2 ~ f1@2 g1@2 a1 ~ bb1@7 ~ bb1 ~ bb1 ~ a1]/2", AH: "~ g1 ~ f1@6 ~ f1!2 ~ f1 ~ g1",
  AI: "~ a1 ~ bb1@6 ~ bb1 ~ bb1!2 ~ a1", AJ: "[~ g1 ~ f1@6 ~ f1 f1@2 f1 ~ b1@3 ~ eb2@7 ~ g1@5]/2",
  AK: "[~ bb1@13 ~ ab1@3 ~@14]/2",
})).s("gm_electric_bass_finger").gain(0.21)

// chords · rock organ
const rock_organ = note(`<
  ~@8 A B C@3 B C@3 B C@3 B C@3 B C@3 B D@2 E F E F E F G@2 H B C@3 B C@3 B C@3 ~@2 I J F E F E F G@2 K ~ L@6 A B C@3 B
  C@3 B C@3 B M@3 F E F E F G@2 K ~@3 N@2 K O A O A O P@2 Q R@6 S ~
>`.pickRestart({
  A: "bb2", B: "eb2", C: "bb2/3", D: "[bb2@15 ~]/2",
  E: "[d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~, bb2", // Bb7
  F: "[eb5,ab5,bb5] ~ [eb5,ab5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~, f2", // Ebsus4 Ab5 Ebsus4
  G: "[[eb3,db5,f5,g5,bb5]@8 ~@2 g4@2 ~@2 bb2@10 ~@2 [d3,e3,f3] [g3,a3,b3,c4,d4,e4] [f4,g4,e6,f6] [f5,g5,a5,b5,c6,d6] [c5,d5,e5] [f4,g4,a4,b4], ~@4 g2@3 ~@9, ~@4 [d5,f5,g5,bb5]@2 ~ [bb4,d5,f5]@7 ~@2]/2", // Eb7 Dm Cmaj7 C Dm7 C G7 Gm7 …
  H: "[d4,e4] ~@15, bb2", // Dsus2
  I: "~@8 [d6,e6] [f5,g5,a5,b5,c6] [c5,d5,e5] [e4,f4,g4,a4,b4] [b3,c4,d4,e4] [f4,g4,a4] [b4,c5,d5,e5] [f5,g5,a5,b5,c6]", // Dsus2 F C Em Cmaj7 F Cmaj7 F
  J: "[d5,f5,ab5,bb5,d6,e6,f6] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~", // Bb7
  K: "[d4,e4] ~@15", L: "[bb2@47 ~]/6",
  M: "[~@32 [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~, bb2]/3", // Bb7
  N: "[[eb3,db5,f5,g5,bb5]@8 ~@2 g4@2 ~@2 f6 [f6,ab6] ab6 [f6,ab6] f6 [f6,ab6] ab6 [f6,ab6] f6 [f6,ab6] ab6 [f6,ab6] [d3,e3,f3,f6] [g3,a3,b3,c4,d4,e4,ab6] [f4,g4,e6,f6] [f5,g5,a5,b5,c6,d6] [c5,d5,e5] [f4,g4,a4,b4], ~@4 g2@3 ~@9, ~@4 [d5,f5,g5,bb5]@2 ~ [bb4,d5,f5]@7 ~@2]/2", // Eb7 Fm Dm Cmaj7 C Dm7 C G7 …
  O: "f2",
  P: "[[db5,f5,g5,bb5]@7 ~@3 g4@2 ~@2 f6 [f6,ab6] ab6 [f6,ab6] f6 [f6,ab6] ab6 [f6,ab6] f6 [f6,ab6] ab6 [f6,ab6] [d3,e3]@4 [f3,g3,a3,b3,c4,f6,ab6] [d4,e4,f4,g4], ~@4 [d5,f5,g5,bb5]@2 ~ [bb4,d5,f5]@9]/2", // Gm7b5 Fm Dsus2 F Em7 Gm7 Bb
  Q: "[a5,b5,c6,d6,e6,f6] [d5,e5,f5,g5] [g4,a4,b4,c5] [d4,e4,f4,d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5]", // Dm7 Em7 Cmaj7 Bb7
  R: "[~ [d5,f5,ab5,bb5] ~ [eb5,ab5,bb5] ~ [eb5,ab5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [eb5,ab5,bb5] ~ [eb5,ab5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [d5,f5,ab5,bb5] ~ [eb5,ab5,bb5] ~ [eb5,ab5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb5,f5,ab5,bb5] ~ [eb3,db5,f5,g5,bb5]@8 f5@2 g4@2 ~, ~@3 f2@16 bb2@16 f2@16 bb2@16 f2@16 ~@8 [g2,d5,g5]@5]/6", // Bb7 Ebsus4 Ab5 Ebsus4 Bb7 Ebsus4 Ab5 Ebsus4 …
  S: "~ [bb2,bb4,d5,f5]@14 ~", // Bb
})).s("gm_rock_organ").gain(0.12)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@8 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 D@7 E A B C@2 A B C@2 A B C@2 A ~@3 D@7 E ~@2 C@2 A B C@2 A B C@2
  A B C@2 A B C@2 A B C@2 D@7 E ~@4 D E D@7 F G H@7 I
>`.pickRestart({
  A: "[f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~ [ab3,db4] ~ [bb3,eb4] ~", // Bb5 Db5 Eb5
  B: "~@2 [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~", // Eb5
  C: "~@2 [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~", // Bb5
  D: "~@2 bb2 ~@3 bb2 ~@3 bb2 ~@3 bb2 ~", E: "~@2 [d3,ab3] ~@3 [d3,ab3] ~@3 [d3,ab3] ~@3 [d3,ab3] ~",
  F: "~@2 [d3,ab3] ~@3 [d3,ab3] ~@3 [d3,ab3]@4 ~@2", G: "~ [d3,ab3] ~@3 bb2 ~@3 bb2 ~@3 bb2 ~@2",
  H: "~ bb2 ~@3 bb2 ~@3 bb2 ~@3 bb2 ~@2", I: "~ bb2 ~@14",
})).s("gm_electric_guitar_muted").gain(0.1).pan(0.7)

// chords · electric guitar muted · soft notes
const electric_guitar_muted_2 = note(`<
  ~@9 A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~@9 A B@2 ~ A B@2 ~ A B@2 ~ A ~@12 B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~ A
  B@2 ~ A B@2 ~@31
>`.pickRestart({
  A: "[bb3,eb4] ~@15", B: "[f3,bb3] ~@15",
})).s("gm_electric_guitar_muted").gain(0.07).pan(0.7)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@13 A@2 ~@16 A@4 B@2 ~@3 C ~@9 D ~@6 A@2 B@2 ~@2 D ~ E F@2 ~@2 G ~@3 H I ~@13 A@2 B@2 ~@6 J@2 K L@3 ~@6 M N O@2 ~@4
>`.pickRestart({
  A: "[~@5 db4@2 bb3@4 ~@5]/2", B: "[~@2 f4@5 ~]/2", C: "~@4 db5@4 bb4@7 ~", D: "~@2 db5@4 bb4@7 ~@3", E: "~@6 c5 ab4",
  F: "[f4@2 bb4@2 f4@9 ~@3]/2", G: "c4@7 ~", H: "~@5 [bb5,d6] ~@2", I: "c5@2 c3@3 ~ [c1,db1,d1,bb1]@9 ~",
  J: "[~@4 c6@2 bb5 c6@2 g5@4 ~@3]/2",
  K: "~@2 [eb4,g4]@2 [db4,f4] ~ [eb4,g4]@2 [db4,f4] ~ [eb4,g4]@2 [db4,f4]@2 [eb4,g4,c5]@2", // Eb Db Eb Db Eb Db Cm
  L: "[[f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4,db5] ~@3 [f4,ab4,db5]@2 ~@2 [eb4,g4,c5]@4 [db4,f4,bb4] ~@5 [f4,f5]@20 ~@4]/3", // Fm Db Cm Bbm F
  M: "~@13 db4@3", N: "~ bb3@8 ~@7", O: "[~@11 f4@20 ~]/2",
})).s("gm_overdriven_guitar").gain(0.15).pan(0.1)

// chords · pad poly
const pad_poly = note(`<
  ~@10 A B ~@14 C D ~@7 E@2 ~@9 A B ~@11 E@2 ~@4 F G H I ~@9 A B ~@11 E@2 ~@6 J@2 ~@12 K@2 ~@4
>`.pickRestart({
  A: "~@2 [bb3,d4] ~@5 bb3@2 ~@6, ~@8 d4 ~@7", B: "[c4,eb4] ~@3 c4@2 bb3@2 ~@8, ~@4 eb4 ~ d4 ~@9", C: "~@8 d4 ~@7",
  D: "eb4 ~@3 eb4 ~ d4 ~@9", E: "[~@2 f4@5 ~]/2", F: "~@6 c5 ab4", G: "f4@4 bb4@4 f4@7 ~",
  H: "~@8 [g4,c5]@4 [f4,bb4]@2 [d4,g4] ~", I: "[f4,bb4] ~ g4@7 ~@7, ~@2 d4@5 ~@9", J: "[~@8 f5 ~@5 eb5@11 ~@7]/2",
  K: "[~@11 f4@20 ~]/2",
})).s("gm_pad_poly").gain(0.22)

// chords · pad poly · soft notes
const pad_poly_soft = note("<~@105 [eb3@2 db3 bb2 db3@2 bb2@2] ~@13>").s("gm_pad_poly").gain(0.13)

// chords · distortion guitar
const distortion_guitar = note("<~@99 A@2 ~ B@2 C ~ D E F@2 ~@9>".pickRestart({
  A: "[~@4 ab5@2 f5 d5@6 ~@3]/2",
  B: "[[f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [g4,bb4]@4 f4 ~@13]/2", // Fm Gm
  C: "~@8 db5@2 bb2 ~ db4@4", D: "~@8 [eb4,g4] ~ [f4,ab4] ~@5", E: "[eb4,g4] ~ [f4,ab4] ~@3 [eb4,g4] ~@9",
  F: "[[eb3,bb3,eb4]@8 [bb3,eb4,g4]@6 [f3,eb4]@17 ~, ~@7 ab4@6 ~@3]/2", // Eb5 Eb F7
})).s("gm_distortion_guitar").gain(0.18).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note("<~@16 A ~@3 A ~@9 B ~@13 A ~@27 A ~@3 A ~@42>".pickRestart({
  A: "~@4 bb3 ~@3 bb3@7 ~", B: "~@4 bb3 ~@11",
})).s("gm_string_ensemble_1").gain(0.22)

// other · marimba
const marimba = note(`<
  [db6 ~@3 db6 ~@3 db6 ~@3 db6 ~@3]!3
  [db6 ~@3 db6 ~@3 db6 ~ eb6 ~ db6 ~ eb6 ~]
  [db6 ~ eb6 ~@3 eb6 ~ db6 ~ eb6 ~@3 eb6 ~]
  [db6 ~ eb6 ~@3 eb6 ~@3 eb5 ~@5]
  ~@113
>`).s("gm_marimba").gain(0.03).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  A ~ A B C@27 D C@6 D E C@13 A C A C@6 D E C@23 A C@6 D E C@4 D F C@6 D G H I@6 J ~
>`.pickRestart({
  A: "x", B: "~@5 x ~ x", C: "x!2", D: "x ~@3 x ~@2 x", E: "~ x", F: "~@2 x!2 ~ x ~@2", G: "~@2 x ~@3 x ~ x ~ x ~@4 x",
  H: "~ x ~ x ~@7 x ~@4", I: "~@3 x ~@7 x ~@4", J: "~ x ~@9 x ~@4",
})).gain(0.42)

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

// drums · low tom
const low_tom = s("lt").struct("<~@31 A ~@31 B ~@23 C ~@7 B ~@5 D ~@7 E F ~@7 F>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~@5 x ~ x", D: "~ x ~@6", E: "~@8 x ~ x ~@4 x", F: "~ x ~@14",
})).gain(0.36)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@101 [~ x ~@2 x ~@3] ~@17>").gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~@39 A ~@7 A ~@15 A ~@31 A ~@5 A ~@17>".pickRestart({
  A: "~@7 x",
})).gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~@101 [~ x] ~@17>").gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@27 A ~@5 B ~@17 A ~@5 B ~@25 A ~@5 B ~@5 B ~ A ~@5 B ~ C ~@5 D E ~
>`.pickRestart({
  A: "x", B: "x ~@3 x ~@2 x", C: "~@3 x ~@12", D: "~@3 x ~@7 x ~@4", E: "~ x ~@14",
})).gain(0.42)

// drums · cowbell
const cowbell = s("cb").struct("<A@3 B C@44 A B C@3 D C E C@54 F@8 ~>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2", D: "~ x!3", E: "x", F: "~@3 x ~@7 x ~@4",
})).gain(0.36)

stack(
  bass, rock_organ, electric_guitar_muted, electric_guitar_muted_2, overdriven_guitar, pad_poly, pad_poly_soft,
  distortion_guitar, string_ensemble_1, marimba, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  cowbell
)

More by Cream