Strudelify

Orange Crush

R.E.M.

KeyE minorTempo128 bpm
0:00/0:00
// Orange Crush — R.E.M.
// 128 bpm, 3/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 145 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · piano
const bass = note(`<
  ~ A@2 B C@3 B D@3 E F@3 G H@3 B C@3 B D@3 E F@3 G I@2 J K L M N O P Q R S ~ A@2 B C@3 B D@3 E F@3 G H@3 B C@3 B D@3 E
  F@3 G I@2 J K L M N O P Q R S ~ A@2 B C@3 B D@3 E F@3 G H@3 B C@3 B D@3 E F@3 G I@2 J K L M N O P Q R S T U V W X Y J
  K L M Z ~@2
>`.pickRestart({
  A: "[~@5 e1@5 ~ e1@4 e1@12 e1@5]/2", B: "e1 e1@3", C: "[g1@5 g1@4 g1@12 d1@5 ~ d1@4 d1@12 e1@5]/3",
  D: "[e1@5 e1@4 e1@12 g1@5 ~ g1@4 g1@12 d1@5]/3", E: "d1 d1@3", F: "[e1@5 e1@4 e1@12 e1@5 ~ e1@4 e1@12 g1@5]/3",
  G: "g1 g1@3", H: "[d1@5 d1@4 d1@12 e1@5 ~ e1@4 e1@12 e1@5]/3", I: "[d1@5 d1@4 d1@12 e1@3 e1@3 e1@2 e1@3]/2",
  J: "e1@3 e1@2 e1@3 d1@3 b1@2 b1@3", K: "b1@3 b1@2 b1@3 b1@3 b1@2 e1@3", L: "f#1@3 f#1@2 f#1@3 f#1@3 f#1@2 f#1@3",
  M: "f#1@3 e1@2 b1@3 b1@3 b1@2 b1@3", N: "b1@3 g1@2 b1@3 d1@3 e1@2 e1@3", O: "e1@3 e1@2 e1@3 e1@3 e1@2 d1@3",
  P: "b1@3 b1@2 b1@3 b1@3 b1@2 b1@3", Q: "b1@3 e1@2 f#1@3 f#1@3 f#1@2 f#1@3", R: "f#1@3 f#1@2 f#1@3 e1@3 b1@2 b1@3",
  S: "b1@3 b1@2 b1@3 g1@3 b1@2 d1@3", T: "e1@3 e1@2 e1@3 e1@3 e1@2 e1@3", U: "e1@3 d1@2 b1@3 b1@3 b1@2 b1@3",
  V: "b1@3 b1@2 b1@3 e1@3 f#1@2 f#1@3", W: "f#1@3 f#1@2 f#1@3 f#1@3 f#1@2 e1@3", X: "b1@3 b1@2 b1@3 b1@3 b1@2 g1@3",
  Y: "b1@3 d1@2 e1@3 e1@3 e1@2 e1@3", Z: "b1@3 g1@2 b1@3 d1@3 ~@5",
})).s("gm_piano").gain(0.51)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@33 A B A ~ C ~ D ~ C B ~@34 A B A ~ C ~ D ~ C B ~@34 A B A ~ C ~ D ~ C B ~ B C B A ~ A B A ~ C ~@3
>`.pickRestart({
  A: "~@13 x ~@2", B: "~ x", C: "~@3 x ~@12", D: "~@3 x ~@9 x ~@2",
})).gain(0.51)

// drums · splash
const splash = s("cr").struct("<~ A B@31 C ~@11 A B@31 C ~@11 A B@31 C ~@23>".pickRestart({
  A: "~@5 x ~ x!3 ~ x!3 ~ x", B: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", C: "x!2 ~ x!2 ~@11",
})).gain(0.51)

stack(bass, kick, snare, low_tom, splash)

More by R.E.M.