XA audio (music/speech) on slow devices was suffering dropouts. It turns out the problem was two-fold:
CDREAD_INT interrupts were being issued at same or slower rate than it would take to keep buffer filled. If a game cannot run 100% fullspeed, dropouts were inevitable.
Even when said interrupts were issued sooner when buffer wasn't full, XA buffer in spu_pcsxrearmed would never fill more than one frame of audio.
Fix:
Added new function SPU_getADPCMBufferRoom() and XABufferRoom variable, used to determine if XA buffer isn't full and to issue a CDREAD_INT twice as soon as normal to keep it full. 'Config.ForcedXAUpdates' option can be set to 0 if original behavior is desired, set through the new commandline '-noforcedxaupdates' flag.
FeedXA() in spu_pcsxrearmed/xa.c uses new method of determining available buffer space
XA audio (music/speech) on slow devices was suffering dropouts. It turns out the problem was two-fold:
Fix: