diff --git a/Audio/Chain/ConverterNode.mm b/Audio/Chain/ConverterNode.mm index c8ce36da2..ef722f391 100644 --- a/Audio/Chain/ConverterNode.mm +++ b/Audio/Chain/ConverterNode.mm @@ -783,6 +783,10 @@ tryagain: } if(inpOffset != inpSize && floatOffset == floatSize) { +#if DSD_DECIMATE + const float scaleModifier = (inputFormat.mBitsPerChannel == 1) ? 0.5f : 1.0f; +#endif + size_t inputSamples = (inpSize - inpOffset) / floatFormat.mBytesPerPacket; ioNumberPackets = (UInt32)inputSamples; @@ -864,7 +868,11 @@ tryagain: amountReadFromFC = (int)(outputDone * floatFormat.mBytesPerPacket); - scale_by_volume((float *)floatBuffer, amountReadFromFC / sizeof(float), volumeScale); + scale_by_volume((float *)floatBuffer, amountReadFromFC / sizeof(float), volumeScale +#if DSD_DECIMATE + * scaleModifier +#endif + ); floatSize = amountReadFromFC; floatOffset = 0;