Strudelify

Strange Currencies

R.E.M.

KeyC majorTempo90 bpm
0:00/0:00
// Strange Currencies — R.E.M.
// 90 bpm, 6/8, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 115 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/3)

// 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.

// chords · electric guitar clean · "Electric Guitar(clean)"
const electric_guitar_clean = note(`<
  A B C B C B C B C B D E F B C B C B D E F B C E F B C G H I J B C B C B D E F B C B C B D E F B C E F B C G H I@2 K L
  K L K M G H I N B C B C B D E F B C B C B D E F C@2 E F C@2 G H I@2 B C E F B C G H I@2 B C E F B C G H I J O@2
>`.pickRestart({
  A: "~@6 e3 d3 c3@2 d3@2", B: "~ e3 g3 ~ c4 g3, c3@2 ~, ~ g4", C: "~ a3 c4 ~ c4 g3, f3@2 ~, ~ g4",
  D: "~ a3 c4 ~ g3 c4, f3@2 ~, ~ e3", E: "~ a3 d4 ~ d4 a3, d3, ~ f4", F: "~ d3 g3 g4 d4 g3, g2",
  G: "~ a3 d4 ~ d4 a3, d3 f4", H: "~ d4 a3 ~ d4 a3, f4!2", I: "g4 d4 g3 g4 d4 g3", J: "~@6 e3 d3 c3@2 d3@2, g4@2 ~",
  K: "a3 c4 d4 e4 c4 a3", L: "g3 b3 d4 g4 d4 g3", M: "f3 a3 c4 g4 d4 g3", N: "g4", O: "c3/2",
})).s("gm_electric_guitar_clean").gain(0.41)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@13 A B A B C D E F G H I J G H K L M N A B A B C D E F A B A B C D E F G H I J G H K L M O P O P O Q R K L M S A B A
  B C D E F A B A B C D E F G H I J G H K L M N G H I J G H K L M N G H I J G H K L M T U@2
>`.pickRestart({
  A: "c2@4 ~ c2", B: "f1@4 a1 b1", C: "c2@4 d2 e2", D: "f2 e2", E: "d2@4 ~ d2", F: "g1@3 g1 a1 b1", G: "c2 g1",
  H: "f1 c2", I: "f2 ~ f2@2 e2 f2", J: "g2@2 g2 g1 a1 b1", K: "d2@4 ~ a1", L: "d2@3 ~ d2@4 e2@2 f2@2",
  M: "g2@3 ~ g2@2 g2@2 g2@2 g2@2", N: "g2@2 ~", O: "g2@2 e2 g2 f#2 g2", P: "a2@5 e2", Q: "a2@3 c2 d2 e2", R: "f2 c2",
  S: "g2@5 ~", T: "g2@3 e2@2 d2", U: "c2/2",
})).s("gm_fretless_bass").gain(0.41)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@21 A B C D A B E@2 F G ~@16 A B C D A B E@2 F G H G H G H I J@2 F G ~@16 A B C D A B E@2 F G A B C D A B E@2 F G A B
  C D A B E@2 K G L@2
>`.pickRestart({
  A: "[c3,g3,c4] [g2,d3,g3]", B: "[f2,c3,f3] [c3,g3,c4]", C: "[f2,c3,f3]", D: "[g3,d4,g4]", E: "[d3,a3,d4]/2",
  F: "[g2,d3,g3]@2 [g2,d3,g3]!4", G: "[g2,d3,g3]", H: "[a2,e3,a3]", I: "[f2,c3,f3] [c2,g2,c3]", J: "[d2,a2,d3]/2",
  K: "[g2,d3,g3]@5 [g2,d3,g3]", L: "[c3,g3]/2",
})).s("gm_distortion_guitar").gain(0.24)

// chords · celesta
const celesta = note("<~@31 A B A B A C D E A B A B A C D E ~@20 A B A B A C D E A B A B A C D E ~@32>".pickRestart({
  A: "~ e3 g3 ~ c4 g3, c3@2 ~, ~ g4", B: "~ a3 c4 ~ c4 g3, f3@2 ~, ~ g4", C: "~ a3 c4 ~ g3 c4, f3@2 ~, ~ e3",
  D: "~ a3 d4 ~ d4 a3, d3, ~ f4", E: "~ d3 g3 g4 d4 g3, g2",
})).s("gm_celesta").gain(0.4)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~ A@2 B C ~@9 D E F ~@2 D G ~@16 D H I J K L M F N@2 ~@10 K O K P Q R N@2 S ~@7 M S K J T@2 U V M S ~@32
>`.pickRestart({
  A: "c4/2", B: "g5", C: "c5", D: "a4", E: "c4", F: "f4", G: "b4", H: "b4@5 g4", I: "c4@5 c4", J: "f4@5 d4",
  K: "e4@5 d4", L: "f4@5 ~", M: "d4", N: "d4/2", O: "g4@5 d4", P: "g4@5 f#4", Q: "e5", R: "f4@3 e4@2 d4", S: "g4",
  T: "[c5@11 ~]/2", U: "~ c5@2", V: "f4 e4",
})).s("gm_overdriven_guitar").gain(0.13)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@21 A@3 B C@4 B ~@17 A@3 B C@4 D@2 E B F B C@4 G@2 ~@8 H@6 B ~ A@3 B C@4 D@2 I J@2 B I K@3 D@2 I J@2 B I@2 F L D@2
  M@2
>`.pickRestart({
  A: "c6/3", B: "d6", C: "c6/4", D: "d6/2", E: "e6", F: "a5", G: "[d6@2 ~]/2", H: "c6/6",
  I: "~@4 c6@3 ~ c6@6 ~@2 c6@3 ~ c6@4", J: "[~@4 c6@3 ~ c6@6 ~@2 c6@3 ~ c6@28]/2",
  K: "[~@4 c6@3 ~ c6@6 ~@2 c6@3 ~ c6@52]/3", L: "c6", M: "c6/2",
})).s("gm_string_ensemble_1").gain(0.21)

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

// drums · snare
const snare = s("sd").struct("<~@13 A@17 ~ A@27 B A@3 ~ A@3 ~ A@46 ~@2>".pickRestart({
  A: "~ x", B: "~@3 x ~ x",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@13 A@14 ~@4 A@22 ~@4 A@5 ~ A@3 ~ A@22 ~@4 A@6 ~@4 A@6 ~@6>".pickRestart({
  A: "x!6",
})).gain(0.41)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@25 A ~@35 A ~@9 A ~@9 A ~@8>".pickRestart({
  A: "~@5 x",
})).gain(0.31)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@21 A ~@5 A@3 ~@17 A ~@5 A@3 ~ A ~@3 A B A ~@2 A ~@16 A ~@5 A@3 ~ A ~@5 A@3 ~ A ~@5 A@3 ~ A ~
>`.pickRestart({
  A: "x", B: "x!2",
})).gain(0.41)

// drums · splash
const splash = s("cr").struct(`<
  ~@21 A ~@3 A ~ A@3 ~@17 A ~@3 A ~ A@3 ~ A ~@3 A B A ~@2 A ~@16 A ~@3 A ~ A@3 ~ A ~@3 A ~ A@3 ~ A ~@3 A ~ A@3 ~ A ~
>`.pickRestart({
  A: "x", B: "x!2",
})).gain(0.41)

// drums · shaker
const shaker = s("sh").struct("<~@27 A@3 ~@23 A@3 B ~@32 A@3 C ~@6 A@4 ~@6 A@4 ~@2>".pickRestart({
  A: "~ x!2 ~ x!2", B: "~ x!2 ~@3", C: "~ x!5",
})).gain(0.41)

stack(
  electric_guitar_clean, bass, distortion_guitar, celesta, overdriven_guitar, string_ensemble_1, kick, snare, hihat,
  open_hat, mid_tom, ride_bell, splash, shaker
)

More by R.E.M.