From bde3197e79d251a1de6d805f8ed40e0bb5d2ee25 Mon Sep 17 00:00:00 2001 From: zsilencer Date: Thu, 29 Jun 2017 15:43:40 -0600 Subject: [PATCH 1/3] Fix incorrect resampling rate when at the end of a sound. --- src/openrct2-ui/audio/AudioMixer.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/openrct2-ui/audio/AudioMixer.cpp b/src/openrct2-ui/audio/AudioMixer.cpp index f6fd90a8fb..fafb06455c 100644 --- a/src/openrct2-ui/audio/AudioMixer.cpp +++ b/src/openrct2-ui/audio/AudioMixer.cpp @@ -350,6 +350,11 @@ namespace OpenRCT2 { namespace Audio { sint32 srcSamples = (sint32)(bufferLen / byteRate); sint32 dstSamples = numSamples; + if (bytesRead != readLength) + { + srcSamples = _format.freq; + dstSamples = _format.freq * (1 / rate); + } bufferLen = ApplyResample(channel, buffer, srcSamples, dstSamples); buffer = _effectBuffer.GetData(); } From ef6ecc8900a1f3ca0d8324d6b2422a02a7c69859 Mon Sep 17 00:00:00 2001 From: zsilencer Date: Thu, 29 Jun 2017 15:54:21 -0600 Subject: [PATCH 2/3] Set correct pan for chat sound. --- src/openrct2/interface/chat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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) From 2385ef1059c35fc56b812f3fb7c86ffe67472f4a Mon Sep 17 00:00:00 2001 From: zsilencer Date: Thu, 29 Jun 2017 16:40:00 -0600 Subject: [PATCH 3/3] Fix incorrect arguments to resampler. --- src/openrct2-ui/audio/AudioMixer.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/openrct2-ui/audio/AudioMixer.cpp b/src/openrct2-ui/audio/AudioMixer.cpp index fafb06455c..e4b5b59b0a 100644 --- a/src/openrct2-ui/audio/AudioMixer.cpp +++ b/src/openrct2-ui/audio/AudioMixer.cpp @@ -348,14 +348,15 @@ namespace OpenRCT2 { namespace Audio // Apply effects if (rate != 1) { - sint32 srcSamples = (sint32)(bufferLen / byteRate); - sint32 dstSamples = numSamples; + sint32 inRate = (sint32)(bufferLen / byteRate); + sint32 outRate = numSamples; if (bytesRead != readLength) { - srcSamples = _format.freq; - dstSamples = _format.freq * (1 / rate); + inRate = _format.freq; + outRate = _format.freq * (1 / rate); } - bufferLen = ApplyResample(channel, buffer, srcSamples, dstSamples); + _effectBuffer.EnsureCapacity(length); + bufferLen = ApplyResample(channel, buffer, (sint32)(bufferLen / byteRate), numSamples, inRate, outRate); buffer = _effectBuffer.GetData(); } @@ -374,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(); @@ -385,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;