Strudelify

Beat on the Brat

Marky Ramone

KeyB majorTempo165 bpm
0:00/0:00
// Beat on the Brat — Marky Ramone
// 165 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 electric guitar clean (copy of ch 1 overdriven guitar); ch 6 fretless bass (copy of ch 5 electric bass finger); ch 8 alto sax (copy of ch 7 oboe)
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(165/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.

// chords · overdriven guitar
const overdriven_guitar = note(`<
  A@2 B C@6 D E C@6 D E C@2 D E C@2 F E F E C D C D C@2 F E C D C D C@2 F E F E A@2 B@2 C@6 D E C@6 D E C@2 D E C@2 F E
  F E C D C D C@2 F E C D C D C@2 F E F E A@2 B G
>`.pickRestart({
  A: "[b2,f#3,b3]!6 [b2,e3]@2", B: "[b2,f#3,b3]!2 [b2,e3]@2 [b2,f#3,b3]!2 [b2,e3]@2", C: "[b2,f#3,b3]!8",
  D: "[e2,b2,e3]!8", E: "[f#2,c#3,f#3]!8", F: "[a2,e3,a3]!8", G: "[b2,f#3,b3]!2 ~@6",
})).s("gm_overdriven_guitar").gain(0.45).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  A@2 B C@6 D E C@6 D E C@2 D E C@2 F E F E C D C D C@2 F E C D C D C@2 F E F E A@2 B@2 C@6 D E C@6 D E C@2 D E C@2 F E
  F E C D C D C@2 F E C D C D C@2 F E F E A@2 B G
>`.pickRestart({
  A: "b1!6 e1@2", B: "b1!2 e1@2 b1!2 e1@2", C: "b1!8", D: "e1!8", E: "f#1!8", F: "a1!8", G: "b1!2 ~@6",
})).s("gm_electric_bass_finger").gain(0.64)

// other · tenor sax
const tenor_sax = note("<~@8 A B C ~@5 A B C ~ A B C ~@5 D@4 E F G@2 D@4 E F G@2 ~ H ~@53>".pickRestart({
  A: "~@3 d#4", B: "b3 ~@2 b3", C: "c#4@2 ~ d#4 ~ c#4@2 ~", D: "[~@2 e4@2 e4@2 e4 e4@2 d#4@2 ~@5]/2",
  E: "~@2 e4 d#4 e4@2 e4@2", F: "f#4@2 f#4@2 f#4 f#4@3", G: "[b3@2 d#4 ~ c#4 ~ b3 c#4@2 ~@7]/2", H: "c#4 ~@3",
})).s("gm_tenor_sax").gain(0.78)

// drums · kick
const kick = s("bd").struct("<[x!2]!24 [x ~@7 x ~@4 x ~@2] [x!2]!47 [x ~@7 x ~@4 x ~@2] [x!2]!25 x>").gain(0.72)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!24 [~@4 x ~@7 x!3 ~] [~ x ~ x]!47 [~@4 x ~@7 x!3 ~] [~ x ~ x]!25 ~>")
  .gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3 A B@5 A@2 B@6 A@2 B@2 A@2 B@2 A@4 B@6 ~@2 B@4 ~@10 A B@5 A@2 B@6 A@2 B@2 A@2 B@2 A@4 B@6 ~@2 B@4 ~@10
>`.pickRestart({
  A: "~ x!7", B: "x!8",
})).gain(0.72)

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

// drums · crash
const crash = s("cr").struct(`<
  A B C D ~@5 D@2 ~@6 D@2 ~@2 D@2 ~@2 D@4 ~@6 D@2 ~@4 D@6 A B C@2 D ~@5 D@2 ~@6 D@2 ~@2 D@2 ~@2 D@4 ~@6 D@2 ~@4 D@6 A B
  C ~
>`.pickRestart({
  A: "x ~@2 x", B: "~@3 x", C: "~ x ~ x", D: "x",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@29 A@6 ~@2 A@4 ~@36 A@6 ~@2 A@4 ~@10>".pickRestart({
  A: "x!4",
})).gain(0.72)

stack(overdriven_guitar, bass, tenor_sax, kick, snare, hihat, open_hat, crash, ride)

More by Marky Ramone