43 lines
757 B
C++
43 lines
757 B
C++
#ifndef DECODER_H
|
|
#define DECODER_H
|
|
|
|
/**
|
|
* @todo write docs
|
|
*/
|
|
#include <deque>
|
|
|
|
#include <emscripten/val.h>
|
|
#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
|