Going back to the start of the question:
Perhaps the way to time the strikes (if you don't mind the music sounding a bit "mechanical"

is to fire the strking solenoids from a fixed-frequency pulse generator (set to the tempo of the music) and to pause at the end of each move until the strike comes in?
;turn on both strikers
M62P0
M62P1
;move to xyz for C, uvw for E
G0 X#<CX>Y#<CY>Z#<CZ>U#<EU>V#<EV>W#<EW>
; Wait for strike pulse
M66 P0 L2
; No notes on this beat
M65P0
M65P1
M66 P0 L2
... and so on
Then in HAL
net pulse stepgen.7.step => and2.0.in0 and2.0.in1 motion.digital-in-00
net strike-left-cmd and2.0.in1 motion.digital-out-00
net strike-right=cmd and2.1.in1 motion.digital-out-01
net strike-left and2.0.out parport.0.pin-01-out
net strike-right and2.2.out parport.0.pin-02-out
(Stepgen.7 is a velocity-mode stepgen set to the meter of the music to be played, with a step length just long enough for the strikes)