Strudelify
We Belong cover art

Best Shots

We Belong

Pat Benatar

KeyF majorTempo135 bpm
0:00/0:00
// We Belong — Pat Benatar
// 135 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(135/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 · fretless bass · "Bass 1"
const bass = note(`<
  ~@3 A@2 B@2 A@2 B@2 C@3 D E@2 F@2 G@3 H@8 I@4 J A@2 B@2 A@2 B@2 C@3 D E@2 K@5 H@8 I@4 J L@3 ~ A@2 M@4 N@2 ~@5 O K@5
  H@8 I@20 J P@4 Q@2
>`.pickRestart({
  A: "f1/2", B: "bb1/2", C: "[g1@2 f1]/3", D: "bb1", E: "g1/2", F: "c2/2",
  G: "[~@2 f1 ~ f1 ~ f1 ~ f1@10 bb1 ~ bb1 ~ bb1 ~ bb1@10 c2 ~ c2 ~ c2 ~ c2@8]/3",
  H: "[~@2 c2 ~ c2 ~ c2 ~ c2@10 f1 ~ f1 ~ f1 ~ f1@10 bb1 ~ bb1 ~ bb1 ~ bb1@10 c2 ~ c2 ~ c2 ~ c2@10 c2 ~ c2 ~ c2 ~ c2@10 f1 ~ f1 ~ f1 ~ f1@10 bb1 ~ bb1 ~ bb1 ~ bb1@10 c2 ~ c2 ~ c2 ~ c2@8]/8",
  I: "[~@2 c2 ~ c2 ~ c2 ~ c2@10 f1 ~ f1 ~ f1 ~ f1@10 bb1 ~ bb1 ~ bb1 ~ bb1@10 c2 ~ c2 ~ c2 ~ c2@8]/4",
  J: "~@2 c2 ~ c2 ~ c2 ~ c2@8", K: "[c2@33 ~ f1 ~ f1 ~ f1 ~ f1@10 bb1 ~ bb1 ~ bb1 ~ bb1@10 c2 ~ c2 ~ c2 ~ c2@8]/5",
  L: "[f1@11 ~@5]/3", M: "[bb1 f1]/4", N: "[bb1@19 ~@13]/2", O: "g1", P: "[f1@7 ~]/4", Q: "[f1@5 ~@3]/2",
})).s("gm_fretless_bass").gain(0.48)

// bass · electric bass finger · "Bass 2"
const bass_2 = note("<A@4 ~@74 B C@2 D E F ~@41>".pickRestart({
  A: "[~@3 [f4,a4]@10 ~@3]/4", B: "~@2 c2 f2@2 c3 bb2 a2", C: "[a2@27 ~ g1@4]/2", D: "f2 a2", E: "bb2@11 ~ bb2@2 a2 ~",
  F: "a2",
})).s("gm_electric_bass_finger").gain(0.36).pan(0.8)

// chords · synth strings 1 · "Keyboard 3"
const synth_strings_1 = note(`<
  ~@3 A@2 B@2 A@2 B@2 C@2 D E F@2 G@2 H@2 I@2 J K L@2 D K L@2 J K L@2 A@2 B@2 A@2 B@2 C@2 D E F@2 G@2 H@2 I@2 J K L@2 D
  K L@2 J K L@2 M@3 ~ A@2 B@2 A@2 B@2 C@2 D E F@2 G@2 H@2 I@2 J K L@2 D K L@2 J K L@2 H@2 I@2 J K L@2 D K L@2 J K L@2
  N@6
>`.pickRestart({
  A: "[f3,a3,c4]/2", B: "[f3,bb3,c4]/2", C: "[d4@3 c4, [g3,bb3]]/2", D: "[f3,a3,c4]", E: "[f3,bb3,c4]",
  F: "[g3,bb3,d4]/2", G: "[g3,c4,e4]/2", H: "[[f3,a3]@15 ~ [f3,bb3]@15 ~, c4@31 ~]/2", I: "[[e3,g3,c4]@31 ~]/2",
  J: "[f3,a3,c4]@15 ~", K: "[f3,bb3,c4]@15 ~", L: "[e3,g3,c4]/2", M: "[[f3,a3,c4]@17 ~@7]/3", N: "[[f3,a3,c4]@7 ~]/6",
})).s("gm_synth_strings_1").gain(0.2).pan(0.7)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~@15 A@2 B@2 C D E F G H I J K L M N O P Q R ~@12 S@2 T@2 U V W X Y Z AA AB AC AD AE AF AG AH AI AJ ~@3 AK@2 ~@15 U V
  W X Y Z AA AB AC AD AE AF AG AH AI AJ U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AL@2 ~ AM@3
