SPU: Emulate voice decode buffers. #13497
Open
+111
−147
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description of Changes
This adds emulation of the voice decode buffers in the SPU. Each voice buffers around 12 samples which means the decoder runs ahead of the actual playback position, this is observable by reading the NAX register for the voice. It's particularly noticeable if you start a voice with 0 pitch as it will still move ahead until the buffer is filled.
Aside from that, we now also read and update the loop flags every audio frame. This fixes DQV (since the IRQ gets tested each time its read) and lets us remove a minor hack for the intro videos in Stolen.
Rationale behind Changes
More accurate.
Fixes #13486
Suggested Testing Steps
Idk, play stuff and make sure nothing sounds really bad.
Did you use AI to help find, test, or implement this issue or feature?
No.