Strudelify

Texarkana

R.E.M.

KeyG majorTempo145 bpm
0:00/0:00
// Texarkana — R.E.M.
// 145 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(145/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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(`<
  A B C D@2 B E F G B C D@2 B E F G B C D@2 B E F G B C D@2 B E F G H I J K H L B M B M B C D@2 B E F G B C D@2 B E F G
  H I J K H L B M B M N@2 O@2 P@2 Q R S T U@2 S V W X B C D@2 B E F G B C D@2 B E F G H I J K H L B M B M
>`.pickRestart({
  A: "~@3 e1 g1 a1 b1 d2", B: "e1@5 ~ e1@10", C: "g1@2 ~ g1@5", D: "[b1@5 ~ b1@8 d2@4 b1@4 g1@2 a1@2 b1@2 a1@2 g1@2]/2",
  E: "a1@2 ~ a1@5", F: "g1@5 ~ g1@10", G: "g1@3 g1 a1 b1 a1 g1", H: "[c2,g2]@5 ~ [c2,g2]@10", I: "d2@2 ~ d2@3 c2@2",
  J: "b1@5 ~ b1@7 ~ b1@2", K: "e2@5 ~ e2@6 d2@3 ~", L: "a1 ~@2 e1 g1 a1 b1 d2", M: "d2@5 ~ g1@2 a1@2 b1@2 a1@2 g1@2",
  N: "[~ a1@4 ~ a1@15 ~ a1@10]/2", O: "[g1@4 ~@2 g1@15 ~ g1@10]/2", P: "[a1@4 ~@2 a1@15 ~ a1@10]/2",
  Q: "g1@4 ~@2 g1@9 ~", R: "g1@15 ~", S: "d2@5 ~ d2@9 ~", T: "d2@3 d2@5",
  U: "[g2@5 ~ g2@7 ~ g2@5 f#2@4 ~ e2@4 f#2@4]/2", V: "d2@5 ~ d2@10", W: "e2@5 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  X: "e2 ~@2 e1 g1 a1 b1 d2",
})).s("gm_electric_bass_finger").gain(0.34)

// other · percussive organ
const percussive_organ = note("<~ A B C@2 A D E@2 A B C@2 A D E@2 ~@94>".pickRestart({
  A: "e5", B: "d5", C: "f#5/2", D: "c#5", E: "[b4@7 ~ b4@2 a4@4 g4@4 f#4@4 e4@4 d4@6]/2",
})).s("gm_percussive_organ").gain(0.2)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~ A B C@2 A D E@2 A B C@2 A D E@2 A B C@2 A D E@2 A B C@2 A D E@2 F G H I F ~ J K J K A B C@2 A D E@2 A B C@2 A D E@2
  F G H I F ~ J K J K L M@2 N L O P N ~@8 A B C@2 A D E@2 A B C@2 A D E@2 F G H I F ~ J K J K
>`.pickRestart({
  A: "[g3,b3,e4]", B: "[g3,b3,d4]", C: "[f#3,b3,d4]/2", D: "[a3,c#4,e4]", E: "[g3,b3,d4]/2", F: "[g3,c4]", G: "[a3,d4]",
  H: "[b3,d4]", I: "[b3,e4]", J: "[e3,b3]", K: "[d3,a3]", L: "~ e3", M: "[b3@8 d4@4 e4@7 ~@5 g3@8]/2", N: "d4@2 e4 g4",
  O: "b3@8 d4@3 e4@5", P: "~ g3",
})).s("gm_string_ensemble_2").gain(0.09)

// other · viola
const viola = note("<~@69 A B@2 C A D E C F@2 G@2 F@2 H ~@27>".pickRestart({
  A: "~ e3", B: "[b3@8 d4@4 e4@7 ~@5 g3@8]/2", C: "d4@2 e4 g4", D: "b3@8 d4@3 e4@5", E: "~ g3",
  F: "[d4@3 e4@3 f#4@3 g4@3 f#4@2 e4@2]/2", G: "[d4@4 e4@2 b3@23 ~@3]/2", H: "a4@3 b4@5",
})).s("gm_viola").gain(0.08)

// drums · kick
const kick = s("bd").struct("<A B@37 ~ B@25 ~ B@18 C D B@21 ~ B@4>".pickRestart({
  A: "~@7 x", B: "x ~@4 x ~@2", C: "x ~@2 x!5", D: "x",
})).gain(0.34)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ A@37 ~ A@25 ~ A@18 ~@2 A@21 ~ A@4>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.2)

// drums · rim
const rim = s("rim").struct("<~@69 [x ~ x ~ x ~ x!2]!8 ~@34>").gain(0.27)

// drums · snare
const snare = s("sd").struct("<~ A@37 ~ A@25 ~ A@4 ~@8 A@6 B C A@21 ~ A@4>".pickRestart({
  A: "~ x ~ x", B: "~@2 x!6", C: "x",
})).gain(0.41)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~ A@37 ~ A@25 ~ A@4 ~@8 A@7 B A@21 ~ A@4>".pickRestart({
  A: "x!2 ~ x!5", B: "x",
})).gain(0.34)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct("<~ A@37 ~ A@25 ~ A@4 ~@8 A@7 ~ A@21 ~ A@4>".pickRestart({
  A: "~ x ~@2",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@40 A ~ A ~@23 A ~ A ~@39 A ~ A>".pickRestart({
  A: "x",
})).gain(0.34)

stack(bass, percussive_organ, string_ensemble_2, viola, kick, kick_soft, rim, snare, pedal_hat, pedal_hat_soft, crash)

More by R.E.M.