summaryrefslogtreecommitdiff
path: root/src/audio/backend/wav_dump_backend.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/backend/wav_dump_backend.h')
-rw-r--r--src/audio/backend/wav_dump_backend.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/audio/backend/wav_dump_backend.h b/src/audio/backend/wav_dump_backend.h
new file mode 100644
index 0000000..de445d6
--- /dev/null
+++ b/src/audio/backend/wav_dump_backend.h
@@ -0,0 +1,65 @@
+// This file is part of the 64k demo project.
+// WAV dump backend for debugging audio output to file instead of device.
+// Stripped in final build (STRIP_ALL).
+
+#if !defined(DEMO_AUDIO_WAV_DUMP_BACKEND_H)
+#define DEMO_AUDIO_WAV_DUMP_BACKEND_H
+
+#include "../audio_backend.h"
+#include <stdio.h>
+#include <vector>
+
+#if !defined(STRIP_ALL)
+
+// WAV file dump backend for debugging
+// Captures audio from synth_render() and writes to .wav file
+class WavDumpBackend : public AudioBackend {
+ public:
+ WavDumpBackend();
+ ~WavDumpBackend();
+
+ // AudioBackend interface
+ void init() override;
+ void start() override;
+ void shutdown() override;
+ float get_realtime_peak() override;
+
+ // Set output filename (call before init())
+ void set_output_file(const char* filename);
+
+ // Write audio data to WAV file (stereo interleaved float samples)
+ // num_samples: Total number of samples (2x num_frames for stereo)
+ void write_audio(const float* samples, int num_samples);
+
+ // Get total samples written
+ size_t get_samples_written() const {
+ return samples_written_;
+ }
+
+ // Get number of samples that were clipped (diagnostic metric)
+ size_t get_clipped_samples() const {
+ return clipped_samples_;
+ }
+
+ private:
+ // Write WAV header with known sample count
+ void write_wav_header(FILE* file, uint32_t num_samples);
+
+ // Update WAV header with final sample count
+ void update_wav_header();
+
+ FILE* wav_file_;
+ std::vector<float> sample_buffer_;
+ size_t samples_written_;
+ size_t clipped_samples_;
+ const char* output_filename_;
+ bool is_active_;
+ float duration_sec_;
+
+ static const int kSampleRate = 32000;
+ static const int kBufferSize = 1024;
+};
+
+#endif /* !defined(STRIP_ALL) */
+
+#endif /* DEMO_AUDIO_WAV_DUMP_BACKEND_H */