From cab45629503fc9dbd189423d096fb81ac6b273b1 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 2 Jan 2017 16:10:03 +0000 Subject: [PATCH] Refactor resample code --- src/audio/mixer.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/audio/mixer.cpp b/src/audio/mixer.cpp index 765d64aacf..eff8e90f42 100644 --- a/src/audio/mixer.cpp +++ b/src/audio/mixer.cpp @@ -882,8 +882,8 @@ private: // Apply effects if (rate != 1 && _format.format == AUDIO_S16SYS) { - int in_len = (int)((double)bufferLen / samplesize); - int out_len = samples; + int inLen = (int)((double)bufferLen / samplesize); + int outLen = samples; SpeexResamplerState * resampler = channel->GetResampler(); if (resampler == nullptr) @@ -894,7 +894,7 @@ private: if (bytesRead == toread) { // use buffer lengths for conversion ratio so that it fits exactly - speex_resampler_set_rate(resampler, in_len, samples); + speex_resampler_set_rate(resampler, inLen, samples); } else { @@ -902,7 +902,7 @@ private: speex_resampler_set_rate(resampler, _format.freq, (int)(_format.freq * (1 / rate))); } - size_t effectBufferReqLen = out_len * samplesize; + size_t effectBufferReqLen = outLen * samplesize; if (_effectBuffer == nullptr || _effectBufferCapacity < effectBufferReqLen) { _effectBuffer = realloc(_effectBuffer, effectBufferReqLen); @@ -912,16 +912,18 @@ private: speex_resampler_process_interleaved_int( resampler, (const spx_int16_t *)buffer, - (spx_uint32_t *)&in_len, + (spx_uint32_t *)&inLen, (spx_int16_t *)_effectBuffer, - (spx_uint32_t *)&out_len); + (spx_uint32_t *)&outLen); buffer = _effectBuffer; bufferLen = effectBufferReqLen; } + // Apply panning and volume ApplyPan(channel, buffer, bufferLen, samplesize); int mixVolume = ApplyVolume(channel, buffer, bufferLen); + // Finally mix on to destination buffer size_t dstLength = Math::Min((size_t)length, bufferLen); SDL_MixAudioFormat(data, (const Uint8 *)buffer, _format.format, (Uint32)dstLength, mixVolume);