>`.pickRestart({
  A: "[~@16 g3@15 ~, ~@14 [d4,g4]@17 ~, ~@15 bb3@16 ~]/2", // G5
  B: "[~@2 [e4,g4]!2 [f4,g4]@2 [f4,g4] [c4,d4,g4]@2 [c4,d4,g4]@2 [c4,d4,g4] [c4,e4,g4]@2 [c4,e4,g4] ~, ~@4 c4@9 ~@19]/2", // Em Fsus2 Csus2 C
  C: "[a3,c4,f4]@2 [a3,c4,f4]@2 ~@2 [f3,a3,c4,f4]@2 [c4,f4]@4 [c4,f4]@2 f4 ~, f3@5 ~@3 [f3,a3]@7 ~", // F F5 F
  D: "d4@2 [bb3,d4,f4]@2 ~@2 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [d4,f4] ~", // Bb Dm
  E: "[g3,c4,e4,g4] [c4,e4,g4] ~ [c4,e4,g4] [c4,e4,g4]@3 [e4,g4], ~@6 g3@9 ~", // C Em
  F: "~ [g3,c4,e4,g4] ~ [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4] ~, ~@4 g3@3 ~", // C
  G: "[a3,c4,f4]@2 [a3,c4,f4]@2 ~@2 [a3,c4,f4]@2 [f3,a3,c4,f4]@6 [c4,f4] ~, f3 ~@3", // F F5
  H: "~@2 [f3,bb3,d4,f4]@2 ~@2 [bb3,d4,f4]@2 [f3,d4,f4]@6 [bb3,d4,f4] ~, ~@8 bb3@5 ~@3", // Bb Dm Bb
  I: "~ [g3,c4,e4,g4] ~ [c4,e4,g4] [e4,g4]@3 [e4,g4], ~ [g3,c4]", // C Em C5
  J: "~ [g3,c4,e4,g4] ~ [e4,g4] [e4,g4]@2 [e4,g4] ~, ~@3 c4@4 ~", // C Em
  K: "[f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 ~@2 [a3,c4,f4]@2 [c4,f4]@4 [c4,f4]@2 f4 ~, ~@8 [f3,a3]@7 ~", // F F5 F
  L: "[bb3,d4]@2 [f3,bb3,d4,f4]@2 ~@2 [bb3,d4,f4]@2 [d4,f4]@4 [d4,f4]@2 f4 ~, ~@8 [f3,bb3]@7 ~", // Bb Dm Bb5
  M: "~@2 [g3,c4,e4,g4]@2 g4 ~ [c4,e4,g4]@2 [c4,e4,g4]@4 [e4,g4]@2 e4@2, ~ g3", // C Em
  N: "~@2 [g3,c4,e4,g4]@2 ~@2 [g3,e4,g4]@2 [e4,g4]@4 [c4,e4,g4]@2 e4 ~, ~@3 c4@3 ~@2, ~@4 g3@3 ~", // C Em C
  O: "~@2 [f3,a3,c4,f4]@2 ~@2 [a3,c4,f4]@2 [c4,f4]@4 [c4,f4]@2 [c4,f4] ~, ~@8 [f3,a3]@7 ~", // F F5 F
  P: "~@2 [f3,bb3,d4,f4]@2 ~@2 [bb3,d4,f4]@2 [f3,bb3,d4,f4]@6 f4 ~", // Bb
  Q: "~@2 [g3,c4,e4,g4]@2 ~@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]@6 [c4,e4,g4] ~", // C
  R: "~@2 [g3,c4,e4,g4]@2 ~@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]@7 ~", // C
  S: "[~@4 g3@3 ~, ~@14 g4@15 ~@3, ~@15 [bb3,d4]@14 ~@3]/2", // Bb
  T: "[d4@2 e4@2 [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,f4]@4 [f4,g4]@2 [d4,g4]@4 [d4,g4]@4 [d4,g4]@2 [c4,e4,g4]@4 [c4,e4,g4] ~@3, [c4,g4] ~@2 c4@3 ~@2]/2", // C F5 Fsus2 G5 C C5
  U: "~ f4 ~ [f3,c4,f4] [c4,f4]@2 [c4,f4] ~, [a3,c4]@2 ~ a3@4 ~, ~@4 f3@3 ~", // F5 Am
  V: "~@2 [f3,bb3,d4,f4]@2 ~@2 [bb3,d4,f4]@2 [bb3,d4,f4]@4 [bb3,d4,f4]@3 ~, ~@4 f3@3 ~", // Bb
  W: "[e4,g4]@2 [g3,c4,e4,g4] ~@3 [g3,c4,e4,g4]@2 [c4,e4,g4]@4 [c4,e4,g4]@2 g4 ~, ~@8 g3@7 ~", // Em C
  X: "~ [g3,c4,e4,g4] ~ [c4,e4,g4] [c4,e4,g4]@2 [c4,e4,g4] ~", // C
  Y: "[a3,c4,f4] [f3,a3,c4,f4] ~ [a3,c4,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4] ~", // F
  Z: "~@2 [bb3,d4,f4]@2 ~@2 [bb3,d4,f4]@2 [bb3,d4,f4]@4 [d4,f4]@2 [d4,f4] ~, ~@8 f3@7 ~", // Bb Dm
  AA: "~@2 [c4,e4,g4]@2 ~@2 [g3,c4,e4,g4]@2 [c4,e4,g4]@4 [c4,e4,g4]@2 g4 ~, ~@8 g3@7 ~", // C
  AB: "~@2 [c4,e4,g4]@2 ~@2 [g3,c4,e4,g4]@2 [g3,c4,e4,g4]@4 [g3,c4,e4,g4]@2 e4 ~", // C
  AC: "[a3,f4] [a3,c4,f4] ~ [f3,a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4] ~, ~@4 f3@3 ~", // Dm F
  AD: "~@2 [f3,bb3,d4,f4]@2 ~@2 [bb3,d4,f4]@2 [bb3,d4,f4]@4 [bb3,d4,f4]@2 f4 ~, ~@8 f3@7 ~", // Bb
  AE: "~@3 g3 ~@2 [g3,c4,e4,g4]@2 [c4,e4,g4]@4 e4@2 g4 ~, ~ [g3,c4,e4,g4] ~@2 g3@3 ~", // C
  AF: "~@2 [g3,c4,e4,g4]@2 ~@2 [g3,c4,e4,g4]@2 [c4,e4,g4]@4 [c4,e4,g4]@2 e4 ~, ~@4 g3@3 ~", // C
  AG: "[c4,f4]@2 [c4,f4]@2 ~@2 [a3,c4,f4]@2 [a3,c4,f4]@4 [a3,c4,f4]@2 f4 ~, [f3,a3]@4 ~@4 f3@7 ~", // F5 F
  AH: "~@2 [f3,bb3,d4,f4]@2 ~@2 [bb3,d4,f4]@2 [bb3,d4,f4]@4 [bb3,d4,f4]@3 ~, ~@8 f3@7 ~", // Bb
  AI: "~@2 [g3,c4,e4,g4]@2 ~@2 [g3,e4,g4]@2 [e4,g4]@4 [e4,g4]@2 g4 ~, ~@6 c4@9 ~, ~@8 g3@7 ~", // C Em
  AJ: "~@2 [g3,c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 [c4,e4,g4]@4 [c4,e4,g4]@3 ~, ~@8 g3@7 ~", // C
  AK: "[~@8 [f3,a3,c4,f4]@3 [f3,a3,c4]@2 [c3,f3,c4]@2 ~ [c3,f3,f4]@15 ~, ~@8 f2@7 f2@14 ~@3, ~@8 c3@5 a3@17 ~@2, ~@11 f4@5 c4@6 ~@10]/2", // F F5
  AL: "[[a3,c4]@23 ~@9]/2", // Am
  AM: "[~@8 [f3,a3,c4,f4]@3 [f3,a3,c4]@2 [c3,f3,c4]@2 ~ [c3,f3,c4,f4]@19 ~@13, ~@8 f2@7 f2@14 ~@19, ~@8 c3@5 a3@22 ~@13, ~@11 f4@5 ~@32]/3", // F F5
})).s("gm_acoustic_guitar_steel").gain(0.22).pan(0.3)

// chords · acoustic guitar steel · "Guitar" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@20 A ~ B C D B E C F G ~ C@2 ~@18 H C I J K L M@2 N C O ~ C P ~ B ~@20 H C I J K L M@2 N C O ~ C P ~ B H C I J K L
  M@2 N C O ~ C P ~ B Q@2 ~@4
>`.pickRestart({
  A: "f3!2 ~@6", B: "~@3 g3 ~@4", C: "~@3 f3 ~@4", D: "~@6 f3@2 ~@5 bb3 ~@2", E: "~@3 g3@4 ~", F: "~ f3 ~@4 f3@2 ~@8",
  G: "~@3 g3 ~@3 g4", H: "f3 ~@3, f4 ~@7", I: "c4 ~@7", J: "~@3 g3 g3@2 g3 ~", K: "f3 ~@2 f3 ~@4",
  L: "~ f3 ~ f3 ~@2 bb3 ~", M: "~ g3 ~@6", N: "c4 f3 ~@6", O: "~@12 [c4,g4]@3 ~", P: "~@6 f3@2 ~@6 f4 ~",
  Q: "[[f3,f4]@23 ~@9]/2", // F
})).s("gm_acoustic_guitar_steel").gain(0.13).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@19 A@16 B ~@15 A@20 ~@16 A@36 B ~>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.54)

