// This file is part of the 64k demo project. // It defines the public interface for the audio system. // Includes initialization, shutdown, and frame updates. #pragma once #include "generated/assets.h" #include // Forward declarations class AudioBackend; class AudioRingBuffer; // Expose ring buffer for backends AudioRingBuffer* audio_get_ring_buffer(); struct SpecHeader { char magic[4]; int32_t version; int32_t dct_size; int32_t num_frames; }; void audio_init(); void audio_start(); // Starts the audio device callback // Ring buffer audio rendering (main thread fills buffer) void audio_render_ahead(float music_time, float dt); // Get current playback time (in seconds) based on samples consumed float audio_get_playback_time(); // Get peak amplitude of samples currently being played (real-time sync) // Returns: Peak amplitude in range [0.0, 1.0+] // Use this for visual effects to ensure audio-visual synchronization // Note: Measured at actual playback time, not pre-buffer time (~400ms ahead) float audio_get_realtime_peak(); #if !defined(STRIP_ALL) void audio_render_silent(float duration_sec); // Fast-forwards audio state // Backend injection for testing void audio_set_backend(AudioBackend* backend); AudioBackend* audio_get_backend(); #endif /* !defined(STRIP_ALL) */ void audio_update(); void audio_shutdown();