summaryrefslogtreecommitdiff
path: root/src/audio/mp3_sample.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/audio/mp3_sample.h')
-rw-r--r--src/audio/mp3_sample.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/audio/mp3_sample.h b/src/audio/mp3_sample.h
new file mode 100644
index 0000000..e8229f2
--- /dev/null
+++ b/src/audio/mp3_sample.h
@@ -0,0 +1,30 @@
+// This file is part of the 64k demo project.
+// Experimental MP3 sample decoding (non-STRIP_ALL only).
+// Entire API unavailable when STRIP_ALL is defined (compile error on use).
+
+#pragma once
+#include <cstddef>
+#include <cstdint>
+
+#if !defined(STRIP_ALL)
+
+// Opaque MP3 decoder. Create with mp3_open(), destroy with mp3_close().
+// Output format: mono f32 PCM at 32 kHz (matches synth sample rate).
+// |data| passed to mp3_open() must remain valid for the decoder's lifetime
+// (embedded asset byte arrays satisfy this automatically).
+struct Mp3Decoder;
+
+// Open an in-memory MP3 blob for range decoding.
+// Returns nullptr on error.
+Mp3Decoder* mp3_open(const uint8_t* data, size_t size);
+
+// Seek to |start_frame| and decode up to |num_frames| f32 mono samples into
+// |out|. Returns the number of frames actually decoded (may be < num_frames at
+// end of stream).
+int mp3_decode_range(Mp3Decoder* dec, int start_frame, int num_frames,
+ float* out);
+
+// Release the decoder.
+void mp3_close(Mp3Decoder* dec);
+
+#endif // !STRIP_ALL