Strudelify
If You Needed Somebody cover art

Holy Water

If You Needed Somebody

Bad Company

KeyG majorTempo100 bpm
0:00/0:00
// If You Needed Somebody — Bad Company
// 100 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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.

// chords · acoustic guitar steel · "Bad Co"
const acoustic_guitar_steel = note(`<
  A B A B A B A B A C D E F G H@2 F I J K L M N O L M N P A Q R B A B A B A C D E F G H@2 F I J K L M N O L M N O S T U
  V S W X Y L M N O L M N P A Q R B L M N O L M N P A Q Z@2
>`.pickRestart({
  A: "g4 d4 g3 g4 d4 g3 g4 g3", B: "g4 d4 g3 g4 d4 a3 g4 a3", C: "g4 d4 g3 g4 d4 a3 d4 a3",
  D: "g4 d4 g3 g4 d4 g3 d4 g3", E: "g4@2 d4@2 g3@2 g4@2 d4@2 a3@2 g4@2 a3 b3",
  F: "[c4,e4,g4]@3 ~ [c4,e4] [d4,f#4] [e4,g4] [f#4,a4]", G: "[d4,g4]@2 [g3,d4]@2 [g3,d4]@2 [g3,d4]@5 ~ g4@2 g3@2",
  H: "[[a3,c4,e4]@5 ~ d4!2 [a4,c5]@2 [g4,b4]@2 [e4,g4]@2 [b3,d4]@5 ~ g3@2 g4@2 d4@2 g3@2 g4@2 g3@2]/2", // Am G Em Bm
  I: "[g4,c5]@2 [g4,b4]@3 ~ g4@2 e4@2 d4@5 ~, ~@4 g3@3 ~", J: "[e4,g4]!4 [c4,e4]@3 ~",
  K: "~@2 g4!2 [d4,b4] a4 g4 a4 [d4,f#4,b4]@3 ~ [f#4,a4,d5]@2 b4@2", // G Bm D
  L: "[b3,d4,g4]@5 ~ d4!2 [d4,g4,b4]@2 a4@2 [d4,g4] a4 [d4,f#4,a4]@2", // G G5 D
  M: "[d4,f#4,a4]@6 ~@2 [a3,d4,g4]@3 ~ [a3,d4,f#4]@3 ~", // D Dsus4 D
  N: "[a3,c4,e4]@3 ~ [a3,c4,e4]@2 ~ b4 [e4,a4,c5]@2 b4 [c4,e4,a4]@2 [c4,e4,g4]@2 ~", // Am C
  O: "[e4,g4]@2 [c4,e4]@5 ~ [a3,d4,f#4]@3 ~ [a3,d4,f#4]@3 ~", // Em C D
  P: "[c4,e4,a4]@2 g4@2 [c4,e4]@2 d4@2 [a3,d4,f#4]@2 e4@2 [a3,d4,f#4]@3 ~", // Am C D
  Q: "g4@2 d4@2 g3@2 ~ d4 e4@2 d4 d4@2 d4@2 ~", R: "[b3,d4]@3 ~ g3@2 g4@2 d4@2 g3@2 g4@2 g3@2",
  S: "[a3,c4]@5 ~ [a3,c4,f4]@4 f4@2 f4@2 c4@2", T: "[b3,d4,g4]@2 [b3,d4,g4]@3 ~ [b3,d4,g4]@5 ~ [b3,d4]@3 ~",
  U: "[a3,c4]@3 ~ [a3,c4]@2 ~ c4 [c4,f4,a4]@2 g4 g4@2 f4 g4 f4", // Am F
  V: "[b3,d4]@3 ~ [b3,d4,g4]@3 ~ [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@3 ~", // Bm G
  W: "g4!2 a4 g4 [g3,b3,e4]@3 ~, [b3,e4]@3 ~@5", X: "~@2 [d4,f#4,a4]@2 g4@2 [d4,f#4,a4]@4 g4@2 g4!2 g4@2",
  Y: "~@2 [e4,g4,d5]@3 ~ b4 a4!2 g4@2 ~ a4@3 ~, ~@4 [c4,e4]@3 ~", Z: "[[b3,d4]@29 ~@3]/2",
})).s("gm_acoustic_guitar_steel").gain(0.31)

// other · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  A B A B A C A C A C A D E F G H E I E J K@2 L@2 M@2 N@2 A B A B A C A C A C A D E F G H E I E J K@2 L@2 M@2 O P@8 Q
  K@2 R@5 S@8 T@5 A B U@2
