From: <sv...@op...> - 2024-03-17 12:37:29
|
Author: sagamusix Date: Sun Mar 17 13:37:18 2024 New Revision: 20410 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20410 Log: Merged revision(s) 20385 from trunk/OpenMPT: [Mod] Compressor DMO: Similar to Chorus / Flanger, avoid chance of reading from the wrong buffer offset at extremely high sample rates. In this particular case, the mix rate needs to be above 500 kHz before the overflow would occur. ........ Modified: branches/OpenMPT-1.28/ (props changed) branches/OpenMPT-1.28/soundlib/plugins/dmo/Compressor.cpp Modified: branches/OpenMPT-1.28/soundlib/plugins/dmo/Compressor.cpp ============================================================================== --- branches/OpenMPT-1.28/soundlib/plugins/dmo/Compressor.cpp Sun Mar 17 13:36:19 2024 (r20409) +++ branches/OpenMPT-1.28/soundlib/plugins/dmo/Compressor.cpp Sun Mar 17 13:37:18 2024 (r20410) @@ -89,10 +89,10 @@ } compGainPow >>= (31 - compGainInt); - int32 readOffset = m_predelay + m_bufPos * 4096 + m_bufSize - 1; + int32 readOffset = m_predelay + m_bufSize - 1; readOffset /= 4096; - readOffset %= m_bufSize; - + readOffset = (readOffset + m_bufPos) % m_bufSize; + float outGain = (compGainPow * (1.0f / 2147483648.0f)) * m_gain; *(out[0])++ = m_buffer[readOffset * 2] * outGain; *(out[1])++ = m_buffer[readOffset * 2 + 1] * outGain; |