734 {
735
736 float currentLoudness = data.volume;
737
738
739 float compensationFactor = 1.0f;
740 if (currentLoudness < referenceLevel) {
741
742 compensationFactor = 1.0f + (referenceLevel - currentLoudness) / referenceLevel * 0.3f;
743 } else if (currentLoudness > referenceLevel * 1.5f) {
744
745 compensationFactor = 1.0f - (currentLoudness - referenceLevel * 1.5f) / (referenceLevel * 2.0f) * 0.2f;
746 }
747
748
749 for (int i = 0; i < 16; ++i) {
750 data.frequencyBins[i] *= compensationFactor;
751 }
752
753#if SKETCH_HAS_LOTS_OF_MEMORY
754
755
756#endif
757}