summaryrefslogtreecommitdiff
path: root/src/audio/backend/silent_backend.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/backend/silent_backend.h')
-rw-r--r--src/audio/backend/silent_backend.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/audio/backend/silent_backend.h b/src/audio/backend/silent_backend.h
new file mode 100644
index 0000000..f7da42d
--- /dev/null
+++ b/src/audio/backend/silent_backend.h
@@ -0,0 +1,52 @@
+// 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 <atomic>
+
+// 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<int> frames_rendered_;
+ std::atomic<int> voice_trigger_count_;
+ float test_peak_; // Controllable peak for testing
+};
+
+#endif /* !defined(STRIP_ALL) */