The SSE2 code paths for mono expansion introduced in Version 0.11.15 mixed up the parameters of _mm_shuffle_ps(), which in turn caused adjacent PCM frames to be swapped in the channel-expanded output. The resulting audio corruption is particularly noticeable on low sampling rates (32,000 Hz and below), but can also be generally observed in the frequency spectrum.
The SSE2 code paths for mono expansion introduced in Version 0.11.15 mixed up the parameters of
_mm_shuffle_ps()
, which in turn caused adjacent PCM frames to be swapped in the channel-expanded output. The resulting audio corruption is particularly noticeable on low sampling rates (32,000 Hz and below), but can also be generally observed in the frequency spectrum.A minimal example:
Here is a sample input file, and the engine output without and with this fix. I reproduced both the swapped and the fixed behavior under MSVC, Clang, and GCC.
The frequency spectrum without the fix:
With the fix: