Adjusted the gain compensation to not lose gain due to applied pan stages (Issue #1086)

This commit is contained in:
cvde 2023-10-29 13:07:50 +01:00 committed by Paul Ferrand
parent 9b38c0bbc2
commit 9dac3cbd60

View file

@ -980,6 +980,10 @@ void Voice::Impl::panStageMono(AudioSpan<float> buffer) noexcept
(*modulationSpan)[i] += mod[i]; (*modulationSpan)[i] += mod[i];
} }
pan(*modulationSpan, leftBuffer, rightBuffer); pan(*modulationSpan, leftBuffer, rightBuffer);
// add +3dB (10^(3/20)) to compensate for the pan stage (-3dB per stage)
applyGain1(1.4125375446227544f, leftBuffer);
applyGain1(1.4125375446227544f, rightBuffer);
} }
void Voice::Impl::panStageStereo(AudioSpan<float> buffer) noexcept void Voice::Impl::panStageStereo(AudioSpan<float> buffer) noexcept
@ -1020,9 +1024,9 @@ void Voice::Impl::panStageStereo(AudioSpan<float> buffer) noexcept
} }
pan(*modulationSpan, leftBuffer, rightBuffer); pan(*modulationSpan, leftBuffer, rightBuffer);
// add +3dB to compensate for the 2 pan stages (-3dB each stage) // add +6dB (10^(6/20)) to compensate for the 2 pan stages (-3dB per stage)
applyGain1(1.4125375446227544f, leftBuffer); applyGain1(1.9952623149688797f, leftBuffer);
applyGain1(1.4125375446227544f, rightBuffer); applyGain1(1.9952623149688797f, rightBuffer);
} }
void Voice::Impl::filterStageMono(AudioSpan<float> buffer) noexcept void Voice::Impl::filterStageMono(AudioSpan<float> buffer) noexcept