diff --git a/Audio/Chain/Downmix.m b/Audio/Chain/Downmix.m index 1bb981a48..a8291640e 100644 --- a/Audio/Chain/Downmix.m +++ b/Audio/Chain/Downmix.m @@ -149,10 +149,12 @@ static void downmix_to_stereo(const float *inBuffer, int channels, uint32_t conf static void downmix_to_mono(const float *inBuffer, int channels, uint32_t config, float *outBuffer, size_t count) { float tempBuffer[count * 2]; - downmix_to_stereo(inBuffer, channels, config, tempBuffer, count); - inBuffer = tempBuffer; - channels = 2; - config = AudioConfigStereo; + if(channels > 2 || config != AudioConfigStereo) { + downmix_to_stereo(inBuffer, channels, config, tempBuffer, count); + inBuffer = tempBuffer; + channels = 2; + config = AudioConfigStereo; + } cblas_scopy((int)count, inBuffer, 2, outBuffer, 1); vDSP_vadd(outBuffer, 1, inBuffer + 1, 2, outBuffer, 1, count); }