#ifndef DECODER_H #define DECODER_H /** * @todo write docs */ #include #include #include "mad.h" #define BUFFER_LENGTH 30000000 class Decoder { public: Decoder(); ~Decoder(); void addFragment(intptr_t bufferPtr, uint32_t length); emscripten::val decode(uint32_t count = UINT32_MAX); bool hasMore() const; uint32_t framesLeft(uint32_t max = UINT32_MAX); private: uint32_t sampleRate; uint8_t channels; uint32_t cachedLength; uint16_t samplesPerFrame; uint8_t* buffer; bool cached; mad_synth* synth; mad_stream* stream; mad_frame* frame; emscripten::val context; private: void initializeProbe(mad_stream& probe); }; #endif // DECODER_H