summaryrefslogtreecommitdiff
path: root/src/audio/wav_dump_backend.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/wav_dump_backend.h')
-rw-r--r--src/audio/wav_dump_backend.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/audio/wav_dump_backend.h b/src/audio/wav_dump_backend.h
new file mode 100644
index 0000000..b037fd1
--- /dev/null
+++ b/src/audio/wav_dump_backend.h
@@ -0,0 +1,51 @@
+// 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;
+
+ // Set output filename (call before init())
+ void set_output_file(const char* filename);
+
+ // Get total samples written
+ size_t get_samples_written() const { return samples_written_; }
+
+ 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_;
+ const char* output_filename_;
+ bool is_active_;
+
+ static const int kSampleRate = 32000;
+ static const int kBufferSize = 1024;
+};
+
+#endif /* !defined(STRIP_ALL) */
+
+#endif /* DEMO_AUDIO_WAV_DUMP_BACKEND_H */