BeepGenerator: add 5ms attack / 10ms release envelope so the waveform ramps in/out cleanly instead of cutting off mid-cycle, which caused the audible click/distortion. AudioEngine: replace postDelayed scheduling with a continuous write loop — each iteration writes the full beep followed by silence in 10ms chunks. This keeps the AudioTrack stream full and eliminates underrun noise. onBeep callback fires on the main thread just before each beep is queued. PacerService: wire onBeep to increment beepTick (Compose state). PacerScreen: replace the independent BPM timer with beepTick so the pulse ring animation is driven by the actual audio callback, eliminating the drift at slow paces. |
||
|---|---|---|
| .. | ||
| src | ||
| build.gradle.kts | ||
| proguard-rules.pro | ||