diff --git a/src/openrct2-ui/audio/AudioMixer.cpp b/src/openrct2-ui/audio/AudioMixer.cpp index f6fd90a8fb..e4b5b59b0a 100644 --- a/src/openrct2-ui/audio/AudioMixer.cpp +++ b/src/openrct2-ui/audio/AudioMixer.cpp @@ -348,9 +348,15 @@ namespace OpenRCT2 { namespace Audio // Apply effects if (rate != 1) { - sint32 srcSamples = (sint32)(bufferLen / byteRate); - sint32 dstSamples = numSamples; - bufferLen = ApplyResample(channel, buffer, srcSamples, dstSamples); + sint32 inRate = (sint32)(bufferLen / byteRate); + sint32 outRate = numSamples; + if (bytesRead != readLength) + { + inRate = _format.freq; + outRate = _format.freq * (1 / rate); + } + _effectBuffer.EnsureCapacity(length); + bufferLen = ApplyResample(channel, buffer, (sint32)(bufferLen / byteRate), numSamples, inRate, outRate); buffer = _effectBuffer.GetData(); } @@ -369,7 +375,7 @@ namespace OpenRCT2 { namespace Audio * Resample the given buffer into _effectBuffer. * Assumes that srcBuffer is the same format as _format. */ - size_t ApplyResample(ISDLAudioChannel * channel, const void * srcBuffer, sint32 srcSamples, sint32 dstSamples) + size_t ApplyResample(ISDLAudioChannel * channel, const void * srcBuffer, sint32 srcSamples, sint32 dstSamples, sint32 inRate, sint32 outRate) { sint32 byteRate = _format.GetByteRate(); @@ -380,11 +386,7 @@ namespace OpenRCT2 { namespace Audio resampler = speex_resampler_init(_format.channels, _format.freq, _format.freq, 0, 0); channel->SetResampler(resampler); } - speex_resampler_set_rate(resampler, srcSamples, dstSamples); - - // Ensure destination buffer is large enough - size_t effectBufferReqLen = dstSamples * byteRate; - _effectBuffer.EnsureCapacity(effectBufferReqLen); + speex_resampler_set_rate(resampler, inRate, outRate); uint32 inLen = srcSamples; uint32 outLen = dstSamples; diff --git a/src/openrct2/interface/chat.c b/src/openrct2/interface/chat.c index 3ea756e6f0..b9b614d965 100644 --- a/src/openrct2/interface/chat.c +++ b/src/openrct2/interface/chat.c @@ -212,7 +212,7 @@ void chat_history_add(const char * src) free(buffer); - Mixer_Play_Effect(SOUND_NEWS_ITEM, 0, MIXER_VOLUME_MAX, 0, 1.5f, true); + Mixer_Play_Effect(SOUND_NEWS_ITEM, 0, MIXER_VOLUME_MAX, 0.5f, 1.5f, true); } void chat_input(CHAT_INPUT input)