#ifndef WAVE_H #define WAVE_H #include <memory> #include <mutex> #include <string> #include <vector> #include <ao/ao.h> class Wave { public: using Raw = std::vector<char>; static Wave fromFile(const std::string &filename); Wave(int bits, int channels, int rate, Raw data); Wave(const Wave &rhs); ~Wave(); Wave &operator=(const Wave &rhs); void play() const; void playAsync() const; private: mutable std::mutex _playMutex = { }; std::unique_ptr<ao_sample_format> _format; ao_device* _device = { nullptr }; const Raw _data; }; #endif