https://bugs.winehq.org/show_bug.cgi?id=46870
--- Comment #50 from Paul Gofman gofmanp@gmail.com --- Created attachment 64154 --> https://bugs.winehq.org/attachment.cgi?id=64154 xaudio2_7: Preserve EBX in call_on_voice_processing_pass_start().
I could not help looking into this intriguing issue a bit more and found that the problem is that the IXAudio2VoiceCallback_OnVoiceProcessingPassStart callback does not preserve EBX register. It is apparently not the first time such callbacks are naughty this way, as there is already a workaround preserving %esi for EVE Online. I am attaching the patch (on top of Staging) which fixes the issue for me.
There is the same callback with the same workaround for EVE online called in mainstream FAudio xaudio, but the problem is not there as the code is entirely different and function just ends after this callback call, so it apparently does not need that EBX anymore. Yet if anyone confirms that this patch is fixing the crash with some tricky build, it probably worth doing it there also.