// drums · snare
const snare = s("sd").struct("<~@19 [~ x]!16 ~@16 [~ x]!20 ~@16 [~ x]!36 ~@2>").gain(0.54)

// drums · clap
const clap = s("cp").struct("<~@19 [~@3 x]!16 ~@16 [~@3 x]!20 ~@16 [~@3 x]!36 ~@2>").gain(0.6)

// drums · low tom
const low_tom = s("lt").struct("<~@87 x ~@37>").gain(0.6)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 [~@3 x ~@4]!16 ~@16 [~@3 x ~@4]!20 ~@15 [~@11 x!3 ~ x] [~@3 x ~@4]!36 ~@2>")
  .gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@123 x ~>").gain(0.6)

// drums · high tom
const high_tom = s("ht").struct("<~@86 [~@7 x!3 ~@6] ~@38>").gain(0.6)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@19 [~@3 x ~@3 x]!16 ~@16 [~@3 x ~@3 x]!16 ~@20 [~@3 x ~@3 x]!36 ~@2>")
  .gain(1.83)

// drums · shaker
const shaker = s("sh").struct("<~@19 [~ x!3]!16 ~@16 [~ x!3]!16 ~@20 [~ x!3]!36 ~@2>").gain(0.48)

stack(
  bass, bass_2, synth_strings_1, acoustic_guitar_steel, acoustic_guitar_steel_2, kick, snare, clap, low_tom, mid_tom,
  crash, high_tom, cabasa, shaker
)

More by Pat Benatar