Strudelify

Star 69

R.E.M.

KeyE majorTempo250 bpm
0:00/0:00
// Star 69 — R.E.M.
// 250 bpm, 3/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 251 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(250/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 · synth bass 2
const bass = note(`<
  A B@2 C D@2 E@2 F C G H I@2 J@2 K B@2 C L M E@2 F N@2 H I@2 C O P B@2 C D@2 E@2 F C G H I@2 J@2 K B@2 C L Q R S T@3
  U@3 V@2 W@3 X@3 R S Y Z G H I@2 J@2 K B@2 C L M E@2 F N@2 H I@2 C O P B@2 C D@2 E@2 F C G H I@2 J@2 K B@2 C L M E@2 F
  N@2 H I@2 C O W@3 X@3 R S Y Z G X@3 R S T@3 AA@2 AB ~@2 AC@2 AD@3 AE@2 AF@6 AG@2 AH@3 AI@5 AJ@3 AK@3 AL@5 AD@3 AE@2
  AF@6 AG@2 AH@3 AM@6 AN@3 AO@8 AP@7 AQ@6 AN@3 AR@8 AS@8
>`.pickRestart({
  A: "~@7 b1@5 b1@4", B: "[~ b1@5 ~ b1@2 e1@5 ~ e1@5 e1@3 e1@5 e1@4]/2", C: "~ a1@5 ~ a1@5 a1@4",
  D: "[~ a1@3 f#1@5 f#1@5 ~ f#1@2 f#1@5 ~ f#1@5 b1@4]/2", E: "[~ b1@5 ~ b1@5 b1@3 e1@5 e1@5 e1@3 e1@4]/2",
  F: "~ e1@5 ~ a1@5 a1@4", G: "~ e1@5 ~ f#1@5 a1@4", H: "~ b1@5 ~ b1@5 b1@4",
  I: "[~ b1@3 e1@5 e1@5 ~ e1@2 e1@5 ~ e1@5 a1@4]/2", J: "[~ a1@5 ~ a1@5 a1@3 f#1@5 f#1@5 f#1@3 f#1@4]/2",
  K: "~ f#1@5 ~ b1@5 b1@4", L: "~ a1@5 ~ a1@5 e1@4", M: "~ f#1@5 ~ a1@5 b1@4",
  N: "[~ a1@5 ~ a1@2 f#1@5 ~ f#1@5 f#1@3 f#1@5 f#1@4]/2", O: "~ a1@5 ~ e1@5 f#1@4", P: "~ a1@5 ~ b1@5 b1@4",
  Q: "~ f#1@5 ~ a1@5 e1@4", R: "~ e1@15", S: "~ f#1@15", T: "[~@7 e1@5 e1@16 f#1@15 ~@5]/3",
  U: "[~ e1@5 ~ e1@16 f#1@15 ~@6 a1@4]/3", V: "[~ a1@5 ~ a1@12 ~@4 e1@5 f#1@4]/2",
  W: "[~ a1@5 ~ e1@5 e1@16 f#1@15 ~@5]/3", X: "[~ e1@5 ~ e1@16 f#1@15 ~@6 e1@4]/3", Y: "~@7 a1@5 a1@4",
  Z: "~ a1@12 ~@3", AA: "[~ a1@5 ~ a1@5 a1@12 ~@4 e1@4]/2", AB: "~ f#1@5 ~ a1@5 ~@4",
  AC: "[~@8 b1@5 b1@5 ~ b1@5 b1@3 e1@5]/2", AD: "[e1@5 e1@3 e1@5 e1@5 ~ a1@5 a1@5 a1@5 ~ a1@2 f#1@5 ~ f#1@5]/3",
  AE: "[f#1@3 f#1@5 f#1@5 b1@5 ~ b1@5 b1@5 b1@3]/2",
  AF: "[e1@5 e1@5 ~ e1@2 e1@5 ~ e1@5 a1@5 a1@5 ~ a1@5 a1@5 a1@5 ~ e1@5 f#1@5 a1@5 ~ b1@5 b1@5 b1@5 ~ b1@2 e1@5 ~ e1@5]/6",
  AG: "[e1@3 e1@5 e1@5 a1@5 ~ a1@5 a1@5 a1@3]/2",
  AH: "[f#1@5 f#1@5 ~ f#1@2 f#1@5 ~ f#1@5 b1@5 b1@5 ~ b1@5 b1@3 e1@5]/3",
  AI: "[e1@5 e1@3 e1@5 e1@5 ~ a1@5 a1@5 a1@5 ~ a1@5 a1@5 e1@5 ~ f#1@5 a1@5 b1@5 ~ b1@5 b1@5 b1@3]/5",
  AJ: "[e1@5 e1@5 ~ e1@2 e1@5 ~ e1@5 a1@5 a1@5 ~ a1@5 a1@3 f#1@5]/3",
  AK: "[f#1@5 f#1@3 f#1@5 f#1@5 ~ b1@5 b1@5 b1@5 ~ b1@2 e1@5 ~ e1@5]/3",
  AL: "[e1@3 e1@5 e1@5 a1@5 ~ a1@5 a1@5 a1@5 ~ a1@5 e1@5 f#1@5 ~ a1@5 b1@5 b1@5 ~ b1@5 b1@3 e1@5]/5",
  AM: "[e1@5 e1@3 e1@5 e1@5 ~ a1@5 a1@5 a1@5 ~ a1@5 a1@5 e1@5 ~ f#1@5 a1@5 e1@5 ~ e1@16 f#1@13]/6",
  AN: "[~@8 e1@5 e1@16 f#1@15 ~@4]/3",
  AO: "[~@3 e1@5 e1@16 f#1@15 ~@6 a1@5 ~ a1@5 a1@12 ~@4 e1@5 f#1@5 ~ a1@5 e1@5 e1@16 f#1@15 ~@4]/8",
  AP: "[~@3 e1@5 e1@16 f#1@15 ~@6 e1@5 ~ e1@16 f#1@15 ~@6 a1@5 a1@5 ~ a1@12 ~]/7",
  AQ: "[~@3 e1@5 f#1@5 a1@5 ~ e1@5 e1@16 f#1@15 ~@6 e1@5 ~ e1@16 f#1@13]/6",
  AR: "[~@3 a1@5 a1@5 a1@12 ~@4 e1@5 ~ f#1@5 a1@5 e1@5 ~ e1@16 f#1@15 ~@6 e1@5 e1@16 f#1@15 ~@4]/8",
  AS: "[~@3 e1@5 e1@16 f#1@15 ~@6 a1@5 ~ a1@5 a1@12 ~@4 e1@5 f#1@5 ~ a1@5 b1@5 b1@5 ~ b1@5 b1@3 e1@17 ~@4]/8",
})).s("gm_synth_bass_2").gain(0.51)

