// This file is part of the 64k demo project. // It implements a silent test backend for testing audio.cc without hardware. // Useful for achieving high test coverage and triggering edge cases. #pragma once #if !defined(STRIP_ALL) #include "../audio_backend.h" #include // Silent backend for testing - no audio output, pure inspection // Allows testing audio.cc logic (buffer management, playback time tracking) // without requiring audio hardware or miniaudio class SilentBackend : public AudioBackend { public: SilentBackend(); ~SilentBackend() override; // AudioBackend interface void init() override; void start() override; void shutdown() override; float get_realtime_peak() override; // Test inspection interface bool is_initialized() const { return initialized_; } bool is_started() const { return started_; } int get_frames_rendered() const { return frames_rendered_.load(); } int get_voice_trigger_count() const { return voice_trigger_count_.load(); } // Manual control for testing edge cases void set_peak(float peak) { test_peak_ = peak; } void reset_stats() { frames_rendered_ = 0; voice_trigger_count_ = 0; } // Event hooks (inherited from AudioBackend) void on_voice_triggered(float timestamp, int spectrogram_id, float volume, float pan) override; void on_frames_rendered(int num_frames) override; private: bool initialized_; bool started_; std::atomic frames_rendered_; std::atomic voice_trigger_count_; float test_peak_; // Controllable peak for testing }; #endif /* !defined(STRIP_ALL) */