From 5c7feffd3749ce4b355d0db6334cf39ca94d8d82 Mon Sep 17 00:00:00 2001 From: skal Date: Sun, 15 Feb 2026 23:56:43 +0100 Subject: perf(audio): smooth playback time and RMS-based peak at 60Hz Interpolates audio playback time between callbacks using CLOCK_MONOTONIC for smooth 60Hz updates instead of coarse 8-10Hz steps. Replaces artificial peak decay with true RMS calculation over 50ms window. Ring buffer computes RMS directly on internal buffer without copies for efficiency. All backends updated with get_callback_state() interface for time interpolation. Tests passing (34/34). Co-Authored-By: Claude Sonnet 4.5 --- src/audio/ring_buffer.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/audio/ring_buffer.h') diff --git a/src/audio/ring_buffer.h b/src/audio/ring_buffer.h index 524cb29..1a21542 100644 --- a/src/audio/ring_buffer.h +++ b/src/audio/ring_buffer.h @@ -60,6 +60,11 @@ class AudioRingBuffer { // FATAL ERROR if num_samples exceeds region from get_write_region() void commit_write(int num_samples); + // Get RMS of recent samples without consuming + // window_samples: Number of samples to include in RMS calculation + // Returns: RMS value (root mean square) over the window + float get_past_rms(int window_samples) const; + private: float buffer_[RING_BUFFER_CAPACITY_SAMPLES]; int capacity_; // Total capacity in samples -- cgit v1.2.3