1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Merge pull request #5740 from OpenRCT2/bugfixes

Fix chat sounds
This commit is contained in:
Ted John
2017-06-30 00:22:53 +01:00
committed by GitHub
2 changed files with 12 additions and 10 deletions

View File

@@ -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;

View File

@@ -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)