Strudelify

X-Girlfriend

Bush

KeyE majorTempo196 bpm
0:00/0:00
// X-Girlfriend — Bush
// 196 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 "Gavin" overdriven guitar (copy of ch 3 "Nigel" overdriven guitar)
// note: Full arrangement: all 34 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(196/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · slap bass 2 · "Dave"
const bass = note("<~ A B C D E F G H I@2 J K E L M N A B C D E F G H I@2 J K E L M N O>".pickRestart({
  A: "d#2 e2 e2@2 d#2 e2 e2@2", B: "d#2 e2!5 e2@2", C: "a1@2 a1!4 a1@2", D: "a1!6 a1@2", E: "a1 b1 b1@2 a1 b1 b1@2",
  F: "a1 b1!5 b1@2", G: "e1@2 e1!2 d#2 e2!3", H: "e1@2 e2!6", I: "d#2 e2 e2@2 d#2 e2!3", J: "a1!2 g#1!2",
  K: "f#1@2 f#1!6", L: "a1 b1!7", M: "e1@2 e1!6", N: "e1!3 e1@2 e1!3", O: "e1@3 ~@13",
})).s("gm_slap_bass_2").gain(0.41)

// chords · overdriven guitar · "Nigel"
const overdriven_guitar = note("<~ A B C@2 D E F G A@2 H I D E J@2 A B C@2 D E F G A@2 H I D E J@2 K>".pickRestart({
  A: "[d#3,a#3,d#4] [e3,b3,e4]!3 [d#3,a#3,d#4] [e3,b3,e4]!3", B: "[d#3,a#3,d#4] [e3,b3,e4]!7", C: "[a2,e3,a3]!8",
  D: "[a2,e3,a3] [b2,f#3,b3]!3 [a2,e3,a3] [b2,f#3,b3]!3", E: "[a2,e3,a3] [b2,f#3,b3]!7",
  F: "[e2,b2,e3]!4 [d#3,a#3,d#4] [e3,b3,e4]!3", G: "[e2,b2,e3]!2 [e3,b3,e4]!6",
  H: "[a2,e3,a3]@3 ~@5 [g#2,d#3,g#3]@3 ~@5", I: "[f#2,c#3,f#3]!8", J: "[e2,b2,e3]!8", K: "[e2,b2,e3]@3 ~@13",
})).s("gm_overdriven_guitar").gain(0.41).pan(1)

// drums · kick
const kick = s("bd").struct("<~ [x!2 ~@2 x!2 ~@2]!32 x>").gain(0.41)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!26 [~@4 x!4 ~@4 x!4] [~ x ~ x]!4 [~@2 x ~ x!4] x>").gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~ [x!8]!32 ~>").gain(0.41)

// drums · crash
const crash = s("cr").struct("<~ A ~ A ~@5 A ~ B A ~@4 A ~ A ~@5 A ~ B A ~@2 A ~ A>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.41)

stack(bass, overdriven_guitar, kick, snare, open_hat, crash)

More by Bush