>`.pickRestart({
  A: "g2@5 ~ c3@8 ~@2", B: "a2@5 ~ d3@8 ~@2", C: "a2@5 ~ d3@5 ~ d3@3 ~", D: "a2@5 ~ d3@7 ~ a2 b2",
  E: "c3@5 ~ c3@2 c3@3 ~ c3@3 ~", F: "b2@5 ~ b2@2 b2@3 ~ b2@2 b2@2", G: "a2@5 ~ a2@2 a2@3 ~ a2@3 ~",
  H: "g2@5 ~ g2@2 g2@5 ~ a2 b2", I: "b2@5 ~ b2@2 b2@5 ~ a2 b2", J: "d3@2 d2@2 d2@2 d2@2 d2@3 ~ d2@2 e2@2",
  K: "[g2@3 ~ g2@3 ~ g2@2 g2@2 a2@2 d2@5 ~ d3@2 d3@2 d2@2 e2@2 g2@2 e2@2]/2",
  L: "[a2@3 ~ a2@3 ~ a2@2 b2@2 ~@2 c3@4 c3@2 c3@2 g2@2 d3@2 d2@2 e2@2 f#2@2]/2",
  M: "[g2@3 ~ g2@3 ~ g2@2 g2@2 a2@2 d2@5 ~ d3@2 d3@2 d2@2 e2@2 g2@2 d2@2]/2",
  N: "[a2@3 ~ a2@3 ~ a2@2 b2@2 ~@2 c3@4 c3@2 c3@2 g2@2 d3@2 d3@2 d2@2 e2 f#2]/2", O: "a2@3 ~ a2@3 ~ a2@2 b2@2 ~@2 c3@2",
  P: "[c3@2 c3@2 c3@2 ~@2 d3@3 ~ a2@3 ~ f2@3 ~ f2@3 ~ f2@2 f2@3 ~ d2@2 g2@3 ~ g2@3 ~ g2@2 g2@3 ~ g2@2 f2@3 ~ f2@3 ~ f2@2 f2@3 ~ d2@2 g2@3 ~ g2@3 ~ g2@2 g2@2 d3 e3 d3@2 f2@3 ~ f2@3 ~ f2@2 f2@3 ~ f2@2 e2@3 ~ e2@3 ~ e2@2 e2@3 ~ e2@2 d2@3 ~ d2@3 ~ d2@2 d2@3 ~ d2@2, ~@3 c3@61]/8",
  Q: "c2@3 ~ c2@3 ~ c2@2 c2@2 d2@2 e2@2",
  R: "[a2@3 ~ a2@3 ~ a2@2 b2@2 ~@2 c3@4 c3@2 ~@2 g2@2 d3@2 d2@2 e2@2 f#2@2 g2@3 ~ g2@3 ~ g2@2 g2@2 a2@2 d2@5 ~ d3@2 d3@2 d2@2 e2@2 g2@2 d2@2 a2@3 ~ a2@3 ~ a2@2 b2@2 ~@2 c3@2, ~@10 c3@29 ~]/5",
  S: "[~@2 c3@2 ~@2 g2@2 d3@2 d3@2 d2@2 e2 f#2 g2@5 ~@11 a2@5 ~ d3@8 ~@2 g2@5 ~@11 a2@5 ~ d3@8 ~@2 g2@3 ~ g2@3 ~ g2@2 g2@2 a2@2 d2@5 ~ d3@2 d3@2 d2@2 e2@2 g2@2 e2@2 a2@3 ~ a2@3 ~ a2@2 b2@2 ~@2 c3@2, ~@2 c3@9 c3@16 c3@36 ~]/8",
  T: "[~@2 c3@2 ~@2 g2@2 d3@2 d2@2 e2@2 f#2@2 g2@3 ~ g2@3 ~ g2@2 g2@2 a2@2 d2@5 ~ d3@2 d3@2 d2@2 e2@2 g2@2 d2@2 a2@3 ~ a2@3 ~ a2@2 b2@2 ~@2 c3@4 c3@2 c3@2 g2@2 d3@2 d3@2 d2@2 e2 f#2, ~@2 c3@29 ~@9]/5",
  U: "[[g2,d3]@29 ~@3]/2", // G5
})).s("gm_acoustic_guitar_steel").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@9 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B A@9 B A@2 B A@2 B A@2 B A@2 B A@3 B A@2 B A@2 B A@2 B A@2 B A@2 B A@2 B
  A@2 B A@2 B A@2 B A@2 ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@6 x!2 ~@7",
})).gain(0.31)

// drums · rim
const rim = s("rim").struct("<~@4 [x ~@2 x]!8 ~@20 [x ~@2 x]!8 ~@48>").gain(0.31)

// drums · snare
const snare = s("sd").struct("<~@12 [~ x ~ x]!20 ~@8 [~ x ~ x]!47 ~>").gain(0.31)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!8]!83 ~>").gain(0.31)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [x ~@2 x]!8 ~@20 [x ~@2 x]!8 ~@48>").gain(0.15)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 [x!8]!8 ~@20 [x!8]!8 ~@48>").gain(1.56)

stack(acoustic_guitar_steel, acoustic_guitar_steel_2, kick, rim, snare, hihat, tambourine, cabasa)

More by Bad Company