#pragma once #include "miniaudio.h" #include #include struct PlaybackState { ma_decoder decoder {}; std::atomic finished { false }; }; class PlaybackEngine { public: PlaybackEngine (); ~PlaybackEngine (); static void data_callback ( ma_device *pDevice, void *pOutput, const void *, ma_uint32 frameCount ); void configureDevice (); void configureDecoder (); void initDevice (); void initDecoder ( const char *filePath ); void uninitDecoder(); void startPlayback (); void stopPlayback (); void pausePlayback () { stopPlayback(); }; void seek ( ma_uint64 frame ); int isFinished () const; ma_uint64 getPosition (); private: ma_device device_; ma_format format_; unsigned int channels_; unsigned int sampleRate_; PlaybackState state; ma_uint64 cursor_; // config ma_decoder_config decoderConfig; ma_device_config deviceConfig; };