// drums · rim
const rim = s("rim").struct("<~@18 A ~@10 B ~@10 C ~@52 B ~@10 C ~@9 A ~@55 D ~@10 E ~@10 F ~@58>".pickRestart({
  A: "~@3 x", B: "~@7 x ~@8", C: "~ x ~@14", D: "~@13 x ~@2", E: "~ x", F: "~@3 x ~@12",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct(`<
  A B C D ~ B C D ~ E F D ~ B C D ~ B C D ~ B C D ~ B C D ~ B C D ~ B C D ~ B C D ~ B C D ~ B C D ~ B C D G H C D ~ B C
  D ~ B C F I B C D ~ B C D ~ E F D ~ B C D ~ B C D G H C D ~ B C D ~ B C D ~ B C D ~ B C D ~ B C D ~ B C D ~ B C D ~ B
  C D ~ B C D ~ B C F I B C D ~ B C D ~ E F D ~ B C D ~ B C D G H ~@2 B J K L ~ J K L ~ M N O ~ J K L ~ J K L ~ J K L ~
  J K L ~ J K L ~ J K L ~ J K L ~ J K L ~ J K L ~ J K L P Q K L ~ J K L ~ J K R S J K L ~ J K L ~ M N O ~ J K L ~ J K L
  P Q K L ~ J K L ~ J K R S ~@2
>`.pickRestart({
  A: "x", B: "~ x ~@14", C: "~@7 x ~@8", D: "~@3 x", E: "~ x ~@10 x ~@2 x", F: "~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x",
  G: "~@7 x ~ x ~@2 x ~@2 x", H: "~ x ~@2 x ~@2 x ~ x ~@6", I: "~ x ~@2 x ~@11", J: "~@3 x ~@12", K: "~ x",
  L: "~@13 x ~@2", M: "~@3 x ~@9 x ~@2", N: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", O: "x ~@12 x ~@2",
  P: "~@8 x ~@2 x ~ x ~@2", Q: "x ~@2 x ~ x ~@2 x ~@2 x ~@4", R: "~@3 x ~ x ~@2 x ~@2 x ~ x ~@2", S: "x ~@2 x ~ x ~@10",
})).gain(0.51)

// drums · china
const china = s("cr").struct(`<
  A@2 B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B
  C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A
  B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A E B F@2 G H I F G H I F G H I F G H I F G H I F G H I
  F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H
  I F G H I F G H I F G H J ~@2
>`.pickRestart({
  A: "~@7 x ~@4 x ~@3", B: "~ x ~@10 x ~@3", C: "~ x ~@5 x ~@8", D: "~ x ~@5 x ~@4 x ~@3", E: "~@7 x ~@8",
  F: "~@8 x ~@4 x ~@2", G: "~@3 x ~@9 x ~@2", H: "~@3 x ~@4 x ~@7", I: "~@3 x ~@4 x ~@4 x ~@2", J: "~@3 x ~@12",
})).gain(0.41)

stack(bass, rim, snare, china)

More by R.E.M.