diff options
Diffstat (limited to 'src/audio/audio.cc')
| -rw-r--r-- | src/audio/audio.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/audio/audio.cc b/src/audio/audio.cc index ba76a28..f5bc4ab 100644 --- a/src/audio/audio.cc +++ b/src/audio/audio.cc @@ -108,6 +108,10 @@ void audio_render_ahead(float music_time, float dt, float target_fill) { if (chunk_frames <= 0) return; + static int64_t g_total_render_calls = 0; + static int64_t g_total_frames_rendered = 0; + const int64_t frames_before = g_ring_buffer.get_total_written() / RING_BUFFER_CHANNELS; + // Keep rendering small chunks until buffer is full enough while (true) { // First, try to flush any pending samples from previous partial writes @@ -224,6 +228,19 @@ void audio_render_ahead(float music_time, float dt, float target_fill) { } } } + + // DEBUG: Track actual frames rendered vs expected + const int64_t frames_after = g_ring_buffer.get_total_written() / RING_BUFFER_CHANNELS; + const int64_t actual_rendered = frames_after - frames_before; + g_total_render_calls++; + g_total_frames_rendered += actual_rendered; + + if (g_total_render_calls % 600 == 0) { // Every 10 seconds at 60fps + const float expected_frames = g_total_render_calls * (float)(chunk_frames); + const float drift_ms = (expected_frames - g_total_frames_rendered) / RING_BUFFER_SAMPLE_RATE * 1000.0f; + printf("[RENDER_DRIFT] calls=%lld expect=%.1f actual=%lld drift=%.2fms\n", + g_total_render_calls, expected_frames, g_total_frames_rendered, drift_ms); + } } float audio_get_playback_time() { |
