Strudelify

Your Blue Room

U2

KeyA minorTempo85 bpm
0:00/0:00
// Your Blue Room — U2
// 85 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(85/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 · "Bass"
const bass = note(`<
  ~@15 A B C D E F G D H B C D E F G D H I C D E F G D H B C D E F G D H B C D E F G D H B C D E F G D H B C D E F G D H
  B C D E F G D H B C D J K L M N O P Q R S T U@2 B C D E F G D H B C D E F G D H B C D E F G D V
>`.pickRestart({
  A: "~@12 a2@2 b2 ~", B: "e2@6 a2 b2", C: "d3@6 a2 b2", D: "f2@11 ~ a2 ~ b2 ~", E: "c3@6 a2 b2",
  F: "e2@11 ~ a2 ~ b2@2", G: "d3@7 ~", H: "c3@11 ~ a2@2 b2 ~", I: "e2@12 a2@2 b2 ~", J: "c3@3 ~", K: "f2@13 ~ f2 ~",
  L: "f2@12 f2@3 ~", M: "e2@13 ~ e2 ~", N: "e2@7 ~", O: "c3@13 ~ c3@2", P: "g2@3 g2@4 g2", Q: "d3@5 ~ d3@8 d3@2",
  R: "d3@5 d3@3", S: "c3@3 c3", T: "g2@5 ~ g2@7 ~ g2@2", U: "[d3@5 ~ d3@12 d3@4 ~@6 a2@2 b2 ~, ~@11 d3@4 ~]/2",
  V: "c3@11 ~@5",
})).s("gm_electric_bass_finger").gain(0.5)

// other · vibraphone · "cling"
const vibraphone = note("<~@73 A@3 B ~@43>".pickRestart({
  A: "[~@4 d5 e5 d5 a5@2 g5@2 e5@4 d5@2 c5@2 b4@2 g4@2 d4]/3", B: "e4@3 ~@5",
})).s("gm_vibraphone").gain(0.36)

// chords · drawbar organ · "Organ"
const drawbar_organ = note("<~@83 A@3 B@6 C@4 ~@24>".pickRestart({
  A: "[~ c5@2, ~@5 [f4,a4]@11]/3", B: "[b4@32 c5@15 ~ b4@16 [f#4,a4]@31 ~, g4@21 ~@11, e4@47 ~ d4@47 ~]/6",
  C: "[[e4,c5]@15 ~ b4@15 ~ [f#4,a4]@32, g4@31 ~@33, ~ d4@3]/4", // C F#m
})).s("gm_drawbar_organ").gain(0.36)

// other · electric guitar clean · "Guitar"
const electric_guitar_clean = note("<~@96 A B@2 C D@2 E F G ~@7 H I J K L M N O>".pickRestart({
  A: "e2@13 ~ e2 g2", B: "[a2@10 e2@2 g2@2 a2@9 ~@7 a2 ~]/2", C: "a2 ~ g2 ~ g2@3 ~ g2@2 e2@3 ~ e2 g2",
  D: "[e2@9 ~ e2@2 g2 ~ a2@10 ~@2 e2 g2 a2@2 e2 g2]/2", E: "a2@13 ~ a2 ~", F: "a2 ~ g2 ~ g2@3 ~ g2@2 e2@3 ~ e2 d2",
  G: "e2@11 ~@5", H: "~@7 b4@8 ~", I: "~@6 a4 g4 a4 b4 a4@5 ~", J: "~@7 a4 g4 a4@4 ~@3", K: "a4@2 g4@3 ~ g4@7 ~@3",
  L: "~@3 b4@3 ~@2", M: "~@6 a4 g4 [a4,b4] ~ a4@5 ~", N: "~@6 a4 g4 a4@4 ~@4", O: "a4@2 g4@3 ~ g4@5 ~@5",
})).s("gm_electric_guitar_clean").gain(0.5)

// other · rock organ · "Keyboards 2"
const rock_organ = note("<A@80 B@4 ~@12 A@24>".pickRestart({
  A: "[b4@10 g4@2 b4@2 a4@12 b4@4 c5@10 b4@2 g4@4 e4@8 c5@2 b4@2 g4@4 e4@12 g4@2 b4@2 a4@12 b4@4 c5@8 c5@2 b4@2 a4@4 g4@8 e4@2 g4@2 a4@5 ~]/8",
  B: "[b4@5 g4 b4 a4@6 b4@2 c5@5 b4 g4@2 e4@4 c5 b4 g4@2 ~]/4",
})).s("gm_rock_organ").gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("~@7 x").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("x ~@2 x!2 ~@2 x").gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("~@4 x ~@2 x ~@2 x ~@2 x ~@2").gain(0.64)

// drums · cabasa
const cabasa = s("cabasa:4").struct("x!16").gain(3.24)

stack(bass, vibraphone, drawbar_organ, electric_guitar_clean, rock_organ, open_hat, mid_tom, tambourine, cabasa)

More by U2