diff --git a/app/src/main/kotlin/net/jeena/pacer/AudioEngine.kt b/app/src/main/kotlin/net/jeena/pacer/AudioEngine.kt index 7017918..58f7b9e 100644 --- a/app/src/main/kotlin/net/jeena/pacer/AudioEngine.kt +++ b/app/src/main/kotlin/net/jeena/pacer/AudioEngine.kt @@ -22,6 +22,11 @@ class AudioEngine { companion object { private const val BEEP_DURATION_MS = 40 private const val SILENCE_CHUNK_MS = 10 + + // Apply a square curve so the slider feels linear to human hearing. + // AudioTrack.setVolume() takes a linear amplitude; our 0-1 slider + // value is perceived as "all the volume at the bottom" without this. + private fun toAmplitude(linear: Float): Float = linear * linear } private val mainHandler = Handler(Looper.getMainLooper()) @@ -69,7 +74,7 @@ class AudioEngine { .setTransferMode(AudioTrack.MODE_STREAM) .build() - audioTrack?.setVolume(currentVolume) + audioTrack?.setVolume(toAmplitude(currentVolume)) audioTrack?.play() handlerThread = HandlerThread("PacerAudio").also { it.start() } @@ -94,7 +99,7 @@ class AudioEngine { fun setVolume(volume: Float) { currentVolume = BpmCalculator.clampVolume(volume) - audioTrack?.setVolume(currentVolume) + audioTrack?.setVolume(toAmplitude(currentVolume)) } private fun audioLoop() {