From 6b8c4729787daa0c584447f9014bf32320d82789 Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Mon, 25 Mar 2024 01:57:55 +1100 Subject: nicer volume sliders --- source/core/StarAudio.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'source/core/StarAudio.cpp') diff --git a/source/core/StarAudio.cpp b/source/core/StarAudio.cpp index 4f07d05..2dfdaee 100644 --- a/source/core/StarAudio.cpp +++ b/source/core/StarAudio.cpp @@ -13,6 +13,26 @@ namespace Star { +float const DefaultPerceptualRangeDb = 40.f; +float const DefaultPerceptualBoostRangeDb = 6.f; +// https://github.com/discord/perceptual +float perceptualToAmplitude(float perceptual, float normalizedMax, float range, float boostRange) { + if (perceptual == 0.f) return 0.f; + float dB = perceptual > normalizedMax + ? ((perceptual - normalizedMax) / normalizedMax) * boostRange + : (perceptual / normalizedMax) * range - range; + return normalizedMax * pow(10.f, dB / 20.f); +} + +float amplitudeToPerceptual(float amp, float normalizedMax, float range, float boostRange) { + if (amp == 0.f) return 0.f; + float const dB = 20.f * log10(amp / normalizedMax); + float perceptual = dB > 0.f + ? dB / boostRange + 1 + : (range + dB) / range; + return normalizedMax * perceptual; +} + namespace { struct WaveData { ByteArrayPtr byteArray; -- cgit v1.2.3