#ifndef WAVE_H #define WAVE_H #include #include #include #include #include class Wave { public: using Raw = std::vector; 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 _format; ao_device* _device = { nullptr }; const Raw _data; }; #endif